private async Task GetEpisodes(PlexServers settings, Directory section) { var currentPosition = 0; var resultCount = settings.EpisodeBatchSize == 0 ? 150 : settings.EpisodeBatchSize; var currentEpisodes = _repo.GetAllEpisodes(); var episodes = await _api.GetAllEpisodes(settings.PlexAuthToken, settings.FullUri, section.key, currentPosition, resultCount); _log.LogInformation(LoggingEvents.PlexEpisodeCacher, $"Total Epsiodes found for {episodes.MediaContainer.librarySectionTitle} = {episodes.MediaContainer.totalSize}"); // Delete all the episodes because we cannot uniquly match an episode to series every time, // see comment below. // 12.03.2017 - I think we should be able to match them now //await _repo.ExecuteSql("DELETE FROM PlexEpisode"); await ProcessEpsiodes(episodes?.MediaContainer?.Metadata ?? new Metadata[] { }, currentEpisodes); currentPosition += resultCount; while (currentPosition < episodes.MediaContainer.totalSize) { var ep = await _api.GetAllEpisodes(settings.PlexAuthToken, settings.FullUri, section.key, currentPosition, resultCount); await ProcessEpsiodes(ep?.MediaContainer?.Metadata ?? new Metadata[] { }, currentEpisodes); _log.LogInformation(LoggingEvents.PlexEpisodeCacher, $"Processed {resultCount} more episodes. Total Remaining {episodes.MediaContainer.totalSize - currentPosition}"); currentPosition += resultCount; } // we have now finished. _log.LogInformation(LoggingEvents.PlexEpisodeCacher, "We have finished caching the episodes."); await _repo.SaveChangesAsync(); }
private async Task StartPlexTv() { var allTv = _plexRepo.GetAll().Where(x => x.Type == PlexMediaTypeEntity.Show && (!x.TheMovieDbId.HasValue() || !x.ImdbId.HasValue() || !x.TvDbId.HasValue())); var tvCount = 0; foreach (var show in allTv) { var hasImdb = show.ImdbId.HasValue(); var hasTheMovieDb = show.TheMovieDbId.HasValue(); var hasTvDbId = show.TvDbId.HasValue(); if (!hasTheMovieDb) { var id = await GetTheMovieDbId(hasTvDbId, hasImdb, show.TvDbId, show.ImdbId, show.Title); show.TheMovieDbId = id; } if (!hasImdb) { var id = await GetImdbId(hasTheMovieDb, hasTvDbId, show.Title, show.TheMovieDbId, show.TvDbId); show.ImdbId = id; _plexRepo.UpdateWithoutSave(show); } if (!hasTvDbId) { var id = await GetTvDbId(hasTheMovieDb, hasImdb, show.TheMovieDbId, show.ImdbId, show.Title); show.TvDbId = id; _plexRepo.UpdateWithoutSave(show); } tvCount++; if (tvCount >= 20) { await _plexRepo.SaveChangesAsync(); tvCount = 0; } } await _plexRepo.SaveChangesAsync(); }
private async Task ProcessMovies() { // Get all non available var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available).AsNoTracking(); var itemsForAvailbility = new List <AvailabilityModel>(); foreach (var movie in movies) { if (movie.Available) { return; } PlexServerContent item = null; if (movie.ImdbId.HasValue()) { item = await _repo.Get(movie.ImdbId); } if (item == null) { if (movie.TheMovieDbId.ToString().HasValue()) { item = await _repo.Get(movie.TheMovieDbId.ToString()); } } if (item == null) { // We don't yet have this continue; } _log.LogInformation("[PAC] - Movie request {0} is now available, sending notification", $"{movie.Title} - {movie.Id}"); itemsForAvailbility.Add(new AvailabilityModel { Id = movie.Id, RequestedUser = movie.RequestedUser != null ? movie.RequestedUser.Email : string.Empty }); } foreach (var i in itemsForAvailbility) { await _movieRepo.MarkAsAvailable(i.Id); await _notificationService.Notify(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = i.Id, RequestType = RequestType.Movie, Recipient = i.RequestedUser }); } await _repo.SaveChangesAsync(); }
private async Task StartPlexTv(IQueryable <PlexServerContent> allTv) { var tvCount = 0; foreach (var show in allTv) { var hasImdb = show.ImdbId.HasValue(); var hasTheMovieDb = show.TheMovieDbId.HasValue(); var hasTvDbId = show.TvDbId.HasValue(); if (!hasTheMovieDb) { var id = await GetTheMovieDbId(hasTvDbId, hasImdb, show.TvDbId, show.ImdbId, show.Title, false); show.TheMovieDbId = id; } if (!hasImdb) { var id = await GetImdbId(hasTheMovieDb, hasTvDbId, show.Title, show.TheMovieDbId, show.TvDbId); show.ImdbId = id; _plexRepo.UpdateWithoutSave(show); } if (!hasTvDbId) { var id = await GetTvDbId(hasTheMovieDb, hasImdb, show.TheMovieDbId, show.ImdbId, show.Title); show.TvDbId = id; _plexRepo.UpdateWithoutSave(show); } tvCount++; if (tvCount >= 75) { await _plexRepo.SaveChangesAsync(); tvCount = 0; } } await _plexRepo.SaveChangesAsync(); }
private async Task StartPlexTv(List <PlexServerContent> allTv) { foreach (var show in allTv) { // Just double check there is no associated request id if (show.RequestId.HasValue) { continue; } var hasImdb = show.ImdbId.HasValue(); var hasTheMovieDb = show.TheMovieDbId.HasValue(); var hasTvDbId = show.TvDbId.HasValue(); if (!hasTheMovieDb) { var id = await GetTheMovieDbId(hasTvDbId, hasImdb, show.TvDbId, show.ImdbId, show.Title, false); show.TheMovieDbId = id; } if (!hasImdb) { var id = await GetImdbId(hasTheMovieDb, hasTvDbId, show.Title, show.TheMovieDbId, show.TvDbId, RequestType.TvShow); show.ImdbId = id; _plexRepo.UpdateWithoutSave(show); } if (!hasTvDbId) { var id = await GetTvDbId(hasTheMovieDb, hasImdb, show.TheMovieDbId, show.ImdbId, show.Title); show.TvDbId = id; _plexRepo.UpdateWithoutSave(show); } await _plexRepo.SaveChangesAsync(); } }
private async Task ProcessMovies() { // Get all non available var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available); foreach (var movie in movies) { PlexServerContent item = null; if (movie.ImdbId.HasValue()) { item = await _repo.Get(movie.ImdbId); } if (item == null) { if (movie.TheMovieDbId.ToString().HasValue()) { item = await _repo.Get(movie.TheMovieDbId.ToString()); } } if (item == null) { // We don't yet have this continue; } movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; item.RequestId = movie.Id; _log.LogInformation("[PAC] - Movie request {0} is now available, sending notification", $"{movie.Title} - {movie.Id}"); await _notificationService.Notify(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = movie.Id, RequestType = RequestType.Movie, Recipient = movie.RequestedUser != null ? movie.RequestedUser.Email : string.Empty }); } await _movieRepo.Save(); await _repo.SaveChangesAsync(); }