pull/9417/merge
SysError956 4 months ago committed by GitHub
commit b27f931447
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,61 @@
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.CustomFormats
{
[TestFixture]
public class IndexerSpecificationFixture : CoreTest<IndexerSpecification>
{
private CustomFormatInput _movieInput;
[SetUp]
public void Setup()
{
_movieInput = new CustomFormatInput
{
Movie = Builder<Movie>.CreateNew().Build()
};
}
private void GivenCustomFormatIndexer(int indexerId)
{
Subject.Value = indexerId;
}
private void GivenMovieReleaseIndexer(int indexerId)
{
_movieInput.IndexerId = indexerId;
}
[Test]
public void should_return_false_if_indexer_id_not_captured()
{
GivenCustomFormatIndexer(4);
GivenMovieReleaseIndexer(-1);
Subject.IsSatisfiedBy(_movieInput).Should().BeFalse();
}
[Test]
public void should_return_false_if_indexer_id_does_not_match_custom_format()
{
GivenCustomFormatIndexer(4);
GivenMovieReleaseIndexer(3);
Subject.IsSatisfiedBy(_movieInput).Should().BeFalse();
}
[Test]
public void should_return_true_if_indexer_id_matches_custom_format()
{
GivenCustomFormatIndexer(4);
GivenMovieReleaseIndexer(4);
Subject.IsSatisfiedBy(_movieInput).Should().BeTrue();
}
}
}

@ -21,6 +21,7 @@ namespace NzbDrone.Core.Blocklisting
public DownloadProtocol Protocol { get; set; }
public string Indexer { get; set; }
public IndexerFlags IndexerFlags { get; set; }
public int IndexerId { get; set; }
public string Message { get; set; }
public string TorrentInfoHash { get; set; }
public List<Language> Languages { get; set; }

@ -89,6 +89,8 @@ namespace NzbDrone.Core.Blocklisting
PublishedDate = remoteMovie.Release.PublishDate,
Size = remoteMovie.Release.Size,
Indexer = remoteMovie.Release.Indexer,
IndexerFlags = remoteMovie.Release.IndexerFlags,
IndexerId = remoteMovie.Release.IndexerId,
Protocol = remoteMovie.Release.DownloadProtocol,
Message = message,
Languages = remoteMovie.ParsedMovieInfo.Languages
@ -199,6 +201,11 @@ namespace NzbDrone.Core.Blocklisting
blocklist.IndexerFlags = flags;
}
if (int.TryParse(message.Data.GetValueOrDefault("indexerId"), out var indexerId))
{
blocklist.IndexerId = indexerId;
}
_blocklistRepository.Insert(blocklist);
}

@ -42,7 +42,8 @@ namespace NzbDrone.Core.CustomFormats
Movie = remoteMovie.Movie,
Size = size,
Languages = remoteMovie.Languages,
IndexerFlags = remoteMovie.Release?.IndexerFlags ?? 0
IndexerFlags = remoteMovie.Release?.IndexerFlags ?? 0,
IndexerId = remoteMovie.Release?.IndexerId ?? -1
};
return ParseCustomFormat(input);
@ -79,6 +80,7 @@ namespace NzbDrone.Core.CustomFormats
Movie = movie,
Size = blocklist.Size ?? 0,
IndexerFlags = blocklist.IndexerFlags,
IndexerId = blocklist.IndexerId,
Languages = blocklist.Languages
};
@ -109,6 +111,7 @@ namespace NzbDrone.Core.CustomFormats
Movie = movie,
Size = size,
IndexerFlags = flags,
IndexerId = int.TryParse(history.Data.GetValueOrDefault("indexerId"), out var indexerId) ? indexerId : -1,
Languages = history.Languages
};
@ -204,6 +207,7 @@ namespace NzbDrone.Core.CustomFormats
Movie = movie,
Size = movieFile.Size,
IndexerFlags = movieFile.IndexerFlags,
IndexerId = movieFile.IndexerId,
Languages = movieFile.Languages,
Filename = Path.GetFileName(movieFile.RelativePath)
};

@ -11,6 +11,7 @@ namespace NzbDrone.Core.CustomFormats
public Movie Movie { get; set; }
public long Size { get; set; }
public IndexerFlags IndexerFlags { get; set; }
public int? IndexerId { get; set; }
public List<Language> Languages { get; set; }
public string Filename { get; set; }

@ -0,0 +1,35 @@
using FluentValidation;
using NzbDrone.Core.Annotations;
using NzbDrone.Core.Validation;
namespace NzbDrone.Core.CustomFormats
{
public class IndexerSpecificationValidator : AbstractValidator<IndexerSpecification>
{
public IndexerSpecificationValidator()
{
RuleFor(c => c.Value).GreaterThan(0);
}
}
public class IndexerSpecification : CustomFormatSpecificationBase
{
private static readonly IndexerSpecificationValidator Validator = new IndexerSpecificationValidator();
public override int Order => 4;
public override string ImplementationName => "Indexer";
[FieldDefinition(1, Label = "Indexer", Type = FieldType.Select, SelectOptionsProviderAction = "indexers")]
public int Value { get; set; }
protected override bool IsSatisfiedByWithoutNegate(CustomFormatInput input)
{
return input.IndexerId == Value;
}
public override NzbDroneValidationResult Validate()
{
return new NzbDroneValidationResult(Validator.Validate(this));
}
}
}

@ -0,0 +1,15 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(234)]
public class add_indexer_id_columns : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Alter.Table("Blocklist").AddColumn("IndexerId").AsInt32().WithDefaultValue(-1);
Alter.Table("MovieFiles").AddColumn("IndexerId").AsInt32().WithDefaultValue(-1);
}
}
}

