예제 #1
0
        /// <summary>
        /// Shows the Rate Dialog after playback has ended
        /// </summary>
        /// <param name="episode">The item being rated</param>
        internal static void ShowRateDialog(VideoInfo videoInfo)
        {
            if (!TraktSettings.ShowRateDialogOnWatched) return;     // not enabled

            TraktLogger.Debug("Showing rate dialog for '{0}'", videoInfo.Title);

            var rateThread = new System.Threading.Thread((o) =>
            {
                var itemToRate = o as VideoInfo;
                if (itemToRate == null) return;

                int rating = 0;

                if (itemToRate.Type == VideoType.Series)
                {
                    var rateObject = new TraktSyncShowRatedEx
                    {
                        Title = itemToRate.Title,
                        Year = itemToRate.Year.ToNullableInt32(),
                        Seasons = new List<TraktSyncShowRatedEx.Season>
                        {
                            new TraktSyncShowRatedEx.Season
                            {
                                Number = itemToRate.SeasonIdx.ToInt(),
                                Episodes = new List<TraktSyncShowRatedEx.Season.Episode>
                                {
                                    new TraktSyncShowRatedEx.Season.Episode
                                    {
                                        Number = itemToRate.EpisodeIdx.ToInt(),
                                        RatedAt = DateTime.UtcNow.ToISO8601()
                                    }
                                }
                            }
                        }
                    };
                    // get the rating submitted to trakt
                    rating = GUIUtils.ShowRateDialog<TraktSyncShowRatedEx>(rateObject);

                    // add episode rated to cache
                    if (rating > 0)
                    {
                        TraktCache.AddEpisodeToRatings(
                            new TraktShow
                            {
                                Ids = new TraktShowId(),
                                Title = rateObject.Title,
                                Year = rateObject.Year,
                            },
                            new TraktEpisode
                            {
                                Ids = new TraktEpisodeId(),
                                Season = rateObject.Seasons[0].Number,
                                Number = rateObject.Seasons[0].Episodes[0].Number
                            },
                            rating
                        );
                    }
                }
                else if (itemToRate.Type == VideoType.Movie)
                {
                    var rateObject = new TraktSyncMovieRated
                    {
                        Ids = new TraktMovieId(),
                        Title = itemToRate.Title,
                        Year = itemToRate.Year.ToNullableInt32(),
                        RatedAt = DateTime.UtcNow.ToISO8601()
                    };

                    // get the rating submitted to trakt
                    rating = GUIUtils.ShowRateDialog<TraktSyncMovieRated>(rateObject);

                    // add movie rated to cache
                    if (rating > 0)
                    {
                        TraktCache.AddMovieToRatings(rateObject, rating);
                    }
                    else
                    {
                        TraktCache.RemoveMovieFromRatings(rateObject);
                    }
                }

                if (rating > 0)
                {
                    TraktLogger.Debug("Rating {0} as {1}/10", itemToRate.Title, rating.ToString());
                }
            })
            {
                Name = "Rate",
                IsBackground = true
            };

            rateThread.Start(videoInfo);
        }
