public override void ProcessCommand() { try { CrossRef_AniDB_TraktRepository repCrossRef = new CrossRef_AniDB_TraktRepository(); CrossRef_AniDB_Trakt xref = repCrossRef.GetByID(CrossRef_AniDB_TraktID); if (xref == null) { return; } Trakt_ShowRepository repShow = new Trakt_ShowRepository(); Trakt_Show tvShow = repShow.GetByTraktID(xref.TraktID); if (tvShow == null) { return; } string showName = ""; if (tvShow != null) { showName = tvShow.Title; } XMLService.Send_CrossRef_AniDB_Trakt(xref, showName); } catch (Exception ex) { logger.ErrorException("Error processing CommandRequest_WebCacheSendXRefAniDBTrakt: {0}" + ex.ToString(), ex); return; } }
public static void FixDuplicateTraktLinks() { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); // delete all Trakt link duplicates CrossRef_AniDB_TraktRepository repCrossRefTrakt = new CrossRef_AniDB_TraktRepository(); List <CrossRef_AniDB_Trakt> xrefsTraktProcessed = new List <CrossRef_AniDB_Trakt>(); List <CrossRef_AniDB_Trakt> xrefsTraktToBeDeleted = new List <CrossRef_AniDB_Trakt>(); List <CrossRef_AniDB_Trakt> xrefsTrakt = repCrossRefTrakt.GetAll(); foreach (CrossRef_AniDB_Trakt xrefTrakt in xrefsTrakt) { bool deleteXref = false; foreach (CrossRef_AniDB_Trakt xref in xrefsTraktProcessed) { if (xref.TraktID == xrefTrakt.TraktID && xref.TraktSeasonNumber == xrefTrakt.TraktSeasonNumber) { xrefsTraktToBeDeleted.Add(xrefTrakt); deleteXref = true; } } if (!deleteXref) { xrefsTraktProcessed.Add(xrefTrakt); } } foreach (CrossRef_AniDB_Trakt xref in xrefsTraktToBeDeleted) { string msg = ""; AniDB_Anime anime = repAnime.GetByAnimeID(xref.AnimeID); if (anime != null) { msg = anime.MainTitle; } logger.Warn("Deleting Trakt Link because of a duplicate: {0} ({1}) - {2}/{3}", xref.AnimeID, msg, xref.TraktID, xref.TraktSeasonNumber); repCrossRefTrakt.Delete(xref.CrossRef_AniDB_TraktID); } }
protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; try { CrossRef_AniDB_TraktRepository repCrossRef = new CrossRef_AniDB_TraktRepository(); StreamReader reader = new StreamReader(this.Request.InputStream); String xmlData = reader.ReadToEnd(); XmlDocument docXRef = new XmlDocument(); docXRef.LoadXml(xmlData); string uname = Utils.TryGetProperty("DeleteCrossRef_AniDB_TraktRequest", docXRef, "Username"); string aid = Utils.TryGetProperty("DeleteCrossRef_AniDB_TraktRequest", docXRef, "AnimeID"); int animeid = 0; int.TryParse(aid, out animeid); if (string.IsNullOrEmpty(uname) || animeid <= 0) { Response.Write(Constants.ERROR_XML); return; } List <CrossRef_AniDB_Trakt> recs = repCrossRef.GetByAnimeIDUser(animeid, uname); foreach (CrossRef_AniDB_Trakt xref in recs) { repCrossRef.Delete(xref.CrossRef_AniDB_TraktID); } // now send to mirror string uri = string.Format("http://{0}/DeleteCrossRef_AniDB_Trakt.aspx", Constants.MirrorWAIX); XMLService.SendData(uri, xmlData); } catch (Exception ex) { Response.Write(Constants.ERROR_XML); } }
public bool Init(AnimeEpisode aniepisode) { try { if (string.IsNullOrEmpty(ServerSettings.Trakt_Username) || string.IsNullOrEmpty(ServerSettings.Trakt_Password)) { return(false); } username = ServerSettings.Trakt_Username; password = Utils.CalculateSHA1(ServerSettings.Trakt_Password, Encoding.Default); imdb_id = ""; AnimeSeries ser = aniepisode.GetAnimeSeries(); if (ser == null) { return(false); } CrossRef_AniDB_TraktRepository repCrossRef = new CrossRef_AniDB_TraktRepository(); CrossRef_AniDB_Trakt xref = repCrossRef.GetByAnimeID(ser.AniDB_ID); if (xref == null) { return(false); } Trakt_ShowRepository repShows = new Trakt_ShowRepository(); Trakt_Show show = repShows.GetByTraktID(xref.TraktID); if (show == null) { return(false); } if (!show.TvDB_ID.HasValue) { return(false); } tvdb_id = show.TvDB_ID.Value.ToString(); title = show.Title; year = show.Year; int retEpNum = 0, retSeason = 0; GetTraktEpisodeNumber(aniepisode, show, xref.TraktSeasonNumber, ref retEpNum, ref retSeason); if (retEpNum < 0) { return(false); } episode = retEpNum.ToString(); season = retSeason.ToString(); AniDB_Episode aniep = aniepisode.AniDB_Episode; if (aniep != null) { TimeSpan t = TimeSpan.FromSeconds(aniep.LengthSeconds + 14); int toMinutes = int.Parse(Math.Round(t.TotalMinutes).ToString()); duration = toMinutes.ToString(); } else { duration = "25"; } progress = "100"; plugin_version = "0.4"; media_center_version = "1.2.0.1"; media_center_date = "Dec 17 2010"; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return(false); } return(true); }
public static void MigrateTraktLinks_V1_to_V2() { try { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); Trakt_EpisodeRepository repEps = new Trakt_EpisodeRepository(); Trakt_ShowRepository repShows = new Trakt_ShowRepository(); CrossRef_AniDB_TraktRepository repCrossRefTrakt = new CrossRef_AniDB_TraktRepository(); CrossRef_AniDB_TraktV2Repository repCrossRefTraktNew = new CrossRef_AniDB_TraktV2Repository(); using (var session = JMMService.SessionFactory.OpenSession()) { List <CrossRef_AniDB_Trakt> xrefsTrakt = repCrossRefTrakt.GetAll(); foreach (CrossRef_AniDB_Trakt xrefTrakt in xrefsTrakt) { CrossRef_AniDB_TraktV2 xrefNew = new CrossRef_AniDB_TraktV2(); xrefNew.AnimeID = xrefTrakt.AnimeID; xrefNew.CrossRefSource = xrefTrakt.CrossRefSource; xrefNew.TraktID = xrefTrakt.TraktID; xrefNew.TraktSeasonNumber = xrefTrakt.TraktSeasonNumber; Trakt_Show show = xrefTrakt.GetByTraktShow(session); if (show != null) { xrefNew.TraktTitle = show.Title; } // determine start ep type if (xrefTrakt.TraktSeasonNumber == 0) { xrefNew.AniDBStartEpisodeType = (int)AniDBAPI.enEpisodeType.Special; } else { xrefNew.AniDBStartEpisodeType = (int)AniDBAPI.enEpisodeType.Episode; } xrefNew.AniDBStartEpisodeNumber = 1; xrefNew.TraktStartEpisodeNumber = 1; repCrossRefTraktNew.Save(xrefNew); } // create cross ref's for specials foreach (CrossRef_AniDB_Trakt xrefTrakt in xrefsTrakt) { AniDB_Anime anime = repAnime.GetByAnimeID(xrefTrakt.AnimeID); if (anime == null) { continue; } Trakt_Show show = xrefTrakt.GetByTraktShow(session); if (show == null) { continue; } // this anime has specials if (anime.EpisodeCountSpecial <= 0) { continue; } // this Trakt series has a season 0 (specials) List <int> seasons = repEps.GetSeasonNumbersForSeries(show.Trakt_ShowID); if (!seasons.Contains(0)) { continue; } //make sure we are not doubling up CrossRef_AniDB_TraktV2 temp = repCrossRefTraktNew.GetByTraktID(xrefTrakt.TraktID, 0, 1, xrefTrakt.AnimeID, (int)AniDBAPI.enEpisodeType.Special, 1); if (temp != null) { continue; } CrossRef_AniDB_TraktV2 xrefNew = new CrossRef_AniDB_TraktV2(); xrefNew.AnimeID = xrefTrakt.AnimeID; xrefNew.CrossRefSource = xrefTrakt.CrossRefSource; xrefNew.TraktID = xrefTrakt.TraktID; xrefNew.TraktSeasonNumber = 0; xrefNew.TraktStartEpisodeNumber = 1; xrefNew.AniDBStartEpisodeType = (int)AniDBAPI.enEpisodeType.Special; xrefNew.AniDBStartEpisodeNumber = 1; xrefNew.TraktTitle = show.Title; repCrossRefTraktNew.Save(xrefNew); } } } catch (Exception ex) { logger.ErrorException("Could not MigrateTraktLinks_V1_to_V2: " + ex.ToString(), ex); } }
public Contract_Trakt_Friend ToContract() { CrossRef_AniDB_TraktRepository repXrefTrakt = new CrossRef_AniDB_TraktRepository(); CrossRef_AniDB_TvDBRepository repXrefTvDB = new CrossRef_AniDB_TvDBRepository(); AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); Trakt_FriendRepository repFriends = new Trakt_FriendRepository(); Trakt_EpisodeRepository repEpisodes = new Trakt_EpisodeRepository(); Trakt_Friend traktFriend = repFriends.GetByUsername(username); if (traktFriend == null) { return(null); } Contract_Trakt_Friend contract = new Contract_Trakt_Friend(); contract.Trakt_FriendID = traktFriend.Trakt_FriendID; contract.Username = username; contract.Full_name = full_name; contract.Gender = gender; contract.Age = age; contract.Location = location; contract.About = about; contract.Joined = joined; contract.Avatar = avatar; contract.Url = url; contract.JoinedDate = Utils.GetAniDBDateAsDate(joined); contract.WatchedEpisodes = new List <Contract_Trakt_WatchedEpisode>(); // we only care about the watched episodes foreach (TraktTVWatched wtch in watched) { if (wtch.episode != null) { Contract_Trakt_WatchedEpisode watchedEp = new Contract_Trakt_WatchedEpisode(); watchedEp.Watched = wtch.watched; watchedEp.WatchedDate = Utils.GetAniDBDateAsDate(wtch.watched); if (!contract.LastEpisodeWatched.HasValue) { contract.LastEpisodeWatched = watchedEp.WatchedDate; } if (watchedEp.WatchedDate.HasValue && watchedEp.WatchedDate > contract.LastEpisodeWatched) { contract.LastEpisodeWatched = watchedEp.WatchedDate; } watchedEp.AnimeSeriesID = null; watchedEp.Episode_Number = wtch.episode.number; watchedEp.Episode_Overview = wtch.episode.overview; watchedEp.Episode_Season = wtch.episode.season; watchedEp.Episode_Title = wtch.episode.title; watchedEp.Episode_Url = wtch.episode.url; if (wtch.episode.images != null) { watchedEp.Episode_Screenshot = wtch.episode.images.screen; } if (wtch.show != null) { watchedEp.TraktShow = wtch.show.ToContract(); // find the anime and series based on the trakt id int?animeID = null; CrossRef_AniDB_Trakt xref = repXrefTrakt.GetByTraktID(wtch.show.TraktID, int.Parse(wtch.episode.season)); if (xref != null) { animeID = xref.AnimeID; } else { // try the tvdb id instead //TODO /* * CrossRef_AniDB_TvDB xrefTvDB = repXrefTvDB.GetByTvDBID(int.Parse(wtch.show.tvdb_id), int.Parse(wtch.episode.season)); * if (xrefTvDB != null) * animeID = xrefTvDB.AnimeID;*/ } if (animeID.HasValue) { AnimeSeries ser = repSeries.GetByAnimeID(animeID.Value); if (ser != null) { watchedEp.AnimeSeriesID = ser.AnimeSeriesID; } AniDB_Anime anime = repAnime.GetByAnimeID(animeID.Value); if (anime != null) { watchedEp.Anime = anime.ToContract(true, null); } } } contract.WatchedEpisodes.Add(watchedEp); break; // only show the latest show } } List <SortPropOrFieldAndDirection> sortCriteria = new List <SortPropOrFieldAndDirection>(); sortCriteria.Add(new SortPropOrFieldAndDirection("WatchedDate", true, SortType.eDateTime)); contract.WatchedEpisodes = Sorting.MultiSort <Contract_Trakt_WatchedEpisode>(contract.WatchedEpisodes, sortCriteria); return(contract); }
protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; try { CrossRef_AniDB_TraktRepository repCrossRef = new CrossRef_AniDB_TraktRepository(); StreamReader reader = new StreamReader(this.Request.InputStream); String xmlData = reader.ReadToEnd(); XmlDocument docXRef = new XmlDocument(); docXRef.LoadXml(xmlData); string uname = Utils.TryGetProperty("AddCrossRef_AniDB_Trakt_Request", docXRef, "Username"); string sname = Utils.TryGetProperty("AddCrossRef_AniDB_Trakt_Request", docXRef, "ShowName"); string aid = Utils.TryGetProperty("AddCrossRef_AniDB_Trakt_Request", docXRef, "AnimeID"); int animeid = 0; int.TryParse(aid, out animeid); string traktid = Utils.TryGetProperty("AddCrossRef_AniDB_Trakt_Request", docXRef, "TraktID"); string traktseason = Utils.TryGetProperty("AddCrossRef_AniDB_Trakt_Request", docXRef, "Season"); int traktSeason = 0; if (!int.TryParse(traktseason, out traktSeason)) { Response.Write(Constants.ERROR_XML); return; } if (string.IsNullOrEmpty(uname) || animeid <= 0) { Response.Write(Constants.ERROR_XML); return; } CrossRef_AniDB_Trakt xref = null; List <CrossRef_AniDB_Trakt> recs = repCrossRef.GetByAnimeIDUser(animeid, uname); if (recs.Count == 1) { xref = recs[0]; } if (recs.Count == 0) { xref = new CrossRef_AniDB_Trakt(); } else { xref = recs[0]; } xref.AnimeID = animeid; xref.AdminApproved = 0; xref.TraktID = traktid; xref.TraktSeasonNumber = traktSeason; xref.Username = uname; xref.ShowName = sname; repCrossRef.Save(xref); // now send to mirror string uri = string.Format("http://{0}/AddCrossRef_AniDB_Trakt.aspx", Constants.MirrorWAIX); XMLService.SendData(uri, xmlData); } catch (Exception ex) { Response.Write(Constants.ERROR_XML); } }
protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; try { string aid = Utils.GetParam("AnimeID"); int animeid = 0; int.TryParse(aid, out animeid); if (animeid <= 0) { Response.Write(Constants.ERROR_XML); return; } string uname = Utils.GetParam("uname"); if (uname.Trim().Length == 0) { Response.Write(Constants.ERROR_XML); return; } CrossRef_AniDB_TraktRepository repCrossRef = new CrossRef_AniDB_TraktRepository(); CrossRef_AniDB_Trakt xref = null; // check for admin approved List <CrossRef_AniDB_Trakt> recs = repCrossRef.GetByAnimeIDApproved(animeid); if (recs.Count > 0) { xref = recs[0]; // should only be one } // check for user specific if (xref == null) { recs = repCrossRef.GetByAnimeIDUser(animeid, uname); if (recs.Count > 0) { xref = recs[0]; // should only be one } } // check for other users (anonymous) if (xref == null) { // check for other users (anonymous) recs = repCrossRef.GetByAnimeID(animeid); if (recs.Count == 0) { Response.Write(Constants.ERROR_XML); return; } // find the most popular result List <CrossRefTraktStat> results = new List <CrossRefTraktStat>(); foreach (CrossRef_AniDB_Trakt xrefloc in recs) { bool found = false; foreach (CrossRefTraktStat stat in results) { if (stat.TraktID.Equals(xrefloc.TraktID, StringComparison.InvariantCultureIgnoreCase) && stat.TraktSeason == xrefloc.TraktSeasonNumber) { found = true; stat.ResultCount++; } } if (!found) { CrossRefTraktStat stat = new CrossRefTraktStat(); stat.ResultCount = 1; stat.TraktID = xrefloc.TraktID; stat.TraktSeason = xrefloc.TraktSeasonNumber; stat.CrossRef = xrefloc; results.Add(stat); } } CrossRefTraktStat mostPopular = null; foreach (CrossRefTraktStat stat in results) { if (mostPopular == null) { mostPopular = stat; } else { if (stat.ResultCount > mostPopular.ResultCount) { mostPopular = stat; } } } xref = mostPopular.CrossRef; } CrossRef_AniDB_TraktResult result = new CrossRef_AniDB_TraktResult(xref); string ret = Utils.ConvertToXML(result, typeof(CrossRef_AniDB_TraktResult)); Response.Write(ret); } catch (Exception ex) { Response.Write(ex.ToString()); return; } }