mirror of
https://github.com/fergalmoran/Readarr.git
synced 2026-01-06 16:55:49 +00:00
Changed: Remove Language Profiles (#870)
* Changed: Remove Language Profiles * fixup! Changed: Remove Language Profiles * fixup! Changed: Remove Language Profiles * Remove unused method in FileNameBuilder * Fixed: Cleanup Int Converter Copy/Paste Issues and Grammar
This commit is contained in:
@@ -41,11 +41,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
artist.QualityProfileId = resource.QualityProfileId.Value;
|
||||
}
|
||||
|
||||
if (resource.LanguageProfileId.HasValue)
|
||||
{
|
||||
artist.LanguageProfileId = resource.LanguageProfileId.Value;
|
||||
}
|
||||
|
||||
if (resource.MetadataProfileId.HasValue)
|
||||
{
|
||||
artist.MetadataProfileId = resource.MetadataProfileId.Value;
|
||||
|
||||
@@ -8,7 +8,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
public List<int> ArtistIds { get; set; }
|
||||
public bool? Monitored { get; set; }
|
||||
public int? QualityProfileId { get; set; }
|
||||
public int? LanguageProfileId { get; set; }
|
||||
public int? MetadataProfileId { get; set; }
|
||||
public bool? AlbumFolder { get; set; }
|
||||
public string RootFolderPath { get; set; }
|
||||
|
||||
@@ -57,7 +57,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
ArtistAncestorValidator artistAncestorValidator,
|
||||
SystemFolderValidator systemFolderValidator,
|
||||
ProfileExistsValidator profileExistsValidator,
|
||||
LanguageProfileExistsValidator languageProfileExistsValidator,
|
||||
MetadataProfileExistsValidator metadataProfileExistsValidator
|
||||
)
|
||||
: base(signalRBroadcaster)
|
||||
@@ -78,7 +77,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
DeleteResource = DeleteArtist;
|
||||
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.QualityProfileId));
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.LanguageProfileId));
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.MetadataProfileId));
|
||||
|
||||
SharedValidator.RuleFor(s => s.Path)
|
||||
@@ -92,7 +90,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
.When(s => !s.Path.IsNullOrWhiteSpace());
|
||||
|
||||
SharedValidator.RuleFor(s => s.QualityProfileId).SetValidator(profileExistsValidator);
|
||||
SharedValidator.RuleFor(s => s.LanguageProfileId).SetValidator(languageProfileExistsValidator);
|
||||
SharedValidator.RuleFor(s => s.MetadataProfileId).SetValidator(metadataProfileExistsValidator);
|
||||
|
||||
PostValidator.RuleFor(s => s.Path).IsValidPath().When(s => s.RootFolderPath.IsNullOrWhiteSpace());
|
||||
|
||||
@@ -43,7 +43,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
//View & Edit
|
||||
public string Path { get; set; }
|
||||
public int QualityProfileId { get; set; }
|
||||
public int LanguageProfileId { get; set; }
|
||||
public int MetadataProfileId { get; set; }
|
||||
|
||||
//Editing Only
|
||||
@@ -85,7 +84,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
|
||||
Path = model.Path,
|
||||
QualityProfileId = model.QualityProfileId,
|
||||
LanguageProfileId = model.LanguageProfileId,
|
||||
MetadataProfileId = model.MetadataProfileId,
|
||||
Links = model.Metadata.Value.Links,
|
||||
|
||||
@@ -133,7 +131,6 @@ namespace Lidarr.Api.V1.Artist
|
||||
SortName = resource.SortName,
|
||||
Path = resource.Path,
|
||||
QualityProfileId = resource.QualityProfileId,
|
||||
LanguageProfileId = resource.LanguageProfileId,
|
||||
MetadataProfileId = resource.MetadataProfileId,
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Lidarr.Api.V1.Artist;
|
||||
using Lidarr.Http.REST;
|
||||
@@ -13,7 +12,6 @@ namespace Lidarr.Api.V1.Blacklist
|
||||
public int ArtistId { get; set; }
|
||||
public List<int> AlbumIds { get; set; }
|
||||
public string SourceTitle { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public DownloadProtocol Protocol { get; set; }
|
||||
@@ -36,7 +34,6 @@ namespace Lidarr.Api.V1.Blacklist
|
||||
ArtistId = model.ArtistId,
|
||||
AlbumIds = model.AlbumIds,
|
||||
SourceTitle = model.SourceTitle,
|
||||
Language = model.Language,
|
||||
Quality = model.Quality,
|
||||
Date = model.Date,
|
||||
Protocol = model.Protocol,
|
||||
|
||||
@@ -56,7 +56,6 @@ namespace Lidarr.Api.V1.History
|
||||
if (model.Artist != null)
|
||||
{
|
||||
resource.QualityCutoffNotMet = _upgradableSpecification.QualityCutoffNotMet(model.Artist.QualityProfile.Value, model.Quality);
|
||||
resource.LanguageCutoffNotMet = _upgradableSpecification.LanguageCutoffNotMet(model.Artist.LanguageProfile, model.Language);
|
||||
}
|
||||
|
||||
return resource;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Core.History;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Lidarr.Api.V1.Albums;
|
||||
using Lidarr.Api.V1.Artist;
|
||||
@@ -16,10 +15,8 @@ namespace Lidarr.Api.V1.History
|
||||
public int ArtistId { get; set; }
|
||||
public int TrackId { get; set; }
|
||||
public string SourceTitle { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public bool QualityCutoffNotMet { get; set; }
|
||||
public bool LanguageCutoffNotMet { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
|
||||
@@ -46,7 +43,6 @@ namespace Lidarr.Api.V1.History
|
||||
ArtistId = model.ArtistId,
|
||||
TrackId = model.TrackId,
|
||||
SourceTitle = model.SourceTitle,
|
||||
Language = model.Language,
|
||||
Quality = model.Quality,
|
||||
//QualityCutoffNotMet
|
||||
Date = model.Date,
|
||||
|
||||
@@ -10,18 +10,15 @@ namespace Lidarr.Api.V1.ImportLists
|
||||
|
||||
public ImportListModule(ImportListFactory importListFactory,
|
||||
ProfileExistsValidator profileExistsValidator,
|
||||
LanguageProfileExistsValidator languageProfileExistsValidator,
|
||||
MetadataProfileExistsValidator metadataProfileExistsValidator
|
||||
)
|
||||
: base(importListFactory, "importlist", ResourceMapper)
|
||||
{
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.QualityProfileId));
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.LanguageProfileId));
|
||||
Http.Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.MetadataProfileId));
|
||||
|
||||
SharedValidator.RuleFor(c => c.RootFolderPath).IsValidPath();
|
||||
SharedValidator.RuleFor(c => c.QualityProfileId).SetValidator(profileExistsValidator);
|
||||
SharedValidator.RuleFor(c => c.LanguageProfileId).SetValidator(languageProfileExistsValidator);
|
||||
SharedValidator.RuleFor(c => c.MetadataProfileId).SetValidator(metadataProfileExistsValidator);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ namespace Lidarr.Api.V1.ImportLists
|
||||
public ImportListMonitorType ShouldMonitor { get; set; }
|
||||
public string RootFolderPath { get; set; }
|
||||
public int QualityProfileId { get; set; }
|
||||
public int LanguageProfileId { get; set; }
|
||||
public int MetadataProfileId { get; set; }
|
||||
public ImportListType ListType { get; set; }
|
||||
public int ListOrder { get; set; }
|
||||
@@ -29,7 +28,6 @@ namespace Lidarr.Api.V1.ImportLists
|
||||
resource.ShouldMonitor = definition.ShouldMonitor;
|
||||
resource.RootFolderPath = definition.RootFolderPath;
|
||||
resource.QualityProfileId = definition.ProfileId;
|
||||
resource.LanguageProfileId = definition.LanguageProfileId;
|
||||
resource.MetadataProfileId = definition.MetadataProfileId;
|
||||
resource.ListType = definition.ListType;
|
||||
resource.ListOrder = (int) definition.ListType;
|
||||
@@ -50,7 +48,6 @@ namespace Lidarr.Api.V1.ImportLists
|
||||
definition.ShouldMonitor = resource.ShouldMonitor;
|
||||
definition.RootFolderPath = resource.RootFolderPath;
|
||||
definition.ProfileId = resource.QualityProfileId;
|
||||
definition.LanguageProfileId = resource.LanguageProfileId;
|
||||
definition.MetadataProfileId = resource.MetadataProfileId;
|
||||
definition.ListType = resource.ListType;
|
||||
|
||||
|
||||
@@ -32,12 +32,6 @@ namespace Lidarr.Api.V1.Indexers
|
||||
.Artist
|
||||
.QualityProfile.Value
|
||||
.Items.FindIndex(v => v.Quality == release.Quality.Quality) * 100;
|
||||
|
||||
release.LanguageWeight = decision.RemoteAlbum
|
||||
.Artist
|
||||
.LanguageProfile.Value
|
||||
.Languages.FindIndex(v => v.Language == release.Language) * 100;
|
||||
|
||||
}
|
||||
|
||||
release.QualityWeight += release.Quality.Revision.Real * 10;
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Lidarr.Http.REST;
|
||||
@@ -28,8 +27,6 @@ namespace Lidarr.Api.V1.Indexers
|
||||
public string Title { get; set; }
|
||||
public bool Discography { get; set; }
|
||||
public bool SceneSource { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public int LanguageWeight { get; set; }
|
||||
public string AirDate { get; set; }
|
||||
public string ArtistName { get; set; }
|
||||
public string AlbumTitle { get; set; }
|
||||
@@ -86,7 +83,6 @@ namespace Lidarr.Api.V1.Indexers
|
||||
ReleaseGroup = parsedAlbumInfo.ReleaseGroup,
|
||||
ReleaseHash = parsedAlbumInfo.ReleaseHash,
|
||||
Title = releaseInfo.Title,
|
||||
Language = parsedAlbumInfo.Language,
|
||||
ArtistName = parsedAlbumInfo.ArtistName,
|
||||
AlbumTitle = parsedAlbumInfo.AlbumTitle,
|
||||
Discography = parsedAlbumInfo.Discography,
|
||||
|
||||
@@ -92,10 +92,6 @@
|
||||
<Compile Include="ManualImport\ManualImportResource.cs" />
|
||||
<Compile Include="Profiles\Delay\DelayProfileModule.cs" />
|
||||
<Compile Include="Profiles\Delay\DelayProfileResource.cs" />
|
||||
<Compile Include="Profiles\Language\LanguageProfileModule.cs" />
|
||||
<Compile Include="Profiles\Language\LanguageProfileResource.cs" />
|
||||
<Compile Include="Profiles\Language\LanguageProfileSchemaModule.cs" />
|
||||
<Compile Include="Profiles\Language\LanguageValidator.cs" />
|
||||
<Compile Include="Queue\QueueActionModule.cs" />
|
||||
<Compile Include="Queue\QueueBulkResource.cs" />
|
||||
<Compile Include="Queue\QueueDetailsModule.cs" />
|
||||
|
||||
@@ -78,7 +78,6 @@ namespace Lidarr.Api.V1.ManualImport
|
||||
Album = resource.Album == null ? null : _albumService.GetAlbum(resource.Album.Id),
|
||||
Release = resource.AlbumReleaseId == 0 ? null : _releaseService.GetRelease(resource.AlbumReleaseId),
|
||||
Quality = resource.Quality,
|
||||
Language = resource.Language,
|
||||
DownloadId = resource.DownloadId,
|
||||
AdditionalFile = resource.AdditionalFile,
|
||||
ReplaceExistingFiles = resource.ReplaceExistingFiles,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Manual;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
using Lidarr.Api.V1.Artist;
|
||||
using Lidarr.Api.V1.Albums;
|
||||
using Lidarr.Api.V1.Tracks;
|
||||
@@ -24,7 +23,6 @@ namespace Lidarr.Api.V1.ManualImport
|
||||
public int AlbumReleaseId { get; set; }
|
||||
public List<TrackResource> Tracks { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public int QualityWeight { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
public IEnumerable<Rejection> Rejections { get; set; }
|
||||
@@ -53,7 +51,6 @@ namespace Lidarr.Api.V1.ManualImport
|
||||
AlbumReleaseId = model.Release?.Id ?? 0,
|
||||
Tracks = model.Tracks.ToResource(),
|
||||
Quality = model.Quality,
|
||||
Language = model.Language,
|
||||
//QualityWeight
|
||||
DownloadId = model.DownloadId,
|
||||
Rejections = model.Rejections,
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using Lidarr.Http;
|
||||
|
||||
namespace Lidarr.Api.V1.Profiles.Language
|
||||
{
|
||||
public class LanguageProfileModule : LidarrRestModule<LanguageProfileResource>
|
||||
{
|
||||
private readonly ILanguageProfileService _profileService;
|
||||
|
||||
public LanguageProfileModule(ILanguageProfileService profileService)
|
||||
{
|
||||
_profileService = profileService;
|
||||
SharedValidator.RuleFor(c => c.Name).NotEmpty();
|
||||
SharedValidator.RuleFor(c => c.Cutoff).NotNull();
|
||||
SharedValidator.RuleFor(c => c.Languages).MustHaveAllowedLanguage();
|
||||
|
||||
GetResourceAll = GetAll;
|
||||
GetResourceById = GetById;
|
||||
UpdateResource = Update;
|
||||
CreateResource = Create;
|
||||
DeleteResource = DeleteProfile;
|
||||
}
|
||||
|
||||
private int Create(LanguageProfileResource resource)
|
||||
{
|
||||
var model = resource.ToModel();
|
||||
model = _profileService.Add(model);
|
||||
return model.Id;
|
||||
}
|
||||
|
||||
private void DeleteProfile(int id)
|
||||
{
|
||||
_profileService.Delete(id);
|
||||
}
|
||||
|
||||
private void Update(LanguageProfileResource resource)
|
||||
{
|
||||
var model = resource.ToModel();
|
||||
|
||||
_profileService.Update(model);
|
||||
}
|
||||
|
||||
private LanguageProfileResource GetById(int id)
|
||||
{
|
||||
return _profileService.Get(id).ToResource();
|
||||
}
|
||||
|
||||
private List<LanguageProfileResource> GetAll()
|
||||
{
|
||||
var profiles = _profileService.All().ToResource();
|
||||
|
||||
return profiles;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using Lidarr.Http.REST;
|
||||
|
||||
namespace Lidarr.Api.V1.Profiles.Language
|
||||
{
|
||||
public class LanguageProfileResource : RestResource
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public bool UpgradeAllowed { get; set; }
|
||||
public NzbDrone.Core.Languages.Language Cutoff { get; set; }
|
||||
public List<ProfileLanguageItemResource> Languages { get; set; }
|
||||
}
|
||||
|
||||
public class ProfileLanguageItemResource : RestResource
|
||||
{
|
||||
public NzbDrone.Core.Languages.Language Language { get; set; }
|
||||
public bool Allowed { get; set; }
|
||||
}
|
||||
|
||||
public static class LanguageProfileResourceMapper
|
||||
{
|
||||
public static LanguageProfileResource ToResource(this LanguageProfile model)
|
||||
{
|
||||
if (model == null) return null;
|
||||
|
||||
return new LanguageProfileResource
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
UpgradeAllowed = model.UpgradeAllowed,
|
||||
Cutoff = model.Cutoff,
|
||||
Languages = model.Languages.ConvertAll(ToResource)
|
||||
};
|
||||
}
|
||||
|
||||
public static ProfileLanguageItemResource ToResource(this LanguageProfileItem model)
|
||||
{
|
||||
if (model == null) return null;
|
||||
|
||||
return new ProfileLanguageItemResource
|
||||
{
|
||||
Language = model.Language,
|
||||
Allowed = model.Allowed
|
||||
};
|
||||
}
|
||||
|
||||
public static LanguageProfile ToModel(this LanguageProfileResource resource)
|
||||
{
|
||||
if (resource == null) return null;
|
||||
|
||||
return new LanguageProfile
|
||||
{
|
||||
Id = resource.Id,
|
||||
Name = resource.Name,
|
||||
UpgradeAllowed = resource.UpgradeAllowed,
|
||||
Cutoff = (NzbDrone.Core.Languages.Language)resource.Cutoff.Id,
|
||||
Languages = resource.Languages.ConvertAll(ToModel)
|
||||
};
|
||||
}
|
||||
|
||||
public static LanguageProfileItem ToModel(this ProfileLanguageItemResource resource)
|
||||
{
|
||||
if (resource == null) return null;
|
||||
|
||||
return new LanguageProfileItem
|
||||
{
|
||||
Language = (NzbDrone.Core.Languages.Language)resource.Language.Id,
|
||||
Allowed = resource.Allowed
|
||||
};
|
||||
}
|
||||
|
||||
public static List<LanguageProfileResource> ToResource(this IEnumerable<LanguageProfile> models)
|
||||
{
|
||||
return models.Select(ToResource).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using Lidarr.Http;
|
||||
|
||||
namespace Lidarr.Api.V1.Profiles.Language
|
||||
{
|
||||
public class LanguageProfileSchemaModule : LidarrRestModule<LanguageProfileResource>
|
||||
{
|
||||
private readonly LanguageProfileService _languageProfileService;
|
||||
|
||||
public LanguageProfileSchemaModule(LanguageProfileService languageProfileService)
|
||||
: base("/languageprofile/schema")
|
||||
{
|
||||
_languageProfileService = languageProfileService;
|
||||
GetResourceSingle = GetAll;
|
||||
}
|
||||
|
||||
private LanguageProfileResource GetAll()
|
||||
{
|
||||
var profile = _languageProfileService.GetDefaultProfile(string.Empty);
|
||||
return profile.ToResource();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FluentValidation;
|
||||
using FluentValidation.Validators;
|
||||
|
||||
namespace Lidarr.Api.V1.Profiles.Language
|
||||
{
|
||||
public static class LanguageValidation
|
||||
{
|
||||
public static IRuleBuilderOptions<T, IList<ProfileLanguageItemResource>> MustHaveAllowedLanguage<T>(this IRuleBuilder<T, IList<ProfileLanguageItemResource>> ruleBuilder)
|
||||
{
|
||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||
|
||||
return ruleBuilder.SetValidator(new LanguageValidator<T>());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class LanguageValidator<T> : PropertyValidator
|
||||
{
|
||||
public LanguageValidator()
|
||||
: base("Must have at least one allowed language")
|
||||
{
|
||||
}
|
||||
|
||||
protected override bool IsValid(PropertyValidatorContext context)
|
||||
{
|
||||
var list = context.PropertyValue as IList<ProfileLanguageItemResource>;
|
||||
|
||||
if (list == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!list.Any(c => c.Allowed))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,7 @@ using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
using NzbDrone.Core.Download.Pending;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Queue;
|
||||
@@ -23,13 +21,11 @@ namespace Lidarr.Api.V1.Queue
|
||||
private readonly IQueueService _queueService;
|
||||
private readonly IPendingReleaseService _pendingReleaseService;
|
||||
|
||||
private readonly LanguageComparer LANGUAGE_COMPARER;
|
||||
private readonly QualityModelComparer QUALITY_COMPARER;
|
||||
|
||||
public QueueModule(IBroadcastSignalRMessage broadcastSignalRMessage,
|
||||
IQueueService queueService,
|
||||
IPendingReleaseService pendingReleaseService,
|
||||
ILanguageProfileService languageProfileService,
|
||||
QualityProfileService qualityProfileService)
|
||||
: base(broadcastSignalRMessage)
|
||||
{
|
||||
@@ -37,7 +33,6 @@ namespace Lidarr.Api.V1.Queue
|
||||
_pendingReleaseService = pendingReleaseService;
|
||||
GetResourcePaged = GetQueue;
|
||||
|
||||
LANGUAGE_COMPARER = new LanguageComparer(languageProfileService.GetDefaultProfile(string.Empty));
|
||||
QUALITY_COMPARER = new QualityModelComparer(qualityProfileService.GetDefaultProfile(string.Empty));
|
||||
}
|
||||
|
||||
@@ -98,13 +93,6 @@ namespace Lidarr.Api.V1.Queue
|
||||
: fullQueue.OrderByDescending(q => q.DownloadClient, StringComparer.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
else if (pagingSpec.SortKey == "language")
|
||||
{
|
||||
ordered = ascending
|
||||
? fullQueue.OrderBy(q => q.Language, LANGUAGE_COMPARER)
|
||||
: fullQueue.OrderByDescending(q => q.Language, LANGUAGE_COMPARER);
|
||||
}
|
||||
|
||||
else if (pagingSpec.SortKey == "quality")
|
||||
{
|
||||
ordered = ascending
|
||||
@@ -147,8 +135,6 @@ namespace Lidarr.Api.V1.Queue
|
||||
return q => q.Album?.Title;
|
||||
case "album.releaseDate":
|
||||
return q => q.Album?.ReleaseDate;
|
||||
case "language":
|
||||
return q => q.Language;
|
||||
case "quality":
|
||||
return q => q.Quality;
|
||||
case "progress":
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Download.TrackedDownloads;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Lidarr.Api.V1.Albums;
|
||||
using Lidarr.Api.V1.Artist;
|
||||
@@ -17,7 +16,6 @@ namespace Lidarr.Api.V1.Queue
|
||||
public int? AlbumId { get; set; }
|
||||
public ArtistResource Artist { get; set; }
|
||||
public AlbumResource Album { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public decimal Size { get; set; }
|
||||
public string Title { get; set; }
|
||||
@@ -49,7 +47,6 @@ namespace Lidarr.Api.V1.Queue
|
||||
AlbumId = model.Album?.Id,
|
||||
Artist = includeArtist && model.Artist != null ? model.Artist.ToResource() : null,
|
||||
Album = includeAlbum && model.Album != null ? model.Album.ToResource() : null,
|
||||
Language = model.Language,
|
||||
Quality = model.Quality,
|
||||
Size = model.Size,
|
||||
Title = model.Title,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
|
||||
namespace Lidarr.Api.V1.TrackFiles
|
||||
@@ -7,7 +6,6 @@ namespace Lidarr.Api.V1.TrackFiles
|
||||
public class TrackFileListResource
|
||||
{
|
||||
public List<int> TrackFileIds { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,11 +123,6 @@ namespace Lidarr.Api.V1.TrackFiles
|
||||
|
||||
foreach (var trackFile in trackFiles)
|
||||
{
|
||||
if (resource.Language != null)
|
||||
{
|
||||
trackFile.Language = resource.Language;
|
||||
}
|
||||
|
||||
if (resource.Quality != null)
|
||||
{
|
||||
trackFile.Quality = resource.Quality;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Lidarr.Http.REST;
|
||||
@@ -16,13 +15,10 @@ namespace Lidarr.Api.V1.TrackFiles
|
||||
public string Path { get; set; }
|
||||
public long Size { get; set; }
|
||||
public DateTime DateAdded { get; set; }
|
||||
//public string SceneName { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public MediaInfoResource MediaInfo { get; set; }
|
||||
|
||||
public bool QualityCutoffNotMet { get; set; }
|
||||
public bool LanguageCutoffNotMet { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -43,7 +39,6 @@ namespace Lidarr.Api.V1.TrackFiles
|
||||
Size = model.Size,
|
||||
DateAdded = model.DateAdded,
|
||||
// SceneName = model.SceneName,
|
||||
Language = model.Language,
|
||||
Quality = model.Quality,
|
||||
MediaInfo = model.MediaInfo.ToResource()
|
||||
//QualityCutoffNotMet
|
||||
@@ -66,11 +61,9 @@ namespace Lidarr.Api.V1.TrackFiles
|
||||
Size = model.Size,
|
||||
DateAdded = model.DateAdded,
|
||||
//SceneName = model.SceneName,
|
||||
Language = model.Language,
|
||||
Quality = model.Quality,
|
||||
MediaInfo = model.MediaInfo.ToResource(),
|
||||
QualityCutoffNotMet = upgradableSpecification.QualityCutoffNotMet(artist.QualityProfile.Value, model.Quality),
|
||||
LanguageCutoffNotMet = upgradableSpecification.LanguageCutoffNotMet(artist.LanguageProfile.Value, model.Language)
|
||||
QualityCutoffNotMet = upgradableSpecification.QualityCutoffNotMet(artist.QualityProfile.Value, model.Quality)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
using System;
|
||||
using FluentAssertions;
|
||||
using Marr.Data.Converters;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore.Converters;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore.Converters
|
||||
{
|
||||
[TestFixture]
|
||||
public class LanguageIntConverterFixture : CoreTest<LanguageIntConverter>
|
||||
{
|
||||
[Test]
|
||||
public void should_return_int_when_saving_language_to_db()
|
||||
{
|
||||
var quality = Language.English;
|
||||
|
||||
Subject.ToDB(quality).Should().Be(quality.Id);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_0_when_saving_db_null_to_db()
|
||||
{
|
||||
Subject.ToDB(DBNull.Value).Should().Be(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_throw_when_saving_another_object_to_db()
|
||||
{
|
||||
Assert.Throws<InvalidOperationException>(() => Subject.ToDB("Not a language"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_language_when_getting_string_from_db()
|
||||
{
|
||||
var language = Language.English;
|
||||
|
||||
var context = new ConverterContext
|
||||
{
|
||||
DbValue = language.Id
|
||||
};
|
||||
|
||||
Subject.FromDB(context).Should().Be(language);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_db_null_for_db_null_value_when_getting_from_db()
|
||||
{
|
||||
var context = new ConverterContext
|
||||
{
|
||||
DbValue = DBNull.Value
|
||||
};
|
||||
|
||||
Subject.FromDB(context).Should().Be(Language.Unknown);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
using System;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore
|
||||
|
||||
@@ -6,9 +6,6 @@ using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using Marr.Data.QGen;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -29,17 +26,7 @@ namespace NzbDrone.Core.Test.Datastore
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
};
|
||||
|
||||
var languageProfile = new LanguageProfile
|
||||
{
|
||||
Name = "Test",
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
|
||||
|
||||
profile = Db.Insert(profile);
|
||||
languageProfile = Db.Insert(languageProfile);
|
||||
|
||||
var metadata = Builder<ArtistMetadata>.CreateNew()
|
||||
.With(v => v.Id = 0)
|
||||
@@ -50,7 +37,6 @@ namespace NzbDrone.Core.Test.Datastore
|
||||
.All()
|
||||
.With(v => v.Id = 0)
|
||||
.With(v => v.QualityProfileId = profile.Id)
|
||||
.With(v => v.LanguageProfileId = languageProfile.Id)
|
||||
.With(v => v.ArtistMetadataId = metadata.Id)
|
||||
.BuildListOfNew();
|
||||
|
||||
@@ -130,7 +116,6 @@ namespace NzbDrone.Core.Test.Datastore
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.Value.Artist.IsLoaded);
|
||||
Assert.IsNotNull(track.AlbumRelease.Value.Album.Value.Artist.Value);
|
||||
Assert.IsFalse(track.AlbumRelease.Value.Album.Value.Artist.Value.QualityProfile.IsLoaded);
|
||||
Assert.IsFalse(track.AlbumRelease.Value.Album.Value.Artist.Value.LanguageProfile.IsLoaded);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,33 +291,7 @@ namespace NzbDrone.Core.Test.Datastore
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.Value.Artist.IsLoaded);
|
||||
Assert.IsNotNull(track.AlbumRelease.Value.Album.Value.Artist.Value);
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.Value.Artist.Value.QualityProfile.IsLoaded);
|
||||
Assert.IsFalse(track.AlbumRelease.Value.Album.Value.Artist.Value.LanguageProfile.IsLoaded);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_explicit_load_languageprofile_if_joined()
|
||||
{
|
||||
var db = Mocker.Resolve<IDatabase>();
|
||||
var DataMapper = db.GetDataMapper();
|
||||
|
||||
var tracks = DataMapper.Query<Track>()
|
||||
.Join<Track, AlbumRelease>(JoinType.Inner, v => v.AlbumRelease, (l, r) => l.AlbumReleaseId == r.Id)
|
||||
.Join<AlbumRelease, Album>(JoinType.Inner, v => v.Album, (l, r) => l.AlbumId == r.Id)
|
||||
.Join<Album, Artist>(JoinType.Inner, v => v.Artist, (l, r) => l.ArtistMetadataId == r.ArtistMetadataId)
|
||||
.Join<Artist, LanguageProfile>(JoinType.Inner, v => v.LanguageProfile, (l, r) => l.LanguageProfileId == r.Id)
|
||||
.ToList();
|
||||
|
||||
foreach (var track in tracks)
|
||||
{
|
||||
Assert.IsTrue(track.AlbumRelease.IsLoaded);
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.IsLoaded);
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.Value.Artist.IsLoaded);
|
||||
Assert.IsNotNull(track.AlbumRelease.Value.Album.Value.Artist.Value);
|
||||
Assert.IsFalse(track.AlbumRelease.Value.Album.Value.Artist.Value.QualityProfile.IsLoaded);
|
||||
Assert.IsTrue(track.AlbumRelease.Value.Album.Value.Artist.Value.LanguageProfile.IsLoaded);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
@@ -46,7 +45,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
.Build();
|
||||
|
||||
_firstFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now, Language = Language.English };
|
||||
_firstFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
|
||||
|
||||
_mp3 = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
_flac = new QualityModel(Quality.FLAC, new Revision(version: 1));
|
||||
|
||||
@@ -4,9 +4,6 @@ using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
@@ -26,13 +23,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_256.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_192, new Revision(version: 2)) },
|
||||
new List<Language> { Language.English }, NoPreferredWordScore).Should().BeTrue();
|
||||
NoPreferredWordScore).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -44,13 +36,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_256.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_256, new Revision(version: 2)) },
|
||||
new List<Language> { Language.English }, NoPreferredWordScore).Should().BeFalse();
|
||||
NoPreferredWordScore).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -63,13 +50,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_256.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.English }, NoPreferredWordScore).Should().BeFalse();
|
||||
NoPreferredWordScore).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -82,13 +64,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 1)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.MP3_320, new Revision(version: 2))).Should().BeTrue();
|
||||
|
||||
@@ -104,140 +80,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2))).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_quality_cutoff_is_met_and_quality_is_higher_but_language_is_not_met()
|
||||
{
|
||||
|
||||
QualityProfile _profile = new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2))).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_cutoff_is_met_and_quality_is_higher_and_language_is_met()
|
||||
{
|
||||
|
||||
QualityProfile _profile = new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(
|
||||
_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.Spanish },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2))).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_cutoff_is_met_and_quality_is_higher_and_language_is_higher()
|
||||
{
|
||||
|
||||
QualityProfile _profile = new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(
|
||||
_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.French },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2))).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_cutoff_is_not_met_and_new_quality_is_higher_and_language_is_higher()
|
||||
{
|
||||
|
||||
QualityProfile _profile = new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(
|
||||
_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_256, new Revision(version: 2)) },
|
||||
new List<Language> { Language.French },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2))).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_cutoff_is_not_met_and_language_is_higher()
|
||||
{
|
||||
|
||||
QualityProfile _profile = new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(
|
||||
_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_256, new Revision(version: 2)) },
|
||||
new List<Language> { Language.French },
|
||||
NoPreferredWordScore).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_cutoffs_are_met_and_score_is_higher()
|
||||
{
|
||||
@@ -247,17 +94,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
LanguageProfile _langProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
Subject.CutoffNotMet(
|
||||
_profile,
|
||||
_langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
|
||||
new List<Language> { Language.Spanish },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.FLAC, new Revision(version: 2)),
|
||||
10).Should().BeTrue();
|
||||
|
||||
@@ -14,9 +14,6 @@ using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
@@ -27,8 +24,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
|
||||
private RemoteAlbum _parseResultMulti;
|
||||
private RemoteAlbum _parseResultSingle;
|
||||
private Tuple<QualityModel, Language> _upgradableQuality;
|
||||
private Tuple<QualityModel, Language> _notupgradableQuality;
|
||||
private QualityModel _upgradableQuality;
|
||||
private QualityModel _notupgradableQuality;
|
||||
private Artist _fakeArtist;
|
||||
private const int FIRST_ALBUM_ID = 1;
|
||||
private const int SECOND_ALBUM_ID = 2;
|
||||
@@ -39,10 +36,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Mocker.Resolve<UpgradableSpecification>();
|
||||
_upgradeHistory = Mocker.Resolve<HistorySpecification>();
|
||||
|
||||
var singleAlbumList = new List<Album> { new Album { Id = FIRST_ALBUM_ID} };
|
||||
var doubleAlbumList = new List<Album> {
|
||||
new Album {Id = FIRST_ALBUM_ID },
|
||||
new Album {Id = SECOND_ALBUM_ID },
|
||||
var singleAlbumList = new List<Album> { new Album { Id = FIRST_ALBUM_ID } };
|
||||
var doubleAlbumList = new List<Album> {
|
||||
new Album {Id = FIRST_ALBUM_ID },
|
||||
new Album {Id = SECOND_ALBUM_ID },
|
||||
new Album {Id = 3 }
|
||||
};
|
||||
|
||||
@@ -53,40 +50,34 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
})
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
UpgradeAllowed = true,
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = LanguageFixture.GetDefaultLanguages()
|
||||
})
|
||||
.Build();
|
||||
|
||||
_parseResultMulti = new RemoteAlbum
|
||||
{
|
||||
Artist = _fakeArtist,
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)), Language = Language.English },
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) },
|
||||
Albums = doubleAlbumList
|
||||
};
|
||||
|
||||
_parseResultSingle = new RemoteAlbum
|
||||
{
|
||||
Artist = _fakeArtist,
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)), Language = Language.English },
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) },
|
||||
Albums = singleAlbumList
|
||||
};
|
||||
|
||||
_upgradableQuality = new Tuple<QualityModel, Language>(new QualityModel(Quality.MP3_192, new Revision(version: 1)), Language.English);
|
||||
_notupgradableQuality = new Tuple<QualityModel, Language>(new QualityModel(Quality.MP3_320, new Revision(version: 2)), Language.English);
|
||||
_upgradableQuality = new QualityModel(Quality.MP3_192, new Revision(version: 1));
|
||||
_notupgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 2));
|
||||
|
||||
Mocker.GetMock<IConfigService>()
|
||||
.SetupGet(s => s.EnableCompletedDownloadHandling)
|
||||
.Returns(true);
|
||||
}
|
||||
|
||||
private void GivenMostRecentForAlbum(int albumId, string downloadId, Tuple<QualityModel, Language> quality, DateTime date, HistoryEventType eventType)
|
||||
private void GivenMostRecentForAlbum(int albumId, string downloadId, QualityModel quality, DateTime date, HistoryEventType eventType)
|
||||
{
|
||||
Mocker.GetMock<IHistoryService>().Setup(s => s.MostRecentForAlbum(albumId))
|
||||
.Returns(new History.History { DownloadId = downloadId, Quality = quality.Item1, Date = date, EventType = eventType, Language = quality.Item2 });
|
||||
.Returns(new History.History { DownloadId = downloadId, Quality = quality, Date = date, EventType = eventType });
|
||||
}
|
||||
|
||||
private void GivenCdhDisabled()
|
||||
@@ -174,7 +165,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
|
||||
_parseResultSingle.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
_upgradableQuality = new Tuple<QualityModel, Language>(new QualityModel(Quality.MP3_320, new Revision(version: 1)), Language.English);
|
||||
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
|
||||
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
|
||||
|
||||
@@ -186,7 +177,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
|
||||
_parseResultSingle.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
_upgradableQuality = new Tuple<QualityModel, Language>(new QualityModel(Quality.MP3_320, new Revision(version: 1)), Language.Spanish);
|
||||
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
|
||||
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
|
||||
|
||||
@@ -214,7 +205,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
GivenCdhDisabled();
|
||||
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
|
||||
_parseResultSingle.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
_upgradableQuality = new Tuple<QualityModel, Language>(new QualityModel(Quality.MP3_320, new Revision(version: 1)), Language.Spanish);
|
||||
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
|
||||
|
||||
GivenMostRecentForAlbum(FIRST_ALBUM_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
using FluentAssertions;
|
||||
using Marr.Data;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
[TestFixture]
|
||||
|
||||
public class LanguageSpecificationFixture : CoreTest
|
||||
{
|
||||
private RemoteAlbum _remoteAlbum;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
|
||||
LanguageProfile _profile = new LazyLoaded<LanguageProfile>(new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.Spanish),
|
||||
Cutoff = Language.Spanish
|
||||
});
|
||||
|
||||
|
||||
_remoteAlbum = new RemoteAlbum
|
||||
{
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Language = Language.English
|
||||
},
|
||||
|
||||
Artist = new Artist
|
||||
{
|
||||
LanguageProfile = _profile
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void WithEnglishRelease()
|
||||
{
|
||||
_remoteAlbum.ParsedAlbumInfo.Language = Language.English;
|
||||
}
|
||||
|
||||
private void WithGermanRelease()
|
||||
{
|
||||
_remoteAlbum.ParsedAlbumInfo.Language = Language.German;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_language_is_english()
|
||||
{
|
||||
WithEnglishRelease();
|
||||
|
||||
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_language_is_german()
|
||||
{
|
||||
WithGermanRelease();
|
||||
|
||||
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,6 @@ using FluentAssertions;
|
||||
using FizzWare.NBuilder;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
@@ -37,12 +34,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.Build();
|
||||
}
|
||||
|
||||
private RemoteAlbum GivenRemoteAlbum(List<Album> albums, QualityModel quality, Language language, int age = 0, long size = 0, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet)
|
||||
private RemoteAlbum GivenRemoteAlbum(List<Album> albums, QualityModel quality, int age = 0, long size = 0, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet)
|
||||
{
|
||||
var remoteAlbum = new RemoteAlbum();
|
||||
remoteAlbum.ParsedAlbumInfo = new ParsedAlbumInfo();
|
||||
remoteAlbum.ParsedAlbumInfo.Quality = quality;
|
||||
remoteAlbum.ParsedAlbumInfo.Language = language;
|
||||
|
||||
remoteAlbum.Albums = new List<Album>();
|
||||
remoteAlbum.Albums.AddRange(albums);
|
||||
@@ -56,11 +52,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(e => e.QualityProfile = new QualityProfile
|
||||
{
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
})
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = Language.Spanish
|
||||
}).Build();
|
||||
|
||||
remoteAlbum.DownloadAllowed = true;
|
||||
@@ -81,8 +72,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_put_propers_before_non_propers()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 1)), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 2)), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 1)));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 2)));
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -95,8 +86,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_put_higher_quality_before_lower()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -109,10 +100,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_order_by_age_then_largest_rounded_to_200mb()
|
||||
{
|
||||
var remoteAlbumSd = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192), Language.English, size: 100.Megabytes(), age: 1);
|
||||
var remoteAlbumHdSmallOld = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, size: 1200.Megabytes(), age: 1000);
|
||||
var remoteAlbumSmallYoung = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, size: 1250.Megabytes(), age: 10);
|
||||
var remoteAlbumHdLargeYoung = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, size: 3000.Megabytes(), age: 1);
|
||||
var remoteAlbumSd = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192), size: 100.Megabytes(), age: 1);
|
||||
var remoteAlbumHdSmallOld = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), size: 1200.Megabytes(), age: 1000);
|
||||
var remoteAlbumSmallYoung = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), size: 1250.Megabytes(), age: 10);
|
||||
var remoteAlbumHdLargeYoung = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), size: 3000.Megabytes(), age: 1);
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbumSd));
|
||||
@@ -127,8 +118,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_order_by_youngest()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, age: 10);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, age: 5);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), age: 10);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), age: 5);
|
||||
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
@@ -142,8 +133,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_not_throw_if_no_albums_are_found()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, size: 500.Megabytes());
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, size: 500.Megabytes());
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), size: 500.Megabytes());
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), size: 500.Megabytes());
|
||||
|
||||
remoteAlbum1.Albums = new List<Album>();
|
||||
|
||||
@@ -159,8 +150,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
GivenPreferredDownloadProtocol(DownloadProtocol.Usenet);
|
||||
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, downloadProtocol: DownloadProtocol.Torrent);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, downloadProtocol: DownloadProtocol.Usenet);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Torrent);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Usenet);
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -175,8 +166,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
GivenPreferredDownloadProtocol(DownloadProtocol.Torrent);
|
||||
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, downloadProtocol: DownloadProtocol.Torrent);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English, downloadProtocol: DownloadProtocol.Usenet);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Torrent);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Usenet);
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -189,8 +180,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_discography_pack_above_single_album()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.FLAC), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.FLAC));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
||||
|
||||
remoteAlbum1.ParsedAlbumInfo.Discography = true;
|
||||
|
||||
@@ -205,8 +196,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_quality_over_discography_pack()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
||||
|
||||
remoteAlbum1.ParsedAlbumInfo.Discography = true;
|
||||
|
||||
@@ -221,8 +212,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_single_album_over_multi_album()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -235,8 +226,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_releases_with_more_seeders()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var torrentInfo1 = new TorrentInfo();
|
||||
torrentInfo1.PublishDate = DateTime.Now;
|
||||
@@ -261,8 +252,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_releases_with_more_peers_given_equal_number_of_seeds()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var torrentInfo1 = new TorrentInfo();
|
||||
torrentInfo1.PublishDate = DateTime.Now;
|
||||
@@ -289,8 +280,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_releases_with_more_peers_no_seeds()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var torrentInfo1 = new TorrentInfo();
|
||||
torrentInfo1.PublishDate = DateTime.Now;
|
||||
@@ -318,8 +309,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_first_release_if_peers_and_size_are_too_similar()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
var torrentInfo1 = new TorrentInfo();
|
||||
torrentInfo1.PublishDate = DateTime.Now;
|
||||
@@ -347,8 +338,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_first_release_if_age_and_size_are_too_similar()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
|
||||
remoteAlbum1.Release.PublishDate = DateTime.UtcNow.AddDays(-100);
|
||||
remoteAlbum1.Release.Size = 200.Megabytes();
|
||||
@@ -367,8 +358,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_quality_over_the_number_of_peers()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_192));
|
||||
|
||||
var torrentInfo1 = new TorrentInfo();
|
||||
torrentInfo1.PublishDate = DateTime.Now;
|
||||
@@ -393,29 +384,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
((TorrentInfo)qualifiedReports.First().RemoteAlbum.Release).Should().Be(torrentInfo1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_order_by_language()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), Language.French);
|
||||
var remoteAlbum3 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), Language.German);
|
||||
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
decisions.Add(new DownloadDecision(remoteAlbum2));
|
||||
decisions.Add(new DownloadDecision(remoteAlbum3));
|
||||
|
||||
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
||||
qualifiedReports.First().RemoteAlbum.ParsedAlbumInfo.Language.Should().Be(Language.French);
|
||||
qualifiedReports.Last().RemoteAlbum.ParsedAlbumInfo.Language.Should().Be(Language.German);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_put_higher_quality_before_lower_always()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256), Language.French);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), Language.German);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
||||
|
||||
var decisions = new List<DownloadDecision>();
|
||||
decisions.Add(new DownloadDecision(remoteAlbum1));
|
||||
@@ -429,8 +402,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
[Test]
|
||||
public void should_prefer_higher_score_over_lower_score()
|
||||
{
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
||||
|
||||
remoteAlbum1.PreferredWordScore = 10;
|
||||
remoteAlbum2.PreferredWordScore = 0;
|
||||
@@ -450,8 +423,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.Setup(s => s.DownloadPropersAndRepacks)
|
||||
.Returns(ProperDownloadTypes.PreferAndUpgrade);
|
||||
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
||||
|
||||
remoteAlbum1.PreferredWordScore = 10;
|
||||
remoteAlbum2.PreferredWordScore = 0;
|
||||
@@ -471,8 +444,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.Setup(s => s.DownloadPropersAndRepacks)
|
||||
.Returns(ProperDownloadTypes.DoNotUpgrade);
|
||||
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
||||
|
||||
remoteAlbum1.PreferredWordScore = 10;
|
||||
remoteAlbum2.PreferredWordScore = 0;
|
||||
@@ -492,8 +465,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.Setup(s => s.DownloadPropersAndRepacks)
|
||||
.Returns(ProperDownloadTypes.DoNotPrefer);
|
||||
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)), Language.English);
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)), Language.English);
|
||||
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
||||
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
||||
|
||||
remoteAlbum1.PreferredWordScore = 10;
|
||||
remoteAlbum2.PreferredWordScore = 0;
|
||||
|
||||
@@ -10,8 +10,6 @@ using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Queue;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
@@ -38,12 +36,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
UpgradeAllowed = true,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
})
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
Languages = Languages.LanguageFixture.GetDefaultLanguages(),
|
||||
UpgradeAllowed = true,
|
||||
Cutoff = Language.Spanish
|
||||
})
|
||||
.Build();
|
||||
|
||||
_album = Builder<Album>.CreateNew()
|
||||
@@ -65,7 +57,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
_remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256), Language = Language.Spanish })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256) })
|
||||
.With(r => r.PreferredWordScore = 0)
|
||||
.Build();
|
||||
}
|
||||
@@ -119,8 +111,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
Language = Language.Spanish
|
||||
Quality = new QualityModel(Quality.MP3_256)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -134,36 +125,13 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
public void should_return_true_when_quality_in_queue_is_lower()
|
||||
{
|
||||
_artist.QualityProfile.Value.Cutoff = Quality.MP3_320.Id;
|
||||
_artist.LanguageProfile.Value.Cutoff = Language.Spanish;
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192),
|
||||
Language = Language.Spanish
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteAlbum> { remoteAlbum });
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_quality_in_queue_is_lower_but_language_is_higher()
|
||||
{
|
||||
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
|
||||
_artist.LanguageProfile.Value.Cutoff = Language.Spanish;
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_192)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -190,7 +158,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_qualities_are_the_same_and_languages_are_the_same_with_higher_preferred_word_score()
|
||||
public void should_return_true_when_qualities_are_the_same_with_higher_preferred_word_score()
|
||||
{
|
||||
_remoteAlbum.PreferredWordScore = 1;
|
||||
|
||||
@@ -199,8 +167,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
Language = Language.Spanish,
|
||||
Quality = new QualityModel(Quality.MP3_256)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -210,15 +177,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_qualities_are_the_same_and_languages_are_the_same()
|
||||
public void should_return_false_when_qualities_are_the_same()
|
||||
{
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192),
|
||||
Language = Language.Spanish
|
||||
Quality = new QualityModel(Quality.MP3_192)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -227,45 +193,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_qualities_are_the_same_but_language_is_better()
|
||||
{
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192),
|
||||
Language = Language.English,
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteAlbum> { remoteAlbum });
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_when_quality_is_better_language_is_better_and_upgrade_allowed_is_false_for_quality_profile()
|
||||
{
|
||||
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
|
||||
_artist.QualityProfile.Value.UpgradeAllowed = false;
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_224),
|
||||
Language = Language.English
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteAlbum> { remoteAlbum });
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_quality_in_queue_is_better()
|
||||
{
|
||||
@@ -276,8 +203,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_320)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -294,8 +220,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album, _otherAlbum })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_320)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -312,8 +237,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_320)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -332,8 +256,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album, _otherAlbum })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_320)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
@@ -352,8 +275,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Language = Language.English
|
||||
Quality = new QualityModel(Quality.MP3_320)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.TheFirst(1)
|
||||
@@ -368,48 +290,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_quality_and_language_in_queue_meets_cutoff()
|
||||
{
|
||||
_artist.QualityProfile.Value.Cutoff = _remoteAlbum.ParsedAlbumInfo.Quality.Quality.Id;
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
Language = Language.Spanish
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteAlbum> { remoteAlbum });
|
||||
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_quality_are_the_same_language_is_better_and_upgrade_allowed_is_false_for_language_profile()
|
||||
{
|
||||
_artist.LanguageProfile.Value.UpgradeAllowed = false;
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(r => r.Artist = _artist)
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
Language = Language.English
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
GivenQueue(new List<RemoteAlbum> { remoteAlbum });
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_quality_is_better_languages_are_the_same_and_upgrade_allowed_is_false_for_quality_profile()
|
||||
public void should_return_false_when_quality_is_better_and_upgrade_allowed_is_false_for_quality_profile()
|
||||
{
|
||||
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
|
||||
_artist.QualityProfile.Value.UpgradeAllowed = false;
|
||||
@@ -419,8 +300,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
.With(r => r.Albums = new List<Album> { _album })
|
||||
.With(r => r.ParsedAlbumInfo = new ParsedAlbumInfo
|
||||
{
|
||||
Quality = new QualityModel(Quality.FLAC),
|
||||
Language = Language.Spanish
|
||||
Quality = new QualityModel(Quality.FLAC)
|
||||
})
|
||||
.With(r => r.Release = _releaseInfo)
|
||||
.Build();
|
||||
|
||||
@@ -14,8 +14,6 @@ using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Delay;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
@@ -27,7 +25,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
public class DelaySpecificationFixture : CoreTest<DelaySpecification>
|
||||
{
|
||||
private QualityProfile _profile;
|
||||
private LanguageProfile _langProfile;
|
||||
private DelayProfile _delayProfile;
|
||||
private RemoteAlbum _remoteAlbum;
|
||||
|
||||
@@ -37,9 +34,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
_profile = Builder<QualityProfile>.CreateNew()
|
||||
.Build();
|
||||
|
||||
_langProfile = Builder<LanguageProfile>.CreateNew()
|
||||
.Build();
|
||||
|
||||
|
||||
_delayProfile = Builder<DelayProfile>.CreateNew()
|
||||
.With(d => d.PreferredProtocol = DownloadProtocol.Usenet)
|
||||
@@ -47,7 +41,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
|
||||
var artist = Builder<Artist>.CreateNew()
|
||||
.With(s => s.QualityProfile = _profile)
|
||||
.With(s => s.LanguageProfile = _langProfile)
|
||||
.Build();
|
||||
|
||||
_remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
@@ -61,9 +54,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
|
||||
_profile.Cutoff = Quality.MP3_320.Id;
|
||||
|
||||
_langProfile.Cutoff = Language.Spanish;
|
||||
_langProfile.Languages = Languages.LanguageFixture.GetDefaultLanguages();
|
||||
|
||||
_remoteAlbum.ParsedAlbumInfo = new ParsedAlbumInfo();
|
||||
_remoteAlbum.Release = new ReleaseInfo();
|
||||
_remoteAlbum.Release.DownloadProtocol = DownloadProtocol.Usenet;
|
||||
@@ -83,20 +73,19 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
.Returns(new List<RemoteAlbum>());
|
||||
}
|
||||
|
||||
private void GivenExistingFile(QualityModel quality, Language language)
|
||||
private void GivenExistingFile(QualityModel quality)
|
||||
{
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(s => s.GetFilesByAlbum(It.IsAny<int>()))
|
||||
.Returns(new List<TrackFile> { new TrackFile {
|
||||
Quality = quality,
|
||||
Language = language
|
||||
Quality = quality
|
||||
} });
|
||||
}
|
||||
|
||||
private void GivenUpgradeForExistingFile()
|
||||
{
|
||||
Mocker.GetMock<IUpgradableSpecification>()
|
||||
.Setup(s => s.IsUpgradable(It.IsAny<QualityProfile>(), It.IsAny<LanguageProfile>(), It.IsAny<List<QualityModel>>(), It.IsAny<List<Language>>(), It.IsAny<int>(), It.IsAny<QualityModel>(), It.IsAny<Language>(), It.IsAny<int>()))
|
||||
.Setup(s => s.IsUpgradable(It.IsAny<QualityProfile>(), It.IsAny<List<QualityModel>>(), It.IsAny<int>(), It.IsAny<QualityModel>(), It.IsAny<int>()))
|
||||
.Returns(true);
|
||||
}
|
||||
|
||||
@@ -126,10 +115,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_true_when_quality_and_language_is_last_allowed_in_profile()
|
||||
public void should_be_true_when_quality_is_last_allowed_in_profile()
|
||||
{
|
||||
_remoteAlbum.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_320);
|
||||
_remoteAlbum.ParsedAlbumInfo.Language = Language.French;
|
||||
|
||||
Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
@@ -162,7 +150,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
_remoteAlbum.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2));
|
||||
_remoteAlbum.Release.PublishDate = DateTime.UtcNow;
|
||||
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_256), Language.English);
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_256));
|
||||
GivenUpgradeForExistingFile();
|
||||
|
||||
Mocker.GetMock<IUpgradableSpecification>()
|
||||
@@ -180,7 +168,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
_remoteAlbum.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(real: 1));
|
||||
_remoteAlbum.Release.PublishDate = DateTime.UtcNow;
|
||||
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_256), Language.English);
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_256));
|
||||
GivenUpgradeForExistingFile();
|
||||
|
||||
Mocker.GetMock<IUpgradableSpecification>()
|
||||
@@ -198,7 +186,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
|
||||
_remoteAlbum.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2));
|
||||
_remoteAlbum.Release.PublishDate = DateTime.UtcNow;
|
||||
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_192), Language.English);
|
||||
GivenExistingFile(new QualityModel(Quality.MP3_192));
|
||||
|
||||
_delayProfile.UsenetDelay = 720;
|
||||
|
||||
|
||||
@@ -4,9 +4,6 @@ using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
@@ -15,166 +12,20 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
public class UpgradeAllowedSpecificationFixture : CoreTest<UpgradableSpecification>
|
||||
{
|
||||
[Test]
|
||||
public void should_return_false_when_quality_are_the_same_language_is_better_and_upgrade_allowed_is_false_for_language_profile()
|
||||
public void should_return_false_when_quality_is_better_and_upgrade_allowed_is_false_for_quality_profile()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.French
|
||||
new QualityModel(Quality.FLAC)
|
||||
).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_quality_is_better_languages_are_the_same_and_upgrade_allowed_is_false_for_quality_profile()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.FLAC),
|
||||
Language.English
|
||||
).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_language_upgrade_when_upgrading_is_allowed()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.French
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_same_language_when_upgrading_is_allowed()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_same_language_when_upgrading_is_not_allowed()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.French },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_lower_language_when_upgrading_is_allowed()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.French },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_lower_language_when_upgrading_is_not_allowed()
|
||||
{
|
||||
Subject.IsUpgradeAllowed(
|
||||
new QualityProfile
|
||||
{
|
||||
Cutoff = Quality.FLAC.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English, Language.French),
|
||||
Cutoff = Language.French,
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.French },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_for_quality_upgrade_when_upgrading_is_allowed()
|
||||
{
|
||||
@@ -185,16 +36,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.FLAC),
|
||||
Language.English
|
||||
new QualityModel(Quality.FLAC)
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
@@ -208,16 +51,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
new QualityModel(Quality.MP3_320)
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
@@ -231,16 +66,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_320),
|
||||
Language.English
|
||||
new QualityModel(Quality.MP3_320)
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
@@ -254,16 +81,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_256),
|
||||
Language.English
|
||||
new QualityModel(Quality.MP3_256)
|
||||
).Should().BeTrue();
|
||||
}
|
||||
|
||||
@@ -277,16 +96,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
UpgradeAllowed = false
|
||||
},
|
||||
new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English,
|
||||
UpgradeAllowed = true
|
||||
},
|
||||
new List<QualityModel>{ new QualityModel(Quality.MP3_320) },
|
||||
new List<Language> { Language.English },
|
||||
new QualityModel(Quality.MP3_256),
|
||||
Language.English
|
||||
new QualityModel(Quality.MP3_256)
|
||||
).Should().BeTrue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
@@ -31,14 +29,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
{
|
||||
Mocker.Resolve<UpgradableSpecification>();
|
||||
|
||||
_firstFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now, Language = Language.English };
|
||||
_secondFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now, Language = Language.English };
|
||||
_firstFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
|
||||
_secondFile = new TrackFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
|
||||
|
||||
var singleAlbumList = new List<Album> { new Album {}};
|
||||
var doubleAlbumList = new List<Album> { new Album {}, new Album {}, new Album {} };
|
||||
|
||||
var languages = Languages.LanguageFixture.GetDefaultLanguages(Language.English, Language.Spanish);
|
||||
|
||||
var fakeArtist = Builder<Artist>.CreateNew()
|
||||
.With(c => c.QualityProfile = new QualityProfile
|
||||
{
|
||||
@@ -46,12 +42,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Cutoff = Quality.MP3_320.Id,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
})
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
UpgradeAllowed = true,
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = languages
|
||||
})
|
||||
.Build();
|
||||
|
||||
Mocker.GetMock<ITrackService>()
|
||||
@@ -65,14 +55,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
_parseResultMulti = new RemoteAlbum
|
||||
{
|
||||
Artist = fakeArtist,
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)), Language = Language.English },
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)) },
|
||||
Albums = doubleAlbumList
|
||||
};
|
||||
|
||||
_parseResultSingle = new RemoteAlbum
|
||||
{
|
||||
Artist = fakeArtist,
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)), Language = Language.English },
|
||||
ParsedAlbumInfo = new ParsedAlbumInfo { Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)) },
|
||||
Albums = singleAlbumList
|
||||
};
|
||||
|
||||
|
||||
@@ -5,9 +5,6 @@ using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Languages;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
@@ -26,16 +23,6 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
new object[] { Quality.MP3_320, 1, Quality.MP3_320, 1, Quality.MP3_320, false }
|
||||
};
|
||||
|
||||
public static object[] IsUpgradeTestCasesLanguages =
|
||||
{
|
||||
new object[] { Quality.MP3_192, 1, Language.English, Quality.MP3_192, 2, Language.English, Quality.MP3_192, Language.Spanish, true },
|
||||
new object[] { Quality.MP3_192, 1, Language.English, Quality.MP3_192, 1, Language.Spanish, Quality.MP3_192, Language.Spanish, true },
|
||||
new object[] { Quality.MP3_320, 1, Language.French, Quality.MP3_320, 2, Language.English, Quality.MP3_320, Language.Spanish, true },
|
||||
new object[] { Quality.MP3_192, 1, Language.English, Quality.MP3_192, 1, Language.English, Quality.MP3_192, Language.English, false },
|
||||
new object[] { Quality.MP3_320, 1, Language.English, Quality.MP3_256, 2, Language.Spanish, Quality.FLAC, Language.Spanish, false },
|
||||
new object[] { Quality.MP3_320, 1, Language.Spanish, Quality.MP3_256, 2, Language.French, Quality.MP3_320, Language.Spanish, false }
|
||||
};
|
||||
|
||||
private static readonly int NoPreferredWordScore = 0;
|
||||
|
||||
private void GivenAutoDownloadPropers(ProperDownloadTypes type)
|
||||
@@ -56,52 +43,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
||||
};
|
||||
|
||||
var langProfile = new LanguageProfile
|
||||
{
|
||||
UpgradeAllowed = true,
|
||||
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
Subject.IsUpgradable(
|
||||
profile,
|
||||
langProfile,
|
||||
new List<QualityModel> { new QualityModel(current, new Revision(version: currentVersion)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(newQuality, new Revision(version: newVersion)),
|
||||
Language.English,
|
||||
NoPreferredWordScore)
|
||||
.Should().Be(expected);
|
||||
}
|
||||
|
||||
[Test, TestCaseSource(nameof(IsUpgradeTestCasesLanguages))]
|
||||
public void IsUpgradeTestLanguage(Quality current, int currentVersion, Language currentLanguage, Quality newQuality, int newVersion, Language newLanguage, Quality cutoff, Language languageCutoff, bool expected)
|
||||
{
|
||||
GivenAutoDownloadPropers(ProperDownloadTypes.PreferAndUpgrade);
|
||||
|
||||
var profile = new QualityProfile
|
||||
{
|
||||
UpgradeAllowed = true,
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
Cutoff = cutoff.Id,
|
||||
};
|
||||
|
||||
var langProfile = new LanguageProfile
|
||||
{
|
||||
UpgradeAllowed = true,
|
||||
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = languageCutoff
|
||||
};
|
||||
|
||||
Subject.IsUpgradable(
|
||||
profile,
|
||||
langProfile,
|
||||
new List<QualityModel> { new QualityModel(current, new Revision(version: currentVersion)) },
|
||||
new List<Language> { currentLanguage },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(newQuality, new Revision(version: newVersion)),
|
||||
newLanguage,
|
||||
NoPreferredWordScore)
|
||||
.Should().Be(expected);
|
||||
}
|
||||
@@ -116,21 +62,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
var langProfile = new LanguageProfile
|
||||
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
Subject.IsUpgradable(
|
||||
profile,
|
||||
langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_256, new Revision(version: 1)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.MP3_256, new Revision(version: 2)),
|
||||
Language.English,
|
||||
NoPreferredWordScore)
|
||||
.Should().BeTrue();
|
||||
}
|
||||
@@ -145,20 +81,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
};
|
||||
|
||||
var langProfile = new LanguageProfile
|
||||
{
|
||||
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
Subject.IsUpgradable(
|
||||
profile,
|
||||
langProfile,
|
||||
new List<QualityModel> { new QualityModel(Quality.MP3_256, new Revision(version: 1)) },
|
||||
new List<Language> { Language.English },
|
||||
NoPreferredWordScore,
|
||||
new QualityModel(Quality.MP3_256, new Revision(version: 2)),
|
||||
Language.English,
|
||||
NoPreferredWordScore)
|
||||
.Should().BeFalse();
|
||||
}
|
||||
|
||||
@@ -213,11 +213,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -255,11 +251,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -297,11 +289,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -339,11 +327,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -381,11 +365,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -423,11 +403,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -465,11 +441,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -507,11 +479,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -549,11 +517,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -591,11 +555,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -633,11 +593,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
12
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -675,11 +631,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
13
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -717,11 +669,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
14
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -759,11 +707,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -801,11 +745,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -843,11 +783,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -885,11 +821,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -927,11 +859,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -969,11 +897,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1011,11 +935,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1053,11 +973,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1095,11 +1011,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1137,11 +1049,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1179,11 +1087,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1221,11 +1125,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
12
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1263,11 +1163,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
13
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1305,11 +1201,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
14
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1347,11 +1239,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
15
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1389,11 +1277,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
16
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -199,11 +199,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -250,11 +246,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -301,11 +293,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -352,11 +340,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -403,11 +387,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -454,11 +434,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -505,11 +481,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -556,11 +528,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -607,11 +575,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -658,11 +622,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -709,11 +669,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -760,11 +716,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
12
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -811,11 +763,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
13
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -862,11 +810,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
14
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -913,11 +857,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
15
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -964,11 +904,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1015,11 +951,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1066,11 +998,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1117,11 +1045,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1168,11 +1092,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1219,11 +1139,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1270,11 +1186,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1321,11 +1233,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1372,11 +1280,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1423,11 +1327,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1474,11 +1374,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1527,11 +1423,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -182,11 +182,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -218,11 +214,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -254,11 +246,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -290,11 +278,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -326,11 +310,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -362,11 +342,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -398,11 +374,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -434,11 +406,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -470,11 +438,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -506,11 +470,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -542,11 +502,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -578,11 +534,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -614,11 +566,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -650,11 +598,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -686,11 +630,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -722,11 +662,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -758,11 +694,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -794,11 +726,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -830,11 +758,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -866,11 +790,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -902,11 +822,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -938,11 +854,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
0
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -187,11 +187,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -228,11 +224,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -269,11 +261,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -310,11 +298,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -351,11 +335,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -392,11 +372,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -433,11 +409,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -474,11 +446,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -515,11 +483,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -556,11 +520,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -597,11 +557,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -638,11 +594,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
12
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -679,11 +631,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
13
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -720,11 +668,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
14
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -761,11 +705,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
15
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -802,11 +742,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
16
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -843,11 +779,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
17
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -884,11 +816,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
18
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -925,11 +853,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -966,11 +890,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1007,11 +927,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1048,11 +964,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1089,11 +1001,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1130,11 +1038,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1171,11 +1075,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1212,11 +1112,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1253,11 +1149,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1294,11 +1186,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1335,11 +1223,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1376,11 +1260,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
12
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1417,11 +1297,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
13
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -187,11 +187,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -187,11 +187,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -228,11 +224,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
11
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -188,11 +188,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
1
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -230,11 +226,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
2
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -272,11 +264,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
3
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -314,11 +302,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
4
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -356,11 +340,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
5
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -398,11 +378,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
6
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -440,11 +416,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
7
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -482,11 +454,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
8
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -524,11 +492,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
9
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -566,11 +530,7 @@
|
||||
},
|
||||
"trackNumbers": [
|
||||
10
|
||||
],
|
||||
"language": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -14,8 +14,6 @@ using System.Collections.Generic;
|
||||
using NzbDrone.Core.Test.Qualities;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.HistoryTests
|
||||
{
|
||||
@@ -23,7 +21,6 @@ namespace NzbDrone.Core.Test.HistoryTests
|
||||
{
|
||||
private QualityProfile _profile;
|
||||
private QualityProfile _profileCustom;
|
||||
private LanguageProfile _languageProfile;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
@@ -41,16 +38,6 @@ namespace NzbDrone.Core.Test.HistoryTests
|
||||
Items = QualityFixture.GetDefaultQualities(Quality.MP3_256),
|
||||
|
||||
};
|
||||
|
||||
|
||||
_languageProfile = new LanguageProfile
|
||||
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = Languages.LanguageFixture.GetDefaultLanguages()
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.Languages
|
||||
{
|
||||
[TestFixture]
|
||||
public class LanguageFixture : CoreTest
|
||||
{
|
||||
public static object[] FromIntCases =
|
||||
{
|
||||
new object[] {1, Language.English},
|
||||
new object[] {2, Language.French},
|
||||
new object[] {3, Language.Spanish},
|
||||
new object[] {4, Language.German},
|
||||
new object[] {5, Language.Italian},
|
||||
new object[] {6, Language.Danish},
|
||||
new object[] {7, Language.Dutch},
|
||||
new object[] {8, Language.Japanese},
|
||||
new object[] {9, Language.Cantonese},
|
||||
new object[] {10, Language.Mandarin},
|
||||
new object[] {11, Language.Russian},
|
||||
new object[] {12, Language.Polish},
|
||||
new object[] {13, Language.Vietnamese},
|
||||
new object[] {14, Language.Swedish},
|
||||
new object[] {15, Language.Norwegian},
|
||||
new object[] {16, Language.Finnish},
|
||||
new object[] {17, Language.Turkish},
|
||||
new object[] {18, Language.Portuguese},
|
||||
new object[] {19, Language.Flemish},
|
||||
new object[] {20, Language.Greek},
|
||||
new object[] {21, Language.Korean},
|
||||
new object[] {22, Language.Hungarian}
|
||||
};
|
||||
|
||||
public static object[] ToIntCases =
|
||||
{
|
||||
new object[] {Language.English, 1},
|
||||
new object[] {Language.French, 2},
|
||||
new object[] {Language.Spanish, 3},
|
||||
new object[] {Language.German, 4},
|
||||
new object[] {Language.Italian, 5},
|
||||
new object[] {Language.Danish, 6},
|
||||
new object[] {Language.Dutch, 7},
|
||||
new object[] {Language.Japanese, 8},
|
||||
new object[] {Language.Cantonese, 9},
|
||||
new object[] {Language.Mandarin, 10},
|
||||
new object[] {Language.Russian, 11},
|
||||
new object[] {Language.Polish, 12},
|
||||
new object[] {Language.Vietnamese, 13},
|
||||
new object[] {Language.Swedish, 14},
|
||||
new object[] {Language.Norwegian, 15},
|
||||
new object[] {Language.Finnish, 16},
|
||||
new object[] {Language.Turkish, 17},
|
||||
new object[] {Language.Portuguese, 18},
|
||||
new object[] {Language.Flemish, 19},
|
||||
new object[] {Language.Greek, 20},
|
||||
new object[] {Language.Korean, 21},
|
||||
new object[] {Language.Hungarian, 22}
|
||||
};
|
||||
|
||||
[Test, TestCaseSource("FromIntCases")]
|
||||
public void should_be_able_to_convert_int_to_languageTypes(int source, Language expected)
|
||||
{
|
||||
var language = (Language)source;
|
||||
language.Should().Be(expected);
|
||||
}
|
||||
|
||||
[Test, TestCaseSource("ToIntCases")]
|
||||
public void should_be_able_to_convert_languageTypes_to_int(Language source, int expected)
|
||||
{
|
||||
var i = (int)source;
|
||||
i.Should().Be(expected);
|
||||
}
|
||||
|
||||
public static List<LanguageProfileItem> GetDefaultLanguages(params Language[] allowed)
|
||||
{
|
||||
var languages = new List<Language>
|
||||
{
|
||||
Language.English,
|
||||
Language.Spanish,
|
||||
Language.French
|
||||
};
|
||||
|
||||
if (allowed.Length == 0)
|
||||
allowed = languages.ToArray();
|
||||
|
||||
var items = languages
|
||||
.Except(allowed)
|
||||
.Concat(allowed)
|
||||
.Select(v => new LanguageProfileItem { Language = v, Allowed = allowed.Contains(v) }).ToList();
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
using FluentAssertions;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.Languages
|
||||
{
|
||||
[TestFixture]
|
||||
public class LanguageProfileRepositoryFixture : DbTest<LanguageProfileRepository, LanguageProfile>
|
||||
{
|
||||
[Test]
|
||||
public void should_be_able_to_read_and_write()
|
||||
{
|
||||
var profile = new LanguageProfile
|
||||
{
|
||||
Languages = Language.All.OrderByDescending(l => l.Name).Select(l => new LanguageProfileItem {Language = l, Allowed = l == Language.English}).ToList(),
|
||||
Name = "TestProfile",
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
Subject.Insert(profile);
|
||||
|
||||
|
||||
StoredModel.Name.Should().Be(profile.Name);
|
||||
StoredModel.Cutoff.Should().Be(profile.Cutoff);
|
||||
|
||||
StoredModel.Languages.Should().Equal(profile.Languages, (a, b) => a.Language == b.Language && a.Allowed == b.Allowed);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.ImportLists;
|
||||
using NzbDrone.Core.Lifecycle;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.Languages
|
||||
{
|
||||
[TestFixture]
|
||||
|
||||
public class LanguageProfileServiceFixture : CoreTest<LanguageProfileService>
|
||||
{
|
||||
[Test]
|
||||
public void init_should_add_default_profiles()
|
||||
{
|
||||
Subject.Handle(new ApplicationStartedEvent());
|
||||
|
||||
Mocker.GetMock<ILanguageProfileRepository>()
|
||||
.Verify(v => v.Insert(It.IsAny<LanguageProfile>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
//This confirms that new profiles are added only if no other profiles exists.
|
||||
//We don't want to keep adding them back if a user deleted them on purpose.
|
||||
public void Init_should_skip_if_any_profiles_already_exist()
|
||||
{
|
||||
Mocker.GetMock<ILanguageProfileRepository>()
|
||||
.Setup(s => s.All())
|
||||
.Returns(Builder<LanguageProfile>.CreateListOfSize(2).Build().ToList());
|
||||
|
||||
Subject.Handle(new ApplicationStartedEvent());
|
||||
|
||||
Mocker.GetMock<ILanguageProfileRepository>()
|
||||
.Verify(v => v.Insert(It.IsAny<LanguageProfile>()), Times.Never());
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void should_not_be_able_to_delete_profile_if_assigned_to_artist()
|
||||
{
|
||||
var profile = Builder<LanguageProfile>.CreateNew()
|
||||
.With(p => p.Id = 2)
|
||||
.Build();
|
||||
|
||||
var artistList = Builder<Artist>.CreateListOfSize(3)
|
||||
.Random(1)
|
||||
.With(c => c.LanguageProfileId = profile.Id)
|
||||
.Build().ToList();
|
||||
|
||||
var importLists = Builder<ImportListDefinition>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(c => c.ProfileId = 1)
|
||||
.Build().ToList();
|
||||
|
||||
Mocker.GetMock<IArtistService>().Setup(c => c.GetAllArtists()).Returns(artistList);
|
||||
Mocker.GetMock<IImportListFactory>().Setup(c => c.All()).Returns(importLists);
|
||||
Mocker.GetMock<ILanguageProfileRepository>().Setup(c => c.Get(profile.Id)).Returns(profile);
|
||||
|
||||
Assert.Throws<LanguageProfileInUseException>(() => Subject.Delete(profile.Id));
|
||||
|
||||
Mocker.GetMock<ILanguageProfileRepository>().Verify(c => c.Delete(It.IsAny<int>()), Times.Never());
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_able_to_delete_profile_if_assigned_to_import_list()
|
||||
{
|
||||
var profile = Builder<LanguageProfile>.CreateNew()
|
||||
.With(p => p.Id = 2)
|
||||
.Build();
|
||||
|
||||
var artistList = Builder<Artist>.CreateListOfSize(3)
|
||||
.All()
|
||||
.With(c => c.LanguageProfileId = 1)
|
||||
.Build().ToList();
|
||||
|
||||
var importLists = Builder<ImportListDefinition>.CreateListOfSize(2)
|
||||
.Random(1)
|
||||
.With(c => c.LanguageProfileId = profile.Id)
|
||||
.Build().ToList();
|
||||
|
||||
|
||||
Mocker.GetMock<IArtistService>().Setup(c => c.GetAllArtists()).Returns(artistList);
|
||||
Mocker.GetMock<IImportListFactory>().Setup(c => c.All()).Returns(importLists);
|
||||
Mocker.GetMock<ILanguageProfileRepository>().Setup(c => c.Get(profile.Id)).Returns(profile);
|
||||
|
||||
Assert.Throws<LanguageProfileInUseException>(() => Subject.Delete(profile.Id));
|
||||
|
||||
Mocker.GetMock<ILanguageProfileRepository>().Verify(c => c.Delete(It.IsAny<int>()), Times.Never());
|
||||
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void should_delete_profile_if_not_assigned_to_artist_or_import_list()
|
||||
{
|
||||
var artistList = Builder<Artist>.CreateListOfSize(3)
|
||||
.All()
|
||||
.With(c => c.LanguageProfileId = 2)
|
||||
.Build().ToList();
|
||||
|
||||
var importLists = Builder<ImportListDefinition>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(c => c.LanguageProfileId = 2)
|
||||
.Build().ToList();
|
||||
|
||||
Mocker.GetMock<IArtistService>().Setup(c => c.GetAllArtists()).Returns(artistList);
|
||||
Mocker.GetMock<IImportListFactory>().Setup(c => c.All()).Returns(importLists);
|
||||
|
||||
Subject.Delete(1);
|
||||
|
||||
Mocker.GetMock<ILanguageProfileRepository>().Verify(c => c.Delete(1), Times.Once());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,6 @@ using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Test.Common;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
@@ -38,11 +36,6 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
|
||||
var artist = Builder<Artist>.CreateNew()
|
||||
.With(e => e.QualityProfile = new QualityProfile { Items = Qualities.QualityFixture.GetDefaultQualities() })
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
Cutoff = Language.Spanish,
|
||||
Languages = Languages.LanguageFixture.GetDefaultLanguages()
|
||||
})
|
||||
.With(s => s.Path = @"C:\Test\Music\Alien Ant Farm".AsOsAgnostic())
|
||||
.Build();
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ using FizzWare.NBuilder;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Aggregation;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Identification;
|
||||
using System.IO.Abstractions.TestingHelpers;
|
||||
|
||||
@@ -86,7 +85,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
.With(e => e.QualityProfile = new QualityProfile { Items = Qualities.QualityFixture.GetDefaultQualities() })
|
||||
.With(e => e.LanguageProfile = new LanguageProfile { Languages = Languages.LanguageFixture.GetDefaultLanguages() })
|
||||
.Build();
|
||||
|
||||
_albumRelease = Builder<AlbumRelease>.CreateNew()
|
||||
|
||||
@@ -10,8 +10,6 @@ using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
@@ -30,11 +28,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.QualityProfile = new QualityProfile
|
||||
{
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
})
|
||||
.With(l => l.LanguageProfile = new LanguageProfile
|
||||
{
|
||||
Languages = Languages.LanguageFixture.GetDefaultLanguages(),
|
||||
Cutoff = Language.Spanish,
|
||||
}).Build();
|
||||
|
||||
_album = Builder<Album>.CreateNew().Build();
|
||||
@@ -43,7 +36,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
{
|
||||
Path = @"C:\Test\Imagine Dragons\Imagine.Dragons.Song.1.mp3",
|
||||
Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)),
|
||||
Language = Language.Spanish,
|
||||
Artist = _artist,
|
||||
Album = _album
|
||||
};
|
||||
@@ -92,24 +84,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_language_upgrade_for_existing_trackFile_and_quality_is_worse()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)),
|
||||
Language = Language.English
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_upgrade_for_existing_trackFile_for_multi_tracks()
|
||||
{
|
||||
@@ -127,42 +101,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_language_upgrade_for_existing_trackFile_for_multi_tracks_and_quality_is_same()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)),
|
||||
Language = Language.English
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_language_upgrade_for_existing_trackFile_for_multi_tracks_and_quality_is_worse()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)),
|
||||
Language = Language.English
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_not_an_upgrade_for_existing_trackFile()
|
||||
{
|
||||
|
||||
@@ -2,13 +2,10 @@ using System.Collections.Generic;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Profiles.Metadata;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using System;
|
||||
@@ -68,13 +65,6 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
|
||||
Name = "TestProfile"
|
||||
};
|
||||
|
||||
var langProfile = new LanguageProfile
|
||||
{
|
||||
Name = "TestProfile",
|
||||
Languages = Languages.LanguageFixture.GetDefaultLanguages(Language.English),
|
||||
Cutoff = Language.English
|
||||
};
|
||||
|
||||
var metaProfile = new MetadataProfile
|
||||
{
|
||||
Name = "TestProfile",
|
||||
@@ -85,19 +75,16 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
|
||||
|
||||
|
||||
Mocker.Resolve<QualityProfileRepository>().Insert(profile);
|
||||
Mocker.Resolve<LanguageProfileRepository>().Insert(langProfile);
|
||||
Mocker.Resolve<MetadataProfileRepository>().Insert(metaProfile);
|
||||
|
||||
var artist = Builder<Artist>.CreateNew().BuildNew();
|
||||
artist.QualityProfileId = profile.Id;
|
||||
artist.LanguageProfileId = langProfile.Id;
|
||||
artist.MetadataProfileId = metaProfile.Id;
|
||||
|
||||
Subject.Insert(artist);
|
||||
|
||||
|
||||
StoredModel.QualityProfile.Should().NotBeNull();
|
||||
StoredModel.LanguageProfile.Should().NotBeNull();
|
||||
StoredModel.MetadataProfile.Should().NotBeNull();
|
||||
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
<Compile Include="Datastore\Converters\EnumIntConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\GuidConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\Int32ConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\LanguageIntConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\OsPathConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\ProviderSettingConverterFixture.cs" />
|
||||
<Compile Include="Datastore\Converters\QualityIntConverterFixture.cs" />
|
||||
@@ -97,7 +96,6 @@
|
||||
<Compile Include="DecisionEngineTests\CutoffSpecificationFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\DownloadDecisionMakerFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\HistorySpecificationFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\LanguageSpecificationFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\MonitoredAlbumSpecificationFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\QueueSpecificationFixture.cs" />
|
||||
<Compile Include="DecisionEngineTests\ReleaseRestrictionsSpecificationFixture.cs" />
|
||||
@@ -242,9 +240,6 @@
|
||||
<Compile Include="Instrumentation\DatabaseTargetFixture.cs" />
|
||||
<Compile Include="JobTests\JobRepositoryFixture.cs" />
|
||||
<Compile Include="JobTests\TestJobs.cs" />
|
||||
<Compile Include="Languages\LanguageFixture.cs" />
|
||||
<Compile Include="Languages\LanguageProfileRepositoryFixture.cs" />
|
||||
<Compile Include="Languages\LanguageProfileServiceFixture.cs" />
|
||||
<Compile Include="MediaCoverTests\CoverExistsSpecificationFixture.cs" />
|
||||
<Compile Include="MediaCoverTests\ImageResizerFixture.cs" />
|
||||
<Compile Include="MediaCoverTests\MediaCoverServiceFixture.cs" />
|
||||
@@ -327,7 +322,6 @@
|
||||
<Compile Include="ParserTests\ExtendedQualityParserRegex.cs" />
|
||||
<Compile Include="ParserTests\CrapParserFixture.cs" />
|
||||
<Compile Include="ParserTests\HashedReleaseFixture.cs" />
|
||||
<Compile Include="ParserTests\LanguageParserFixture.cs" />
|
||||
<Compile Include="ParserTests\NormalizeTitleFixture.cs" />
|
||||
<Compile Include="ParserTests\ParserFixture.cs" />
|
||||
<Compile Include="ParserTests\ParsingServiceTests\GetArtistFixture.cs" />
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.ParserTests
|
||||
{
|
||||
|
||||
[TestFixture]
|
||||
public class LanguageParserFixture : CoreTest
|
||||
{
|
||||
[TestCase("Alien.Ant.Farm-truAnt.2009.English.FLAC.XviD-LOL")]
|
||||
[TestCase("Alien.Ant.Farm-truAnt.2009.Germany.FLAC.XviD-LOL")]
|
||||
[TestCase("Alien.Ant.Farm-truAnt.2009.FLAC.XviD-LOL")]
|
||||
[TestCase("Two.Greedy.Italians.S01E01.The.Family.720p.HDTV.x264-FTP")]
|
||||
[TestCase("The.Trip.To.Italy.S02E01.720p.HDTV.x264-TLA")]
|
||||
[TestCase("2 Broke Girls - S01E01 - Pilot.en.sub")]
|
||||
[TestCase("2 Broke Girls - S01E01 - Pilot.eng.sub")]
|
||||
[TestCase("2 Broke Girls - S01E01 - Pilot.English.sub")]
|
||||
[TestCase("2 Broke Girls - S01E01 - Pilot.english.sub")]
|
||||
public void should_parse_language_english(string postTitle)
|
||||
{
|
||||
var result = LanguageParser.ParseLanguage(postTitle);
|
||||
result.Should().Be(Language.English);
|
||||
}
|
||||
|
||||
[TestCase("Alien.Ant.Farm-truAnt.2009.FLAC.XviD-LOL")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-FLAC-2001-MAHOU")]
|
||||
public void should_parse_subtitle_language_unknown(string fileName)
|
||||
{
|
||||
var result = LanguageParser.ParseSubtitleLanguage(fileName);
|
||||
result.Should().Be(Language.Unknown);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-French-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-VOSTFR-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-FR-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_french(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.French.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Spanish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_spanish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Spanish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-German-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_german(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.German.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Italian-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-ita-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_italian(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Italian.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Danish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_danish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Danish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Dutch-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_dutch(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Dutch.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Japanese-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_japanese(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Japanese.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Cantonese-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_cantonese(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Cantonese.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Mandarin-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_mandarin(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Mandarin.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Korean-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_korean(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Korean.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Russian-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Rus-Eng-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_russian(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Russian.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Polish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_polish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Polish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Vietnamese-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_vietnamese(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Vietnamese.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Swedish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_swedish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Swedish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Norwegian-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Nordic-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_norwegian(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Norwegian.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Finnish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_finnish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Finnish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Turkish-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_turkish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Turkish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Portuguese-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_portuguese(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Portuguese.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-FLEMISH-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_flemish(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Flemish.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-Greek-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_greek(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Greek.Id);
|
||||
}
|
||||
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-HUNDUB-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-ENG.HUN-FLAC-2001-MAHOU")]
|
||||
[TestCase("Alien Ant Farm-Anthology-CD-HUN-FLAC-2001-MAHOU")]
|
||||
public void should_parse_language_hungarian(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Hungarian.Id);
|
||||
}
|
||||
|
||||
[Ignore("Not Implemented")]
|
||||
[TestCase("Avatar.The.Last.Airbender.S01-03.DVDRip.HebDub")]
|
||||
public void should_parse_language_hebrew(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Hebrew.Id);
|
||||
}
|
||||
|
||||
[Ignore("Not Implemented")]
|
||||
[TestCase("Prison.Break.S05E01.WEBRip.x264.AC3.LT.EN-CNN")]
|
||||
public void should_parse_language_lithuanian(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Lithuanian.Id);
|
||||
}
|
||||
|
||||
[Ignore("Not Implemented")]
|
||||
[TestCase("The.Walking.Dead.S07E11.WEB Rip.XviD.Louige-CZ.EN.5.1")]
|
||||
public void should_parse_language_czech(string postTitle)
|
||||
{
|
||||
var result = Parser.Parser.ParseAlbumTitle(postTitle);
|
||||
result.Language.Id.Should().Be(Language.Czech.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Blacklisting
|
||||
{
|
||||
@@ -22,6 +21,5 @@ namespace NzbDrone.Core.Blacklisting
|
||||
public string Indexer { get; set; }
|
||||
public string Message { get; set; }
|
||||
public string TorrentInfoHash { get; set; }
|
||||
public Language Language { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,8 +138,7 @@ namespace NzbDrone.Core.Blacklisting
|
||||
Indexer = message.Data.GetValueOrDefault("indexer"),
|
||||
Protocol = (DownloadProtocol)Convert.ToInt32(message.Data.GetValueOrDefault("protocol")),
|
||||
Message = message.Message,
|
||||
TorrentInfoHash = message.Data.GetValueOrDefault("torrentInfoHash"),
|
||||
Language = message.Language
|
||||
TorrentInfoHash = message.Data.GetValueOrDefault("torrentInfoHash")
|
||||
};
|
||||
|
||||
_blacklistRepository.Insert(blacklist);
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
using System;
|
||||
using Marr.Data.Converters;
|
||||
using Marr.Data.Mapping;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Converters
|
||||
{
|
||||
public class LanguageIntConverter : JsonConverter, IConverter
|
||||
{
|
||||
public object FromDB(ConverterContext context)
|
||||
{
|
||||
if (context.DbValue == DBNull.Value)
|
||||
{
|
||||
return Language.Unknown;
|
||||
}
|
||||
|
||||
var val = Convert.ToInt32(context.DbValue);
|
||||
|
||||
return (Language)val;
|
||||
}
|
||||
|
||||
public object FromDB(ColumnMap map, object dbValue)
|
||||
{
|
||||
return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue });
|
||||
}
|
||||
|
||||
public object ToDB(object clrValue)
|
||||
{
|
||||
if (clrValue == DBNull.Value) return 0;
|
||||
|
||||
if (clrValue as Language == null)
|
||||
{
|
||||
throw new InvalidOperationException("Attempted to save a language that isn't really a language");
|
||||
}
|
||||
|
||||
var language = clrValue as Language;
|
||||
return (int)language;
|
||||
}
|
||||
|
||||
public Type DbType
|
||||
{
|
||||
get
|
||||
{
|
||||
return typeof(int);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(Language);
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
var item = reader.Value;
|
||||
return (Language)Convert.ToInt32(item);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteValue(ToDB(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,11 +34,11 @@ namespace NzbDrone.Core.Datastore.Converters
|
||||
|
||||
if (clrValue as PrimaryAlbumType == null)
|
||||
{
|
||||
throw new InvalidOperationException("Attempted to save a albumtype that isn't really a albumtype");
|
||||
throw new InvalidOperationException("Attempted to save an album type that isn't really an album type");
|
||||
}
|
||||
|
||||
var language = (PrimaryAlbumType) clrValue;
|
||||
return (int) language;
|
||||
var primType = (PrimaryAlbumType) clrValue;
|
||||
return (int) primType;
|
||||
}
|
||||
|
||||
public Type DbType => typeof(int);
|
||||
|
||||
@@ -34,11 +34,11 @@ namespace NzbDrone.Core.Datastore.Converters
|
||||
|
||||
if (clrValue as ReleaseStatus == null)
|
||||
{
|
||||
throw new InvalidOperationException("Attempted to save a albumtype that isn't really a albumtype");
|
||||
throw new InvalidOperationException("Attempted to save a release status that isn't really a release status");
|
||||
}
|
||||
|
||||
var language = (ReleaseStatus) clrValue;
|
||||
return (int) language;
|
||||
var releaseStatus = (ReleaseStatus) clrValue;
|
||||
return (int) releaseStatus;
|
||||
}
|
||||
|
||||
public Type DbType => typeof(int);
|
||||
|
||||
@@ -34,11 +34,11 @@ namespace NzbDrone.Core.Datastore.Converters
|
||||
|
||||
if (clrValue as SecondaryAlbumType == null)
|
||||
{
|
||||
throw new InvalidOperationException("Attempted to save a albumtype that isn't really a albumtype");
|
||||
throw new InvalidOperationException("Attempted to save an album type that isn't really an album type");
|
||||
}
|
||||
|
||||
var language = (SecondaryAlbumType) clrValue;
|
||||
return (int) language;
|
||||
var secType = (SecondaryAlbumType) clrValue;
|
||||
return (int) secType;
|
||||
}
|
||||
|
||||
public Type DbType => typeof(int);
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(34)]
|
||||
public class remove_language_profiles : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Delete.Table("LanguageProfiles");
|
||||
|
||||
Delete.Column("LanguageProfileId").FromTable("Artists");
|
||||
Delete.Column("LanguageProfileId").FromTable("ImportLists");
|
||||
Delete.Column("Language").FromTable("Blacklist");
|
||||
Delete.Column("Language").FromTable("History");
|
||||
Delete.Column("Language").FromTable("LyricFiles");
|
||||
Delete.Column("Language").FromTable("TrackFiles");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,6 @@ using NzbDrone.Core.RemotePathMappings;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using NzbDrone.Core.Organizer;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Profiles.Metadata;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
@@ -38,7 +37,6 @@ using NzbDrone.Core.Extras.Others;
|
||||
using NzbDrone.Core.Extras.Lyrics;
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
using Marr.Data.QGen;
|
||||
using NzbDrone.Core.Profiles.Releases;
|
||||
|
||||
@@ -98,7 +96,6 @@ namespace NzbDrone.Core.Datastore
|
||||
.Relationship()
|
||||
.HasOne(a => a.Metadata, a => a.ArtistMetadataId)
|
||||
.HasOne(a => a.QualityProfile, a => a.QualityProfileId)
|
||||
.HasOne(s => s.LanguageProfile, s => s.LanguageProfileId)
|
||||
.HasOne(s => s.MetadataProfile, s => s.MetadataProfileId)
|
||||
.For(a => a.Albums)
|
||||
.LazyLoad(condition: a => a.Id > 0, query: (db, a) => db.Query<Album>().Where(rg => rg.ArtistMetadataId == a.Id).ToList());
|
||||
@@ -167,7 +164,6 @@ namespace NzbDrone.Core.Datastore
|
||||
.Ignore(d => d.Weight);
|
||||
|
||||
Mapper.Entity<QualityProfile>().RegisterModel("QualityProfiles");
|
||||
Mapper.Entity<LanguageProfile>().RegisterModel("LanguageProfiles");
|
||||
Mapper.Entity<MetadataProfile>().RegisterModel("MetadataProfiles");
|
||||
Mapper.Entity<Log>().RegisterModel("Logs");
|
||||
Mapper.Entity<NamingConfig>().RegisterModel("NamingConfig");
|
||||
@@ -213,9 +209,7 @@ namespace NzbDrone.Core.Datastore
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(Dictionary<string, string>), new EmbeddedDocumentConverter());
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<int>), new EmbeddedDocumentConverter());
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<KeyValuePair<string, int>>), new EmbeddedDocumentConverter());
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(Language), new LanguageIntConverter());
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<string>), new EmbeddedDocumentConverter());
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<LanguageProfileItem>), new EmbeddedDocumentConverter(new LanguageIntConverter()));
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<ProfilePrimaryAlbumTypeItem>), new EmbeddedDocumentConverter(new PrimaryAlbumTypeIntConverter()));
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<ProfileSecondaryAlbumTypeItem>), new EmbeddedDocumentConverter(new SecondaryAlbumTypeIntConverter()));
|
||||
MapRepository.Instance.RegisterTypeConverter(typeof(List<ProfileReleaseStatusItem>), new EmbeddedDocumentConverter(new ReleaseStatusIntConverter()));
|
||||
|
||||
@@ -28,7 +28,6 @@ namespace NzbDrone.Core.DecisionEngine
|
||||
var comparers = new List<CompareDelegate>
|
||||
{
|
||||
CompareQuality,
|
||||
CompareLanguage,
|
||||
ComparePreferredWordScore,
|
||||
CompareProtocol,
|
||||
ComparePeersIfTorrent,
|
||||
@@ -73,11 +72,6 @@ namespace NzbDrone.Core.DecisionEngine
|
||||
CompareBy(x.RemoteAlbum, y.RemoteAlbum, remoteAlbum => remoteAlbum.ParsedAlbumInfo.Quality.Revision.Version));
|
||||
}
|
||||
|
||||
private int CompareLanguage(DownloadDecision x, DownloadDecision y)
|
||||
{
|
||||
return CompareBy(x.RemoteAlbum, y.RemoteAlbum, remoteAlbum => remoteAlbum.Artist.LanguageProfile.Value.Languages.FindIndex(l => l.Language == remoteAlbum.ParsedAlbumInfo.Language));
|
||||
}
|
||||
|
||||
private int ComparePreferredWordScore(DownloadDecision x, DownloadDecision y)
|
||||
{
|
||||
return CompareBy(x.RemoteAlbum, y.RemoteAlbum, remoteAlbum => remoteAlbum.PreferredWordScore);
|
||||
|
||||
@@ -41,7 +41,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
public virtual Decision IsSatisfiedBy(RemoteAlbum subject, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var qualityProfile = subject.Artist.QualityProfile.Value;
|
||||
var languageProfile = subject.Artist.LanguageProfile.Value;
|
||||
|
||||
foreach (var album in subject.Albums)
|
||||
{
|
||||
@@ -51,16 +50,13 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
|
||||
if (!tracksMissing && trackFiles.Any())
|
||||
{
|
||||
// Get a distinct list of all current track qualities and languages for a given album
|
||||
// Get a distinct list of all current track qualities for a given album
|
||||
var currentQualities = trackFiles.Select(c => c.Quality).Distinct().ToList();
|
||||
var currentLanguages = trackFiles.Select(c => c.Language).Distinct().ToList();
|
||||
|
||||
_logger.Debug("Comparing file quality and language with report. Existing files contain {0} : {1}", currentQualities.ConcatToString(), currentLanguages.ConcatToString());
|
||||
_logger.Debug("Comparing file quality with report. Existing files contain {0}", currentQualities.ConcatToString());
|
||||
|
||||
if (!_upgradableSpecification.CutoffNotMet(qualityProfile,
|
||||
languageProfile,
|
||||
currentQualities,
|
||||
currentLanguages,
|
||||
_preferredWordServiceCalculator.Calculate(subject.Artist, trackFiles[0].GetSceneOrFileName()),
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.PreferredWordScore))
|
||||
@@ -70,7 +66,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
var qualityCutoffIndex = qualityProfile.GetIndex(qualityProfile.Cutoff);
|
||||
var qualityCutoff = qualityProfile.Items[qualityCutoffIndex.Index];
|
||||
|
||||
return Decision.Reject("Existing files meets cutoff: {0} - {1}", qualityCutoff, languageProfile.Cutoff);
|
||||
return Decision.Reject("Existing files meets cutoff: {0}", qualityCutoff);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
using NLog;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
{
|
||||
public class LanguageSpecification : IDecisionEngineSpecification
|
||||
{
|
||||
private readonly Logger _logger;
|
||||
|
||||
public LanguageSpecification(Logger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public SpecificationPriority Priority => SpecificationPriority.Default;
|
||||
public RejectionType Type => RejectionType.Permanent;
|
||||
|
||||
public virtual Decision IsSatisfiedBy(RemoteAlbum subject, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var wantedLanguage = subject.Artist.LanguageProfile.Value.Languages;
|
||||
var _language = subject.ParsedAlbumInfo.Language;
|
||||
|
||||
_logger.Debug("Checking if report meets language requirements. {0}", subject.ParsedAlbumInfo.Language);
|
||||
|
||||
if (!wantedLanguage.Exists(v => v.Allowed && v.Language == _language))
|
||||
{
|
||||
_logger.Debug("Report Language: {0} rejected because it is not wanted, wanted {1}", subject.ParsedAlbumInfo.Language, wantedLanguage);
|
||||
return Decision.Reject("{0} is wanted, but found {1}", wantedLanguage, subject.ParsedAlbumInfo.Language);
|
||||
}
|
||||
|
||||
return Decision.Accept();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Releases;
|
||||
using NzbDrone.Core.Qualities;
|
||||
@@ -45,15 +44,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
{
|
||||
var remoteAlbum = queueItem.RemoteAlbum;
|
||||
var qualityProfile = subject.Artist.QualityProfile.Value;
|
||||
var languageProfile = subject.Artist.LanguageProfile.Value;
|
||||
|
||||
_logger.Debug("Checking if existing release in queue meets cutoff. Queued quality is: {0} - {1}", remoteAlbum.ParsedAlbumInfo.Quality, remoteAlbum.ParsedAlbumInfo.Language);
|
||||
_logger.Debug("Checking if existing release in queue meets cutoff. Queued quality is: {0}", remoteAlbum.ParsedAlbumInfo.Quality);
|
||||
var queuedItemPreferredWordScore = _preferredWordServiceCalculator.Calculate(subject.Artist, queueItem.Title);
|
||||
|
||||
if (!_upgradableSpecification.CutoffNotMet(qualityProfile,
|
||||
languageProfile,
|
||||
new List<QualityModel> { remoteAlbum.ParsedAlbumInfo.Quality },
|
||||
new List<Language> { remoteAlbum.ParsedAlbumInfo.Language },
|
||||
queuedItemPreferredWordScore,
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.PreferredWordScore))
|
||||
@@ -62,30 +58,24 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
return Decision.Reject("Release in queue already meets cutoff: {0}", remoteAlbum.ParsedAlbumInfo.Quality);
|
||||
}
|
||||
|
||||
_logger.Debug("Checking if release is higher quality than queued release. Queued: {0} - {1}", remoteAlbum.ParsedAlbumInfo.Quality, remoteAlbum.ParsedAlbumInfo.Language);
|
||||
_logger.Debug("Checking if release is higher quality than queued release. Queued: {0}", remoteAlbum.ParsedAlbumInfo.Quality);
|
||||
|
||||
if (!_upgradableSpecification.IsUpgradable(qualityProfile,
|
||||
languageProfile,
|
||||
new List<QualityModel> { remoteAlbum.ParsedAlbumInfo.Quality },
|
||||
new List<Language> { remoteAlbum.ParsedAlbumInfo.Language },
|
||||
queuedItemPreferredWordScore,
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language,
|
||||
subject.PreferredWordScore))
|
||||
{
|
||||
return Decision.Reject("Release in queue is of equal or higher preference: {0} - {1}", remoteAlbum.ParsedAlbumInfo.Quality, remoteAlbum.ParsedAlbumInfo.Language);
|
||||
return Decision.Reject("Release in queue is of equal or higher preference: {0}", remoteAlbum.ParsedAlbumInfo.Quality);
|
||||
}
|
||||
|
||||
_logger.Debug("Checking if profiles allow upgrading. Queued: {0} - {1}", remoteAlbum.ParsedAlbumInfo.Quality, remoteAlbum.ParsedAlbumInfo.Language);
|
||||
_logger.Debug("Checking if profiles allow upgrading. Queued: {0}", remoteAlbum.ParsedAlbumInfo.Quality);
|
||||
|
||||
if (!_upgradableSpecification.IsUpgradeAllowed(qualityProfile,
|
||||
languageProfile,
|
||||
new List<QualityModel> { remoteAlbum.ParsedAlbumInfo.Quality },
|
||||
new List<Language> { remoteAlbum.ParsedAlbumInfo.Language },
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language))
|
||||
subject.ParsedAlbumInfo.Quality))
|
||||
{
|
||||
return Decision.Reject("Another release is queued and the Quality or Language profile does not allow upgrades");
|
||||
return Decision.Reject("Another release is queued and the Quality profile does not allow upgrades");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Delay;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Releases;
|
||||
|
||||
namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
@@ -47,7 +46,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
}
|
||||
|
||||
var qualityProfile = subject.Artist.QualityProfile.Value;
|
||||
var languageProfile = subject.Artist.LanguageProfile.Value;
|
||||
var delayProfile = _delayProfileService.BestForTags(subject.Artist.Tags);
|
||||
var delay = delayProfile.GetProtocolDelay(subject.Release.DownloadProtocol);
|
||||
var isPreferredProtocol = subject.Release.DownloadProtocol == delayProfile.PreferredProtocol;
|
||||
@@ -59,7 +57,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
}
|
||||
|
||||
var qualityComparer = new QualityModelComparer(qualityProfile);
|
||||
var languageComparer = new LanguageComparer(languageProfile);
|
||||
|
||||
if (isPreferredProtocol)
|
||||
{
|
||||
@@ -70,15 +67,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
if (trackFiles.Any())
|
||||
{
|
||||
var currentQualities = trackFiles.Select(c => c.Quality).Distinct().ToList();
|
||||
var currentLanguages = trackFiles.Select(c => c.Language).Distinct().ToList();
|
||||
|
||||
var upgradable = _upgradableSpecification.IsUpgradable(qualityProfile,
|
||||
languageProfile,
|
||||
currentQualities,
|
||||
currentLanguages,
|
||||
_preferredWordServiceCalculator.Calculate(subject.Artist, trackFiles[0].GetSceneOrFileName()),
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language,
|
||||
subject.PreferredWordScore);
|
||||
if (upgradable)
|
||||
{
|
||||
@@ -92,11 +85,10 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
// If quality meets or exceeds the best allowed quality in the profile accept it immediately
|
||||
var bestQualityInProfile = qualityProfile.LastAllowedQuality();
|
||||
var isBestInProfile = qualityComparer.Compare(subject.ParsedAlbumInfo.Quality.Quality, bestQualityInProfile) >= 0;
|
||||
var isBestInProfileLanguage = languageComparer.Compare(subject.ParsedAlbumInfo.Language, languageProfile.LastAllowedLanguage()) >= 0;
|
||||
|
||||
if (isBestInProfile && isBestInProfileLanguage && isPreferredProtocol)
|
||||
if (isBestInProfile && isPreferredProtocol)
|
||||
{
|
||||
_logger.Debug("Quality and language is highest in profile for preferred protocol, will not delay");
|
||||
_logger.Debug("Quality is highest in profile for preferred protocol, will not delay");
|
||||
return Decision.Accept();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.History;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Releases;
|
||||
using NzbDrone.Core.Qualities;
|
||||
@@ -61,21 +60,16 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
|
||||
|
||||
var cutoffUnmet = _upgradableSpecification.CutoffNotMet(
|
||||
subject.Artist.QualityProfile,
|
||||
subject.Artist.LanguageProfile,
|
||||
new List<QualityModel> { mostRecent.Quality },
|
||||
new List<Language> { mostRecent.Language },
|
||||
preferredWordScore,
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.PreferredWordScore);
|
||||
|
||||
var upgradeable = _upgradableSpecification.IsUpgradable(
|
||||
subject.Artist.QualityProfile,
|
||||
subject.Artist.LanguageProfile,
|
||||
new List<QualityModel> { mostRecent.Quality },
|
||||
new List<Language> { mostRecent.Language },
|
||||
preferredWordScore,
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language,
|
||||
subject.PreferredWordScore);
|
||||
|
||||
if (!recent && cdhEnabled)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
using NLog;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using System.Collections.Generic;
|
||||
@@ -11,12 +9,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
{
|
||||
public interface IUpgradableSpecification
|
||||
{
|
||||
bool IsUpgradable(QualityProfile profile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, int currentScore, QualityModel newQuality, Language newLanguage, int newScore);
|
||||
bool IsUpgradable(QualityProfile profile, List<QualityModel> currentQualities, int currentScore, QualityModel newQuality, int newScore);
|
||||
bool QualityCutoffNotMet(QualityProfile profile, QualityModel currentQuality, QualityModel newQuality = null);
|
||||
bool LanguageCutoffNotMet(LanguageProfile languageProfile, Language currentLanguage);
|
||||
bool CutoffNotMet(QualityProfile profile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, int currentScore, QualityModel newQuality = null, int newScore = 0);
|
||||
bool CutoffNotMet(QualityProfile profile, List<QualityModel> currentQualities, int currentScore, QualityModel newQuality = null, int newScore = 0);
|
||||
bool IsRevisionUpgrade(QualityModel currentQuality, QualityModel newQuality);
|
||||
bool IsUpgradeAllowed(QualityProfile qualityProfile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, QualityModel newQuality, Language newLanguage);
|
||||
bool IsUpgradeAllowed(QualityProfile qualityProfile, List<QualityModel> currentQualities, QualityModel newQuality);
|
||||
}
|
||||
|
||||
public class UpgradableSpecification : IUpgradableSpecification
|
||||
@@ -30,34 +27,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
private ProfileComparisonResult IsLanguageUpgradable(LanguageProfile profile, List<Language> currentLanguages, Language newLanguage = null)
|
||||
{
|
||||
if (newLanguage != null)
|
||||
{
|
||||
var totalCompare = 0;
|
||||
|
||||
foreach (var language in currentLanguages)
|
||||
{
|
||||
var compare = new LanguageComparer(profile).Compare(newLanguage, language);
|
||||
|
||||
totalCompare += compare;
|
||||
|
||||
// Not upgradable if new language is a downgrade for any current lanaguge
|
||||
if (compare < 0)
|
||||
{
|
||||
return ProfileComparisonResult.Downgrade;
|
||||
}
|
||||
}
|
||||
|
||||
// Not upgradable if new language is equal to all current languages
|
||||
if (totalCompare == 0)
|
||||
{
|
||||
return ProfileComparisonResult.Equal;
|
||||
}
|
||||
}
|
||||
return ProfileComparisonResult.Upgrade;
|
||||
}
|
||||
|
||||
private ProfileComparisonResult IsQualityUpgradable(QualityProfile profile, List<QualityModel> currentQualities, QualityModel newQuality = null)
|
||||
{
|
||||
if (newQuality != null)
|
||||
@@ -98,7 +67,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
return newScore > currentScore;
|
||||
}
|
||||
|
||||
public bool IsUpgradable(QualityProfile qualityProfile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, int currentScore, QualityModel newQuality, Language newLanguage, int newScore)
|
||||
public bool IsUpgradable(QualityProfile qualityProfile, List<QualityModel> currentQualities, int currentScore, QualityModel newQuality, int newScore)
|
||||
{
|
||||
|
||||
var qualityUpgrade = IsQualityUpgradable(qualityProfile, currentQualities, newQuality);
|
||||
@@ -114,19 +83,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
return false;
|
||||
}
|
||||
|
||||
var languageUpgrade = IsLanguageUpgradable(languageProfile, currentLanguages, newLanguage);
|
||||
|
||||
if (languageUpgrade == ProfileComparisonResult.Upgrade)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (languageUpgrade == ProfileComparisonResult.Downgrade)
|
||||
{
|
||||
_logger.Debug("Existing item has better language, skipping");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsPreferredWordUpgradable(currentScore, newScore))
|
||||
{
|
||||
_logger.Debug("Existing item has a better preferred word score, skipping");
|
||||
@@ -153,25 +109,8 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool LanguageCutoffNotMet(LanguageProfile languageProfile, Language currentLanguage)
|
||||
public bool CutoffNotMet(QualityProfile profile, List<QualityModel> currentQualities, int currentScore, QualityModel newQuality = null, int newScore = 0)
|
||||
{
|
||||
var languageCompare = new LanguageComparer(languageProfile).Compare(currentLanguage, languageProfile.Cutoff);
|
||||
|
||||
return languageCompare < 0;
|
||||
}
|
||||
|
||||
public bool CutoffNotMet(QualityProfile profile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, int currentScore, QualityModel newQuality = null, int newScore = 0)
|
||||
{
|
||||
// If we can upgrade the language (it is not the cutoff) then the quality doesn't
|
||||
// matter as we can always get same quality with prefered language.
|
||||
foreach (var language in currentLanguages)
|
||||
{
|
||||
if (LanguageCutoffNotMet(languageProfile, language))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var quality in currentQualities)
|
||||
{
|
||||
if (QualityCutoffNotMet(profile, quality, newQuality))
|
||||
@@ -204,35 +143,21 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsUpgradeAllowed(QualityProfile qualityProfile, LanguageProfile languageProfile, List<QualityModel> currentQualities, List<Language> currentLanguages, QualityModel newQuality, Language newLanguage)
|
||||
public bool IsUpgradeAllowed(QualityProfile qualityProfile, List<QualityModel> currentQualities, QualityModel newQuality)
|
||||
{
|
||||
var isQualityUpgrade = IsQualityUpgradable(qualityProfile, currentQualities, newQuality);
|
||||
var isLanguageUpgrade = IsLanguageUpgradable(languageProfile, currentLanguages, newLanguage);
|
||||
|
||||
return CheckUpgradeAllowed(qualityProfile, languageProfile, isQualityUpgrade, isLanguageUpgrade);
|
||||
return CheckUpgradeAllowed(qualityProfile, isQualityUpgrade);
|
||||
}
|
||||
|
||||
private bool CheckUpgradeAllowed (QualityProfile qualityProfile, LanguageProfile languageProfile, ProfileComparisonResult isQualityUpgrade, ProfileComparisonResult isLanguageUpgrade)
|
||||
private bool CheckUpgradeAllowed (QualityProfile qualityProfile, ProfileComparisonResult isQualityUpgrade)
|
||||
{
|
||||
if (isQualityUpgrade == ProfileComparisonResult.Upgrade && qualityProfile.UpgradeAllowed ||
|
||||
isLanguageUpgrade == ProfileComparisonResult.Upgrade && languageProfile.UpgradeAllowed)
|
||||
{
|
||||
_logger.Debug("At least one profile allows upgrading");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isQualityUpgrade == ProfileComparisonResult.Upgrade && !qualityProfile.UpgradeAllowed)
|
||||
{
|
||||
_logger.Debug("Quality profile does not allow upgrades, skipping");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isLanguageUpgrade == ProfileComparisonResult.Upgrade && !languageProfile.UpgradeAllowed)
|
||||
{
|
||||
_logger.Debug("Language profile does not allow upgrades, skipping");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
public virtual Decision IsSatisfiedBy(RemoteAlbum subject, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var qualityProfile = subject.Artist.QualityProfile.Value;
|
||||
var languageProfile = subject.Artist.LanguageProfile.Value;
|
||||
|
||||
foreach (var album in subject.Albums)
|
||||
{
|
||||
@@ -49,22 +48,18 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
|
||||
if (!tracksMissing && trackFiles.Any())
|
||||
{
|
||||
// Get a distinct list of all current track qualities and languages for a given album
|
||||
// Get a distinct list of all current track qualities for a given album
|
||||
var currentQualities = trackFiles.Select(c => c.Quality).Distinct().ToList();
|
||||
var currentLanguages = trackFiles.Select(c => c.Language).Distinct().ToList();
|
||||
|
||||
_logger.Debug("Comparing file quality and language with report. Existing files contain {0} : {1}", currentQualities.ConcatToString(), currentLanguages.ConcatToString());
|
||||
_logger.Debug("Comparing file quality with report. Existing files contain {0}", currentQualities.ConcatToString());
|
||||
|
||||
if (!_upgradableSpecification.IsUpgradeAllowed(qualityProfile,
|
||||
languageProfile,
|
||||
currentQualities,
|
||||
currentLanguages,
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language))
|
||||
subject.ParsedAlbumInfo.Quality))
|
||||
{
|
||||
_logger.Debug("Upgrading is not allowed by the quality or language profile");
|
||||
_logger.Debug("Upgrading is not allowed by the quality profile");
|
||||
|
||||
return Decision.Reject("Existing files and the Quality or Language profile does not allow upgrades");
|
||||
return Decision.Reject("Existing files and the Quality profile does not allow upgrades");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,18 +50,14 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
if (!tracksMissing && trackFiles.Any())
|
||||
{
|
||||
var currentQualities = trackFiles.Select(c => c.Quality).Distinct().ToList();
|
||||
var currentLanguages = trackFiles.Select(c => c.Language).Distinct().ToList();
|
||||
|
||||
if (!_upgradableSpecification.IsUpgradable(subject.Artist.QualityProfile,
|
||||
subject.Artist.LanguageProfile,
|
||||
currentQualities,
|
||||
currentLanguages,
|
||||
_preferredWordServiceCalculator.Calculate(subject.Artist, trackFiles[0].GetSceneOrFileName()),
|
||||
subject.ParsedAlbumInfo.Quality,
|
||||
subject.ParsedAlbumInfo.Language,
|
||||
subject.PreferredWordScore))
|
||||
{
|
||||
return Decision.Reject("Existing files on disk is of equal or higher preference: {0} - {1}", currentQualities.ConcatToString(), currentLanguages.ConcatToString());
|
||||
return Decision.Reject("Existing files on disk is of equal or higher preference: {0}", currentQualities.ConcatToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ using System.Collections.Generic;
|
||||
using NzbDrone.Common.Messaging;
|
||||
using NzbDrone.Core.Download.TrackedDownloads;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Download
|
||||
{
|
||||
@@ -22,7 +21,6 @@ namespace NzbDrone.Core.Download
|
||||
public string Message { get; set; }
|
||||
public Dictionary<string, string> Data { get; set; }
|
||||
public TrackedDownload TrackedDownload { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public bool SkipReDownload { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,6 @@ namespace NzbDrone.Core.Download
|
||||
Message = message,
|
||||
Data = historyItem.Data,
|
||||
TrackedDownload = trackedDownload,
|
||||
Language = historyItem.Language,
|
||||
SkipReDownload = skipReDownload
|
||||
};
|
||||
|
||||
|
||||
@@ -197,7 +197,6 @@ namespace NzbDrone.Core.Download.Pending
|
||||
Artist = pendingRelease.RemoteAlbum.Artist,
|
||||
Album = album,
|
||||
Quality = pendingRelease.RemoteAlbum.ParsedAlbumInfo.Quality,
|
||||
Language = pendingRelease.RemoteAlbum.ParsedAlbumInfo.Language,
|
||||
Title = pendingRelease.Title,
|
||||
Size = pendingRelease.RemoteAlbum.Release.Size,
|
||||
Sizeleft = pendingRelease.RemoteAlbum.Release.Size,
|
||||
|
||||
@@ -77,7 +77,6 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
AlbumId = localTrack.Album.Id,
|
||||
TrackFileId = localTrack.Tracks.First().TrackFileId,
|
||||
RelativePath = artist.Path.GetRelativePath(possibleLyricFile),
|
||||
Language = LanguageParser.ParseSubtitleLanguage(possibleLyricFile),
|
||||
Extension = extension
|
||||
};
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
using NzbDrone.Core.Extras.Files;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Extras.Lyrics
|
||||
{
|
||||
public class LyricFile : ExtraFile
|
||||
{
|
||||
public Language Language { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ using NzbDrone.Core.Extras.Files;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Extras.Lyrics
|
||||
{
|
||||
@@ -56,7 +55,7 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
foreach (var trackFile in trackFiles)
|
||||
{
|
||||
var groupedExtraFilesForTrackFile = subtitleFiles.Where(m => m.TrackFileId == trackFile.Id)
|
||||
.GroupBy(s => s.Language + s.Extension).ToList();
|
||||
.GroupBy(s => s.Extension).ToList();
|
||||
|
||||
foreach (var group in groupedExtraFilesForTrackFile)
|
||||
{
|
||||
@@ -65,12 +64,12 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
|
||||
if (groupCount > 1)
|
||||
{
|
||||
_logger.Warn("Multiple lyric files found with the same language and extension for {0}", trackFile.Path);
|
||||
_logger.Warn("Multiple lyric files found with the same extension for {0}", trackFile.Path);
|
||||
}
|
||||
|
||||
foreach (var subtitleFile in group)
|
||||
{
|
||||
var suffix = GetSuffix(subtitleFile.Language, copy, groupCount > 1);
|
||||
var suffix = GetSuffix(copy, groupCount > 1);
|
||||
movedFiles.AddIfNotNull(MoveFile(artist, trackFile, subtitleFile, suffix));
|
||||
|
||||
copy++;
|
||||
@@ -87,10 +86,8 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
{
|
||||
if (LyricFileExtensions.Extensions.Contains(Path.GetExtension(path)))
|
||||
{
|
||||
var language = LanguageParser.ParseSubtitleLanguage(path);
|
||||
var suffix = GetSuffix(language, 1, false);
|
||||
var suffix = GetSuffix(1, false);
|
||||
var subtitleFile = ImportFile(artist, trackFile, path, readOnly, extension, suffix);
|
||||
subtitleFile.Language = language;
|
||||
|
||||
_lyricFileService.Upsert(subtitleFile);
|
||||
|
||||
@@ -100,7 +97,7 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
return null;
|
||||
}
|
||||
|
||||
private string GetSuffix(Language language, int copy, bool multipleCopies = false)
|
||||
private string GetSuffix(int copy, bool multipleCopies = false)
|
||||
{
|
||||
var suffixBuilder = new StringBuilder();
|
||||
|
||||
@@ -110,12 +107,6 @@ namespace NzbDrone.Core.Extras.Lyrics
|
||||
suffixBuilder.Append(copy);
|
||||
}
|
||||
|
||||
if (language != Language.Unknown)
|
||||
{
|
||||
suffixBuilder.Append(".");
|
||||
suffixBuilder.Append(IsoLanguages.Get(language).TwoLetterCode);
|
||||
}
|
||||
|
||||
return suffixBuilder.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.History
|
||||
{
|
||||
@@ -27,7 +26,6 @@ namespace NzbDrone.Core.History
|
||||
public Track Track { get; set; }
|
||||
public HistoryEventType EventType { get; set; }
|
||||
public Dictionary<string, string> Data { get; set; }
|
||||
public Language Language { get; set; }
|
||||
|
||||
public string DownloadId { get; set; }
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.MediaFiles.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Music.Events;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Common.Serializer;
|
||||
@@ -148,8 +147,7 @@ namespace NzbDrone.Core.History
|
||||
SourceTitle = message.Album.Release.Title,
|
||||
ArtistId = album.ArtistId,
|
||||
AlbumId = album.Id,
|
||||
DownloadId = message.DownloadId,
|
||||
Language = message.Album.ParsedAlbumInfo.Language
|
||||
DownloadId = message.DownloadId
|
||||
};
|
||||
|
||||
history.Data.Add("Indexer", message.Album.Release.Indexer);
|
||||
@@ -194,8 +192,7 @@ namespace NzbDrone.Core.History
|
||||
SourceTitle = message.TrackedDownload.DownloadItem.Title,
|
||||
ArtistId = album.ArtistId,
|
||||
AlbumId = album.Id,
|
||||
DownloadId = message.TrackedDownload.DownloadItem.DownloadId,
|
||||
Language = message.TrackedDownload.RemoteAlbum.ParsedAlbumInfo?.Language ?? Language.English
|
||||
DownloadId = message.TrackedDownload.DownloadItem.DownloadId
|
||||
};
|
||||
|
||||
history.Data.Add("StatusMessages", message.TrackedDownload.StatusMessages.ToJson());
|
||||
@@ -228,8 +225,7 @@ namespace NzbDrone.Core.History
|
||||
ArtistId = message.TrackInfo.Artist.Id,
|
||||
AlbumId = message.TrackInfo.Album.Id,
|
||||
TrackId = track.Id,
|
||||
DownloadId = downloadId,
|
||||
Language = message.TrackInfo.Language
|
||||
DownloadId = downloadId
|
||||
};
|
||||
|
||||
//Won't have a value since we publish this event before saving to DB.
|
||||
@@ -254,8 +250,7 @@ namespace NzbDrone.Core.History
|
||||
SourceTitle = message.SourceTitle,
|
||||
ArtistId = message.ArtistId,
|
||||
AlbumId = albumId,
|
||||
DownloadId = message.DownloadId,
|
||||
Language = message.Language
|
||||
DownloadId = message.DownloadId
|
||||
};
|
||||
|
||||
history.Data.Add("DownloadClient", message.DownloadClient);
|
||||
@@ -277,8 +272,7 @@ namespace NzbDrone.Core.History
|
||||
SourceTitle = message.TrackedDownload.DownloadItem.Title,
|
||||
ArtistId = album.ArtistId,
|
||||
AlbumId = album.Id,
|
||||
DownloadId = message.TrackedDownload.DownloadItem.DownloadId,
|
||||
Language = message.TrackedDownload.RemoteAlbum.ParsedAlbumInfo?.Language ?? Language.English
|
||||
DownloadId = message.TrackedDownload.DownloadItem.DownloadId
|
||||
};
|
||||
|
||||
_historyRepository.Insert(history);
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Music;
|
||||
|
||||
namespace NzbDrone.Core.Housekeeping.Housekeepers
|
||||
{
|
||||
// For some unknown reason series added through the v2 API can be added without a lanuage profile ID, which breaks things later.
|
||||
// This ensures there is a language profile ID and it's valid as a safety net.
|
||||
|
||||
public class EnsureValidLanguageProfileId : IHousekeepingTask
|
||||
{
|
||||
private readonly IArtistRepository _artistRepository;
|
||||
private readonly ILanguageProfileService _languageProfileService;
|
||||
|
||||
public EnsureValidLanguageProfileId(IArtistRepository artistRepository, ILanguageProfileService languageProfileService)
|
||||
{
|
||||
_artistRepository = artistRepository;
|
||||
_languageProfileService = languageProfileService;
|
||||
}
|
||||
|
||||
public void Clean()
|
||||
{
|
||||
var languageProfiles = _languageProfileService.All();
|
||||
var firstLangaugeProfile = languageProfiles.First();
|
||||
var artists = _artistRepository.All().ToList();
|
||||
var artistToUpdate = new List<Artist>();
|
||||
|
||||
artists.ForEach(s =>
|
||||
{
|
||||
if (s.LanguageProfileId == 0 || languageProfiles.None(l => l.Id == s.LanguageProfileId))
|
||||
{
|
||||
s.LanguageProfileId = firstLangaugeProfile.Id;
|
||||
artistToUpdate.Add(s);
|
||||
}
|
||||
});
|
||||
|
||||
_artistRepository.UpdateMany(artistToUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@ namespace NzbDrone.Core.ImportLists
|
||||
public bool EnableAutomaticAdd { get; set; }
|
||||
public ImportListMonitorType ShouldMonitor { get; set; }
|
||||
public int ProfileId { get; set; }
|
||||
public int LanguageProfileId { get; set; }
|
||||
public int MetadataProfileId { get; set; }
|
||||
public string RootFolderPath { get; set; }
|
||||
|
||||
|
||||
@@ -140,7 +140,6 @@ namespace NzbDrone.Core.ImportLists
|
||||
Monitored = monitored,
|
||||
RootFolderPath = importList.RootFolderPath,
|
||||
QualityProfileId = importList.ProfileId,
|
||||
LanguageProfileId = importList.LanguageProfileId,
|
||||
MetadataProfileId = importList.MetadataProfileId,
|
||||
Tags = importList.Tags,
|
||||
AlbumFolder = true,
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Languages
|
||||
{
|
||||
public class Language : IEmbeddedDocument, IEquatable<Language>
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
|
||||
public Language()
|
||||
{
|
||||
}
|
||||
|
||||
private Language(int id, string name)
|
||||
{
|
||||
Id = id;
|
||||
Name = name;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Id.GetHashCode();
|
||||
}
|
||||
|
||||
public bool Equals(Language other)
|
||||
{
|
||||
if (ReferenceEquals(null, other)) return false;
|
||||
if (ReferenceEquals(this, other)) return true;
|
||||
return Id.Equals(other.Id);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj)) return false;
|
||||
if (ReferenceEquals(this, obj)) return true;
|
||||
|
||||
return Equals(obj as Language);
|
||||
}
|
||||
|
||||
public static bool operator ==(Language left, Language right)
|
||||
{
|
||||
return Equals(left, right);
|
||||
}
|
||||
|
||||
public static bool operator !=(Language left, Language right)
|
||||
{
|
||||
return !Equals(left, right);
|
||||
}
|
||||
|
||||
public static Language Unknown { get { return new Language(0, "Unknown"); } }
|
||||
public static Language English { get { return new Language(1, "English"); } }
|
||||
public static Language French { get { return new Language(2, "French"); } }
|
||||
public static Language Spanish { get { return new Language(3, "Spanish"); } }
|
||||
public static Language German { get { return new Language(4, "German"); } }
|
||||
public static Language Italian { get { return new Language(5, "Italian"); } }
|
||||
public static Language Danish { get { return new Language(6, "Danish"); } }
|
||||
public static Language Dutch { get { return new Language(7, "Dutch"); } }
|
||||
public static Language Japanese { get { return new Language(8, "Japanese"); } }
|
||||
public static Language Cantonese { get { return new Language(9, "Cantonese"); } }
|
||||
public static Language Mandarin { get { return new Language(10, "Mandarin"); } }
|
||||
public static Language Russian { get { return new Language(11, "Russian"); } }
|
||||
public static Language Polish { get { return new Language(12, "Polish"); } }
|
||||
public static Language Vietnamese { get { return new Language(13, "Vietnamese"); } }
|
||||
public static Language Swedish { get { return new Language(14, "Swedish"); } }
|
||||
public static Language Norwegian { get { return new Language(15, "Norwegian"); } }
|
||||
public static Language Finnish { get { return new Language(16, "Finnish"); } }
|
||||
public static Language Turkish { get { return new Language(17, "Turkish"); } }
|
||||
public static Language Portuguese { get { return new Language(18, "Portuguese"); } }
|
||||
public static Language Flemish { get { return new Language(19, "Flemish"); } }
|
||||
public static Language Greek { get { return new Language(20, "Greek"); } }
|
||||
public static Language Korean { get { return new Language(21, "Korean"); } }
|
||||
public static Language Hungarian { get { return new Language(22, "Hungarian"); } }
|
||||
public static Language Hebrew { get { return new Language(23, "Hebrew"); } }
|
||||
public static Language Lithuanian { get { return new Language(24, "Lithuanian"); } }
|
||||
public static Language Czech { get { return new Language(25, "Czech"); } }
|
||||
|
||||
|
||||
public static List<Language> All
|
||||
{
|
||||
get
|
||||
{
|
||||
return new List<Language>
|
||||
{
|
||||
Unknown,
|
||||
English,
|
||||
French,
|
||||
Spanish,
|
||||
German,
|
||||
Italian,
|
||||
Danish,
|
||||
Dutch,
|
||||
Japanese,
|
||||
Cantonese,
|
||||
Mandarin,
|
||||
Russian,
|
||||
Polish,
|
||||
Vietnamese,
|
||||
Swedish,
|
||||
Norwegian,
|
||||
Finnish,
|
||||
Turkish,
|
||||
Portuguese,
|
||||
Flemish,
|
||||
Greek,
|
||||
Korean,
|
||||
Hungarian,
|
||||
Hebrew,
|
||||
Lithuanian,
|
||||
Czech
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static Language FindById(int id)
|
||||
{
|
||||
if (id == 0) return Unknown;
|
||||
|
||||
Language language = All.FirstOrDefault(v => v.Id == id);
|
||||
|
||||
if (language == null)
|
||||
{
|
||||
throw new ArgumentException("ID does not match a known language", nameof(id));
|
||||
}
|
||||
|
||||
return language;
|
||||
}
|
||||
|
||||
public static explicit operator Language(int id)
|
||||
{
|
||||
return FindById(id);
|
||||
}
|
||||
|
||||
public static explicit operator int(Language language)
|
||||
{
|
||||
return language.Id;
|
||||
}
|
||||
|
||||
public static explicit operator Language(string lang)
|
||||
{
|
||||
var language = All.FirstOrDefault(v => v.Name.Equals(lang, StringComparison.InvariantCultureIgnoreCase));
|
||||
|
||||
if (language == null)
|
||||
{
|
||||
throw new ArgumentException("Language does not match a known language", nameof(lang));
|
||||
}
|
||||
|
||||
return language;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Common.EnsureThat;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
|
||||
namespace NzbDrone.Core.Languages
|
||||
{
|
||||
public class LanguageComparer : IComparer<Language>
|
||||
{
|
||||
private readonly LanguageProfile _profile;
|
||||
|
||||
public LanguageComparer(LanguageProfile profile)
|
||||
{
|
||||
Ensure.That(profile, () => profile).IsNotNull();
|
||||
Ensure.That(profile.Languages, () => profile.Languages).HasItems();
|
||||
|
||||
_profile = profile;
|
||||
}
|
||||
|
||||
public int Compare(Language left, Language right)
|
||||
{
|
||||
int leftIndex = _profile.Languages.FindIndex(v => v.Language == left);
|
||||
int rightIndex = _profile.Languages.FindIndex(v => v.Language == right);
|
||||
|
||||
return leftIndex.CompareTo(rightIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.Languages
|
||||
{
|
||||
public class LanguagesBelowCutoff
|
||||
{
|
||||
public int ProfileId { get; set; }
|
||||
public IEnumerable<int> LanguageIds { get; set; }
|
||||
|
||||
public LanguagesBelowCutoff(int profileId, IEnumerable<int> languageIds)
|
||||
{
|
||||
ProfileId = profileId;
|
||||
LanguageIds = languageIds;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Languages;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
@@ -533,7 +532,6 @@ namespace NzbDrone.Core.MediaFiles
|
||||
if (!tag.IsValid)
|
||||
{
|
||||
return new ParsedTrackInfo {
|
||||
Language = Language.English,
|
||||
Quality = tag.Quality ?? new QualityModel { Quality = NzbDrone.Core.Qualities.Quality.Unknown },
|
||||
MediaInfo = tag.MediaInfo ?? new MediaInfoModel()
|
||||
};
|
||||
@@ -553,7 +551,6 @@ namespace NzbDrone.Core.MediaFiles
|
||||
};
|
||||
|
||||
return new ParsedTrackInfo {
|
||||
Language = Language.English,
|
||||
AlbumTitle = tag.Album,
|
||||
ArtistTitle = artist,
|
||||
ArtistMBId = tag.MusicBrainzReleaseArtistId,
|
||||
|
||||
@@ -137,8 +137,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
Modified = decision.Item.Modified,
|
||||
DateAdded = DateTime.UtcNow,
|
||||
Quality = decision.Item.Quality,
|
||||
MediaInfo = decision.Item.FileTrackInfo.MediaInfo,
|
||||
Language = decision.Item.Language
|
||||
MediaInfo = decision.Item.FileTrackInfo.MediaInfo
|
||||
})
|
||||
.ToList();
|
||||
_mediaFileService.AddMany(newFiles);
|
||||
|
||||
@@ -5,7 +5,6 @@ using NzbDrone.Core.Qualities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles
|
||||
@@ -21,7 +20,6 @@ namespace NzbDrone.Core.MediaFiles
|
||||
public string ReleaseGroup { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public MediaInfoModel MediaInfo { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public int AlbumId { get; set; }
|
||||
|
||||
// These are queried from the database
|
||||
|
||||
@@ -45,7 +45,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Aggregation
|
||||
}
|
||||
|
||||
localTrack.Size = _diskProvider.GetFileSize(localTrack.Path);
|
||||
localTrack.Language = localTrack.FileTrackInfo.Language;
|
||||
|
||||
foreach (var augmenter in _trackAugmenters)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,6 @@ using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.Extras;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.MediaFiles.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Music;
|
||||
@@ -63,7 +62,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
||||
var qualifiedImports = decisions.Where(c => c.Approved)
|
||||
.GroupBy(c => c.Item.Artist.Id, (i, s) => s
|
||||
.OrderByDescending(c => c.Item.Quality, new QualityModelComparer(s.First().Item.Artist.QualityProfile))
|
||||
.ThenByDescending(c => c.Item.Language, new LanguageComparer(s.First().Item.Artist.LanguageProfile))
|
||||
.ThenByDescending(c => c.Item.Size))
|
||||
.SelectMany(c => c)
|
||||
.ToList();
|
||||
@@ -159,7 +157,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
|
||||
ReleaseGroup = localTrack.ReleaseGroup,
|
||||
Quality = localTrack.Quality,
|
||||
MediaInfo = localTrack.FileTrackInfo.MediaInfo,
|
||||
Language = localTrack.Language,
|
||||
AlbumId = localTrack.Album.Id,
|
||||
Artist = localTrack.Artist,
|
||||
Album = localTrack.Album,
|
||||
|
||||
@@ -2,7 +2,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
||||
{
|
||||
@@ -15,7 +14,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
||||
public int AlbumReleaseId { get; set; }
|
||||
public List<int> TrackIds { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
public bool DisableReleaseSwitching { get; set; }
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
@@ -25,7 +24,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
||||
public AlbumRelease Release { get; set; }
|
||||
public List<Track> Tracks { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public Language Language { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
public IEnumerable<Rejection> Rejections { get; set; }
|
||||
public ParsedTrackInfo Tags { get; set; }
|
||||
|
||||
@@ -214,7 +214,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
||||
}
|
||||
|
||||
item.Quality = decision.Item.Quality;
|
||||
item.Language = decision.Item.Language;
|
||||
item.Size = _diskProvider.GetFileSize(decision.Item.Path);
|
||||
item.Rejections = decision.Rejections;
|
||||
item.Tags = decision.Item.FileTrackInfo;
|
||||
@@ -266,7 +265,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
|
||||
Size = fileInfo.Length,
|
||||
Modified = fileInfo.LastWriteTimeUtc,
|
||||
Quality = file.Quality,
|
||||
Language = file.Language,
|
||||
Artist = artist,
|
||||
Album = album,
|
||||
Release = release
|
||||
|
||||
@@ -4,7 +4,6 @@ using NLog;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications
|
||||
{
|
||||
|
||||
@@ -4,7 +4,6 @@ using NLog;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications
|
||||
@@ -24,7 +23,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications
|
||||
{
|
||||
var downloadPropersAndRepacks = _configService.DownloadPropersAndRepacks;
|
||||
var qualityComparer = new QualityModelComparer(localTrack.Artist.QualityProfile);
|
||||
var languageComparer = new LanguageComparer(localTrack.Artist.LanguageProfile);
|
||||
|
||||
foreach (var track in localTrack.Tracks.Where(e => e.TrackFileId > 0))
|
||||
{
|
||||
@@ -43,12 +41,6 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications
|
||||
_logger.Debug("This file isn't a quality upgrade for all tracks. Skipping {0}", localTrack.Path);
|
||||
return Decision.Reject("Not an upgrade for existing track file(s)");
|
||||
}
|
||||
|
||||
if (languageComparer.Compare(localTrack.Language, trackFile.Language) < 0 && qualityCompare == 0)
|
||||
{
|
||||
_logger.Debug("This file isn't a language upgrade for all tracks. Skipping {0}", localTrack.Path);
|
||||
return Decision.Reject("Not an upgrade for existing track file(s)");
|
||||
}
|
||||
}
|
||||
|
||||
return Decision.Accept();
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation.Results;
|
||||
using NzbDrone.Core.Validation.Paths;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
namespace NzbDrone.Core.Music
|
||||
@@ -20,7 +16,6 @@ namespace NzbDrone.Core.Music
|
||||
ArtistPathValidator artistPathValidator,
|
||||
ArtistAncestorValidator artistAncestorValidator,
|
||||
ProfileExistsValidator profileExistsValidator,
|
||||
LanguageProfileExistsValidator languageProfileExistsValidator,
|
||||
MetadataProfileExistsValidator metadataProfileExistsValidator)
|
||||
{
|
||||
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
||||
@@ -31,8 +26,6 @@ namespace NzbDrone.Core.Music
|
||||
|
||||
RuleFor(c => c.QualityProfileId).SetValidator(profileExistsValidator);
|
||||
|
||||
RuleFor(c => c.LanguageProfileId).SetValidator(languageProfileExistsValidator);
|
||||
|
||||
RuleFor(c => c.MetadataProfileId).SetValidator(metadataProfileExistsValidator);
|
||||
|
||||
}
|
||||
|
||||
@@ -2,9 +2,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
|
||||
namespace NzbDrone.Core.Music
|
||||
@@ -18,23 +16,19 @@ namespace NzbDrone.Core.Music
|
||||
{
|
||||
private readonly IAlbumRepository _albumRepository;
|
||||
private readonly IProfileService _profileService;
|
||||
private readonly ILanguageProfileService _languageProfileService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public AlbumCutoffService(IAlbumRepository albumRepository, IProfileService profileService, ILanguageProfileService languageProfileService, Logger logger)
|
||||
public AlbumCutoffService(IAlbumRepository albumRepository, IProfileService profileService, Logger logger)
|
||||
{
|
||||
_albumRepository = albumRepository;
|
||||
_profileService = profileService;
|
||||
_languageProfileService = languageProfileService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public PagingSpec<Album> AlbumsWhereCutoffUnmet(PagingSpec<Album> pagingSpec)
|
||||
{
|
||||
var qualitiesBelowCutoff = new List<QualitiesBelowCutoff>();
|
||||
var languagesBelowCutoff = new List<LanguagesBelowCutoff>();
|
||||
var profiles = _profileService.All();
|
||||
var languageProfiles = _languageProfileService.All();
|
||||
|
||||
//Get all items less than the cutoff
|
||||
foreach (var profile in profiles)
|
||||
@@ -48,18 +42,7 @@ namespace NzbDrone.Core.Music
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var profile in languageProfiles)
|
||||
{
|
||||
var languageCutoffIndex = profile.Languages.FindIndex(v => v.Language == profile.Cutoff);
|
||||
var belowLanguageCutoff = profile.Languages.Take(languageCutoffIndex).ToList();
|
||||
|
||||
if (belowLanguageCutoff.Any())
|
||||
{
|
||||
languagesBelowCutoff.Add(new LanguagesBelowCutoff(profile.Id, belowLanguageCutoff.Select(l => l.Language.Id)));
|
||||
}
|
||||
}
|
||||
|
||||
return _albumRepository.AlbumsWhereCutoffUnmet(pagingSpec, qualitiesBelowCutoff, languagesBelowCutoff);
|
||||
return _albumRepository.AlbumsWhereCutoffUnmet(pagingSpec, qualitiesBelowCutoff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Datastore.Extensions;
|
||||
using System.Collections.Generic;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
@@ -20,7 +19,7 @@ namespace NzbDrone.Core.Music
|
||||
Album FindByTitle(int artistMetadataId, string title);
|
||||
Album FindById(string foreignId);
|
||||
PagingSpec<Album> AlbumsWithoutFiles(PagingSpec<Album> pagingSpec);
|
||||
PagingSpec<Album> AlbumsWhereCutoffUnmet(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff, List<LanguagesBelowCutoff> languagesBelowCutoff);
|
||||
PagingSpec<Album> AlbumsWhereCutoffUnmet(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff);
|
||||
List<Album> AlbumsBetweenDates(DateTime startDate, DateTime endDate, bool includeUnmonitored);
|
||||
List<Album> ArtistAlbumsBetweenDates(Artist artist, DateTime startDate, DateTime endDate, bool includeUnmonitored);
|
||||
void SetMonitoredFlat(Album album, bool monitored);
|
||||
@@ -78,11 +77,11 @@ namespace NzbDrone.Core.Music
|
||||
return pagingSpec;
|
||||
}
|
||||
|
||||
public PagingSpec<Album> AlbumsWhereCutoffUnmet(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff, List<LanguagesBelowCutoff> languagesBelowCutoff)
|
||||
public PagingSpec<Album> AlbumsWhereCutoffUnmet(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff)
|
||||
{
|
||||
|
||||
pagingSpec.TotalRecords = GetCutOffAlbumsQueryCount(pagingSpec, qualitiesBelowCutoff, languagesBelowCutoff);
|
||||
pagingSpec.Records = GetCutOffAlbumsQuery(pagingSpec, qualitiesBelowCutoff, languagesBelowCutoff).ToList();
|
||||
pagingSpec.TotalRecords = GetCutOffAlbumsQueryCount(pagingSpec, qualitiesBelowCutoff);
|
||||
pagingSpec.Records = GetCutOffAlbumsQuery(pagingSpec, qualitiesBelowCutoff).ToList();
|
||||
|
||||
return pagingSpec;
|
||||
}
|
||||
@@ -199,7 +198,7 @@ namespace NzbDrone.Core.Music
|
||||
currentTime.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
|
||||
private QueryBuilder<Album> GetCutOffAlbumsQuery(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff, List<LanguagesBelowCutoff> languagesBelowCutoff)
|
||||
private QueryBuilder<Album> GetCutOffAlbumsQuery(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff)
|
||||
{
|
||||
string sortKey;
|
||||
string monitored = "(Albums.[Monitored] = 0) OR (Artists.[Monitored] = 0)";
|
||||
@@ -235,11 +234,10 @@ namespace NzbDrone.Core.Music
|
||||
"WHERE {0} " +
|
||||
"AND AlbumReleases.Monitored = 1 " +
|
||||
"GROUP BY Albums.Id " +
|
||||
"HAVING ({1} OR {2}) " +
|
||||
"ORDER BY {3} {4} LIMIT {5} OFFSET {6}",
|
||||
"HAVING {1} " +
|
||||
"ORDER BY {2} {3} LIMIT {4} OFFSET {5}",
|
||||
monitored,
|
||||
BuildQualityCutoffWhereClause(qualitiesBelowCutoff),
|
||||
BuildLanguageCutoffWhereClause(languagesBelowCutoff),
|
||||
sortKey,
|
||||
pagingSpec.ToSortDirection(),
|
||||
pagingSpec.PageSize,
|
||||
@@ -249,7 +247,7 @@ namespace NzbDrone.Core.Music
|
||||
|
||||
}
|
||||
|
||||
private int GetCutOffAlbumsQueryCount(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff, List<LanguagesBelowCutoff> languagesBelowCutoff)
|
||||
private int GetCutOffAlbumsQueryCount(PagingSpec<Album> pagingSpec, List<QualitiesBelowCutoff> qualitiesBelowCutoff)
|
||||
{
|
||||
var monitored = "(Albums.[Monitored] = 0) OR (Artists.[Monitored] = 0)";
|
||||
|
||||
@@ -267,30 +265,13 @@ namespace NzbDrone.Core.Music
|
||||
"WHERE {0} " +
|
||||
"AND AlbumReleases.Monitored = 1 " +
|
||||
"GROUP BY Albums.Id " +
|
||||
"HAVING ({1} OR {2}) ",
|
||||
"HAVING {1}",
|
||||
monitored,
|
||||
BuildQualityCutoffWhereClause(qualitiesBelowCutoff),
|
||||
BuildLanguageCutoffWhereClause(languagesBelowCutoff));
|
||||
BuildQualityCutoffWhereClause(qualitiesBelowCutoff));
|
||||
|
||||
return Query.QueryText(query).Count();
|
||||
}
|
||||
|
||||
|
||||
private string BuildLanguageCutoffWhereClause(List<LanguagesBelowCutoff> languagesBelowCutoff)
|
||||
{
|
||||
var clauses = new List<string>();
|
||||
|
||||
foreach (var language in languagesBelowCutoff)
|
||||
{
|
||||
foreach (var belowCutoff in language.LanguageIds)
|
||||
{
|
||||
clauses.Add(string.Format("(Artists.[LanguageProfileId] = {0} AND TrackFiles.[Language] = {1})", language.ProfileId, belowCutoff));
|
||||
}
|
||||
}
|
||||
|
||||
return string.Format("({0})", string.Join(" OR ", clauses));
|
||||
}
|
||||
|
||||
private string BuildQualityCutoffWhereClause(List<QualitiesBelowCutoff> qualitiesBelowCutoff)
|
||||
{
|
||||
var clauses = new List<string>();
|
||||
|
||||
@@ -2,7 +2,6 @@ using Marr.Data;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Profiles.Qualities;
|
||||
using NzbDrone.Core.Profiles.Languages;
|
||||
using NzbDrone.Core.Profiles.Metadata;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -31,8 +30,6 @@ namespace NzbDrone.Core.Music
|
||||
public DateTime Added { get; set; }
|
||||
public int QualityProfileId { get; set; }
|
||||
public LazyLoaded<QualityProfile> QualityProfile { get; set; }
|
||||
public int LanguageProfileId { get; set; }
|
||||
public LazyLoaded<LanguageProfile> LanguageProfile { get; set; }
|
||||
public int MetadataProfileId { get; set; }
|
||||
public LazyLoaded<MetadataProfile> MetadataProfile { get; set; }
|
||||
public LazyLoaded<List<Album>> Albums { get; set; }
|
||||
@@ -50,7 +47,6 @@ namespace NzbDrone.Core.Music
|
||||
Path = otherArtist.Path;
|
||||
QualityProfileId = otherArtist.QualityProfileId;
|
||||
QualityProfile = otherArtist.QualityProfile;
|
||||
LanguageProfileId = otherArtist.LanguageProfileId;
|
||||
MetadataProfileId = otherArtist.MetadataProfileId;
|
||||
|
||||
Albums = otherArtist.Albums;
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace NzbDrone.Core.Music
|
||||
public void Handle(ArtistEditedEvent message)
|
||||
{
|
||||
// Refresh Artist is we change AlbumType Preferences
|
||||
if (message.Artist.LanguageProfileId != message.OldArtist.LanguageProfileId)
|
||||
if (message.Artist.MetadataProfileId != message.OldArtist.MetadataProfileId)
|
||||
{
|
||||
_commandQueueManager.Push(new RefreshArtistCommand(message.Artist.Id, false));
|
||||
}
|
||||
|
||||
@@ -113,7 +113,6 @@ namespace NzbDrone.Core.Music
|
||||
Metadata = remote.ArtistMetadata.Value,
|
||||
MetadataProfileId = oldArtist.MetadataProfileId,
|
||||
QualityProfileId = oldArtist.QualityProfileId,
|
||||
LanguageProfileId = oldArtist.LanguageProfileId,
|
||||
RootFolderPath = oldArtist.RootFolderPath,
|
||||
Monitored = oldArtist.Monitored,
|
||||
AlbumFolder = oldArtist.AlbumFolder
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user