refactor(controller, engine, sync, checker) Additional nullable checks

This commit is contained in:
lainon 2022-08-30 11:29:41 +03:00
commit 14e0219101
17 changed files with 31 additions and 31 deletions

View file

@ -99,7 +99,7 @@ namespace Ombi.Core.Engine
{ {
return new RequestEngineResult return new RequestEngineResult
{ {
ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue()).Message ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue())?.Message
}; };
} }

View file

@ -89,7 +89,7 @@ namespace Ombi.Core.Engine
{ {
return new RequestEngineResult 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 return new RequestEngineResult
{ {
ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message)).Message ErrorMessage = results.FirstOrDefault(x => !string.IsNullOrEmpty(x.Message))?.Message
}; };
} }

View file

@ -61,7 +61,7 @@ namespace Ombi.Core
if (images?.backdrops?.Any() ?? false) 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) if (images?.posters?.Any() ?? false)
{ {
@ -85,7 +85,7 @@ namespace Ombi.Core
} }
else else
{ {
return images.posters.Select(x => x.file_path).First(); return images?.posters.Select(x => x.file_path).First();
} }
} }

View file

@ -524,7 +524,7 @@ namespace Ombi.Core.Senders
if (pathId == 0) if (pathId == 0)
{ {
return rootFoldersResult.FirstOrDefault().path; return rootFoldersResult.FirstOrDefault()?.path;
} }
foreach (var r in rootFoldersResult.Where(r => r.id == pathId)) foreach (var r in rootFoldersResult.Where(r => r.id == pathId))

View file

@ -21,7 +21,7 @@ namespace Ombi.Mapping.Profiles
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.ExternalIds.ImdbId)) .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.TheTvDbId, opts => opts.MapFrom(src => src.ExternalIds.TvDbId))
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.networks.FirstOrDefault())) .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.Overview, opts => opts.MapFrom(src => src.overview))
.ForMember(dest => dest.Rating, .ForMember(dest => dest.Rating,
opts => opts.MapFrom(src => src.vote_average.ToString(CultureInfo.CurrentUICulture))) opts => opts.MapFrom(src => src.vote_average.ToString(CultureInfo.CurrentUICulture)))

View file

@ -167,7 +167,7 @@ namespace Ombi.Notifications
if (Alias.IsNullOrEmpty()) if (Alias.IsNullOrEmpty())
{ {
Alias = req?.RequestedUser?.Alias.HasValue() ?? false Alias = req?.RequestedUser?.Alias.HasValue() ?? false
? req.RequestedUser?.Alias ? req?.RequestedUser?.Alias
: req?.RequestedUser?.UserName; : req?.RequestedUser?.UserName;
} }

View file

@ -64,7 +64,7 @@ namespace Ombi.Schedule.Jobs.Emby
{ {
var has4kRequest = movie.Has4KRequest; var has4kRequest = movie.Has4KRequest;
EmbyContent embyContent = null; EmbyContent embyContent = null;
if (movie.TheMovieDbId > 0) if (movie?.TheMovieDbId > 0)
{ {
embyContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); embyContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString());
} }

View file

@ -179,7 +179,7 @@ namespace Ombi.Schedule.Jobs.Emby
Title = tvShow.Name, Title = tvShow.Name,
Type = MediaType.Series, Type = MediaType.Series,
EmbyId = tvShow.Id, EmbyId = tvShow.Id,
Url = EmbyHelper.GetEmbyMediaUrl(tvShow.Id, server?.ServerId, server.ServerHostname), Url = EmbyHelper.GetEmbyMediaUrl(tvShow.Id, server?.ServerId, server?.ServerHostname),
AddedAt = DateTime.UtcNow, AddedAt = DateTime.UtcNow,
}); });
} }
@ -284,7 +284,7 @@ namespace Ombi.Schedule.Jobs.Emby
else else
{ {
var movieHasChanged = false; 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}'"); _logger.LogDebug($"Updating existing movie '{movieInfo.Name}'");
MapEmbyContent(existingMovie, movieInfo, server, has4K, quality); 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){ 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.TheMovieDbId = movieInfo.ProviderIds?.Tmdb;
content.Title = movieInfo.Name; content.Title = movieInfo.Name;
content.Type = MediaType.Movie; content.Type = MediaType.Movie;
content.EmbyId = movieInfo.Id; 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.Quality = has4K ? null : quality;
content.Has4K = has4K; content.Has4K = has4K;
} }

View file

@ -89,7 +89,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin
{ {
var has4kRequest = movie.Has4KRequest; var has4kRequest = movie.Has4KRequest;
JellyfinContent jellyfinContent = null; JellyfinContent jellyfinContent = null;
if (movie.TheMovieDbId > 0) if (movie?.TheMovieDbId > 0)
{ {
jellyfinContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); jellyfinContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString());
} }

View file

@ -154,7 +154,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin
Title = tvShow.Name, Title = tvShow.Name,
Type = MediaType.Series, Type = MediaType.Series,
JellyfinId = tvShow.Id, JellyfinId = tvShow.Id,
Url = JellyfinHelper.GetJellyfinMediaUrl(tvShow.Id, server?.ServerId, server.ServerHostname), Url = JellyfinHelper.GetJellyfinMediaUrl(tvShow.Id, server?.ServerId, server?.ServerHostname),
AddedAt = DateTime.UtcNow AddedAt = DateTime.UtcNow
}); });
} }
@ -249,7 +249,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin
else else
{ {
var movieHasChanged = false; 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}'"); _logger.LogDebug($"Updating existing movie '{movieInfo.Name}'");
MapJellyfinMovie(existingMovie, movieInfo, server, has4K, quality); 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) 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.TheMovieDbId = movieInfo.ProviderIds?.Tmdb;
content.Title = movieInfo.Name; content.Title = movieInfo.Name;
content.Type = MediaType.Movie; content.Type = MediaType.Movie;
content.JellyfinId = movieInfo.Id; 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.Quality = has4K ? null : quality;
content.Has4K = has4K; content.Has4K = has4K;
} }

View file

@ -19,7 +19,7 @@ namespace Ombi.Schedule.Jobs.Ombi
{ {
sb.Append("<tr>"); sb.Append("<tr>");
sb.Append("<td class=\"poster-container\" width=\"150\" height=\"225\" valign=\"top\" style=\"ont-family: sans-serif; font-size: 14px; vertical-align: top; width: 150px; min-width: 150px; height: 225px; max-height: 225px; min-height: 225px; \">"); sb.Append("<td class=\"poster-container\" width=\"150\" height=\"225\" valign=\"top\" style=\"ont-family: sans-serif; font-size: 14px; vertical-align: top; width: 150px; min-width: 150px; height: 225px; max-height: 225px; min-height: 225px; \">");
sb.AppendFormat("<table class=\"poster-img\" width=\"100%\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; \">", url); sb.Append("<table class=\"poster-img\" width=\"100%\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; \">");
} }
protected virtual void AddMediaServerUrl(string mediaurl, string url) protected virtual void AddMediaServerUrl(string mediaurl, string url)

View file

@ -115,7 +115,7 @@ namespace Ombi.Schedule.Jobs.Plex
var resultCount = settings.EpisodeBatchSize == 0 ? 150 : settings.EpisodeBatchSize; var resultCount = settings.EpisodeBatchSize == 0 ? 150 : settings.EpisodeBatchSize;
var currentEpisodes = _repo.GetAllEpisodes().Cast<PlexEpisode>(); var currentEpisodes = _repo.GetAllEpisodes().Cast<PlexEpisode>();
var episodes = await _api.GetAllEpisodes(settings.PlexAuthToken, settings.FullUri, section.key, currentPosition, resultCount); 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, // Delete all the episodes because we cannot uniquly match an episode to series every time,
// see comment below. // see comment below.

View file

@ -99,8 +99,8 @@ namespace Ombi.Schedule.Jobs.Plex
var newUser = new OmbiUser var newUser = new OmbiUser
{ {
UserType = UserType.PlexUser, UserType = UserType.PlexUser,
UserName = plexUser?.Username ?? plexUser.Id, UserName = plexUser?.Username ?? plexUser?.Id,
ProviderUserId = plexUser.Id, ProviderUserId = plexUser?.Id,
Email = plexUser?.Email ?? string.Empty, Email = plexUser?.Email ?? string.Empty,
Alias = string.Empty, Alias = string.Empty,
MovieRequestLimit = userManagementSettings.MovieRequestLimit, MovieRequestLimit = userManagementSettings.MovieRequestLimit,

View file

@ -104,12 +104,12 @@ namespace Ombi.Controllers.V1.External
Items = new List<MediaFolders>() Items = new List<MediaFolders>()
}; };
foreach(var folder in result) foreach (var folder in result)
{ {
var toAdd = new MediaFolders var toAdd = new MediaFolders
{ {
Name = folder.Name, Name = folder?.Name,
Id = folder.ItemId, Id = folder?.ItemId,
ServerId = server.ServerId ServerId = server.ServerId
}; };

View file

@ -82,8 +82,8 @@ namespace Ombi.Controllers.V1.External
{ {
var toAdd = new MediaFolders var toAdd = new MediaFolders
{ {
Name = folder.Name, Name = folder?.Name,
Id = folder.ItemId, Id = folder?.ItemId,
ServerId = server.ServerId ServerId = server.ServerId
}; };

View file

@ -528,7 +528,7 @@ namespace Ombi.Controllers.V1.External
var status = await LidarrApi.Status(settings.ApiKey, settings.FullUri); var status = await LidarrApi.Status(settings.ApiKey, settings.FullUri);
return new TesterResultModel 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 ExpectedSubDir = status?.urlBase
}; };
} }
@ -551,7 +551,7 @@ namespace Ombi.Controllers.V1.External
var status = await WhatsAppApi.SendMessage(new WhatsAppModel { var status = await WhatsAppApi.SendMessage(new WhatsAppModel {
From = settings.From, From = settings.From,
Message = "This is a test from Ombi!", 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); }, settings.AccountSid, settings.AuthToken);
if (status.HasValue()) if (status.HasValue())
{ {

View file

@ -317,10 +317,10 @@ namespace Ombi.Controllers.V1
? issue.UserReported.Email ? issue.UserReported.Email
: string.Empty, : string.Empty,
AdditionalInformation = $"{issue.Subject} | {issue.Description}", 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); await _notification.Notify(notificationModel);
} }