public static TraktEpisodeScrobble CreateEpisodeScrobbleData(VideoInfo info) { try { // create scrobble data TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { Title = info.Title, Year = info.Year, Season = info.SeasonIdx, Episode = info.EpisodeIdx, PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = TraktSettings.Username, Password = TraktSettings.Password }; return scrobbleData; } catch (Exception e) { TraktLogger.Error("Error creating scrobble data: {0}", e.Message); return null; } }
private void OnEpisodeStopped(DBEpisode episode) { if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // Episode does not count as watched, we dont need to do anything. TraktLogger.Info("Stopped TVSeries episode playback '{0}'", episode.ToString()); EpisodeWatching = false; StopScrobble(); // send cancelled watching state Thread cancelWatching = new Thread(delegate() { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleEpisodeState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "Cancel Watching Episode" }; cancelWatching.Start(); }
private TraktEpisodeScrobble CreateScrobbleData(DBEpisode episode) { DBSeries series = Helper.getCorrespondingSeries(episode[DBEpisode.cSeriesID]); if (series == null || series[DBOnlineSeries.cTraktIgnore]) return null; // create scrobble data TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { Title = series[DBOnlineSeries.cOriginalName], Year = series.Year, Season = episode[DBOnlineEpisode.cSeasonIndex], Episode = episode[DBOnlineEpisode.cEpisodeIndex], EpisodeID = episode[DBOnlineEpisode.cID], SeriesID = series[DBSeries.cID], PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = TraktSettings.Username, Password = TraktSettings.Password }; return scrobbleData; }
private TraktEpisodeScrobble CreateEpisodeScrobbleData(ITrackingInfo info) { try { // create scrobble data TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { Title = info.Title, Year = info.Year > 1900 ? info.Year.ToString() : null, Season = info.Season.ToString(), Episode = info.Episode.ToString(), SeriesID = info.ID_TVDB, IMDBID = info.ID_IMDB, PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = TraktSettings.Username, Password = TraktSettings.Password }; return scrobbleData; } catch (Exception e) { TraktLogger.Error("Error creating scrobble data: {0}", e.Message); return null; } }
private TraktEpisodeScrobble CreateScrobbleData(FileLocal episode) { string seriesid = null; int seasonidx = 0; int episodeidx = 0; if (episode.AnimeEpisodes == null || episode.AnimeEpisodes.Count == 0 || !GetTVDBEpisodeInfo(episode.AnimeEpisodes[0], out seriesid, out seasonidx, out episodeidx)) { TraktLogger.Warning("Unable to scrobble episodes, no AniDb/TVDb reference in database yet. Episode will be manually marked as seen on sync when available."); return null; } // create scrobble data try { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { Title = episode.AniDB_File.AnimeSeries.SeriesName, Year = GetStartYear(episode.AniDB_File.AnimeSeries), Season = seasonidx.ToString(), Episode = episodeidx.ToString(), SeriesID = seriesid, PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = TraktSettings.Username, Password = TraktSettings.Password }; return scrobbleData; } catch { TraktLogger.Error("Failed to create scrobble data for '{0}'", episode.ToString()); return null; } }
public void StopScrobble() { if (TraktTimer != null) TraktTimer.Dispose(); if (CurrentEpisode == null) return; #region Scrobble Thread scrobbleEpisode = new Thread(delegate(object o) { FileLocal episode = o as FileLocal; if (episode == null) return; TraktLogger.Info("My Anime episode considered watched '{0}'", episode.ToString()); // get scrobble data to send to api TraktEpisodeScrobble scrobbleData = CreateScrobbleData(episode); if (scrobbleData == null) return; // set duration/progress in scrobble data scrobbleData.Duration = Convert.ToInt32(g_Player.Duration / 60).ToString(); scrobbleData.Progress = "100"; TraktResponse response = TraktAPI.TraktAPI.ScrobbleEpisodeState(scrobbleData, TraktScrobbleStates.scrobble); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "Scrobble" }; #endregion // if episode is atleast 90% complete, consider watched if ((g_Player.CurrentPosition / g_Player.Duration) >= 0.9) { ShowRateDialog(CurrentEpisode); scrobbleEpisode.Start(CurrentEpisode); } else { #region Cancel Watching TraktLogger.Info("Stopped My Anime episode playback '{0}'", CurrentEpisode.ToString()); // stop scrobbling Thread cancelWatching = new Thread(delegate() { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleEpisodeState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "CancelWatching" }; #endregion cancelWatching.Start(); } CurrentEpisode = null; }
public void StopScrobble() { if (TraktTimer != null) TraktTimer.Dispose(); if (CurrentRecording == null) return; // get current progress of player double progress = 0.0; if (g_Player.Duration > 0.0) progress = (g_Player.CurrentPosition / g_Player.Duration) * 100.0; TraktLogger.Debug("Current Position: {0}, Duration: {1}", g_Player.CurrentPosition.ToString(), g_Player.Duration.ToString()); TraktLogger.Debug(string.Format("Percentage of '{0}' watched is {1}%", CurrentRecording.Title, progress > 100.0 ? "100" : progress.ToString("N2"))); // if recording is at least 80% complete, consider watched // consider watched with invalid progress as well, we should never be exactly 0.0 if ((progress == 0.0 || progress >= 80.0) && CurrentRecording.IsScrobbling) { // Show rate dialog ShowRateDialog(CurrentRecording); #region scrobble Thread scrobbleRecording = new Thread(delegate(object obj) { VideoInfo videoInfo = obj as VideoInfo; if (videoInfo == null) return; TraktLogger.Info("Playback of '{0}' in 4TR tv-recording is considered watched.", videoInfo.ToString()); if (videoInfo.Type == VideoType.Series) { BasicHandler.ScrobbleEpisode(videoInfo, TraktScrobbleStates.scrobble); } else { BasicHandler.ScrobbleMovie(videoInfo, TraktScrobbleStates.scrobble); } }) { IsBackground = true, Name = "Scrobble" }; scrobbleRecording.Start(CurrentRecording); #endregion } else { #region cancel watching TraktLogger.Info("Stopped playback of 4TR tv-recording '{0}'", CurrentRecording.ToString()); Thread cancelWatching = new Thread(delegate(object obj) { VideoInfo videoInfo = obj as VideoInfo; if (videoInfo == null) return; if (videoInfo.Type == VideoType.Series) { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleEpisodeState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); } else { TraktMovieScrobble scrobbleData = new TraktMovieScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleMovieState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); } }) { IsBackground = true, Name = "Cancel Watching" }; cancelWatching.Start(CurrentRecording); #endregion } CurrentRecording = null; }
public void StopScrobble() { if (TraktTimer != null) TraktTimer.Dispose(); if (CurrentProgram == null) return; if (IsProgramWatched(CurrentProgram) && CurrentProgram.IsScrobbling) { ScrobbleProgram(CurrentProgram); } else { #region cancel watching TraktLogger.Info("Stopped playback of tv-live '{0}'", CurrentProgram.ToString()); Thread cancelWatching = new Thread(delegate(object obj) { VideoInfo videoInfo = obj as VideoInfo; if (videoInfo == null) return; if (videoInfo.Type == VideoType.Series) { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleEpisodeState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); } else { TraktMovieScrobble scrobbleData = new TraktMovieScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleMovieState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); } }) { IsBackground = true, Name = "CancelWatching" }; cancelWatching.Start(CurrentProgram); #endregion } CurrentProgram = null; }
private TraktEpisodeScrobble CreateScrobbleData(FileLocal episode) { string seriesid = null; int seasonidx = 0; int episodeidx = 0; if (!GetTVDBEpisodeInfo(episode.AnimeEpisodes[0], out seriesid, out seasonidx, out episodeidx)) return null; // create scrobble data try { TraktEpisodeScrobble scrobbleData = new TraktEpisodeScrobble { Title = episode.AniDB_File.AnimeSeries.SeriesName, Year = GetStartYear(episode.AniDB_File.AnimeSeries), Season = seasonidx.ToString(), Episode = episodeidx.ToString(), SeriesID = seriesid, PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = TraktSettings.Username, Password = TraktSettings.Password }; return scrobbleData; } catch { TraktLogger.Error("Failed to create scrobble data for '{0}'", episode.ToString()); return null; } }