mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-19 04:49:33 -07:00
commit
4d8f0a1f37
10 changed files with 39 additions and 81 deletions
|
@ -33,6 +33,14 @@ namespace Ombi.Core.Helpers
|
||||||
public async Task<TvShowRequestBuilderV2> GetShowInfo(int id)
|
public async Task<TvShowRequestBuilderV2> GetShowInfo(int id)
|
||||||
{
|
{
|
||||||
TheMovieDbRecord = await MovieDbApi.GetTVInfo(id.ToString());
|
TheMovieDbRecord = await MovieDbApi.GetTVInfo(id.ToString());
|
||||||
|
|
||||||
|
// Remove 'Specials Season'
|
||||||
|
var firstSeason = TheMovieDbRecord.seasons.OrderBy(x => x.season_number).FirstOrDefault();
|
||||||
|
if (firstSeason?.season_number == 0)
|
||||||
|
{
|
||||||
|
TheMovieDbRecord.seasons.Remove(firstSeason);
|
||||||
|
}
|
||||||
|
|
||||||
BackdropPath = TheMovieDbRecord.Images?.Backdrops?.OrderBy(x => x.VoteCount).ThenBy(x => x.VoteAverage).FirstOrDefault()?.FilePath; ;
|
BackdropPath = TheMovieDbRecord.Images?.Backdrops?.OrderBy(x => x.VoteCount).ThenBy(x => x.VoteAverage).FirstOrDefault()?.FilePath; ;
|
||||||
|
|
||||||
DateTime.TryParse(TheMovieDbRecord.first_air_date, out var dt);
|
DateTime.TryParse(TheMovieDbRecord.first_air_date, out var dt);
|
||||||
|
@ -149,6 +157,10 @@ namespace Ombi.Core.Helpers
|
||||||
else if (tv.FirstSeason)
|
else if (tv.FirstSeason)
|
||||||
{
|
{
|
||||||
var first = allEpisodes.OrderBy(x => x.season_number).FirstOrDefault();
|
var first = allEpisodes.OrderBy(x => x.season_number).FirstOrDefault();
|
||||||
|
if (first.season_number == 0)
|
||||||
|
{
|
||||||
|
first = allEpisodes.OrderBy(x => x.season_number).Skip(1).FirstOrDefault();
|
||||||
|
}
|
||||||
var episodesRequests = new List<EpisodeRequests>();
|
var episodesRequests = new List<EpisodeRequests>();
|
||||||
foreach (var ep in allEpisodes)
|
foreach (var ep in allEpisodes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -125,7 +125,6 @@ namespace Ombi.Core.Senders
|
||||||
|
|
||||||
private async Task<SenderResult> SendToRadarr(MovieRequests model, RadarrSettings settings)
|
private async Task<SenderResult> SendToRadarr(MovieRequests model, RadarrSettings settings)
|
||||||
{
|
{
|
||||||
var v3 = settings.V3;
|
|
||||||
var qualityToUse = int.Parse(settings.DefaultQualityProfile);
|
var qualityToUse = int.Parse(settings.DefaultQualityProfile);
|
||||||
|
|
||||||
var rootFolderPath = settings.DefaultRootPath;
|
var rootFolderPath = settings.DefaultRootPath;
|
||||||
|
@ -159,30 +158,16 @@ namespace Ombi.Core.Senders
|
||||||
|
|
||||||
List<MovieResponse> movies;
|
List<MovieResponse> movies;
|
||||||
// Check if the movie already exists? Since it could be unmonitored
|
// Check if the movie already exists? Since it could be unmonitored
|
||||||
if (settings.V3)
|
|
||||||
{
|
movies = await _radarrV3Api.GetMovies(settings.ApiKey, settings.FullUri);
|
||||||
movies = await _radarrV3Api.GetMovies(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
movies = await _radarrV2Api.GetMovies(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
var existingMovie = movies.FirstOrDefault(x => x.tmdbId == model.TheMovieDbId);
|
var existingMovie = movies.FirstOrDefault(x => x.tmdbId == model.TheMovieDbId);
|
||||||
if (existingMovie == null)
|
if (existingMovie == null)
|
||||||
{
|
{
|
||||||
RadarrAddMovie result;
|
var result = await _radarrV3Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year,
|
||||||
if (v3)
|
qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly,
|
||||||
{
|
settings.MinimumAvailability);
|
||||||
result = await _radarrV3Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year,
|
|
||||||
qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly,
|
|
||||||
settings.MinimumAvailability);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = await _radarrV2Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year,
|
|
||||||
qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly,
|
|
||||||
settings.MinimumAvailability);
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(result.Error?.message))
|
if (!string.IsNullOrEmpty(result.Error?.message))
|
||||||
{
|
{
|
||||||
_log.LogError(LoggingEvents.RadarrCacher, result.Error.message);
|
_log.LogError(LoggingEvents.RadarrCacher, result.Error.message);
|
||||||
|
@ -199,23 +184,12 @@ namespace Ombi.Core.Senders
|
||||||
{
|
{
|
||||||
// let's set it to monitored and search for it
|
// let's set it to monitored and search for it
|
||||||
existingMovie.monitored = true;
|
existingMovie.monitored = true;
|
||||||
if (v3)
|
|
||||||
|
await _radarrV3Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri);
|
||||||
|
// Search for it
|
||||||
|
if (!settings.AddOnly)
|
||||||
{
|
{
|
||||||
await _radarrV3Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri);
|
await _radarrV3Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri);
|
||||||
// Search for it
|
|
||||||
if (!settings.AddOnly)
|
|
||||||
{
|
|
||||||
await _radarrV3Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await _radarrV2Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri);
|
|
||||||
// Search for it
|
|
||||||
if (!settings.AddOnly)
|
|
||||||
{
|
|
||||||
await _radarrV2Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new SenderResult { Success = true, Sent = true };
|
return new SenderResult { Success = true, Sent = true };
|
||||||
|
@ -226,18 +200,9 @@ namespace Ombi.Core.Senders
|
||||||
|
|
||||||
private async Task<string> RadarrRootPath(int overrideId, RadarrSettings settings)
|
private async Task<string> RadarrRootPath(int overrideId, RadarrSettings settings)
|
||||||
{
|
{
|
||||||
if (settings.V3)
|
var paths = await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
||||||
{
|
var selectedPath = paths.FirstOrDefault(x => x.id == overrideId);
|
||||||
var paths = await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
return selectedPath?.path ?? string.Empty;
|
||||||
var selectedPath = paths.FirstOrDefault(x => x.id == overrideId);
|
|
||||||
return selectedPath?.path ?? string.Empty;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var paths = await _radarrV2Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
|
||||||
var selectedPath = paths.FirstOrDefault(x => x.id == overrideId);
|
|
||||||
return selectedPath?.path ?? string.Empty;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -131,7 +131,8 @@ namespace Ombi.Schedule.Jobs.Ombi
|
||||||
var lidarrContent = _lidarrAlbumRepository.GetAll().AsNoTracking().ToList().Where(x => x.FullyAvailable);
|
var lidarrContent = _lidarrAlbumRepository.GetAll().AsNoTracking().ToList().Where(x => x.FullyAvailable);
|
||||||
|
|
||||||
var addedLog = _recentlyAddedLog.GetAll();
|
var addedLog = _recentlyAddedLog.GetAll();
|
||||||
var addedPlexMovieLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Plex && x.ContentType == ContentType.Parent).Select(x => x.ContentId).ToHashSet();
|
|
||||||
|
var addedPlexMovieLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Plex && x.ContentType == ContentType.Parent)?.Select(x => x.ContentId)?.ToHashSet() ?? new HashSet<int>();
|
||||||
var addedEmbyMoviesLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Emby && x.ContentType == ContentType.Parent).Select(x => x.ContentId).ToHashSet();
|
var addedEmbyMoviesLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Emby && x.ContentType == ContentType.Parent).Select(x => x.ContentId).ToHashSet();
|
||||||
var addedJellyfinMoviesLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Jellyfin && x.ContentType == ContentType.Parent).Select(x => x.ContentId).ToHashSet();
|
var addedJellyfinMoviesLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Jellyfin && x.ContentType == ContentType.Parent).Select(x => x.ContentId).ToHashSet();
|
||||||
var addedAlbumLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Lidarr && x.ContentType == ContentType.Album).Select(x => x.AlbumId).ToHashSet();
|
var addedAlbumLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Lidarr && x.ContentType == ContentType.Album).Select(x => x.AlbumId).ToHashSet();
|
||||||
|
@ -170,6 +171,7 @@ namespace Ombi.Schedule.Jobs.Ombi
|
||||||
|
|
||||||
plexContentMoviesToSend = plexContentMoviesToSend.DistinctBy(x => x.Id).ToHashSet();
|
plexContentMoviesToSend = plexContentMoviesToSend.DistinctBy(x => x.Id).ToHashSet();
|
||||||
embyContentMoviesToSend = embyContentMoviesToSend.DistinctBy(x => x.Id).ToHashSet();
|
embyContentMoviesToSend = embyContentMoviesToSend.DistinctBy(x => x.Id).ToHashSet();
|
||||||
|
jellyfinContentMoviesToSend = jellyfinContentMoviesToSend.DistinctBy(x => x.Id).ToHashSet();
|
||||||
|
|
||||||
var plexEpisodesToSend =
|
var plexEpisodesToSend =
|
||||||
FilterPlexEpisodes(_plex.GetAllEpisodes().Include(x => x.Series).AsNoTracking(), addedPlexEpisodesLogIds);
|
FilterPlexEpisodes(_plex.GetAllEpisodes().Include(x => x.Series).AsNoTracking(), addedPlexEpisodesLogIds);
|
||||||
|
@ -537,7 +539,7 @@ namespace Ombi.Schedule.Jobs.Ombi
|
||||||
var plexMovies = plexContentToSend.Where(x => x.Type == PlexMediaTypeEntity.Movie);
|
var plexMovies = plexContentToSend.Where(x => x.Type == PlexMediaTypeEntity.Movie);
|
||||||
var embyMovies = embyContentToSend.Where(x => x.Type == EmbyMediaType.Movie);
|
var embyMovies = embyContentToSend.Where(x => x.Type == EmbyMediaType.Movie);
|
||||||
var jellyfinMovies = jellyfinContentToSend.Where(x => x.Type == JellyfinMediaType.Movie);
|
var jellyfinMovies = jellyfinContentToSend.Where(x => x.Type == JellyfinMediaType.Movie);
|
||||||
if ((plexMovies.Any() || embyMovies.Any()) && !settings.DisableMovies)
|
if ((plexMovies.Any() || embyMovies.Any()) || jellyfinMovies.Any() && !settings.DisableMovies)
|
||||||
{
|
{
|
||||||
sb.Append("<h1 style=\"text-align: center; max-width: 1042px;\">New Movies</h1><br /><br />");
|
sb.Append("<h1 style=\"text-align: center; max-width: 1042px;\">New Movies</h1><br /><br />");
|
||||||
sb.Append(
|
sb.Append(
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
public class RadarrSettings : ExternalSettings
|
public class RadarrSettings : ExternalSettings
|
||||||
{
|
{
|
||||||
public bool Enabled { get; set; }
|
public bool Enabled { get; set; }
|
||||||
public bool V3 { get; set; }
|
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
public string DefaultQualityProfile { get; set; }
|
public string DefaultQualityProfile { get; set; }
|
||||||
public string DefaultRootPath { get; set; }
|
public string DefaultRootPath { get; set; }
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Ombi.Api.TheMovieDb.Models
|
namespace Ombi.Api.TheMovieDb.Models
|
||||||
{
|
{
|
||||||
|
@ -26,7 +27,7 @@ namespace Ombi.Api.TheMovieDb.Models
|
||||||
public float popularity { get; set; }
|
public float popularity { get; set; }
|
||||||
public string poster_path { get; set; }
|
public string poster_path { get; set; }
|
||||||
public Production_Companies[] production_companies { get; set; }
|
public Production_Companies[] production_companies { get; set; }
|
||||||
public Season[] seasons { get; set; }
|
public List<Season> seasons { get; set; }
|
||||||
public string status { get; set; }
|
public string status { get; set; }
|
||||||
public string type { get; set; }
|
public string type { get; set; }
|
||||||
public float vote_average { get; set; }
|
public float vote_average { get; set; }
|
||||||
|
|
|
@ -116,7 +116,6 @@ export interface IRadarrSettings extends IExternalSettings {
|
||||||
addOnly: boolean;
|
addOnly: boolean;
|
||||||
minimumAvailability: string;
|
minimumAvailability: string;
|
||||||
scanForAvailability: boolean;
|
scanForAvailability: boolean;
|
||||||
v3: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILidarrSettings extends IExternalSettings {
|
export interface ILidarrSettings extends IExternalSettings {
|
||||||
|
|
|
@ -10,9 +10,6 @@
|
||||||
<div class="md-form-field">
|
<div class="md-form-field">
|
||||||
<mat-slide-toggle formControlName="enabled" id="enable">Enable</mat-slide-toggle>
|
<mat-slide-toggle formControlName="enabled" id="enable">Enable</mat-slide-toggle>
|
||||||
</div>
|
</div>
|
||||||
<div class="md-form-field">
|
|
||||||
<mat-slide-toggle formControlName="v3">V3</mat-slide-toggle>
|
|
||||||
</div>
|
|
||||||
<div class="md-form-field">
|
<div class="md-form-field">
|
||||||
<mat-slide-toggle formControlName="scanForAvailability">Scan for Availability</mat-slide-toggle>
|
<mat-slide-toggle formControlName="scanForAvailability">Scan for Availability</mat-slide-toggle>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -42,8 +42,7 @@ export class RadarrComponent implements OnInit {
|
||||||
port: [x.port, [Validators.required]],
|
port: [x.port, [Validators.required]],
|
||||||
addOnly: [x.addOnly],
|
addOnly: [x.addOnly],
|
||||||
minimumAvailability: [x.minimumAvailability, [Validators.required]],
|
minimumAvailability: [x.minimumAvailability, [Validators.required]],
|
||||||
scanForAvailability: [x.scanForAvailability],
|
scanForAvailability: [x.scanForAvailability]
|
||||||
v3: [x.v3 ?? true]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (x.defaultQualityProfile) {
|
if (x.defaultQualityProfile) {
|
||||||
|
|
|
@ -40,11 +40,7 @@ namespace Ombi.Controllers.V1.External
|
||||||
[PowerUser]
|
[PowerUser]
|
||||||
public async Task<IActionResult> GetProfiles([FromBody] RadarrSettings settings)
|
public async Task<IActionResult> GetProfiles([FromBody] RadarrSettings settings)
|
||||||
{
|
{
|
||||||
if (settings.V3)
|
return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri));
|
||||||
{
|
|
||||||
return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri));
|
|
||||||
}
|
|
||||||
return Ok(await _radarrApi.GetProfiles(settings.ApiKey, settings.FullUri));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("enabled")]
|
[HttpGet("enabled")]
|
||||||
|
@ -64,11 +60,7 @@ namespace Ombi.Controllers.V1.External
|
||||||
[PowerUser]
|
[PowerUser]
|
||||||
public async Task<IEnumerable<RadarrRootFolder>> GetRootFolders([FromBody] RadarrSettings settings)
|
public async Task<IEnumerable<RadarrRootFolder>> GetRootFolders([FromBody] RadarrSettings settings)
|
||||||
{
|
{
|
||||||
if (settings.V3)
|
return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
||||||
{
|
|
||||||
return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
return await _radarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -83,11 +75,7 @@ namespace Ombi.Controllers.V1.External
|
||||||
var settings = await _radarrSettings.GetSettingsAsync();
|
var settings = await _radarrSettings.GetSettingsAsync();
|
||||||
if (settings.Enabled)
|
if (settings.Enabled)
|
||||||
{
|
{
|
||||||
if (settings.V3)
|
return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri));
|
||||||
{
|
|
||||||
return Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri));
|
|
||||||
}
|
|
||||||
return Ok(await _radarrApi.GetProfiles(settings.ApiKey, settings.FullUri));
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -104,11 +92,7 @@ namespace Ombi.Controllers.V1.External
|
||||||
var settings = await _radarrSettings.GetSettingsAsync();
|
var settings = await _radarrSettings.GetSettingsAsync();
|
||||||
if (settings.Enabled)
|
if (settings.Enabled)
|
||||||
{
|
{
|
||||||
if (settings.V3)
|
return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
||||||
{
|
|
||||||
return await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
|
||||||
return await _radarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
},
|
},
|
||||||
"Ombi": {
|
"Ombi": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"commandLineArgs": "--host http://localhost:3577",
|
"commandLineArgs": "--host http://localhost:3577 --demo true",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue