public int TraktScrobble(int animeId, int type, int progress, int status) { try { ScrobblePlayingStatus statusTraktV2 = ScrobblePlayingStatus.Start; switch (status) { case (int)ScrobblePlayingStatus.Start: statusTraktV2 = ScrobblePlayingStatus.Start; break; case (int)ScrobblePlayingStatus.Pause: statusTraktV2 = ScrobblePlayingStatus.Pause; break; case (int)ScrobblePlayingStatus.Stop: statusTraktV2 = ScrobblePlayingStatus.Stop; break; } bool isValidProgress = float.TryParse(progress.ToString(), out float progressTrakt); if (isValidProgress) { switch (type) { // Movie case (int)ScrobblePlayingType.movie: return(TraktTVHelper.Scrobble( ScrobblePlayingType.movie, animeId.ToString(), statusTraktV2, progressTrakt)); // TV episode case (int)ScrobblePlayingType.episode: return(TraktTVHelper.Scrobble( ScrobblePlayingType.episode, animeId.ToString(), statusTraktV2, progressTrakt)); } } return(500); } catch (Exception ex) { logger.Error(ex, ex.ToString()); return(500); } }
public void TraktScrobble(ScrobblePlayingStatus scrobblePlayingStatus, VideoInfo info, int position, int duration, bool logOutput = false) { try { VM_VideoDetailed vd = (VM_VideoDetailed)VM_ShokoServer.Instance.ShokoServices.GetVideoDetailed(info.VideoLocalId, VM_ShokoServer.Instance.CurrentUser.JMMUserID); if (vd == null) { if (logOutput) { logger.Debug("Trakt scrobbling video detail = null"); } return; } CL_AnimeEpisode_User ep = VM_ShokoServer.Instance.ShokoServices.GetEpisodeByAniDBEpisodeID(vd.AnimeEpisodeID, VM_ShokoServer.Instance.CurrentUser.JMMUserID); if (ep != null) { double percentagePlayed = (int)Math.Round((double)(100 * position) / duration); if (logOutput) { logger.Debug("Trakt is scrobbling for anime episode id: " + ep.AnimeEpisodeID); logger.Debug("Trakt is scrobbling with played percentage: " + (int)percentagePlayed); } VM_ShokoServer.Instance.ShokoServices.TraktScrobble(ep.AnimeEpisodeID, (int)ScrobblePlayingType.episode, (int)percentagePlayed, (int)scrobblePlayingStatus); } if (logOutput) { logger.Debug("Trakt scrobbling has finished scrobbling"); } } catch (Exception e) { if (logOutput) { logger.Debug("Error in VideoHandler.TraktScrobble: {0}", e.ToString()); } } }
private static void TraktScrobble(PlexEvent evt, ScrobblePlayingStatus type) { PlexEvent.PlexMetadata metadata = evt.Metadata; (SVR_AnimeEpisode episode, SVR_AnimeSeries anime) = GetEpisode(metadata); if (episode == null) { return; } var vl = Repo.Instance.VideoLocal.GetByAniDBEpisodeID(episode.AniDB_EpisodeID).FirstOrDefault(); float per = 100 * (metadata.ViewOffset / (float)vl.Duration); //this will be nice if plex would ever give me the duration, so I don't have to guess it. ScrobblePlayingType scrobbleType = episode.PlexContract.IsMovie ? ScrobblePlayingType.movie : ScrobblePlayingType.episode; TraktTVHelper.Scrobble(scrobbleType, episode.AnimeEpisodeID.ToString(), type, per); }
public void TraktScrobble(ScrobblePlayingStatus scrobblePlayingStatus, VideoInfo info, int position, int duration, bool logOutput = false) { try { Contract_VideoDetailed vd = JMMServerVM.Instance.clientBinaryHTTP.GetVideoDetailed(info.VideoLocalId, JMMServerVM.Instance.CurrentUser.JMMUserID.Value); if (vd == null) { if (logOutput) logger.Debug("Trakt scrobbling video detail = null"); return; } Contract_AnimeEpisode ep = JMMServerVM.Instance.clientBinaryHTTP.GetEpisodeByAniDBEpisodeID(vd.AnimeEpisodeID, JMMServerVM.Instance.CurrentUser.JMMUserID.Value); if (ep != null) { double percentagePlayed = (int)Math.Round((double)(100 * position) / duration); if (logOutput) { logger.Debug("Trakt is scrobbling for anime episode id: " + ep.AnimeEpisodeID); logger.Debug("Trakt is scrobbling with played percentage: " + (int)percentagePlayed); } JMMServerVM.Instance.clientBinaryHTTP.TraktScrobble(ep.AnimeEpisodeID, (int)ScrobblePlayingType.episode, (int)percentagePlayed, (int)scrobblePlayingStatus); } if (logOutput) logger.Debug("Trakt scrobbling has finished scrobbling"); } catch (Exception e) { if (logOutput) logger.Debug("Error in VideoHandler.TraktScrobble: {0}", e.ToString()); } }
public void TraktScrobble(ScrobblePlayingStatus scrobblePlayingStatus, bool logOutput = false) { try { if (VM_ShokoServer.Instance.TraktEnabled && !string.IsNullOrEmpty(VM_ShokoServer.Instance.TraktAuthToken)) { double percentagePlayed = 0; if (g_Player.Playing && g_Player.CurrentPosition > 0) { percentagePlayed = (int)Math.Round((double)(100 * g_Player.CurrentPosition) / g_Player.Duration); } if (logOutput) { BaseConfig.MyAnimeLog.Write("Trakt is scrobbling for anime episode id: " + curEpisode.AnimeEpisodeID); BaseConfig.MyAnimeLog.Write("Trakt is scrobbling with played percentage: " + (int)percentagePlayed); BaseConfig.MyAnimeLog.Write("Trakt scrobble type: " + scrobblePlayingStatus); } VM_ShokoServer.Instance.ShokoServices.TraktScrobble(curEpisode.AnimeEpisodeID, (int)ScrobblePlayingType.episode, (int)percentagePlayed, (int)scrobblePlayingStatus); if (logOutput) { BaseConfig.MyAnimeLog.Write("Trakt scrobbling has finished scrobbling"); } } } catch (Exception e) { if (logOutput) { BaseConfig.MyAnimeLog.Write("Error in VideoHandler.TraktScrobble: {0}", e.ToString()); } } }
public static int Scrobble(ScrobblePlayingType scrobbleType, string AnimeEpisodeID, ScrobblePlayingStatus scrobbleStatus, float progress) { try { if (!ServerSettings.Trakt_IsEnabled || string.IsNullOrEmpty(ServerSettings.Trakt_AuthToken)) return 401; string json = ""; string url = ""; switch (scrobbleStatus) { case ScrobblePlayingStatus.Start: url = TraktURIs.SetScrobbleStart; break; case ScrobblePlayingStatus.Pause: url = TraktURIs.SetScrobblePause; break; case ScrobblePlayingStatus.Stop: url = TraktURIs.SetScrobbleStop; break; } //1.get traktid and slugid from episode id int aep = 0; int.TryParse(AnimeEpisodeID, out aep); AnimeEpisodeRepository repEps = new AnimeEpisodeRepository(); AnimeEpisode ep = repEps.GetByID(aep); string slugID = ""; int season = 0; int epNumber = 0; int? traktID = GetTraktEpisodeIdV2(ep, ref slugID, ref season, ref epNumber); //2.generate json if (traktID == null && traktID > 0) { switch (scrobbleType) { case ScrobblePlayingType.episode: TraktV2ScrobbleEpisode showE = new TraktV2ScrobbleEpisode(); showE.Init(progress, traktID, slugID, season, epNumber); json = JSONHelper.Serialize<TraktV2ScrobbleEpisode>(showE); break; //do we have any movies that work? case ScrobblePlayingType.movie: TraktV2ScrobbleMovie showM = new TraktV2ScrobbleMovie(); json = JSONHelper.Serialize<TraktV2ScrobbleMovie>(showM); showM.Init(progress, slugID, traktID.ToString()); break; } //3. send Json string retData = string.Empty; int response = SendData(url, json, "POST", BuildRequestHeaders(), ref retData); } else { //3. nothing to send log error logger.Warn("TraktTVHelper.Scrobble: No TraktID found for: " + "AnimeEpisodeID: " + aep.ToString() + " AnimeRomajiName: " + ep.AniDB_Episode.RomajiName); return 404; } return 200; } catch (Exception ex) { logger.ErrorException("Error in TraktTVHelper.Scrobble: " + ex.ToString(), ex); return 500; } }
private void ScrobbleToTrakt(SVR_VideoLocal file, SVR_AnimeEpisode episode, long position, ScrobblePlayingStatus status) { if (User.IsTraktUser == 0) { return; } float percentage = 100 * (position / file.Duration); ScrobblePlayingType scrobbleType = episode.GetAnimeSeries()?.GetAnime()?.AnimeType == (int)AnimeType.Movie ? ScrobblePlayingType.movie : ScrobblePlayingType.episode; TraktTVHelper.Scrobble(scrobbleType, episode.AnimeEpisodeID.ToString(), status, percentage); }