예제 #2
0
        public static bool ShowTraktExtEpisodeMenu(string title, string year, string season, string episode, string tvdbid, string imdbid, string episodetvdbid, bool isWatched, string fanart, SearchPeople people, bool showAll)
        {
            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            var pItem = new GUIListItem(Translation.Comments);
            dlg.Add(pItem);
            pItem.ItemId = (int)TraktMenuItems.Shouts;

            pItem = new GUIListItem(Translation.Rate);
            dlg.Add(pItem);
            pItem.ItemId = (int)TraktMenuItems.Rate;

            pItem = new GUIListItem(Translation.AddToWatchList);
            dlg.Add(pItem);
            pItem.ItemId = (int)TraktMenuItems.AddToWatchList;

            pItem = new GUIListItem(Translation.AddToList);
            dlg.Add(pItem);
            pItem.ItemId = (int)TraktMenuItems.AddToCustomList;

            // Show Search By menu...
            if (people != null && people.Count != 0)
            {
                pItem = new GUIListItem(Translation.SearchBy + "...");
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.SearchBy;
            }

            // also show non-context sensitive items related to episodes
            if (showAll)
            {
                // might want to check your recently watched, stats etc
                pItem = new GUIListItem(Translation.UserProfile);
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.UserProfile;

                pItem = new GUIListItem(Translation.Network);
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.Network;

                pItem = new GUIListItem(Translation.Calendar);
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.Calendar;

                pItem = new GUIListItem(Translation.WatchList);
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.WatchList;

                pItem = new GUIListItem(Translation.Lists);
                dlg.Add(pItem);
                pItem.ItemId = (int)TraktMenuItems.Lists;
            }

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0) return false;

            switch (dlg.SelectedId)
            {
                case ((int)TraktMenuItems.Rate):
                    TraktLogger.Info("Displaying rate dialog for tv episode. Title = '{0}', Year = '{1}', Season = '{2}', Episode = '{3}', Show ID = '{4}', Episode ID = '{5}'", title, year.ToLogString(), season, episode, tvdbid.ToLogString(), episodetvdbid.ToLogString());
                    var show = new TraktSyncShowRatedEx
                    {
                        Ids = new TraktShowId { Tvdb = tvdbid.ToNullableInt32(), Imdb = imdbid.ToNullIfEmpty() },
                        Title = title,
                        Year = year.ToNullableInt32(),
                        Seasons = new List<TraktSyncShowRatedEx.Season>
                        {
                            new TraktSyncShowRatedEx.Season
                            {
                                Number = season.ToInt(),
                                Episodes = new List<TraktSyncShowRatedEx.Season.Episode>
                                {
                                    new TraktSyncShowRatedEx.Season.Episode
                                    {
                                        Number = episode.ToInt(),
                                        RatedAt = DateTime.UtcNow.ToISO8601()
                                    }
                                }
                            }
                        }
                    };
                    int rating = GUIUtils.ShowRateDialog<TraktSyncShowRatedEx>(show);

                    // update local databases
                    if (rating >= 0)
                    {
                        switch (GUIWindowManager.ActiveWindow)
                        {
                            case (int)ExternalPluginWindows.TVSeries:
                                TraktHandlers.TVSeries.SetEpisodeUserRating(rating);
                                break;
                        }
                    }
                    break;

                case ((int)TraktMenuItems.Shouts):
                    TraktLogger.Info("Displaying Shouts for tv episode. Title = '{0}', Year = '{1}', Season = '{2}', Episode = '{3}'", title, year.ToLogString(), season, episode);
                    TraktHelper.ShowEpisodeShouts(title, year.ToNullableInt32(), tvdbid.ToNullableInt32(), null, imdbid.ToNullIfEmpty(), season.ToInt(), episode.ToInt(), isWatched, fanart);
                    break;

                case ((int)TraktMenuItems.AddToWatchList):
                    TraktLogger.Info("Adding tv episode to Watchlist. Title = '{0}', Year = '{1}', Season = '{2}', Episode = '{3}'", title, year.ToLogString(), season, episode);
                    TraktHelper.AddEpisodeToWatchList(title, season.ToInt(), episode.ToInt(), tvdbid.ToNullableInt32(), null, null, null);
                    break;

                case ((int)TraktMenuItems.AddToCustomList):
                    TraktLogger.Info("Adding tv episode to Custom List. Title = '{0}', Year = '{1}', Season = '{2}', Episode = '{3}', Episode ID = '{4}'", title, year.ToLogString(), season, episode, episodetvdbid.ToLogString());
                    if (string.IsNullOrEmpty(episodetvdbid))
                    {
                        TraktHelper.AddRemoveEpisodeInUserList(new TraktEpisode { Ids = new TraktEpisodeId { Tvdb = episodetvdbid.ToNullableInt32() } }, false);
                    }
                    break;

                case ((int)TraktMenuItems.SearchBy):
                    ShowSearchByMenu(people, title, fanart);
                    break;

                case ((int)TraktMenuItems.UserProfile):
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.UserProfile);
                    break;

                case ((int)TraktMenuItems.Calendar):
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.Calendar);
                    break;

                case ((int)TraktMenuItems.Network):
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.Network);
                    break;

                case ((int)TraktMenuItems.WatchList):
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.WatchedListEpisodes);
                    break;

                case ((int)TraktMenuItems.Lists):
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CustomLists);
                    break;
            }
            return true;
        }
예제 #3
0
        /// <summary>
        /// Shows the Rate Dialog after playback has ended
        /// </summary>
        /// <param name="episode">The item being rated</param>
        private void ShowRateDialog(ITrackingInfo videoInfo)
        {
            if (!TraktSettings.ShowRateDialogOnWatched)
                return;

            var rateThread = new Thread((objInfo) =>
            {
                var itemToRate = objInfo as ITrackingInfo;
                if (itemToRate == null) return;

                int rating = -1;

                if (itemToRate.VideoKind == VideoKind.TvSeries)
                {
                    TraktLogger.Info("Showing rate dialog for episode. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}', Season = '{4}', Episode = '{5}'", itemToRate.Title, itemToRate.Year == 0 ? "<empty>" : itemToRate.Year.ToString(), itemToRate.ID_IMDB.ToLogString(), itemToRate.ID_TMDB.ToLogString(), itemToRate.Episode, itemToRate.Season);

                    // this gets complicated when the episode IDs are not available!
                    var rateObject = new TraktSyncShowRatedEx
                    {
                        Ids = new TraktShowId { Tvdb = itemToRate.ID_TVDB.ToNullableInt32(), Tmdb = itemToRate.ID_TMDB.ToNullableInt32() },
                        Title = itemToRate.Title,
                        Year = itemToRate.Year > 0 ? (int?)itemToRate.Year : null,
                        Seasons = new List<TraktSyncShowRatedEx.Season>
                        {
                            new TraktSyncShowRatedEx.Season
                            {
                                Number = (int)itemToRate.Season,
                                Episodes = new List<TraktSyncShowRatedEx.Season.Episode>
                                {
                                    new TraktSyncShowRatedEx.Season.Episode
                                    {
                                        Number = (int)itemToRate.Episode,
                                        RatedAt = DateTime.UtcNow.ToISO8601()
                                    }
                                }
                            }
                        }
                    };
                    // get the rating submitted to trakt
                    rating = GUIUtils.ShowRateDialog<TraktSyncShowRatedEx>(rateObject);

                    // add episode rated to cache
                    if (rating > 0)
                    {
                        TraktCache.AddEpisodeToRatings(
                            new TraktShow
                            {
                                Ids = rateObject.Ids,
                                Title = rateObject.Title,
                                Year = rateObject.Year,
                            },
                            new TraktEpisode
                            {
                                Ids = new TraktEpisodeId(),
                                Season = rateObject.Seasons[0].Number,
                                Number = rateObject.Seasons[0].Episodes[0].Number
                            },
                            rating
                        );
                    }
                }
                else if (itemToRate.VideoKind == VideoKind.Movie)
                {
                    TraktLogger.Info("Showing rate dialog for movie. Title = '{0}', Year = '{1}', IMDb Id = '{2}', TMDb ID = '{3}'", itemToRate.Title, itemToRate.Year, itemToRate.ID_IMDB.ToLogString(), itemToRate.ID_TMDB.ToLogString());

                    var rateObject = new TraktSyncMovieRated
                    {
                        Ids = new TraktMovieId { Imdb = itemToRate.ID_IMDB, Tmdb = itemToRate.ID_TMDB.ToNullableInt32() },
                        Title = itemToRate.Title,
                        Year = (int)itemToRate.Year,
                        RatedAt = DateTime.UtcNow.ToISO8601()
                    };
                    // get the rating submitted to trakt
                    rating = GUIUtils.ShowRateDialog<TraktSyncMovieRated>(rateObject);

                    // add movie rated to cache
                    if (rating > 0)
                    {
                        TraktCache.AddMovieToRatings(rateObject, rating);
                    }
                    else
                    {
                        TraktCache.RemoveMovieFromRatings(rateObject);
                    }
                }
            })
            {
                Name = "Rate",
                IsBackground = true
            };

            rateThread.Start(videoInfo);
        }
예제 #4
0
        /// <summary>
        /// Shows the Rate Episode Dialog after playback has ended
        /// </summary>
        /// <param name="episode">The episode being rated</param>
        private void ShowRateDialog(DBEpisode episode, bool isPlaylist)
        {
            if (DBOption.GetOptions(DBOption.cAskToRate)) return;               // tvseries dialog is enabled
            if (!TraktSettings.ShowRateDialogOnWatched) return;                 // not enabled
            if (episode[DBOnlineEpisode.cMyRating] > 0) return;                 // already rated
            if (isPlaylist && !TraktSettings.ShowRateDlgForPlaylists) return;   // disabled for playlists

            TraktLogger.Debug("Showing rate dialog for episode. Title = '{0}'", episode.ToString());

            var rateThread = new Thread((o) =>
            {
                var epToRate = o as DBEpisode;
                if (epToRate == null) return;

                var show = Helper.getCorrespondingSeries(epToRate[DBOnlineEpisode.cSeriesID]);
                if (show == null || show[DBOnlineSeries.cTraktIgnore]) return;

                var episodeRateData = new TraktSyncShowRatedEx
                {
                    Title = show[DBOnlineSeries.cOriginalName],
                    Year = show.Year.ToNullableInt32(),
                    Ids = new TraktShowId
                    {
                        Tvdb = show[DBSeries.cID],
                        Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID])
                    },
                    Seasons = new List<TraktSyncShowRatedEx.Season>
                    {
                        new TraktSyncShowRatedEx.Season
                        {
                            Number = episode[DBOnlineEpisode.cSeasonIndex],
                            Episodes = new List<TraktSyncShowRatedEx.Season.Episode>
                            {
                                new TraktSyncShowRatedEx.Season.Episode
                                {
                                    Number = episode[DBOnlineEpisode.cEpisodeIndex],
                                    Rating = episode[DBOnlineEpisode.cMyRating],
                                    RatedAt = DateTime.UtcNow.ToISO8601()
                                }
                            }
                        }
                    }
                };

                // get the rating submitted to trakt
                int rating = GUIUtils.ShowRateDialog<TraktSyncShowRatedEx>(episodeRateData);

                if (rating > 0)
                {
                    TraktLogger.Debug("Rating {0} as {1}/10", epToRate.ToString(), rating.ToString());

                    // update local cache
                    TraktCache.AddEpisodeToRatings
                    (
                        new TraktShow
                        {
                            Ids = new TraktShowId
                            {
                                Tvdb = show[DBSeries.cID],
                                Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID])
                            },
                            Title = show[DBOnlineSeries.cPrettyName],
                            Year = show.Year.ToNullableInt32(),
                        },
                        new TraktEpisode
                        {
                            Ids = new TraktEpisodeId
                            {
                                Tvdb = episode[DBOnlineEpisode.cID],
                                Imdb = episode[DBOnlineEpisode.cIMDBID].ToString().ToNullIfEmpty()
                            },
                            Number = episode[DBOnlineEpisode.cEpisodeIndex],
                            Season = episode[DBOnlineEpisode.cSeasonIndex],
                            Title = episode[DBOnlineEpisode.cEpisodeName]
                        },
                        rating
                    );

                    epToRate[DBOnlineEpisode.cMyRating] = rating;
                    if (epToRate[DBOnlineEpisode.cRatingCount] == 0)
                    {
                        // not really needed but nice touch
                        // tvseries does not do this automatically on userrating insert
                        // we could do one step further and re-calculate rating for any vote count
                        epToRate[DBOnlineEpisode.cRatingCount] = 1;
                        epToRate[DBOnlineEpisode.cRating] = rating;
                    }
                    // ensure we force watched flag otherwise
                    // we will overwrite current state on facade with state before playback
                    epToRate[DBOnlineEpisode.cWatched] = true;
                    epToRate.Commit();

                    // update the facade holding the episode objects
                    var listItem = FindEpisodeInFacade(episode);
                    if (listItem != null)
                    {
                        listItem.TVTag = epToRate;
                    }
                }
                else if(rating == 0)
                {
                    TraktCache.RemoveEpisodeFromRatings
                    (
                        new TraktEpisode
                        {
                            Ids = new TraktEpisodeId
                            {
                                Tvdb = episode[DBOnlineEpisode.cID],
                                Imdb = episode[DBOnlineEpisode.cIMDBID].ToString().ToNullIfEmpty()
                            }
                        }
                    );
                }
            })
            {
                Name = "Rate",
                IsBackground = true
            };

            rateThread.Start(episode);
        }
예제 #5
0
        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;
        }
예제 #6
0
        private void RateEpisode(DBEpisode episode)
        {
            var rateThread = new Thread((objEpisode) =>
            {
                var rateEpisode = objEpisode as DBEpisode;
                if (rateEpisode == null) return;

                var show = Helper.getCorrespondingSeries(rateEpisode[DBOnlineEpisode.cSeriesID]);
                if (show == null || show[DBOnlineSeries.cTraktIgnore]) return;

                TraktLogger.Info("Received a Rate Episode event from tvseries. Show Title = '{0}', Show Year = '{1}', Season = '{2}', Episode = '{3}', Episode Title = '{4}', Show TVDb ID = '{5}', Episode TVDb ID = '{6}'",
                                    show[DBOnlineSeries.cOriginalName], show.Year ?? "<empty>", episode[DBOnlineEpisode.cSeasonIndex], episode[DBOnlineEpisode.cEpisodeIndex], episode[DBOnlineEpisode.cEpisodeName], episode[DBOnlineEpisode.cSeriesID], episode[DBOnlineEpisode.cID]);

                // send show data as well in case tvdb ids are not available on trakt server
                // TraktSyncEpisodeRated object is good if we could trust trakt having the tvdb ids.
                // trakt is more likely to have a show tvdb id than a episode tvdb id
                var episodeRateData = new TraktSyncShowRatedEx
                {
                    Title = show[DBOnlineSeries.cOriginalName],
                    Year = show.Year.ToNullableInt32(),
                    Ids = new TraktShowId
                    {
                        Tvdb = show[DBSeries.cID],
                        Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID])
                    },
                    Seasons = new List<TraktSyncShowRatedEx.Season>
                    {
                        new TraktSyncShowRatedEx.Season
                        {
                            Number = episode[DBOnlineEpisode.cSeasonIndex],
                            Episodes = new List<TraktSyncShowRatedEx.Season.Episode>
                            {
                                new TraktSyncShowRatedEx.Season.Episode
                                {
                                    Number = episode[DBOnlineEpisode.cEpisodeIndex],
                                    Rating = episode[DBOnlineEpisode.cMyRating],
                                    RatedAt = DateTime.UtcNow.ToISO8601()
                                }
                            }
                        }
                    }
                };

                // update local cache
                TraktCache.AddEpisodeToRatings
                    (
                        new TraktShow
                        {
                            Title = show[DBOnlineSeries.cPrettyName],
                            Year = show.Year.ToNullableInt32(),
                            Ids = new TraktShowId
                            {
                                Tvdb = show[DBSeries.cID],
                                Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID])
                            }
                        },
                        new TraktEpisode
                        {
                            Ids = new TraktEpisodeId
                            {
                                Tvdb = episode[DBOnlineEpisode.cID],
                                Imdb = episode[DBOnlineEpisode.cIMDBID].ToString().ToNullIfEmpty()
                            },
                            Number = episode[DBOnlineEpisode.cEpisodeIndex],
                            Season = episode[DBOnlineEpisode.cSeasonIndex],
                            Title = episode[DBOnlineEpisode.cEpisodeName]
                        },
                        episode[DBOnlineEpisode.cMyRating]
                    );

                var response = TraktAPI.TraktAPI.AddEpisodeToRatingsEx(episodeRateData);
                TraktLogger.LogTraktResponse(response);
            })
            {
                IsBackground = true,
                Name = "Rate"
            };

            rateThread.Start(episode);
        }
예제 #7
0
        /// <summary>
        /// Returns a list of shows for rating sync as show objects with season / episode hierarchy
        /// </summary>
        private TraktSyncShowsRatedEx GetRatedEpisodesForSyncEx(List<DBEpisode> localRatedEpisodes, List<TraktEpisodeRated> traktEpisodesRated)
        {
            TraktLogger.Info("Finding local episodes to add to trakt.tv ratings");

            // prepare new sync object
            var syncRatedEpisodes = new TraktSyncShowsRatedEx();
            syncRatedEpisodes.Shows = new List<TraktSyncShowRatedEx>();

            // filter out any invalid episodes or ignored series by user
            var episodes = localRatedEpisodes.Where(lre => lre[DBOnlineEpisode.cEpisodeIndex] != "" &&
                                                           lre[DBOnlineEpisode.cEpisodeIndex] != "0").ToList();

            // create a unique key to lookup and search for faster
            var onlineEpisodes = traktEpisodesRated.ToLookup(tre => CreateLookupKey(tre), tre => tre);

            foreach (var episode in episodes)
            {
                string tvdbKey = CreateLookupKey(episode);

                var traktEpisode = onlineEpisodes[tvdbKey].FirstOrDefault();

                // check if not rated on trakt and add it to sync list
                if (traktEpisode == null)
                {
                    // check if we already have the show added to our sync object
                    var syncShow = syncRatedEpisodes.Shows.FirstOrDefault(sre => sre.Ids != null && sre.Ids.Tvdb == episode[DBOnlineEpisode.cSeriesID]);
                    if (syncShow == null)
                    {
                        // get show data from episode
                        var show = Helper.getCorrespondingSeries(episode[DBOnlineEpisode.cSeriesID]);
                        if (show == null) continue;

                        // create new show
                        syncShow = new TraktSyncShowRatedEx
                        {
                            Ids = new TraktShowId
                            {
                                Tvdb = show[DBSeries.cID],
                                Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID])
                            },
                            Title = show[DBOnlineSeries.cOriginalName],
                            Year = show.Year.ToNullableInt32()
                        };

                        // add a new season collection to show object
                        syncShow.Seasons = new List<TraktSyncShowRatedEx.Season>();

                        // add show to the collection
                        syncRatedEpisodes.Shows.Add(syncShow);
                    }

                    // check if season exists in show sync object
                    var syncSeason = syncShow.Seasons.FirstOrDefault(ss => ss.Number == episode[DBOnlineEpisode.cSeasonIndex]);
                    if (syncSeason == null)
                    {
                        // create new season
                        syncSeason = new TraktSyncShowRatedEx.Season
                        {
                            Number = episode[DBOnlineEpisode.cSeasonIndex]
                        };

                        // add a new episode collection to season object
                        syncSeason.Episodes = new List<TraktSyncShowRatedEx.Season.Episode>();

                        // add season to the show
                        syncShow.Seasons.Add(syncSeason);
                    }

                    // add episode to season
                    syncSeason.Episodes.Add(new TraktSyncShowRatedEx.Season.Episode
                    {
                        Number = episode[DBOnlineEpisode.cEpisodeIndex],
                        Rating = episode[DBOnlineEpisode.cMyRating],
                        RatedAt = DateTime.UtcNow.ToISO8601()
                    });
                }
            }

            return syncRatedEpisodes;
        }
예제 #8
0
        /// <summary>
        /// Rate a single episode on trakt.tv (with show info)
        /// </summary>
        public static TraktSyncResponse AddEpisodeToRatingsEx(TraktSyncShowRatedEx item)
        {
            var episodes = new TraktSyncShowsRatedEx
            {
                Shows = new List<TraktSyncShowRatedEx>() { item }
            };

            return AddShowsToRatingsEx(episodes);
        }
예제 #9
0
        /// <summary>
        /// UnRate a single episode on trakt.tv (with show info)
        /// </summary>
        public static TraktSyncResponse RemoveEpisodeFromRatingsEx(TraktSyncShowRatedEx item)
        {
            var episodes = new TraktSyncShowsRatedEx
            {
                Shows = new List<TraktSyncShowRatedEx>() { item }
            };

            return RemoveShowsFromRatingsEx(episodes);
        }
예제 #10
0
        internal static void AddEpisodesToRatings(TraktSyncShowRatedEx show)
        {
            var ratedEpisodes = (_RatedEpisodes ?? new List<TraktEpisodeRated>()).ToList();
            var episodesToAdd = new List<TraktEpisodeRated>();

            foreach (var season in show.Seasons)
            {
                foreach (var episode in season.Episodes)
                {
                    episodesToAdd.Add(new TraktEpisodeRated
                    {
                        RatedAt = episode.RatedAt ?? DateTime.UtcNow.ToISO8601(),
                        Rating = episode.Rating,
                        Show = new TraktShow
                        {
                            Ids = show.Ids,
                            Title = show.Title,
                            Year = show.Year
                        },
                        Episode = new TraktEpisode
                        {
                            Ids= new TraktEpisodeId(),
                            Number = episode.Number,
                            Season = season.Number
                        }
                    });
                }
            }

            ratedEpisodes.AddRange(episodesToAdd);

            _RatedEpisodes = ratedEpisodes;
        }