@ -162,6 +162,13 @@ namespace NzbDrone.Core.Download.TrackedDownloads
trackedDownload.RemoteMovie.Release ??= new ReleaseInfo();
trackedDownload.RemoteMovie.Release.IndexerFlags = flags;
}
if (trackedDownload.RemoteMovie != null &&
int.TryParse(grabbedEvent?.Data?.GetValueOrDefault("indexerId"), out var indexerId))
{
trackedDownload.RemoteMovie.Release ??= new ReleaseInfo();
trackedDownload.RemoteMovie.Release.IndexerId = indexerId;
}
}
// Calculate custom formats

@ -205,6 +205,7 @@ namespace NzbDrone.Core.History
history.Data.Add("CustomFormatScore", message.MovieInfo.CustomFormatScore.ToString());
history.Data.Add("Size", message.MovieInfo.Size.ToString());
history.Data.Add("IndexerFlags", message.ImportedMovie.IndexerFlags.ToString());
history.Data.Add("IndexerId", message.ImportedMovie.IndexerId.ToString());
_historyRepository.Insert(history);
}
@ -231,6 +232,7 @@ namespace NzbDrone.Core.History
history.Data.Add("ReleaseGroup", message.MovieFile.ReleaseGroup);
history.Data.Add("Size", message.MovieFile.Size.ToString());
history.Data.Add("IndexerFlags", message.MovieFile.IndexerFlags.ToString());
history.Data.Add("IndexerId", message.MovieFile.IndexerId.ToString());
_historyRepository.Insert(history);
}
@ -259,6 +261,7 @@ namespace NzbDrone.Core.History
history.Data.Add("ReleaseGroup", message.MovieFile.ReleaseGroup);
history.Data.Add("Size", message.MovieFile.Size.ToString());
history.Data.Add("IndexerFlags", message.MovieFile.IndexerFlags.ToString());
history.Data.Add("IndexerId", message.MovieFile.IndexerId.ToString());
_historyRepository.Insert(history);
}

@ -21,6 +21,7 @@ namespace NzbDrone.Core.MediaFiles
public string SceneName { get; set; }
public string ReleaseGroup { get; set; }
public IndexerFlags IndexerFlags { get; set; }
public int IndexerId { get; set; } = -1;
public QualityModel Quality { get; set; }
public List<Language> Languages { get; set; }
public MediaInfoModel MediaInfo { get; set; }

@ -107,6 +107,11 @@ namespace NzbDrone.Core.MediaFiles.MovieImport
{
movieFile.IndexerFlags = flags;
}
if (int.TryParse(grabHistory?.Data.GetValueOrDefault("indexerId"), out var indexerId))
{
movieFile.IndexerId = indexerId;
}
}
bool copyOnly;

@ -86,6 +86,7 @@ namespace Radarr.Api.V3.MovieFiles
{
var movieFile = _mediaFileService.GetMovie(movieFileResource.Id);
movieFile.IndexerFlags = (IndexerFlags)movieFileResource.IndexerFlags;
movieFile.IndexerId = movieFileResource.IndexerId;
movieFile.Quality = movieFileResource.Quality;
movieFile.Languages = movieFileResource.Languages;
movieFile.Edition = movieFileResource.Edition;
@ -127,6 +128,11 @@ namespace Radarr.Api.V3.MovieFiles
movieFile.IndexerFlags = (IndexerFlags)resource.IndexerFlags.Value;
}
if (resource.IndexerId != null)
{
movieFile.IndexerId = resource.IndexerId.Value;
}
if (resource.Edition != null)
{
movieFile.Edition = resource.Edition;

@ -13,5 +13,6 @@ namespace Radarr.Api.V3.MovieFiles
public string ReleaseGroup { get; set; }
public string SceneName { get; set; }
public int? IndexerFlags { get; set; }
public int? IndexerId { get; set; }
}
}

@ -20,6 +20,7 @@ namespace Radarr.Api.V3.MovieFiles
public DateTime DateAdded { get; set; }
public string SceneName { get; set; }
public int IndexerFlags { get; set; }
public int IndexerId { get; set; }
public QualityModel Quality { get; set; }
public List<CustomFormatResource> CustomFormats { get; set; }
public int CustomFormatScore { get; set; }
@ -52,6 +53,7 @@ namespace Radarr.Api.V3.MovieFiles
DateAdded = model.DateAdded,
SceneName = model.SceneName,
IndexerFlags = (int)model.IndexerFlags,
IndexerId = model.IndexerId,
Quality = model.Quality,
Languages = model.Languages,
ReleaseGroup = model.ReleaseGroup,
@ -79,6 +81,7 @@ namespace Radarr.Api.V3.MovieFiles
DateAdded = model.DateAdded,
SceneName = model.SceneName,
IndexerFlags = (int)model.IndexerFlags,
IndexerId = model.IndexerId,
Quality = model.Quality,
Languages = model.Languages,
Edition = model.Edition,

@ -0,0 +1,28 @@
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Annotations;
using NzbDrone.Core.Indexers;
using Radarr.Http;
namespace Radarr.Api.V3.Specifications
{
[V3ApiController]
public class SpecificationsController : Controller
{
private readonly IIndexerFactory _indexerFactory;
public SpecificationsController(IIndexerFactory indexerFactory)
{
_indexerFactory = indexerFactory;
}
[HttpPost("action/indexers")]
public object GetIndexers()
{
return new
{
options = _indexerFactory.All().Select(o => new FieldSelectOption { Value = o.Id, Name = o.Name }).ToList()
};
}
}
}
Loading…
Cancel
Save