mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-22 14:13:36 -07:00
refactor(controller, engine, sync, checker) Additional nullable checks
This commit is contained in:
parent
bce6f4c2f3
commit
14e0219101
17 changed files with 31 additions and 31 deletions
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue