internal static void SetEpisodeProperties(TraktShowSummary show, TraktEpisodeSummary episode) { if (episode == null) return; SetProperty("#Trakt.Episode.Id", episode.Ids.Trakt); SetProperty("#Trakt.Episode.TvdbId", episode.Ids.Tvdb); SetProperty("#Trakt.Episode.ImdbId", episode.Ids.Imdb); SetProperty("#Trakt.Episode.TmdbId", episode.Ids.Imdb); SetProperty("#Trakt.Episode.Number", episode.Number); SetProperty("#Trakt.Episode.Season", episode.Season); if (episode.FirstAired != null) { // FirstAired is converted to UTC from original countries timezone on trakt SetProperty("#Trakt.Episode.FirstAired", episode.FirstAired.FromISO8601().ToShortDateString()); SetProperty("#Trakt.Episode.FirstAiredLocalized", episode.FirstAired.FromISO8601().ToLocalTime().ToShortDateString()); SetProperty("#Trakt.Episode.FirstAiredLocalizedDayOfWeek", episode.FirstAired.FromISO8601().ToLocalTime().ToLocalisedDayOfWeek()); SetProperty("#Trakt.Episode.FirstAiredLocalizedTime", episode.FirstAired.FromISO8601().ToLocalTime().ToShortTimeString()); } SetProperty("#Trakt.Episode.Title", string.IsNullOrEmpty(episode.Title) ? string.Format("{0} {1}", Translation.Episode, episode.Number.ToString()) : episode.Title.RemapHighOrderChars()); SetProperty("#Trakt.Episode.Url", string.Format("http://trakt.tv/shows/{0}/seasons/{1}/episodes/{2}", show.Ids.Slug, episode.Season, episode.Number)); SetProperty("#Trakt.Episode.Overview", episode.Overview.ToNullIfEmpty() == null ? Translation.NoEpisodeSummary : episode.Overview.RemapHighOrderChars()); SetProperty("#Trakt.Episode.Runtime", show.Runtime); SetProperty("#Trakt.Episode.InWatchList", episode.IsWatchlisted()); SetProperty("#Trakt.Episode.InCollection", episode.IsCollected(show)); SetProperty("#Trakt.Episode.Plays", episode.Plays(show)); SetProperty("#Trakt.Episode.Watched", episode.IsWatched(show)); SetProperty("#Trakt.Episode.Rating", episode.UserRating(show)); SetProperty("#Trakt.Episode.Ratings.Percentage", episode.Rating.ToPercentage()); SetProperty("#Trakt.Episode.Ratings.Votes", episode.Votes); SetProperty("#Trakt.Episode.Ratings.Icon", (episode.Rating >= 6) ? "love" : "hate"); //if (episode.Images != null) //{ // SetProperty("#Trakt.Episode.EpisodeImageFilename", episode.Images.ScreenShot.LocalImageFilename(ArtworkType.EpisodeImage)); //} }
internal static void CheckAndPlayEpisode(TraktShowSummary show, TraktEpisodeSummary episode) { if (show == null || episode == null) return; CurrentMediaType = MediaType.Show; CurrentShow = show; // check for parental controls if (PromptForPinCode) { if (!GUIUtils.ShowPinCodeDialog(TraktSettings.ParentalControlsPinCode)) { TraktLogger.Warning("Parental controls pin code has not successfully been entered. Window ID = {0}", GUIWindowManager.ActiveWindow); return; } } bool handled = false; // check if plugin is installed and enabled if (TraktHelper.IsMPTVSeriesAvailableAndEnabled) { // Play episode if it exists handled = TraktHandlers.TVSeries.PlayEpisode(show.Ids.Tvdb.GetValueOrDefault(), episode.Season, episode.Number); } if (TraktHelper.IsTrailersAvailableAndEnabled && handled == false) { TraktLogger.Info("There were no episodes found in local plugin databases. Attempting to search and/or play trailer(s) from the Trailers plugin"); ShowTVEpisodeTrailersPluginMenu(show, episode); handled = true; } }
internal static bool RateEpisode(TraktShowSummary show, TraktEpisodeSummary episode) { // this object will work without episode ids var rateObjectEx = new TraktSyncShowRatedEx { Ids = show.Ids, Title = show.Title, Year = show.Year, Seasons = new List<TraktSyncShowRatedEx.Season> { new TraktSyncShowRatedEx.Season { Number = episode.Season, Episodes = new List<TraktSyncShowRatedEx.Season.Episode> { new TraktSyncShowRatedEx.Season.Episode { Number = episode.Number, RatedAt = DateTime.UtcNow.ToISO8601() } } } } }; // only use if we have episode ids var rateObject = new TraktSyncEpisodeRated { Ids = new TraktEpisodeId { Trakt = episode.Ids.Trakt, Imdb = episode.Ids.Imdb.ToNullIfEmpty(), Tmdb = episode.Ids.Tmdb, Tvdb = episode.Ids.Tvdb, TvRage = episode.Ids.TvRage }, Title = episode.Title, Season = episode.Season, Number = episode.Number, RatedAt = DateTime.UtcNow.ToISO8601() }; int? prevRating = episode.UserRating(show); int newRating = 0; if (episode.Ids == null || episode.Ids.Trakt == null) { newRating = GUIUtils.ShowRateDialog<TraktSyncShowRatedEx>(rateObjectEx); } else { newRating = GUIUtils.ShowRateDialog<TraktSyncEpisodeRated>(rateObject); } if (newRating == -1) return false; // If previous rating not equal to current rating then // update skin properties to reflect changes if (prevRating == newRating) return false; if (prevRating == null || prevRating == 0) { // add to ratings TraktCache.AddEpisodeToRatings(show, episode, newRating); episode.Votes++; } else if (newRating == 0) { // remove from ratings TraktCache.RemoveEpisodeFromRatings(episode); episode.Votes--; } else { // rating changed, remove then add TraktCache.RemoveEpisodeFromRatings(episode); TraktCache.AddEpisodeToRatings(show, episode, newRating); } // update ratings until next online update // if we have the ratings distribution we could calculate correctly if (episode.Votes == 0) { episode.Rating = 0; } else if (episode.Votes == 1 && newRating > 0) { episode.Rating = newRating; } return true; }
public static void ShowTVShowTrailersMenu(TraktShowSummary show, TraktEpisodeSummary episode = null) { if (TraktHelper.IsTrailersAvailableAndEnabled) { CurrentMediaType = MediaType.Show; CurrentShow = show; // check for parental controls if (PromptForPinCode) { if (!GUIUtils.ShowPinCodeDialog(TraktSettings.ParentalControlsPinCode)) { TraktLogger.Warning("Parental controls pin code has not successfully been entered. Window ID = {0}", GUIWindowManager.ActiveWindow); return; } } if (episode == null) ShowTVShowTrailersPluginMenu(show); else ShowTVEpisodeTrailersPluginMenu(show, episode); return; } }
public static void ShowTVEpisodeTrailersPluginMenu(TraktShowSummary show, TraktEpisodeSummary episode) { var showImages = TmdbCache.GetShowImages(show.Ids.Tmdb, true); var trailerItem = new MediaItem { MediaType = MediaItemType.Episode, IMDb = show.Ids.Imdb.ToNullIfEmpty(), TMDb = show.Ids.Tmdb.ToString(), TVDb = show.Ids.Tvdb.ToString(), TVRage = show.Ids.TvRage.ToString(), Plot = show.Overview, Poster = TmdbCache.GetShowPosterFilename(showImages), Title = show.Title, Year = show.Year.GetValueOrDefault(0), AirDate = show.FirstAired.FromISO8601().ToString("yyyy-MM-dd"), Season = episode.Season, Episode = episode.Number, EpisodeName = episode.Title ?? string.Empty }; Trailers.Trailers.SearchForTrailers(trailerItem); }
internal static void AddEpisodeToWatchlist(TraktShowSummary show, TraktEpisodeSummary episode) { var watchlistEpisodes = (_WatchListEpisodes ?? new List<TraktEpisodeWatchList>()).ToList(); watchlistEpisodes.Add(new TraktEpisodeWatchList { ListedAt = DateTime.UtcNow.ToISO8601(), Show = show, Episode = episode }); _WatchListEpisodes = watchlistEpisodes; }
/// <summary> /// Use this method when no Episode Ids are available /// </summary> public static void RemoveEpisodeFromWatchList(TraktShowSummary show, TraktEpisodeSummary episode) { var episodeSync = new TraktSyncShowEx { Title = show.Title, Year = show.Year, Ids = show.Ids, Seasons = new List<TraktSyncShowEx.Season> { new TraktSyncShowEx.Season { Number = episode.Season, Episodes = new List<TraktSyncShowEx.Season.Episode> { new TraktSyncShowEx.Season.Episode { Number = episode.Number } } } } }; var syncThread = new Thread((objSyncData) => { var response = TraktAPI.TraktAPI.RemoveShowFromWatchlistEx(objSyncData as TraktSyncShowEx); TraktLogger.LogTraktResponse<TraktSyncResponse>(response); TraktCache.RemoveEpisodeFromWatchlist(show, episode); }) { IsBackground = true, Name = "RemoveWatchlist" }; syncThread.Start(episodeSync); }
public static void ShowEpisodeShouts(TraktShowSummary show, TraktEpisodeSummary episode) { var showImages = TmdbCache.GetShowImages(show.Ids.Tmdb, true); ShowEpisodeShouts(show.Title, show.Year, show.Ids.Tvdb, show.Ids.Trakt, show.Ids.Imdb, episode.Season, episode.Number, episode.IsWatched(show), TmdbCache.GetShowBackdropFilename(showImages), TmdbCache.GetShowBackdropUrl(showImages)); }