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:
Qstick
2019-08-02 07:50:09 -04:00
committed by GitHub
parent 8f791abbf6
commit 8b860bcb82
227 changed files with 345 additions and 5873 deletions

View File

@@ -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;

View File

@@ -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; }

View File

@@ -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());

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;

View File

@@ -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,

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,

View File

@@ -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" />

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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":

View File

@@ -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,

View File

@@ -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; }
}
}

View File

@@ -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;

View File

@@ -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)
};
}
}

View File

@@ -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);
}
}
}

View File

@@ -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

View File

@@ -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);
}
}
}
}

View File

@@ -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));

View File

@@ -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();

View File

@@ -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);

View File

@@ -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();
}
}
}

View File

@@ -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;

View File

@@ -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();

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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
};

View File

@@ -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();
}

View File

@@ -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"
}
]
}
}
]

View File

@@ -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"
}
]
}
}
]

View File

@@ -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"
}
]
}
}
],

View File

@@ -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"
}
]
}
}
]

View File

@@ -187,11 +187,7 @@
},
"trackNumbers": [
6
],
"language": {
"id": 1,
"name": "English"
}
]
}
}
]

View File

@@ -187,11 +187,7 @@
},
"trackNumbers": [
10
],
"language": {
"id": 1,
"name": "English"
}
]
}
},
{
@@ -228,11 +224,7 @@
},
"trackNumbers": [
11
],
"language": {
"id": 1,
"name": "English"
}
]
}
}
]

View File

@@ -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"
}
]
}
}
]

View File

@@ -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]

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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());
}
}
}

View File

@@ -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();

View File

@@ -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()

View File

@@ -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()
{

View File

@@ -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();
}

View File

@@ -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" />

View File

@@ -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);
}
}
}

View File

@@ -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; }
}
}

View File

@@ -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);

View File

@@ -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));
}
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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");
}
}
}

View File

@@ -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()));

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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();
}
}
}

View File

@@ -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");
}
}

View File

@@ -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();
}

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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");
}
}

View File

@@ -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());
}
}

View File

@@ -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; }
}
}

View File

@@ -96,7 +96,6 @@ namespace NzbDrone.Core.Download
Message = message,
Data = historyItem.Data,
TrackedDownload = trackedDownload,
Language = historyItem.Language,
SkipReDownload = skipReDownload
};

View File

@@ -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,

View File

@@ -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
};

View File

@@ -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; }
}
}

View File

@@ -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();
}
}

View File

@@ -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; }

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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; }

View File

@@ -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,

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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,

View File

@@ -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);

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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,

View File

@@ -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; }

View File

@@ -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; }

View File

@@ -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

View File

@@ -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
{

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);
}
}
}

View File

@@ -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>();

View File

@@ -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;

View File

@@ -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));
}

View File

@@ -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