public override void ProcessCommand() { foreach (int section in ServerSettings.Plex_Libraries) { var allSeries = PlexHelper.GetForUser(_jmmuser).GetPlexSeries(section); foreach (PlexSeries series in allSeries) { foreach (PlexEpisode episode in series.Episodes) { var animeEpisode = episode.AnimeEpisode; var isWatched = episode.WatchCount > 0; var lastWatched = FromUnixTime(episode.LastWatched); SVR_VideoLocal video = animeEpisode?.GetVideoLocals()?.FirstOrDefault(); if (video == null) { continue; } var alreadyWatched = animeEpisode.GetVideoLocals() .Where(x => x.GetAniDBFile() != null) .Any(x => x.GetAniDBFile().IsWatched > 0); if (alreadyWatched && !isWatched) { episode.Scrobble(); } if (isWatched && !alreadyWatched) { video.ToggleWatchedStatus(true, true, lastWatched, true, true, _jmmuser.JMMUserID, true, true); } } } } }
public override void ProcessCommand() { logger.Info($"Syncing watched videos for: {_jmmuser.Username}, if nothing happens make sure you have your libraries configured in Shoko."); foreach (var section in PlexHelper.GetForUser(_jmmuser).GetDirectories()) { if (!ServerSettings.Instance.Plex.Libraries.Contains(section.Key)) { continue; } var allSeries = ((SVR_Directory)section).GetShows(); foreach (var series in allSeries) { var episodes = ((SVR_PlexLibrary)series)?.GetEpisodes()?.Where(s => s != null); if (episodes == null) { continue; } foreach (var ep in episodes) { var episode = (SVR_Episode)ep; var animeEpisode = episode.AnimeEpisode; if (animeEpisode == null) { continue; } var userRecord = animeEpisode.GetUserRecord(_jmmuser.JMMUserID); var isWatched = episode.ViewCount != null && episode.ViewCount > 0; var lastWatched = userRecord?.WatchedDate; if (userRecord?.WatchedCount == 0 && isWatched && episode.LastViewedAt != null) { lastWatched = FromUnixTime((long)episode.LastViewedAt); } SVR_VideoLocal video = animeEpisode.GetVideoLocals()?.FirstOrDefault(); if (video == null) { continue; } var alreadyWatched = animeEpisode.GetVideoLocals() .Where(x => x.GetAniDBFile() != null) .Any(x => x.GetAniDBFile().IsWatched > 0); if (alreadyWatched && !isWatched) { episode.Scrobble(); } if (isWatched && !alreadyWatched) { video.ToggleWatchedStatus(true, true, lastWatched, true, _jmmuser.JMMUserID, true, true); } } } } }
public override void ProcessCommand() { foreach (var section in PlexHelper.GetForUser(_jmmuser).GetDirectories().Where(d => ServerSettings.Plex_Libraries.Contains(d.Key))) { var allSeries = ((SVR_Directory)section).GetShows(); foreach (var series in allSeries) { var episodes = ((SVR_PlexLibrary)series)?.GetEpisodes(); if (episodes == null) { continue; } foreach (var ep in episodes) { var episode = (SVR_Episode)ep; var animeEpisode = episode.AnimeEpisode; if (animeEpisode == null) { continue; } var userRecord = animeEpisode.GetUserRecord(_jmmuser.JMMUserID); var isWatched = episode.ViewCount > 0; var lastWatched = userRecord.WatchedDate; if (userRecord.WatchedCount == 0 && isWatched && episode.LastViewedAt != null) { lastWatched = FromUnixTime((long)episode.LastViewedAt); } SVR_VideoLocal video = animeEpisode.GetVideoLocals()?.FirstOrDefault(); if (video == null) { continue; } var alreadyWatched = animeEpisode.GetVideoLocals() .Where(x => x.GetAniDBFile() != null) .Any(x => x.GetAniDBFile().IsWatched > 0); if (alreadyWatched && !isWatched) { episode.Scrobble(); } if (isWatched && !alreadyWatched) { video.ToggleWatchedStatus(true, true, lastWatched, true, _jmmuser.JMMUserID, true, true); } } } } }