1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-08-16 23:39:44 +02:00

New: Filter Sonarr synchronization based on Root Folders

(cherry picked from commit ff3327483a233ebe54d8f178c355abaeb6f9d11e)
This commit is contained in:
Lars 2023-04-25 06:44:20 +02:00 committed by Bogdan
parent 4c2bf285fc
commit 0858f6732a
4 changed files with 53 additions and 8 deletions

View File

@ -16,6 +16,7 @@ public class RadarrMovie
public int Year { get; set; }
public string TitleSlug { get; set; }
public int QualityProfileId { get; set; }
public string RootFolderPath { get; set; }
public HashSet<int> Tags { get; set; }
}
@ -30,4 +31,10 @@ public class RadarrTag
public string Label { get; set; }
public int Id { get; set; }
}
public class RadarrRootFolder
{
public string Path { get; set; }
public int Id { get; set; }
}
}

View File

@ -41,16 +41,27 @@ public override ImportListFetchResult Fetch()
foreach (var remoteMovie in remoteMovies)
{
if ((!Settings.ProfileIds.Any() || Settings.ProfileIds.Contains(remoteMovie.QualityProfileId)) &&
(!Settings.TagIds.Any() || Settings.TagIds.Any(x => remoteMovie.Tags.Any(y => y == x))))
if (Settings.ProfileIds.Any() && !Settings.ProfileIds.Contains(remoteMovie.QualityProfileId))
{
movies.Add(new ImportListMovie
{
TmdbId = remoteMovie.TmdbId,
Title = remoteMovie.Title,
Year = remoteMovie.Year
});
continue;
}
if (Settings.TagIds.Any() && !Settings.TagIds.Any(x => remoteMovie.Tags.Any(y => y == x)))
{
continue;
}
if (Settings.RootFolderPaths.Any() && !Settings.RootFolderPaths.Any(rootFolderPath => remoteMovie.RootFolderPath.ContainsIgnoreCase(rootFolderPath)))
{
continue;
}
movies.Add(new ImportListMovie
{
TmdbId = remoteMovie.TmdbId,
Title = remoteMovie.Title,
Year = remoteMovie.Year
});
}
_importListStatusService.RecordSuccess(Definition.Id);
@ -107,6 +118,23 @@ public override object RequestAction(string action, IDictionary<string, string>
};
}
if (action == "getRootFolders")
{
Settings.Validate().Filter("ApiKey").ThrowOnError();
var remoteRootfolders = _radarrV3Proxy.GetRootFolders(Settings);
return new
{
options = remoteRootfolders.OrderBy(d => d.Path, StringComparer.InvariantCultureIgnoreCase)
.Select(d => new
{
value = d.Path,
name = d.Path
})
};
}
return new { };
}

View File

@ -26,6 +26,7 @@ public RadarrSettings()
ApiKey = "";
ProfileIds = Array.Empty<int>();
TagIds = Array.Empty<int>();
RootFolderPaths = Array.Empty<string>();
}
[FieldDefinition(0, Label = "Full URL", HelpText = "URL, including port, of the Radarr instance to import from (Radarr 3.0 or higher)")]
@ -40,6 +41,9 @@ public RadarrSettings()
[FieldDefinition(3, Type = FieldType.Select, SelectOptionsProviderAction = "getTags", Label = "Tags", HelpText = "Tags from the source instance to import from")]
public IEnumerable<int> TagIds { get; set; }
[FieldDefinition(4, Type = FieldType.Select, SelectOptionsProviderAction = "getRootFolders", Label = "Root Folders", HelpText = "Root Folders from the source instance to import from")]
public IEnumerable<string> RootFolderPaths { get; set; }
public NzbDroneValidationResult Validate()
{
return new NzbDroneValidationResult(Validator.Validate(this));

View File

@ -13,6 +13,7 @@ public interface IRadarrV3Proxy
{
List<RadarrMovie> GetMovies(RadarrSettings settings);
List<RadarrProfile> GetProfiles(RadarrSettings settings);
List<RadarrRootFolder> GetRootFolders(RadarrSettings settings);
List<RadarrTag> GetTags(RadarrSettings settings);
ValidationFailure Test(RadarrSettings settings);
}
@ -38,6 +39,11 @@ public List<RadarrProfile> GetProfiles(RadarrSettings settings)
return Execute<RadarrProfile>("/api/v3/qualityprofile", settings);
}
public List<RadarrRootFolder> GetRootFolders(RadarrSettings settings)
{
return Execute<RadarrRootFolder>("api/v3/rootfolder", settings);
}
public List<RadarrTag> GetTags(RadarrSettings settings)
{
return Execute<RadarrTag>("/api/v3/tag", settings);