Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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());
                }
            }
        }
Beispiel #3
0
        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());
            }
        }
Beispiel #5
0
        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());
                }
            }
        }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
        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);
        }