New: Filter Sonarr synchronization based on Root Folders

Closes #3569

(cherry picked from commit ff3327483a233ebe54d8f178c355abaeb6f9d11e)
pull/3603/head
Lars 1 year ago committed by Bogdan
parent f026fea211
commit bfe917a09e

@ -11,6 +11,7 @@ namespace NzbDrone.Core.ImportLists.Lidarr
public List<MediaCover.MediaCover> Images { get; set; } public List<MediaCover.MediaCover> Images { get; set; }
public bool Monitored { get; set; } public bool Monitored { get; set; }
public int QualityProfileId { get; set; } public int QualityProfileId { get; set; }
public string RootFolderPath { get; set; }
public HashSet<int> Tags { get; set; } public HashSet<int> Tags { get; set; }
} }
@ -36,4 +37,10 @@ namespace NzbDrone.Core.ImportLists.Lidarr
public string Label { get; set; } public string Label { get; set; }
public int Id { get; set; } public int Id { get; set; }
} }
public class LidarrRootFolder
{
public string Path { get; set; }
public int Id { get; set; }
}
} }

@ -42,10 +42,27 @@ namespace NzbDrone.Core.ImportLists.Lidarr
foreach (var remoteAlbum in remoteAlbums) foreach (var remoteAlbum in remoteAlbums)
{ {
var remoteArtist = artistDict[remoteAlbum.ArtistId]; var remoteArtist = artistDict[remoteAlbum.ArtistId];
if ((!Settings.ProfileIds.Any() || Settings.ProfileIds.Contains(remoteArtist.QualityProfileId)) &&
(!Settings.TagIds.Any() || Settings.TagIds.Any(x => remoteArtist.Tags.Any(y => y == x))) && if (Settings.ProfileIds.Any() && !Settings.ProfileIds.Contains(remoteArtist.QualityProfileId))
remoteAlbum.Monitored && remoteArtist.Monitored) {
continue;
}
if (Settings.TagIds.Any() && !Settings.TagIds.Any(x => remoteArtist.Tags.Any(y => y == x)))
{
continue;
}
if (Settings.RootFolderPaths.Any() && !Settings.RootFolderPaths.Any(rootFolderPath => remoteArtist.RootFolderPath.ContainsIgnoreCase(rootFolderPath)))
{ {
continue;
}
if (!remoteAlbum.Monitored || !remoteArtist.Monitored)
{
continue;
}
artistsAndAlbums.Add(new ImportListItemInfo artistsAndAlbums.Add(new ImportListItemInfo
{ {
ArtistMusicBrainzId = remoteArtist.ForeignArtistId, ArtistMusicBrainzId = remoteArtist.ForeignArtistId,
@ -54,7 +71,6 @@ namespace NzbDrone.Core.ImportLists.Lidarr
Album = remoteAlbum.Title Album = remoteAlbum.Title
}); });
} }
}
_importListStatusService.RecordSuccess(Definition.Id); _importListStatusService.RecordSuccess(Definition.Id);
} }
@ -109,6 +125,23 @@ namespace NzbDrone.Core.ImportLists.Lidarr
}; };
} }
if (action == "getRootFolders")
{
Settings.Validate().Filter("ApiKey").ThrowOnError();
var remoteRootfolders = _lidarrV1Proxy.GetRootFolders(Settings);
return new
{
options = remoteRootfolders.OrderBy(d => d.Path, StringComparer.InvariantCultureIgnoreCase)
.Select(d => new
{
value = d.Path,
name = d.Path
})
};
}
return new { }; return new { };
} }

@ -25,6 +25,7 @@ namespace NzbDrone.Core.ImportLists.Lidarr
ApiKey = ""; ApiKey = "";
ProfileIds = Array.Empty<int>(); ProfileIds = Array.Empty<int>();
TagIds = Array.Empty<int>(); TagIds = Array.Empty<int>();
RootFolderPaths = Array.Empty<string>();
} }
[FieldDefinition(0, Label = "Full URL", HelpText = "URL, including port, of the Lidarr instance to import from")] [FieldDefinition(0, Label = "Full URL", HelpText = "URL, including port, of the Lidarr instance to import from")]
@ -39,6 +40,9 @@ namespace NzbDrone.Core.ImportLists.Lidarr
[FieldDefinition(3, Type = FieldType.Select, SelectOptionsProviderAction = "getTags", Label = "Tags", HelpText = "Tags from the source instance to import from")] [FieldDefinition(3, Type = FieldType.Select, SelectOptionsProviderAction = "getTags", Label = "Tags", HelpText = "Tags from the source instance to import from")]
public IEnumerable<int> TagIds { get; set; } 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() public NzbDroneValidationResult Validate()
{ {
return new NzbDroneValidationResult(Validator.Validate(this)); return new NzbDroneValidationResult(Validator.Validate(this));

@ -14,6 +14,7 @@ namespace NzbDrone.Core.ImportLists.Lidarr
List<LidarrArtist> GetArtists(LidarrSettings settings); List<LidarrArtist> GetArtists(LidarrSettings settings);
List<LidarrAlbum> GetAlbums(LidarrSettings settings); List<LidarrAlbum> GetAlbums(LidarrSettings settings);
List<LidarrProfile> GetProfiles(LidarrSettings settings); List<LidarrProfile> GetProfiles(LidarrSettings settings);
List<LidarrRootFolder> GetRootFolders(LidarrSettings settings);
List<LidarrTag> GetTags(LidarrSettings settings); List<LidarrTag> GetTags(LidarrSettings settings);
ValidationFailure Test(LidarrSettings settings); ValidationFailure Test(LidarrSettings settings);
} }
@ -44,6 +45,11 @@ namespace NzbDrone.Core.ImportLists.Lidarr
return Execute<LidarrProfile>("/api/v1/qualityprofile", settings); return Execute<LidarrProfile>("/api/v1/qualityprofile", settings);
} }
public List<LidarrRootFolder> GetRootFolders(LidarrSettings settings)
{
return Execute<LidarrRootFolder>("api/v1/rootfolder", settings);
}
public List<LidarrTag> GetTags(LidarrSettings settings) public List<LidarrTag> GetTags(LidarrSettings settings)
{ {
return Execute<LidarrTag>("/api/v1/tag", settings); return Execute<LidarrTag>("/api/v1/tag", settings);

Loading…
Cancel
Save