Inheritance: TraktPlugin.TraktAPI.DataStructures.TraktResponse
        private void RemoveEpisodeFromLibrary(TraktCalendar.TraktEpisodes episode)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                TraktAPI.TraktAPI.SyncEpisodeLibrary(CreateEpisodeSyncData(obj as TraktCalendar.TraktEpisodes), TraktSyncModes.unlibrary);
            })
            {
                IsBackground = true,
                Name = "Remove Episode From Library"
            };

            syncThread.Start(episode);
        }
        private void PublishEpisodeSkinProperties(TraktCalendar.TraktEpisodes episode)
        {
            GUICommon.SetProperty("#Trakt.Calendar.Selected.Date", episode.Date);
            GUICommon.SetProperty("#selectedindex", episode.SelectedIndex);

            GUICommon.SetShowProperties(episode.Show);
            GUICommon.SetEpisodeProperties(episode.Episode);
        }
 private void RateEpisode(TraktCalendar.TraktEpisodes episode)
 {
     GUICommon.RateEpisode(episode.Show, episode.Episode);
 }
        private TraktShowSync CreateShowSyncData(TraktCalendar.TraktEpisodes episode)
        {
            List<TraktShowSync.Show> shows = new List<TraktShowSync.Show>();

            TraktShowSync.Show show = new TraktShowSync.Show
            {
                Title = episode.Show.Title,
                TVDBID = episode.Show.Tvdb,
                Year = episode.Show.Year
            };
            shows.Add(show);

            TraktShowSync syncData = new TraktShowSync
            {
                Shows = shows,
                UserName = TraktSettings.Username,
                Password = TraktSettings.Password
            };

            return syncData;
        }
        private void MarkEpisodeAsWatched(TraktCalendar.TraktEpisodes episode)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                TraktAPI.TraktAPI.SyncEpisodeLibrary(CreateEpisodeSyncData(obj as TraktCalendar.TraktEpisodes), TraktSyncModes.seen);
            })
            {
                IsBackground = true,
                Name = "Mark Episode as Watched"
            };

            syncThread.Start(episode);
        }
        private void AddShowToWatchList(TraktCalendar.TraktEpisodes episode)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                TraktAPI.TraktAPI.SyncShowWatchList(CreateShowSyncData(obj as TraktCalendar.TraktEpisodes), TraktSyncModes.watchlist);
            })
            {
                IsBackground = true,
                Name = "Adding Show to Watch List"
            };

            syncThread.Start(episode);
        }
        private TraktEpisodeSync CreateEpisodeSyncData(TraktCalendar.TraktEpisodes episode)
        {
            List<TraktEpisodeSync.Episode> episodeList = new List<TraktEpisodeSync.Episode>();
            episodeList.Add(new TraktEpisodeSync.Episode { EpisodeIndex = episode.Episode.Number.ToString(), SeasonIndex = episode.Episode.Season.ToString() });

            TraktEpisodeSync syncData = new TraktEpisodeSync
            {
                EpisodeList = episodeList,
                IMDBID = episode.Show.Imdb,
                SeriesID = episode.Show.Tvdb,
                Title = episode.Show.Title,
                Year = episode.Show.Year.ToString(),
                UserName = TraktSettings.Username,
                Password = TraktSettings.Password
            };

            return syncData;
        }
        private void RemoveEpisodeFromWatchList(TraktCalendar.TraktEpisodes episode)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                TraktAPI.TraktAPI.SyncEpisodeWatchList(CreateEpisodeSyncData(obj as TraktCalendar.TraktEpisodes), TraktSyncModes.unwatchlist);
            })
            {
                IsBackground = true,
                Name = "Removing Episode from Watch List"
            };

            syncThread.Start(episode);
        }
        private void ShowTrailersMenu(TraktCalendar.TraktEpisodes episodeItem)
        {
            IDialogbox dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
            dlg.Reset();
            dlg.SetHeading(Translation.Trailer);

            foreach (TrailerSite site in Enum.GetValues(typeof(TrailerSite)))
            {
                string menuItem = Enum.GetName(typeof(TrailerSite), site);
                GUIListItem pItem = new GUIListItem(menuItem);
                dlg.Add(pItem);
            }

            dlg.DoModal(GUIWindowManager.ActiveWindow);

            if (dlg.SelectedLabel >= 0)
            {
                string siteUtil = string.Empty;
                string searchParam = string.Empty;

                switch (dlg.SelectedLabelText)
                {
                    case ("IMDb"):
                        siteUtil = "IMDb Movie Trailers";
                        if (!string.IsNullOrEmpty(episodeItem.Show.Imdb))
                            // Exact search
                            searchParam = episodeItem.Show.Imdb;
                        else
                            searchParam = episodeItem.Show.Title;
                        break;

                    case ("YouTube"):
                        siteUtil = "YouTube";
                        searchParam = episodeItem.Show.Title;
                        break;
                }

                string loadingParam = string.Format("site:{0}|search:{1}|return:Locked", siteUtil, searchParam);
                // Launch OnlineVideos Trailer search
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.OnlineVideos, loadingParam);
            }
        }
        private void PublishEpisodeSkinProperties(TraktCalendar.TraktEpisodes episode)
        {
            SetProperty("#Trakt.Calendar.Selected.Date", episode.Date);
            SetProperty("#selectedindex", episode.SelectedIndex);

            SetProperty("#Trakt.Show.Imdb", episode.Show.Imdb);
            SetProperty("#Trakt.Show.Tvdb", episode.Show.Tvdb);
            SetProperty("#Trakt.Show.TvRage", episode.Show.TvRage);
            SetProperty("#Trakt.Show.Title", episode.Show.Title);
            SetProperty("#Trakt.Show.Url", episode.Show.Url);
            SetProperty("#Trakt.Show.AirDay", episode.Show.AirDay);
            SetProperty("#Trakt.Show.AirTime", episode.Show.AirTime);
            SetProperty("#Trakt.Show.Certification", episode.Show.Certification);
            SetProperty("#Trakt.Show.Country", episode.Show.Country);
            SetProperty("#Trakt.Show.FirstAired", episode.Show.FirstAired.FromEpoch().ToShortDateString());
            SetProperty("#Trakt.Show.Network", episode.Show.Network);
            SetProperty("#Trakt.Show.Overview", string.IsNullOrEmpty(episode.Show.Overview) ? Translation.NoShowSummary : episode.Show.Overview);
            SetProperty("#Trakt.Show.Runtime", episode.Show.Runtime.ToString());
            SetProperty("#Trakt.Show.Year", episode.Show.Year.ToString());
            SetProperty("#Trakt.Show.InWatchList", episode.Show.InWatchList.ToString());
            SetProperty("#Trakt.Show.Rating", episode.Show.Rating);
            SetProperty("#Trakt.Show.Ratings.Icon", (episode.Show.Ratings.LovedCount > episode.Show.Ratings.HatedCount) ? "love" : "hate");
            SetProperty("#Trakt.Show.Ratings.HatedCount", episode.Show.Ratings.HatedCount.ToString());
            SetProperty("#Trakt.Show.Ratings.LovedCount", episode.Show.Ratings.LovedCount.ToString());
            SetProperty("#Trakt.Show.Ratings.Percentage", episode.Show.Ratings.Percentage.ToString());
            SetProperty("#Trakt.Show.Ratings.Votes", episode.Show.Ratings.Votes.ToString());
            SetProperty("#Trakt.Show.FanartImageFilename", episode.Show.Images.FanartImageFilename);
            SetProperty("#Trakt.Episode.Number", episode.Episode.Number.ToString());
            SetProperty("#Trakt.Episode.Season", episode.Episode.Season.ToString());
            SetProperty("#Trakt.Episode.FirstAired", episode.Episode.FirstAired.FromEpoch().ToShortDateString());
            SetProperty("#Trakt.Episode.Title", string.IsNullOrEmpty(episode.Episode.Title) ? string.Format("{0} {1}", Translation.Episode, episode.Episode.Number.ToString()) : episode.Episode.Title);
            SetProperty("#Trakt.Episode.Url", episode.Episode.Url);
            SetProperty("#Trakt.Episode.Overview", string.IsNullOrEmpty(episode.Episode.Overview) ? Translation.NoEpisodeSummary : episode.Episode.Overview);
            SetProperty("#Trakt.Episode.Runtime", episode.Episode.Runtime.ToString());
            SetProperty("#Trakt.Episode.InWatchList", episode.Episode.InWatchList.ToString());
            SetProperty("#Trakt.Episode.InCollection", episode.Episode.InCollection.ToString());
            SetProperty("#Trakt.Episode.Plays", episode.Episode.Plays.ToString());
            SetProperty("#Trakt.Episode.Watched", (episode.Episode.Plays > 0).ToString());
            SetProperty("#Trakt.Episode.Rating", episode.Episode.Rating);
            SetProperty("#Trakt.Episode.Ratings.Icon", (episode.Episode.Ratings.LovedCount > episode.Episode.Ratings.HatedCount) ? "love" : "hate");
            SetProperty("#Trakt.Episode.Ratings.HatedCount", episode.Episode.Ratings.HatedCount.ToString());
            SetProperty("#Trakt.Episode.Ratings.LovedCount", episode.Episode.Ratings.LovedCount.ToString());
            SetProperty("#Trakt.Episode.Ratings.Percentage", episode.Episode.Ratings.Percentage.ToString());
            SetProperty("#Trakt.Episode.Ratings.Votes", episode.Episode.Ratings.Votes.ToString());
            SetProperty("#Trakt.Episode.EpisodeImageFilename", episode.Episode.Images.EpisodeImageFilename);
        }
        private void RateEpisode(TraktCalendar.TraktEpisodes episode)
        {
            // default rating to love if not already set
            TraktRateEpisode rateObject = new TraktRateEpisode
            {
                SeriesID = episode.Show.Tvdb,
                Title = episode.Show.Title,
                Year = episode.Show.Year.ToString(),
                Episode = episode.Episode.Number.ToString(),
                Season = episode.Episode.Season.ToString(),
                Rating = episode.Episode.Rating,
                UserName = TraktSettings.Username,
                Password = TraktSettings.Password
            };

            string prevRating = episode.Episode.Rating;
            episode.Episode.Rating = GUIUtils.ShowRateDialog<TraktRateEpisode>(rateObject);

            // if previous rating not equal to current rating then
            // update skin properties to reflect changes so we dont
            // need to re-request from server
            if (prevRating != episode.Episode.Rating)
            {
                if (prevRating == "false")
                {
                    episode.Episode.Ratings.Votes++;
                    if (episode.Episode.Rating == "love")
                        episode.Episode.Ratings.LovedCount++;
                    else
                        episode.Episode.Ratings.HatedCount++;
                }

                if (prevRating == "love")
                {
                    episode.Episode.Ratings.LovedCount--;
                    episode.Episode.Ratings.HatedCount++;
                }

                if (prevRating == "hate")
                {
                    episode.Episode.Ratings.LovedCount++;
                    episode.Episode.Ratings.HatedCount--;
                }

                episode.Episode.Ratings.Percentage = (int)Math.Round(100 * (episode.Episode.Ratings.LovedCount / (float)episode.Episode.Ratings.Votes));
            }
        }
 private void PublishCalendarSkinProperties(TraktCalendar calendarItem)
 {
     GUICommon.SetShowProperties(calendarItem.Show);
     GUICommon.SetEpisodeProperties(calendarItem.Show, calendarItem.Episode);
 }