From 14e0219101b1b0e0c28ff3b9c257745f6f39f33e Mon Sep 17 00:00:00 2001 From: lainon Date: Tue, 30 Aug 2022 11:29:41 +0300 Subject: [PATCH] refactor(controller, engine, sync, checker) Additional nullable checks --- src/Ombi.Core/Engine/MusicRequestEngine.cs | 2 +- src/Ombi.Core/Engine/TvRequestEngine.cs | 4 ++-- src/Ombi.Core/ImageService.cs | 4 ++-- src/Ombi.Core/Senders/TvSender.cs | 2 +- src/Ombi.Mapping/Profiles/TvProfileV2.cs | 2 +- src/Ombi.Notifications/NotificationMessageCurlys.cs | 2 +- src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs | 2 +- src/Ombi.Schedule/Jobs/Emby/EmbyContentSync.cs | 8 ++++---- .../Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs | 2 +- src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs | 8 ++++---- src/Ombi.Schedule/Jobs/Ombi/HtmlTemplateGenerator.cs | 2 +- src/Ombi.Schedule/Jobs/Plex/PlexEpisodeSync.cs | 2 +- src/Ombi.Schedule/Jobs/Plex/PlexUserImporter.cs | 4 ++-- src/Ombi/Controllers/V1/External/EmbyController.cs | 6 +++--- src/Ombi/Controllers/V1/External/JellyfinController.cs | 4 ++-- src/Ombi/Controllers/V1/External/TesterController.cs | 4 ++-- src/Ombi/Controllers/V1/IssuesController.cs | 4 ++-- 17 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/Ombi.Core/Engine/MusicRequestEngine.cs b/src/Ombi.Core/Engine/MusicRequestEngine.cs index 67caa81a2..b3c0f8f67 100644 --- a/src/Ombi.Core/Engine/MusicRequestEngine.cs +++ b/src/Ombi.Core/Engine/MusicRequestEngine.cs @@ -99,7 +99,7 @@ namespace Ombi.Core.Engine { return new RequestEngineResult { - ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue()).Message + ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue())?.Message }; } diff --git a/src/Ombi.Core/Engine/TvRequestEngine.cs b/src/Ombi.Core/Engine/TvRequestEngine.cs index 8ccc6d17e..7cd04c2da 100644 --- a/src/Ombi.Core/Engine/TvRequestEngine.cs +++ b/src/Ombi.Core/Engine/TvRequestEngine.cs @@ -89,7 +89,7 @@ namespace Ombi.Core.Engine { return new RequestEngineResult { - ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message)).Message + ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message))?.Message }; } @@ -198,7 +198,7 @@ namespace Ombi.Core.Engine { return new RequestEngineResult { - ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message)).Message + ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message))?.Message }; } diff --git a/src/Ombi.Core/ImageService.cs b/src/Ombi.Core/ImageService.cs index 9df9ef6e1..90c411c13 100644 --- a/src/Ombi.Core/ImageService.cs +++ b/src/Ombi.Core/ImageService.cs @@ -61,7 +61,7 @@ namespace Ombi.Core if (images?.backdrops?.Any() ?? false) { - return images.backdrops.Select(x => x.file_path).FirstOrDefault(); + return images?.backdrops.Select(x => x.file_path).FirstOrDefault(); } if (images?.posters?.Any() ?? false) { @@ -85,7 +85,7 @@ namespace Ombi.Core } else { - return images.posters.Select(x => x.file_path).First(); + return images?.posters.Select(x => x.file_path).First(); } } diff --git a/src/Ombi.Core/Senders/TvSender.cs b/src/Ombi.Core/Senders/TvSender.cs index 22f6aadcd..fd9cda22b 100644 --- a/src/Ombi.Core/Senders/TvSender.cs +++ b/src/Ombi.Core/Senders/TvSender.cs @@ -524,7 +524,7 @@ namespace Ombi.Core.Senders if (pathId == 0) { - return rootFoldersResult.FirstOrDefault().path; + return rootFoldersResult.FirstOrDefault()?.path; } foreach (var r in rootFoldersResult.Where(r => r.id == pathId)) diff --git a/src/Ombi.Mapping/Profiles/TvProfileV2.cs b/src/Ombi.Mapping/Profiles/TvProfileV2.cs index 09021efb2..ba221582e 100644 --- a/src/Ombi.Mapping/Profiles/TvProfileV2.cs +++ b/src/Ombi.Mapping/Profiles/TvProfileV2.cs @@ -21,7 +21,7 @@ namespace Ombi.Mapping.Profiles .ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.ExternalIds.ImdbId)) .ForMember(dest => dest.TheTvDbId, opts => opts.MapFrom(src => src.ExternalIds.TvDbId)) .ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.networks.FirstOrDefault())) - .ForMember(dest => dest.NetworkId, opts => opts.MapFrom(src => src.networks.FirstOrDefault().id)) + .ForMember(dest => dest.NetworkId, opts => opts.MapFrom(src => src.networks.FirstOrDefault()?.id)) .ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.overview)) .ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.vote_average.ToString(CultureInfo.CurrentUICulture))) diff --git a/src/Ombi.Notifications/NotificationMessageCurlys.cs b/src/Ombi.Notifications/NotificationMessageCurlys.cs index 7696c9c16..3c7857f8c 100644 --- a/src/Ombi.Notifications/NotificationMessageCurlys.cs +++ b/src/Ombi.Notifications/NotificationMessageCurlys.cs @@ -167,7 +167,7 @@ namespace Ombi.Notifications if (Alias.IsNullOrEmpty()) { Alias = req?.RequestedUser?.Alias.HasValue() ?? false - ? req.RequestedUser?.Alias + ? req?.RequestedUser?.Alias : req?.RequestedUser?.UserName; } diff --git a/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs b/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs index 8e8b75e45..67ed8b97a 100644 --- a/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs @@ -64,7 +64,7 @@ namespace Ombi.Schedule.Jobs.Emby { var has4kRequest = movie.Has4KRequest; EmbyContent embyContent = null; - if (movie.TheMovieDbId > 0) + if (movie?.TheMovieDbId > 0) { embyContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); } diff --git a/src/Ombi.Schedule/Jobs/Emby/EmbyContentSync.cs b/src/Ombi.Schedule/Jobs/Emby/EmbyContentSync.cs index 27cdf0f3a..1da54e367 100644 --- a/src/Ombi.Schedule/Jobs/Emby/EmbyContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Emby/EmbyContentSync.cs @@ -179,7 +179,7 @@ namespace Ombi.Schedule.Jobs.Emby Title = tvShow.Name, Type = MediaType.Series, EmbyId = tvShow.Id, - Url = EmbyHelper.GetEmbyMediaUrl(tvShow.Id, server?.ServerId, server.ServerHostname), + Url = EmbyHelper.GetEmbyMediaUrl(tvShow.Id, server?.ServerId, server?.ServerHostname), AddedAt = DateTime.UtcNow, }); } @@ -284,7 +284,7 @@ namespace Ombi.Schedule.Jobs.Emby else { var movieHasChanged = false; - if (existingMovie.ImdbId != movieInfo.ProviderIds.Imdb || existingMovie.TheMovieDbId != movieInfo.ProviderIds.Tmdb) + if (existingMovie?.ImdbId != movieInfo.ProviderIds.Imdb || existingMovie?.TheMovieDbId != movieInfo.ProviderIds.Tmdb) { _logger.LogDebug($"Updating existing movie '{movieInfo.Name}'"); MapEmbyContent(existingMovie, movieInfo, server, has4K, quality); @@ -315,12 +315,12 @@ namespace Ombi.Schedule.Jobs.Emby } private void MapEmbyContent(EmbyContent content, EmbyMovie movieInfo, EmbyServers server, bool has4K, string quality){ - content.ImdbId = movieInfo.ProviderIds.Imdb; + content.ImdbId = movieInfo.ProviderIds?.Imdb; content.TheMovieDbId = movieInfo.ProviderIds?.Tmdb; content.Title = movieInfo.Name; content.Type = MediaType.Movie; content.EmbyId = movieInfo.Id; - content.Url = EmbyHelper.GetEmbyMediaUrl(movieInfo.Id, server?.ServerId, server.ServerHostname); + content.Url = EmbyHelper.GetEmbyMediaUrl(movieInfo.Id, server?.ServerId, server?.ServerHostname); content.Quality = has4K ? null : quality; content.Has4K = has4K; } diff --git a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs index 79eb5d6a4..7369e699b 100644 --- a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs @@ -89,7 +89,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin { var has4kRequest = movie.Has4KRequest; JellyfinContent jellyfinContent = null; - if (movie.TheMovieDbId > 0) + if (movie?.TheMovieDbId > 0) { jellyfinContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); } diff --git a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs index 5519b3413..845d2fa83 100644 --- a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs @@ -154,7 +154,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin Title = tvShow.Name, Type = MediaType.Series, JellyfinId = tvShow.Id, - Url = JellyfinHelper.GetJellyfinMediaUrl(tvShow.Id, server?.ServerId, server.ServerHostname), + Url = JellyfinHelper.GetJellyfinMediaUrl(tvShow.Id, server?.ServerId, server?.ServerHostname), AddedAt = DateTime.UtcNow }); } @@ -249,7 +249,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin else { var movieHasChanged = false; - if (existingMovie.ImdbId != movieInfo.ProviderIds.Imdb || existingMovie.TheMovieDbId != movieInfo.ProviderIds.Tmdb) + if (existingMovie?.ImdbId != movieInfo.ProviderIds.Imdb || existingMovie?.TheMovieDbId != movieInfo.ProviderIds.Tmdb) { _logger.LogDebug($"Updating existing movie '{movieInfo.Name}'"); MapJellyfinMovie(existingMovie, movieInfo, server, has4K, quality); @@ -282,12 +282,12 @@ namespace Ombi.Schedule.Jobs.Jellyfin private void MapJellyfinMovie(JellyfinContent content, JellyfinMovie movieInfo, JellyfinServers server, bool has4K, string quality) { - content.ImdbId = movieInfo.ProviderIds.Imdb; + content.ImdbId = movieInfo.ProviderIds?.Imdb; content.TheMovieDbId = movieInfo.ProviderIds?.Tmdb; content.Title = movieInfo.Name; content.Type = MediaType.Movie; content.JellyfinId = movieInfo.Id; - content.Url = JellyfinHelper.GetJellyfinMediaUrl(movieInfo.Id, server?.ServerId, server.ServerHostname); + content.Url = JellyfinHelper.GetJellyfinMediaUrl(movieInfo.Id, server?.ServerId, server?.ServerHostname); content.Quality = has4K ? null : quality; content.Has4K = has4K; } diff --git a/src/Ombi.Schedule/Jobs/Ombi/HtmlTemplateGenerator.cs b/src/Ombi.Schedule/Jobs/Ombi/HtmlTemplateGenerator.cs index 9d49fe2f1..4a77ce295 100644 --- a/src/Ombi.Schedule/Jobs/Ombi/HtmlTemplateGenerator.cs +++ b/src/Ombi.Schedule/Jobs/Ombi/HtmlTemplateGenerator.cs @@ -19,7 +19,7 @@ namespace Ombi.Schedule.Jobs.Ombi { sb.Append(""); sb.Append(""); - sb.AppendFormat("", url); + sb.Append("
"); } protected virtual void AddMediaServerUrl(string mediaurl, string url) diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexEpisodeSync.cs b/src/Ombi.Schedule/Jobs/Plex/PlexEpisodeSync.cs index c17af088c..d3e73fdf5 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexEpisodeSync.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexEpisodeSync.cs @@ -115,7 +115,7 @@ namespace Ombi.Schedule.Jobs.Plex var resultCount = settings.EpisodeBatchSize == 0 ? 150 : settings.EpisodeBatchSize; var currentEpisodes = _repo.GetAllEpisodes().Cast(); 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}"); + _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. diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexUserImporter.cs b/src/Ombi.Schedule/Jobs/Plex/PlexUserImporter.cs index 56872c1a8..da9ca65c7 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexUserImporter.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexUserImporter.cs @@ -99,8 +99,8 @@ namespace Ombi.Schedule.Jobs.Plex var newUser = new OmbiUser { UserType = UserType.PlexUser, - UserName = plexUser?.Username ?? plexUser.Id, - ProviderUserId = plexUser.Id, + UserName = plexUser?.Username ?? plexUser?.Id, + ProviderUserId = plexUser?.Id, Email = plexUser?.Email ?? string.Empty, Alias = string.Empty, MovieRequestLimit = userManagementSettings.MovieRequestLimit, diff --git a/src/Ombi/Controllers/V1/External/EmbyController.cs b/src/Ombi/Controllers/V1/External/EmbyController.cs index cc7c6fc47..04c06dc12 100644 --- a/src/Ombi/Controllers/V1/External/EmbyController.cs +++ b/src/Ombi/Controllers/V1/External/EmbyController.cs @@ -104,12 +104,12 @@ namespace Ombi.Controllers.V1.External Items = new List() }; - foreach(var folder in result) + foreach (var folder in result) { var toAdd = new MediaFolders { - Name = folder.Name, - Id = folder.ItemId, + Name = folder?.Name, + Id = folder?.ItemId, ServerId = server.ServerId }; diff --git a/src/Ombi/Controllers/V1/External/JellyfinController.cs b/src/Ombi/Controllers/V1/External/JellyfinController.cs index 275ef30f6..4e295eac5 100644 --- a/src/Ombi/Controllers/V1/External/JellyfinController.cs +++ b/src/Ombi/Controllers/V1/External/JellyfinController.cs @@ -82,8 +82,8 @@ namespace Ombi.Controllers.V1.External { var toAdd = new MediaFolders { - Name = folder.Name, - Id = folder.ItemId, + Name = folder?.Name, + Id = folder?.ItemId, ServerId = server.ServerId }; diff --git a/src/Ombi/Controllers/V1/External/TesterController.cs b/src/Ombi/Controllers/V1/External/TesterController.cs index 6ee0ebe22..340948aad 100644 --- a/src/Ombi/Controllers/V1/External/TesterController.cs +++ b/src/Ombi/Controllers/V1/External/TesterController.cs @@ -528,7 +528,7 @@ namespace Ombi.Controllers.V1.External var status = await LidarrApi.Status(settings.ApiKey, settings.FullUri); return new TesterResultModel { - IsValid = status?.urlBase == settings.SubDir || string.IsNullOrEmpty(status.urlBase) && string.IsNullOrEmpty(settings.SubDir), + IsValid = status?.urlBase == settings.SubDir || string.IsNullOrEmpty(status?.urlBase) && string.IsNullOrEmpty(settings.SubDir), ExpectedSubDir = status?.urlBase }; } @@ -551,7 +551,7 @@ namespace Ombi.Controllers.V1.External var status = await WhatsAppApi.SendMessage(new WhatsAppModel { From = settings.From, Message = "This is a test from Ombi!", - To = user.UserNotificationPreferences.FirstOrDefault(x => x.Agent == NotificationAgent.WhatsApp).Value + To = user.UserNotificationPreferences.FirstOrDefault(x => x.Agent == NotificationAgent.WhatsApp)?.Value }, settings.AccountSid, settings.AuthToken); if (status.HasValue()) { diff --git a/src/Ombi/Controllers/V1/IssuesController.cs b/src/Ombi/Controllers/V1/IssuesController.cs index 2828b5ef2..503d2e661 100644 --- a/src/Ombi/Controllers/V1/IssuesController.cs +++ b/src/Ombi/Controllers/V1/IssuesController.cs @@ -317,10 +317,10 @@ namespace Ombi.Controllers.V1 ? issue.UserReported.Email : string.Empty, AdditionalInformation = $"{issue.Subject} | {issue.Description}", - UserId = issue.UserReported.Id, // This is a resolved notification, so needs to go to the user who raised it + UserId = issue.UserReported?.Id, // This is a resolved notification, so needs to go to the user who raised it }; - AddIssueNotificationSubstitutes(notificationModel, issue, issue.UserReported?.UserName ?? string.Empty, issue.UserReported.UserAlias); + AddIssueNotificationSubstitutes(notificationModel, issue, issue.UserReported?.UserName ?? string.Empty, issue.UserReported?.UserAlias); await _notification.Notify(notificationModel); }