public async Task <JellyfinSettings> SignIn([FromBody] JellyfinSettings request) { // Check if settings exist since we allow anon... var settings = await JellyfinSettings.GetSettingsAsync(); if (settings?.Servers?.Any() ?? false) { return(null); } var client = await JellyfinApi.CreateClient(); request.Enable = true; var firstServer = request.Servers.FirstOrDefault(); // Test that we can connect var result = await client.GetUsers(firstServer.FullUri, firstServer.ApiKey); if (result != null && result.Any()) { firstServer.AdministratorId = result.FirstOrDefault(x => x.Policy.IsAdministrator)?.Id ?? string.Empty; await JellyfinSettings.SaveSettingsAsync(request); return(request); } return(null); }
private async Task StartJellyfinMovies(JellyfinSettings settings) { var allMovies = await _jellyfinRepo.GetAll().Where(x => x.Type == JellyfinMediaType.Movie && (x.TheMovieDbId == null || x.ImdbId == null)).ToListAsync(); foreach (var movie in allMovies) { movie.ImdbId.HasValue(); movie.TheMovieDbId.HasValue(); // Movies don't really use TheTvDb // Check if it even has 1 ID if (!movie.HasImdb && !movie.HasTheMovieDb) { // Ok this sucks, // The only think I can think that has happened is that we scanned Jellyfin before Jellyfin has got the metadata // So let's recheck jellyfin to see if they have got the metadata now // // Yeah your right that does suck - Future Jamie _log.LogInformation($"Movie {movie.Title} does not have a ImdbId or TheMovieDbId, so rechecking jellyfin"); foreach (var server in settings.Servers) { _log.LogInformation($"Checking server {server.Name} for upto date metadata"); var movieInfo = await JellyfinApi.GetMovieInformation(movie.JellyfinId, server.ApiKey, server.AdministratorId, server.FullUri); if (movieInfo.ProviderIds?.Imdb.HasValue() ?? false) { movie.ImdbId = movieInfo.ProviderIds.Imdb; } if (movieInfo.ProviderIds?.Tmdb.HasValue() ?? false) { movie.TheMovieDbId = movieInfo.ProviderIds.Tmdb; } } } if (!movie.HasImdb) { var imdbId = await GetImdbId(movie.HasTheMovieDb, false, movie.Title, movie.TheMovieDbId, string.Empty, RequestType.Movie); movie.ImdbId = imdbId; _jellyfinRepo.UpdateWithoutSave(movie); } if (!movie.HasTheMovieDb) { var id = await GetTheMovieDbId(false, movie.HasImdb, string.Empty, movie.ImdbId, movie.Title, true); movie.TheMovieDbId = id; _jellyfinRepo.UpdateWithoutSave(movie); } await _jellyfinRepo.SaveChangesAsync(); } }
public async Task <bool> JellyfinSettings([FromBody] JellyfinSettings jellyfin) { if (jellyfin.Enable) { var client = await _jellyfinApi.CreateClient(); foreach (var server in jellyfin.Servers) { var users = await client.GetUsers(server.FullUri, server.ApiKey); var admin = users.FirstOrDefault(x => x.Policy.IsAdministrator); server.AdministratorId = admin?.Id; } } var result = await Save(jellyfin); if (result) { await OmbiQuartz.TriggerJob(nameof(IJellyfinContentSync), "Jellyfin"); } return(result); }
public IJellyfinApi CreateClient(JellyfinSettings settings) { return(new JellyfinApi(_api)); }
private async Task StartJellyfin(JellyfinSettings s) { JellyfinApi = _jellyfinApiFactory.CreateClient(s); await StartJellyfinMovies(s); await StartJellyfinTv(); }
private async Task StartServerCache(JellyfinServers server, JellyfinSettings settings) { if (!ValidateSettings(server)) { return; } //await _repo.ExecuteSql("DELETE FROM JellyfinEpisode"); //await _repo.ExecuteSql("DELETE FROM JellyfinContent"); var movies = await Api.GetAllMovies(server.ApiKey, 0, 200, server.AdministratorId, server.FullUri); var totalCount = movies.TotalRecordCount; var processed = 1; var mediaToAdd = new HashSet <JellyfinContent>(); while (processed < totalCount) { foreach (var movie in movies.Items) { if (movie.Type.Equals("boxset", StringComparison.InvariantCultureIgnoreCase)) { var movieInfo = await Api.GetCollection(movie.Id, server.ApiKey, server.AdministratorId, server.FullUri); foreach (var item in movieInfo.Items) { await ProcessMovies(item, mediaToAdd, server); } processed++; } else { processed++; // Regular movie await ProcessMovies(movie, mediaToAdd, server); } } // Get the next batch movies = await Api.GetAllMovies(server.ApiKey, processed, 200, server.AdministratorId, server.FullUri); await _repo.AddRange(mediaToAdd); mediaToAdd.Clear(); } // TV Time var tv = await Api.GetAllShows(server.ApiKey, 0, 200, server.AdministratorId, server.FullUri); var totalTv = tv.TotalRecordCount; processed = 1; while (processed < totalTv) { foreach (var tvShow in tv.Items) { try { processed++; if (string.IsNullOrEmpty(tvShow.ProviderIds?.Tvdb)) { _logger.LogInformation("Provider Id on tv {0} is null", tvShow.Name); continue; } var existingTv = await _repo.GetByJellyfinId(tvShow.Id); if (existingTv == null) { _logger.LogDebug("Adding new TV Show {0}", tvShow.Name); mediaToAdd.Add(new JellyfinContent { TvDbId = tvShow.ProviderIds?.Tvdb, ImdbId = tvShow.ProviderIds?.Imdb, TheMovieDbId = tvShow.ProviderIds?.Tmdb, Title = tvShow.Name, Type = JellyfinMediaType.Series, JellyfinId = tvShow.Id, Url = JellyfinHelper.GetJellyfinMediaUrl(tvShow.Id, server?.ServerId, server.ServerHostname), AddedAt = DateTime.UtcNow }); } else { _logger.LogDebug("We already have TV Show {0}", tvShow.Name); } } catch (Exception) { throw; } } // Get the next batch tv = await Api.GetAllShows(server.ApiKey, processed, 200, server.AdministratorId, server.FullUri); await _repo.AddRange(mediaToAdd); mediaToAdd.Clear(); } if (mediaToAdd.Any()) { await _repo.AddRange(mediaToAdd); } }