public bool Scrobble(string filename) { StopScrobble(); if (!g_Player.IsTV) { return(false); } try { CurrentProgram = GetCurrentProgram(); } catch (Exception e) { TraktLogger.Error(e.Message); return(false); } if (CurrentProgram == null) { return(false); } CurrentProgram.IsScrobbling = true; if (CurrentProgram.Type == VideoType.Series) { TraktLogger.Info("Detected tv-series '{0}' playing in 4TR TV Live", CurrentProgram.ToString()); } else { TraktLogger.Info("Detected movie '{0}' playing in 4TR TV Live", CurrentProgram.ToString()); } #region scrobble timer TraktTimer = new Timer(new TimerCallback((stateInfo) => { Thread.CurrentThread.Name = "Scrobble"; // get the current program airing on tv now // this may have changed since last status update on trakt VideoInfo videoInfo = GetCurrentProgram(); if (videoInfo != null) { // if we are watching something different, // check if we should mark previous as watched if (!videoInfo.Equals(CurrentProgram)) { TraktLogger.Info("Detected new tv program has started '{0}' -> '{1}'", CurrentProgram.ToString(), videoInfo.ToString()); if (IsProgramWatched(CurrentProgram) && CurrentProgram.IsScrobbling) { ScrobbleProgram(CurrentProgram); } CurrentProgram.IsScrobbling = true; } // continue watching new program // dont try to scrobble if previous attempt failed if (CurrentProgram.IsScrobbling) { if (videoInfo.Type == VideoType.Series) { videoInfo.IsScrobbling = BasicHandler.ScrobbleEpisode(videoInfo, TraktScrobbleStates.watching); } else { videoInfo.IsScrobbling = BasicHandler.ScrobbleMovie(videoInfo, TraktScrobbleStates.watching); } // set current program to new program CurrentProgram = videoInfo; } } }), null, 1000, 300000); #endregion return(true); }
public bool Scrobble(string filename) { StopScrobble(); if (!g_Player.IsTV) { return(false); } CurrentProgram = GetCurrentProgram(); if (CurrentProgram == null) { return(false); } CurrentProgram.IsScrobbling = true; if (CurrentProgram.Type == VideoType.Series) { TraktLogger.Info("Detected tv show playing on Live TV. Title = '{0}'", CurrentProgram.ToString()); } else { TraktLogger.Info("Detected movie playing on Live TV. Title = '{0}'", CurrentProgram.ToString()); } #region Scrobble Timer TraktTimer = new Timer(new TimerCallback((stateInfo) => { Thread.CurrentThread.Name = "Scrobble"; // get the current program airing on tv now // this may have changed since last status update on trakt VideoInfo videoInfo = GetCurrentProgram(); if (videoInfo != null) { // if we are watching something different, // check if we should mark previous as watched if (!videoInfo.Equals(CurrentProgram)) { TraktLogger.Info("Detected new tv program has started. Previous Program = '{0}', New Program = '{1}'", CurrentProgram.ToString(), videoInfo.ToString()); if (IsProgramWatched(CurrentProgram) && CurrentProgram.IsScrobbling) { TraktLogger.Info("Playback of program on Live TV is considered watched. Title = '{0}'", CurrentProgram.ToString()); BasicHandler.StopScrobble(CurrentProgram, true); } CurrentProgram.IsScrobbling = true; } // continue watching new program // dont try to scrobble if previous attempt failed if (CurrentProgram.IsScrobbling) { if (videoInfo.Type == VideoType.Series) { videoInfo.IsScrobbling = BasicHandler.StartScrobbleEpisode(videoInfo); } else { videoInfo.IsScrobbling = BasicHandler.StartScrobbleMovie(videoInfo); } // set current program to new program CurrentProgram = videoInfo; } } }), null, 1000, 300000); #endregion return(true); }
public bool Scrobble(string filename) { StopScrobble(); if (!g_Player.IsTVRecording) { return(false); } // get recording details from tv database ControlServiceAgent layer = new ControlServiceAgent(); Recording recording = layer.GetRecordingByFileName(filename); if (recording == null || string.IsNullOrEmpty(recording.Title)) { TraktLogger.Info("Unable to get recording details from argus database."); return(false); } // get year from title if available, some EPG entries contain this string title = null; string year = null; GetTitleAndYear(recording, out title, out year); CurrentRecording = new VideoInfo { Type = recording.EpisodeNumber != null || recording.SeriesNumber != null ? VideoType.Series : VideoType.Movie, Title = title, Year = year, SeasonIdx = recording.SeriesNumber == null ? null : recording.SeriesNumber.ToString(), EpisodeIdx = recording.EpisodeNumber == null ? null : recording.EpisodeNumber.ToString(), IsScrobbling = true }; if (CurrentRecording.Type == VideoType.Series) { TraktLogger.Info("Detected tv-series '{0}' playing in Argus TV-Recordings", CurrentRecording.ToString()); } else { TraktLogger.Info("Detected movie '{0}' playing in Argus TV-Recordings", CurrentRecording.ToString()); } #region scrobble timer TraktTimer = new Timer(new TimerCallback((stateInfo) => { Thread.CurrentThread.Name = "Scrobble"; VideoInfo videoInfo = stateInfo as VideoInfo; // maybe the program does not exist on trakt // ignore in future if it failed previously if (videoInfo.IsScrobbling) { if (videoInfo.Type == VideoType.Series) { videoInfo.IsScrobbling = BasicHandler.ScrobbleEpisode(videoInfo, TraktScrobbleStates.watching); } else { videoInfo.IsScrobbling = BasicHandler.ScrobbleMovie(videoInfo, TraktScrobbleStates.watching); } if (videoInfo.Equals(CurrentRecording)) { CurrentRecording.IsScrobbling = videoInfo.IsScrobbling; } } }), CurrentRecording, 3000, 900000); #endregion return(true); }