diff --git a/setup/nzbdrone.iss b/setup/nzbdrone.iss index f9b2042c8..011781078 100644 --- a/setup/nzbdrone.iss +++ b/setup/nzbdrone.iss @@ -5,7 +5,7 @@ #define AppPublisher "Team Lidarr" #define AppURL "https://lidarr.audio/" #define ForumsURL "https://forums.lidarr.audio/" -#define AppExeName "NzbDrone.exe" +#define AppExeName "Lidarr.exe" #define BuildNumber "2.0" #define BuildNumber GetEnv('BUILD_NUMBER') #define BranchName GetEnv('branch') @@ -21,15 +21,15 @@ AppPublisher={#AppPublisher} AppPublisherURL={#AppURL} AppSupportURL={#ForumsURL} AppUpdatesURL={#AppURL} -DefaultDirName={commonappdata}\NzbDrone\bin +DefaultDirName={commonappdata}\Lidarr\bin DisableDirPage=yes DefaultGroupName={#AppName} DisableProgramGroupPage=yes -OutputBaseFilename=NzbDrone.{#BranchName}.{#BuildNumber} +OutputBaseFilename=Lidarr.{#BranchName}.{#BuildNumber} SolidCompression=yes AppCopyright=Creative Commons 3.0 License AllowUNCPath=False -UninstallDisplayIcon={app}\NzbDrone.exe +UninstallDisplayIcon={app}\Lidarr.exe DisableReadyPage=True CompressionThreads=2 Compression=lzma2/normal diff --git a/src/NzbDrone.Api/Music/ArtistModule.cs b/src/NzbDrone.Api/Music/ArtistModule.cs index de2337c9c..91ffc0f76 100644 --- a/src/NzbDrone.Api/Music/ArtistModule.cs +++ b/src/NzbDrone.Api/Music/ArtistModule.cs @@ -184,14 +184,14 @@ namespace NzbDrone.Api.Music public void Handle(TrackImportedEvent message) { - BroadcastResourceChange(ModelAction.Updated, message.ImportedTrack.Id); // TODO: Ensure we can pass DB ID instead of Metadata ID (SpotifyID) + BroadcastResourceChange(ModelAction.Updated, message.ImportedTrack.ArtistId); } public void Handle(TrackFileDeletedEvent message) { if (message.Reason == DeleteMediaFileReason.Upgrade) return; - BroadcastResourceChange(ModelAction.Updated, message.TrackFile.Id); // TODO: Ensure we can pass DB ID instead of Metadata ID (SpotifyID) + BroadcastResourceChange(ModelAction.Updated, message.TrackFile.ArtistId); } public void Handle(ArtistUpdatedEvent message) diff --git a/src/NzbDrone.Api/Music/ArtistResource.cs b/src/NzbDrone.Api/Music/ArtistResource.cs index 784755d64..2f58909a7 100644 --- a/src/NzbDrone.Api/Music/ArtistResource.cs +++ b/src/NzbDrone.Api/Music/ArtistResource.cs @@ -46,7 +46,7 @@ namespace NzbDrone.Api.Music public int ProfileId { get; set; } //Editing Only - public bool ArtistFolder { get; set; } + public bool AlbumFolder { get; set; } public bool Monitored { get; set; } public string RootFolderPath { get; set; } @@ -96,6 +96,7 @@ namespace NzbDrone.Api.Music ProfileId = model.ProfileId, Monitored = model.Monitored, + AlbumFolder = model.AlbumFolder, //UseSceneNumbering = resource.UseSceneNumbering, //Runtime = resource.Runtime, @@ -150,6 +151,7 @@ namespace NzbDrone.Api.Music Path = resource.Path, ProfileId = resource.ProfileId, + AlbumFolder = resource.AlbumFolder, Monitored = resource.Monitored, //LastInfoSync = resource.LastInfoSync, diff --git a/src/NzbDrone.Api/TrackFiles/TrackFileModule.cs b/src/NzbDrone.Api/TrackFiles/TrackFileModule.cs index 1f679ac5d..6cbf8e09a 100644 --- a/src/NzbDrone.Api/TrackFiles/TrackFileModule.cs +++ b/src/NzbDrone.Api/TrackFiles/TrackFileModule.cs @@ -52,11 +52,10 @@ namespace NzbDrone.Api.TrackFiles private TrackFileResource GetTrackFile(int id) { - throw new NotImplementedException(); - //var episodeFile = _mediaFileService.Get(id); - //var series = _seriesService.GetSeries(episodeFile.SeriesId); + var trackFile = _mediaFileService.Get(id); + var artist = _artistService.GetArtist(trackFile.ArtistId); - //return episodeFile.ToResource(series, _qualityUpgradableSpecification); + return trackFile.ToResource(artist, _qualityUpgradableSpecification); } private List GetTrackFiles() diff --git a/src/NzbDrone.Automation.Test/MainPagesTest.cs b/src/NzbDrone.Automation.Test/MainPagesTest.cs index bbf89690a..76e68e296 100644 --- a/src/NzbDrone.Automation.Test/MainPagesTest.cs +++ b/src/NzbDrone.Automation.Test/MainPagesTest.cs @@ -17,11 +17,11 @@ namespace NzbDrone.Automation.Test } [Test] - public void series_page() + public void artist_page() { - page.SeriesNavIcon.Click(); + page.ArtistNavIcon.Click(); page.WaitForNoSpinner(); - page.FindByClass("iv-series-index-seriesindexlayout").Should().NotBeNull(); + page.FindByClass("iv-artist-index-artistindexlayout").Should().NotBeNull(); } [Test] @@ -63,14 +63,14 @@ namespace NzbDrone.Automation.Test [Test] public void add_series_page() { - page.SeriesNavIcon.Click(); + page.ArtistNavIcon.Click(); page.WaitForNoSpinner(); - page.Find(By.LinkText("Add Series")).Click(); + page.Find(By.LinkText("Add Artist")).Click(); page.WaitForNoSpinner(); - page.FindByClass("iv-addseries-addserieslayout").Should().NotBeNull(); + page.FindByClass("iv-addartist-addartistlayout").Should().NotBeNull(); } } } \ No newline at end of file diff --git a/src/NzbDrone.Automation.Test/PageModel/PageBase.cs b/src/NzbDrone.Automation.Test/PageModel/PageBase.cs index f835c39a6..16bacc540 100644 --- a/src/NzbDrone.Automation.Test/PageModel/PageBase.cs +++ b/src/NzbDrone.Automation.Test/PageModel/PageBase.cs @@ -47,7 +47,7 @@ namespace NzbDrone.Automation.Test.PageModel }); } - public IWebElement SeriesNavIcon => FindByClass("x-series-nav"); + public IWebElement ArtistNavIcon => FindByClass("x-artist-nav"); public IWebElement CalendarNavIcon => FindByClass("x-calendar-nav"); diff --git a/src/NzbDrone.Common/Cloud/SonarrCloudRequestBuilder.cs b/src/NzbDrone.Common/Cloud/SonarrCloudRequestBuilder.cs index c53cb4f39..007ce3945 100644 --- a/src/NzbDrone.Common/Cloud/SonarrCloudRequestBuilder.cs +++ b/src/NzbDrone.Common/Cloud/SonarrCloudRequestBuilder.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Common.Cloud Services = new HttpRequestBuilder("http://services.lidarr.tv/v1/") .CreateFactory(); - Search = new HttpRequestBuilder("http://localhost:3000/{route}/") // TODO: Add {version} once LidarrAPI.Metadata is released. + Search = new HttpRequestBuilder("http://localhost:5000/{route}/") // TODO: Add {version} once LidarrAPI.Metadata is released. .CreateFactory(); diff --git a/src/NzbDrone.Core.Test/Blacklisting/BlacklistServiceFixture.cs b/src/NzbDrone.Core.Test/Blacklisting/BlacklistServiceFixture.cs index 415f12e2d..be6448e91 100644 --- a/src/NzbDrone.Core.Test/Blacklisting/BlacklistServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Blacklisting/BlacklistServiceFixture.cs @@ -21,7 +21,7 @@ namespace NzbDrone.Core.Test.Blacklisting { SeriesId = 12345, EpisodeIds = new List {1}, - Quality = new QualityModel(Quality.MP3320), + Quality = new QualityModel(Quality.MP3_320), SourceTitle = "series.title.s01e01", DownloadClient = "SabnzbdClient", DownloadId = "Sabnzbd_nzo_2dfh73k" diff --git a/src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs b/src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs index a2a18d018..3878c41c9 100644 --- a/src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs +++ b/src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.Datastore [Test] public void embedded_document_as_json() { - var quality = new QualityModel { Quality = Quality.MP3320, Revision = new Revision(version: 2 )}; + var quality = new QualityModel { Quality = Quality.MP3_320, Revision = new Revision(version: 2 )}; var history = Builder.CreateNew() .With(c => c.Id = 0) @@ -75,15 +75,15 @@ namespace NzbDrone.Core.Test.Datastore .All().With(c => c.Id = 0) .Build().ToList(); - history[0].Quality = new QualityModel(Quality.MP3512, new Revision(version: 2)); - history[1].Quality = new QualityModel(Quality.MP3320, new Revision(version: 2)); + history[0].Quality = new QualityModel(Quality.MP3_512, new Revision(version: 2)); + history[1].Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)); Db.InsertMany(history); var returnedHistory = Db.All(); - returnedHistory[0].Quality.Quality.Should().Be(Quality.MP3512); + returnedHistory[0].Quality.Quality.Should().Be(Quality.MP3_512); } } } diff --git a/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs b/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs index ffc30fcfd..1633baae4 100644 --- a/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs +++ b/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Test.Datastore var profile = new Profile { Name = "Test", - Cutoff = Quality.MP3320, + Cutoff = Quality.MP3_320, Items = Qualities.QualityFixture.GetDefaultQualities() }; diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs index ee758e20d..fa2ad0608 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs @@ -32,7 +32,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { Series = series, Release = new ReleaseInfo(), - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = new List { new Episode(), new Episode(), new Episode(), new Episode(), new Episode(), new Episode() } }; @@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { Series = series, Release = new ReleaseInfo(), - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = new List { new Episode(), new Episode() } }; @@ -48,7 +48,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { Series = series, Release = new ReleaseInfo(), - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = new List { new Episode() { Id = 2 } } }; @@ -60,10 +60,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests qualityType = Builder.CreateNew() .With(q => q.MinSize = 2) .With(q => q.MaxSize = 10) - .With(q => q.Quality = Quality.MP3192) + .With(q => q.Quality = Quality.MP3_192) .Build(); - Mocker.GetMock().Setup(s => s.Get(Quality.MP3192)).Returns(qualityType); + Mocker.GetMock().Setup(s => s.Get(Quality.MP3_192)).Returns(qualityType); Mocker.GetMock().Setup( s => s.GetEpisodesBySeason(It.IsAny(), It.IsAny())) diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/AnimeVersionUpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AnimeVersionUpgradeSpecificationFixture.cs index 9622f5fd6..5ac6df03c 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/AnimeVersionUpgradeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/AnimeVersionUpgradeSpecificationFixture.cs @@ -28,7 +28,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests _episodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision()), + Quality = new QualityModel(Quality.MP3_256, new Revision()), ReleaseGroup = "DRONE2" }; @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests _remoteEpisode.Series = new Series { SeriesType = SeriesTypes.Anime }; _remoteEpisode.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), ReleaseGroup = "DRONE" }; diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs index 1a4e56be5..ae4a884c3 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs @@ -13,38 +13,38 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_return_true_if_current_episode_is_less_than_cutoff() { - Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }, - new QualityModel(Quality.MP3192, new Revision(version: 2))).Should().BeTrue(); + Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }, + new QualityModel(Quality.MP3_192, new Revision(version: 2))).Should().BeTrue(); } [Test] public void should_return_false_if_current_episode_is_equal_to_cutoff() { - Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3256, Items = Qualities.QualityFixture.GetDefaultQualities() }, - new QualityModel(Quality.MP3256, new Revision(version: 2))).Should().BeFalse(); + Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3_256, Items = Qualities.QualityFixture.GetDefaultQualities() }, + new QualityModel(Quality.MP3_256, new Revision(version: 2))).Should().BeFalse(); } [Test] public void should_return_false_if_current_episode_is_greater_than_cutoff() { - Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3256, Items = Qualities.QualityFixture.GetDefaultQualities() }, - new QualityModel(Quality.MP3512, new Revision(version: 2))).Should().BeFalse(); + Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3_256, Items = Qualities.QualityFixture.GetDefaultQualities() }, + new QualityModel(Quality.MP3_512, new Revision(version: 2))).Should().BeFalse(); } [Test] public void should_return_true_when_new_episode_is_proper_but_existing_is_not() { - Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3256, Items = Qualities.QualityFixture.GetDefaultQualities() }, - new QualityModel(Quality.MP3256, new Revision(version: 1)), - new QualityModel(Quality.MP3256, new Revision(version: 2))).Should().BeTrue(); + Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3_256, Items = Qualities.QualityFixture.GetDefaultQualities() }, + new QualityModel(Quality.MP3_256, new Revision(version: 1)), + new QualityModel(Quality.MP3_256, new Revision(version: 2))).Should().BeTrue(); } [Test] public void should_return_false_if_cutoff_is_met_and_quality_is_higher() { - Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3256, Items = Qualities.QualityFixture.GetDefaultQualities() }, - new QualityModel(Quality.MP3256, new Revision(version: 2)), - new QualityModel(Quality.MP3512, new Revision(version: 2))).Should().BeFalse(); + Subject.CutoffNotMet(new Profile { Cutoff = Quality.MP3_256, Items = Qualities.QualityFixture.GetDefaultQualities() }, + new QualityModel(Quality.MP3_256, new Revision(version: 2)), + new QualityModel(Quality.MP3_512, new Revision(version: 2))).Should().BeFalse(); } } } diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/FullSeasonSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/FullSeasonSpecificationFixture.cs deleted file mode 100644 index 6a66d957d..000000000 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/FullSeasonSpecificationFixture.cs +++ /dev/null @@ -1,75 +0,0 @@ - -using System; -using NUnit.Framework; -using NzbDrone.Core.DecisionEngine.Specifications; -using NzbDrone.Core.Parser.Model; -using NzbDrone.Core.Test.Framework; -using FizzWare.NBuilder; -using System.Linq; -using FluentAssertions; -using NzbDrone.Core.Tv; -using Moq; -using System.Collections.Generic; - -namespace NzbDrone.Core.Test.DecisionEngineTests -{ - [TestFixture] - public class FullSeasonSpecificationFixture : CoreTest - { - private RemoteEpisode _remoteEpisode; - - [SetUp] - public void Setup() - { - var show = Builder.CreateNew().With(s => s.Id = 1234).Build(); - _remoteEpisode = new RemoteEpisode - { - ParsedEpisodeInfo = new ParsedEpisodeInfo - { - FullSeason = true - }, - Episodes = Builder.CreateListOfSize(3) - .All() - .With(e => e.AirDateUtc = DateTime.UtcNow.AddDays(-8)) - .With(s => s.SeriesId = show.Id) - .BuildList(), - Series = show, - Release = new ReleaseInfo - { - Title = "Series.Title.S01.720p.BluRay.X264-RlsGrp" - } - }; - - Mocker.GetMock().Setup(s => s.EpisodesBetweenDates(It.IsAny(), It.IsAny(), false)) - .Returns(new List()); - } - - [Test] - public void should_return_true_if_is_not_a_full_season() - { - _remoteEpisode.ParsedEpisodeInfo.FullSeason = false; - _remoteEpisode.Episodes.Last().AirDateUtc = DateTime.UtcNow.AddDays(+2); - Mocker.Resolve().IsSatisfiedBy(_remoteEpisode, null).Accepted.Should().BeTrue(); - } - - [Test] - public void should_return_true_if_all_episodes_have_aired() - { - Mocker.Resolve().IsSatisfiedBy(_remoteEpisode, null).Accepted.Should().BeTrue(); - } - - [Test] - public void should_return_false_if_one_episode_has_not_aired() - { - _remoteEpisode.Episodes.Last().AirDateUtc = DateTime.UtcNow.AddDays(+2); - Mocker.Resolve().IsSatisfiedBy(_remoteEpisode, null).Accepted.Should().BeFalse(); - } - - [Test] - public void should_return_false_if_an_episode_does_not_have_an_air_date() - { - _remoteEpisode.Episodes.Last().AirDateUtc = null; - Mocker.Resolve().IsSatisfiedBy(_remoteEpisode, null).Accepted.Should().BeFalse(); - } - } -} diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/HistorySpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/HistorySpecificationFixture.cs index b9e72d289..ae228c447 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/HistorySpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/HistorySpecificationFixture.cs @@ -45,25 +45,25 @@ namespace NzbDrone.Core.Test.DecisionEngineTests }; _fakeSeries = Builder.CreateNew() - .With(c => c.Profile = new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }) + .With(c => c.Profile = new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }) .Build(); _parseResultMulti = new RemoteEpisode { Series = _fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = doubleEpisodeList }; _parseResultSingle = new RemoteEpisode { Series = _fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = singleEpisodeList }; - _upgradableQuality = new QualityModel(Quality.MP3192, new Revision(version: 1)); - _notupgradableQuality = new QualityModel(Quality.MP3512, new Revision(version: 2)); + _upgradableQuality = new QualityModel(Quality.MP3_192, new Revision(version: 1)); + _notupgradableQuality = new QualityModel(Quality.MP3_512, new Revision(version: 2)); Mocker.GetMock() .SetupGet(s => s.EnableCompletedDownloadHandling) @@ -159,9 +159,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_not_be_upgradable_if_episode_is_of_same_quality_as_existing() { - _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }; - _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3512, new Revision(version: 1)); - _upgradableQuality = new QualityModel(Quality.MP3512, new Revision(version: 1)); + _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }; + _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); + _upgradableQuality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); GivenMostRecentForEpisode(FIRST_EPISODE_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed); @@ -171,9 +171,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_not_be_upgradable_if_cutoff_already_met() { - _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }; - _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3512, new Revision(version: 1)); - _upgradableQuality = new QualityModel(Quality.MP3512, new Revision(version: 1)); + _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }; + _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); + _upgradableQuality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); GivenMostRecentForEpisode(FIRST_EPISODE_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed); @@ -199,9 +199,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public void should_return_false_if_cutoff_already_met_and_cdh_is_disabled() { GivenCdhDisabled(); - _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }; - _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3512, new Revision(version: 1)); - _upgradableQuality = new QualityModel(Quality.MP3512, new Revision(version: 1)); + _fakeSeries.Profile = new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }; + _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); + _upgradableQuality = new QualityModel(Quality.MP3_512, new Revision(version: 1)); GivenMostRecentForEpisode(FIRST_EPISODE_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed); diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/PrioritizeDownloadDecisionFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/PrioritizeDownloadDecisionFixture.cs index b7a74888a..3f519cb3b 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/PrioritizeDownloadDecisionFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/PrioritizeDownloadDecisionFixture.cs @@ -68,8 +68,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_put_propers_before_non_propers() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256, new Revision(version: 1))); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256, new Revision(version: 2))); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 1))); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 2))); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -82,22 +82,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_put_higher_quality_before_lower() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3192)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_192)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); decisions.Add(new DownloadDecision(remoteEpisode2)); var qualifiedReports = Subject.PrioritizeDecisions(decisions); - qualifiedReports.First().RemoteEpisode.ParsedEpisodeInfo.Quality.Quality.Should().Be(Quality.MP3256); + qualifiedReports.First().RemoteEpisode.ParsedEpisodeInfo.Quality.Quality.Should().Be(Quality.MP3_256); } [Test] public void should_order_by_lowest_number_of_episodes() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(2) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(2) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -110,8 +110,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_order_by_lowest_number_of_episodes_with_multiple_episodes() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(2), GivenEpisode(3) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(2), GivenEpisode(3) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3_256)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -124,10 +124,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_order_by_age_then_largest_rounded_to_200mb() { - var remoteEpisodeSd = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3192), size: 100.Megabytes(), age: 1); - var remoteEpisodeHdSmallOld = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), size: 1200.Megabytes(), age: 1000); - var remoteEpisodeSmallYoung = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), size: 1250.Megabytes(), age: 10); - var remoteEpisodeHdLargeYoung = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), size: 3000.Megabytes(), age: 1); + var remoteEpisodeSd = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_192), size: 100.Megabytes(), age: 1); + var remoteEpisodeHdSmallOld = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), size: 1200.Megabytes(), age: 1000); + var remoteEpisodeSmallYoung = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), size: 1250.Megabytes(), age: 10); + var remoteEpisodeHdLargeYoung = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), size: 3000.Megabytes(), age: 1); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisodeSd)); @@ -142,8 +142,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_order_by_youngest() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), age: 10); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), age: 5); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), age: 10); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), age: 5); var decisions = new List(); @@ -157,8 +157,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_not_throw_if_no_episodes_are_found() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), size: 500.Megabytes()); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), size: 500.Megabytes()); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), size: 500.Megabytes()); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), size: 500.Megabytes()); remoteEpisode1.Episodes = new List(); @@ -174,8 +174,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { GivenPreferredDownloadProtocol(DownloadProtocol.Usenet); - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), downloadProtocol: DownloadProtocol.Torrent); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), downloadProtocol: DownloadProtocol.Usenet); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Torrent); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Usenet); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -190,8 +190,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { GivenPreferredDownloadProtocol(DownloadProtocol.Torrent); - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), downloadProtocol: DownloadProtocol.Torrent); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256), downloadProtocol: DownloadProtocol.Usenet); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Torrent); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256), downloadProtocol: DownloadProtocol.Usenet); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -204,8 +204,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_season_pack_above_single_episode() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); remoteEpisode1.ParsedEpisodeInfo.FullSeason = true; @@ -220,8 +220,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_multiepisode_over_single_episode_for_anime() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); remoteEpisode1.Series.SeriesType = SeriesTypes.Anime; remoteEpisode2.Series.SeriesType = SeriesTypes.Anime; @@ -237,8 +237,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_single_episode_over_multi_episode_for_non_anime() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1), GivenEpisode(2) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode1)); @@ -251,8 +251,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_releases_with_more_seeders() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var torrentInfo1 = new TorrentInfo(); torrentInfo1.PublishDate = DateTime.Now; @@ -277,8 +277,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_releases_with_more_peers_given_equal_number_of_seeds() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var torrentInfo1 = new TorrentInfo(); torrentInfo1.PublishDate = DateTime.Now; @@ -305,8 +305,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_releases_with_more_peers_no_seeds() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var torrentInfo1 = new TorrentInfo(); torrentInfo1.PublishDate = DateTime.Now; @@ -334,8 +334,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_first_release_if_peers_and_size_are_too_similar() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); var torrentInfo1 = new TorrentInfo(); torrentInfo1.PublishDate = DateTime.Now; @@ -363,8 +363,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_first_release_if_age_and_size_are_too_similar() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3256)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_256)); remoteEpisode1.Release.PublishDate = DateTime.UtcNow.AddDays(-100); remoteEpisode1.Release.Size = 200.Megabytes(); @@ -383,8 +383,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_prefer_quality_over_the_number_of_peers() { - var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3512)); - var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3192)); + var remoteEpisode1 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_512)); + var remoteEpisode2 = GivenRemoteEpisode(new List { GivenEpisode(1) }, new QualityModel(Quality.MP3_192)); var torrentInfo1 = new TorrentInfo(); torrentInfo1.PublishDate = DateTime.Now; diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs index 523e66e3d..02d80ff3b 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs @@ -19,29 +19,29 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public static object[] AllowedTestCases = { - new object[] { Quality.MP3192 }, - new object[] { Quality.MP3256 }, - new object[] { Quality.MP3512 } + new object[] { Quality.MP3_192 }, + new object[] { Quality.MP3_256 }, + new object[] { Quality.MP3_512 } }; public static object[] DeniedTestCases = { - new object[] { Quality.MP3192 }, - new object[] { Quality.MP3320 }, - new object[] { Quality.MP3320 } + new object[] { Quality.MP3_192 }, + new object[] { Quality.MP3_320 }, + new object[] { Quality.MP3_320 } }; [SetUp] public void Setup() { var fakeSeries = Builder.CreateNew() - .With(c => c.Profile = (LazyLoaded)new Profile { Cutoff = Quality.MP3512 }) + .With(c => c.Profile = (LazyLoaded)new Profile { Cutoff = Quality.MP3_512 }) .Build(); remoteEpisode = new RemoteEpisode { Series = fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, }; } @@ -49,7 +49,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public void should_allow_if_quality_is_defined_in_profile(Quality qualityType) { remoteEpisode.ParsedEpisodeInfo.Quality.Quality = qualityType; - remoteEpisode.Series.Profile.Value.Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3192, Quality.MP3256, Quality.MP3512); + remoteEpisode.Series.Profile.Value.Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3_192, Quality.MP3_256, Quality.MP3_512); Subject.IsSatisfiedBy(remoteEpisode, null).Accepted.Should().BeTrue(); } @@ -58,7 +58,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests public void should_not_allow_if_quality_is_not_defined_in_profile(Quality qualityType) { remoteEpisode.ParsedEpisodeInfo.Quality.Quality = qualityType; - remoteEpisode.Series.Profile.Value.Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3192, Quality.MP3256, Quality.MP3512); + remoteEpisode.Series.Profile.Value.Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3_192, Quality.MP3_256, Quality.MP3_512); Subject.IsSatisfiedBy(remoteEpisode, null).Accepted.Should().BeFalse(); } diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs index 56aa16685..a3791ba77 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs @@ -14,13 +14,13 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { public static object[] IsUpgradeTestCases = { - new object[] { Quality.MP3192, 1, Quality.MP3192, 2, Quality.MP3192, true }, - new object[] { Quality.MP3320, 1, Quality.MP3320, 2, Quality.MP3320, true }, - new object[] { Quality.MP3192, 1, Quality.MP3192, 1, Quality.MP3192, false }, - new object[] { Quality.MP3320, 1, Quality.MP3256, 2, Quality.MP3320, false }, - new object[] { Quality.MP3320, 1, Quality.MP3256, 2, Quality.MP3320, false }, - new object[] { Quality.MP3320, 1, Quality.MP3320, 1, Quality.MP3320, false }, - new object[] { Quality.MP3512, 1, Quality.MP3512, 1, Quality.MP3512, false } + new object[] { Quality.MP3_192, 1, Quality.MP3_192, 2, Quality.MP3_192, true }, + new object[] { Quality.MP3_320, 1, Quality.MP3_320, 2, Quality.MP3_320, true }, + new object[] { Quality.MP3_192, 1, Quality.MP3_192, 1, Quality.MP3_192, false }, + new object[] { Quality.MP3_320, 1, Quality.MP3_256, 2, Quality.MP3_320, false }, + new object[] { Quality.MP3_320, 1, Quality.MP3_256, 2, Quality.MP3_320, false }, + new object[] { Quality.MP3_320, 1, Quality.MP3_320, 1, Quality.MP3_320, false }, + new object[] { Quality.MP3_512, 1, Quality.MP3_512, 1, Quality.MP3_512, false } }; [SetUp] @@ -54,7 +54,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests var profile = new Profile { Items = Qualities.QualityFixture.GetDefaultQualities() }; - Subject.IsUpgradable(profile, new QualityModel(Quality.MP3192, new Revision(version: 2)), new QualityModel(Quality.MP3192, new Revision(version: 1))) + Subject.IsUpgradable(profile, new QualityModel(Quality.MP3_192, new Revision(version: 2)), new QualityModel(Quality.MP3_192, new Revision(version: 1))) .Should().BeFalse(); } } diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/QueueSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/QueueSpecificationFixture.cs index b8226addf..ef945b79c 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/QueueSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/QueueSpecificationFixture.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests _remoteEpisode = Builder.CreateNew() .With(r => r.Series = _series) .With(r => r.Episodes = new List { _episode }) - .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192) }) + .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192) }) .Build(); } @@ -96,14 +96,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_return_true_when_quality_in_queue_is_lower() { - _series.Profile.Value.Cutoff = Quality.MP3512; + _series.Profile.Value.Cutoff = Quality.MP3_512; var remoteEpisode = Builder.CreateNew() .With(r => r.Series = _series) .With(r => r.Episodes = new List { _episode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3192) + Quality = new QualityModel(Quality.MP3_192) }) .Build(); @@ -119,7 +119,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _otherEpisode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3192) + Quality = new QualityModel(Quality.MP3_192) }) .Build(); @@ -135,7 +135,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _episode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3192) + Quality = new QualityModel(Quality.MP3_192) }) .Build(); @@ -146,14 +146,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_return_false_when_quality_in_queue_is_better() { - _series.Profile.Value.Cutoff = Quality.MP3512; + _series.Profile.Value.Cutoff = Quality.MP3_512; var remoteEpisode = Builder.CreateNew() .With(r => r.Series = _series) .With(r => r.Episodes = new List { _episode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }) .Build(); @@ -169,7 +169,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _episode, _otherEpisode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }) .Build(); @@ -185,7 +185,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _episode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }) .Build(); @@ -203,7 +203,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _episode, _otherEpisode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }) .Build(); @@ -223,7 +223,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests { Quality = new QualityModel( - Quality.MP3256) + Quality.MP3_256) }) .TheFirst(1) .With(r => r.Episodes = new List { _episode }) @@ -246,7 +246,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .With(r => r.Episodes = new List { _episode }) .With(r => r.ParsedEpisodeInfo = new ParsedEpisodeInfo { - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }) .Build(); diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/DelaySpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/DelaySpecificationFixture.cs index 3157cf51a..a04477fe8 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/DelaySpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/DelaySpecificationFixture.cs @@ -47,11 +47,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync .Build(); _profile.Items = new List(); - _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3256 }); - _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 }); - _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 }); + _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_256 }); + _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 }); + _profile.Items.Add(new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 }); - _profile.Cutoff = Quality.MP3320; + _profile.Cutoff = Quality.MP3_320; _remoteEpisode.ParsedEpisodeInfo = new ParsedEpisodeInfo(); _remoteEpisode.Release = new ReleaseInfo(); @@ -95,7 +95,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_false_when_system_invoked_search_and_release_is_younger_than_delay() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3192); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_192); _remoteEpisode.Release.PublishDate = DateTime.UtcNow; _delayProfile.UsenetDelay = 720; @@ -114,7 +114,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_true_when_quality_is_last_allowed_in_profile() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3320); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_320); Subject.IsSatisfiedBy(_remoteEpisode, null).Accepted.Should().BeTrue(); } @@ -122,7 +122,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_true_when_release_is_older_than_delay() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256); _remoteEpisode.Release.PublishDate = DateTime.UtcNow.AddHours(-10); _delayProfile.UsenetDelay = 60; @@ -133,7 +133,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_false_when_release_is_younger_than_delay() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3192); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_192); _remoteEpisode.Release.PublishDate = DateTime.UtcNow; _delayProfile.UsenetDelay = 720; @@ -144,10 +144,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_true_when_release_is_a_proper_for_existing_episode() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256, new Revision(version: 2)); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)); _remoteEpisode.Release.PublishDate = DateTime.UtcNow; - GivenExistingFile(new QualityModel(Quality.MP3256)); + GivenExistingFile(new QualityModel(Quality.MP3_256)); GivenUpgradeForExistingFile(); Mocker.GetMock() @@ -162,10 +162,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_true_when_release_is_a_real_for_existing_episode() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256, new Revision(real: 1)); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(real: 1)); _remoteEpisode.Release.PublishDate = DateTime.UtcNow; - GivenExistingFile(new QualityModel(Quality.MP3256)); + GivenExistingFile(new QualityModel(Quality.MP3_256)); GivenUpgradeForExistingFile(); Mocker.GetMock() @@ -180,10 +180,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_be_false_when_release_is_proper_for_existing_episode_of_different_quality() { - _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256, new Revision(version: 2)); + _remoteEpisode.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2)); _remoteEpisode.Release.PublishDate = DateTime.UtcNow; - GivenExistingFile(new QualityModel(Quality.MP3192)); + GivenExistingFile(new QualityModel(Quality.MP3_192)); _delayProfile.UsenetDelay = 720; diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs index 9db017c1f..7fe60be78 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs @@ -31,34 +31,34 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync { Mocker.Resolve(); - _firstFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3512, new Revision(version: 1)), DateAdded = DateTime.Now }; - _secondFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3512, new Revision(version: 1)), DateAdded = DateTime.Now }; + _firstFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_512, new Revision(version: 1)), DateAdded = DateTime.Now }; + _secondFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_512, new Revision(version: 1)), DateAdded = DateTime.Now }; var singleEpisodeList = new List { new Episode { EpisodeFile = _firstFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = null } }; var doubleEpisodeList = new List { new Episode { EpisodeFile = _firstFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = _secondFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = null } }; var fakeSeries = Builder.CreateNew() - .With(c => c.Profile = new Profile { Cutoff = Quality.MP3512 }) + .With(c => c.Profile = new Profile { Cutoff = Quality.MP3_512 }) .Build(); _parseResultMulti = new RemoteEpisode { Series = fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = doubleEpisodeList }; _parseResultSingle = new RemoteEpisode { Series = fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = singleEpisodeList }; } private void WithFirstFileUpgradable() { - _firstFile.Quality = new QualityModel(Quality.MP3192); + _firstFile.Quality = new QualityModel(Quality.MP3_192); } private void GivenAutoDownloadPropers() @@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_return_false_when_episodeFile_was_added_more_than_7_days_ago() { - _firstFile.Quality.Quality = Quality.MP3192; + _firstFile.Quality.Quality = Quality.MP3_192; _firstFile.DateAdded = DateTime.Today.AddDays(-30); Subject.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse(); @@ -80,8 +80,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_return_false_when_first_episodeFile_was_added_more_than_7_days_ago() { - _firstFile.Quality.Quality = Quality.MP3192; - _secondFile.Quality.Quality = Quality.MP3192; + _firstFile.Quality.Quality = Quality.MP3_192; + _secondFile.Quality.Quality = Quality.MP3_192; _firstFile.DateAdded = DateTime.Today.AddDays(-30); Subject.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse(); @@ -90,8 +90,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_return_false_when_second_episodeFile_was_added_more_than_7_days_ago() { - _firstFile.Quality.Quality = Quality.MP3192; - _secondFile.Quality.Quality = Quality.MP3192; + _firstFile.Quality.Quality = Quality.MP3_192; + _secondFile.Quality.Quality = Quality.MP3_192; _secondFile.DateAdded = DateTime.Today.AddDays(-30); Subject.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse(); @@ -118,7 +118,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync [Test] public void should_return_false_when_proper_but_auto_download_propers_is_false() { - _firstFile.Quality.Quality = Quality.MP3192; + _firstFile.Quality.Quality = Quality.MP3_192; _firstFile.DateAdded = DateTime.Today; Subject.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse(); @@ -129,7 +129,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync { GivenAutoDownloadPropers(); - _firstFile.Quality.Quality = Quality.MP3192; + _firstFile.Quality.Quality = Quality.MP3_192; _firstFile.DateAdded = DateTime.Today; Subject.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeTrue(); diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs index 114b5f575..b96334abb 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs @@ -32,39 +32,39 @@ namespace NzbDrone.Core.Test.DecisionEngineTests Mocker.Resolve(); _upgradeDisk = Mocker.Resolve(); - _firstFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3512, new Revision(version: 2)), DateAdded = DateTime.Now }; - _secondFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3512, new Revision(version: 2)), DateAdded = DateTime.Now }; + _firstFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_512, new Revision(version: 2)), DateAdded = DateTime.Now }; + _secondFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_512, new Revision(version: 2)), DateAdded = DateTime.Now }; var singleEpisodeList = new List { new Episode { EpisodeFile = _firstFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = null } }; var doubleEpisodeList = new List { new Episode { EpisodeFile = _firstFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = _secondFile, EpisodeFileId = 1 }, new Episode { EpisodeFile = null } }; var fakeSeries = Builder.CreateNew() - .With(c => c.Profile = new Profile { Cutoff = Quality.MP3512, Items = Qualities.QualityFixture.GetDefaultQualities() }) + .With(c => c.Profile = new Profile { Cutoff = Quality.MP3_512, Items = Qualities.QualityFixture.GetDefaultQualities() }) .Build(); _parseResultMulti = new RemoteEpisode { Series = fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = doubleEpisodeList }; _parseResultSingle = new RemoteEpisode { Series = fakeSeries, - ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3192, new Revision(version: 2)) }, + ParsedEpisodeInfo = new ParsedEpisodeInfo { Quality = new QualityModel(Quality.MP3_192, new Revision(version: 2)) }, Episodes = singleEpisodeList }; } private void WithFirstFileUpgradable() { - _firstFile.Quality = new QualityModel(Quality.MP3192); + _firstFile.Quality = new QualityModel(Quality.MP3_192); } private void WithSecondFileUpgradable() { - _secondFile.Quality = new QualityModel(Quality.MP3192); + _secondFile.Quality = new QualityModel(Quality.MP3_192); } [Test] @@ -120,8 +120,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests [Test] public void should_not_be_upgradable_if_qualities_are_the_same() { - _firstFile.Quality = new QualityModel(Quality.MP3512); - _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3512); + _firstFile.Quality = new QualityModel(Quality.MP3_512); + _parseResultSingle.ParsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_512); _upgradeDisk.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse(); } } diff --git a/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs index 7161aa806..785a2d009 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs @@ -58,7 +58,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_download_report_if_epsiode_was_not_already_downloaded() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode)); @@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_only_download_episode_once() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode)); @@ -86,12 +86,12 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests { var remoteEpisode1 = GetRemoteEpisode( new List { GetEpisode(1) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var remoteEpisode2 = GetRemoteEpisode( new List { GetEpisode(1), GetEpisode(2) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var decisions = new List(); @@ -106,7 +106,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_return_downloaded_reports() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode)); @@ -119,12 +119,12 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests { var remoteEpisode1 = GetRemoteEpisode( new List { GetEpisode(1) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var remoteEpisode2 = GetRemoteEpisode( new List { GetEpisode(2) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var decisions = new List(); @@ -139,17 +139,17 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests { var remoteEpisode1 = GetRemoteEpisode( new List { GetEpisode(1) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var remoteEpisode2 = GetRemoteEpisode( new List { GetEpisode(2) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var remoteEpisode3 = GetRemoteEpisode( new List { GetEpisode(2) }, - new QualityModel(Quality.MP3192) + new QualityModel(Quality.MP3_192) ); var decisions = new List(); @@ -164,7 +164,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_not_add_to_downloaded_list_when_download_fails() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode)); @@ -188,7 +188,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_not_grab_if_pending() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode, new Rejection("Failure!", RejectionType.Temporary))); @@ -202,7 +202,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_not_add_to_pending_if_episode_was_grabbed() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode)); @@ -216,7 +216,7 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests public void should_add_to_pending_even_if_already_added_to_pending() { var episodes = new List { GetEpisode(1) }; - var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3192)); + var remoteEpisode = GetRemoteEpisode(episodes, new QualityModel(Quality.MP3_192)); var decisions = new List(); decisions.Add(new DownloadDecision(remoteEpisode, new Rejection("Failure!", RejectionType.Temporary))); diff --git a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/AddFixture.cs b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/AddFixture.cs index 299dd568c..7929ac45f 100644 --- a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/AddFixture.cs +++ b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/AddFixture.cs @@ -39,12 +39,12 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _profile = new Profile { Name = "Test", - Cutoff = Quality.MP3256, + Cutoff = Quality.MP3_256, Items = new List { - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3256 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 } + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_256 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 } }, }; @@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _release = Builder.CreateNew().Build(); _parsedEpisodeInfo = Builder.CreateNew().Build(); - _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256); + _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256); _remoteEpisode = new RemoteEpisode(); _remoteEpisode.Episodes = new List{ _episode }; diff --git a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveGrabbedFixture.cs b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveGrabbedFixture.cs index c4d7a3e59..e03b36956 100644 --- a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveGrabbedFixture.cs +++ b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveGrabbedFixture.cs @@ -39,12 +39,12 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _profile = new Profile { Name = "Test", - Cutoff = Quality.MP3256, + Cutoff = Quality.MP3_256, Items = new List { - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3256 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3512 } + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_256 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_512 } }, }; @@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _release = Builder.CreateNew().Build(); _parsedEpisodeInfo = Builder.CreateNew().Build(); - _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3256); + _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_256); _remoteEpisode = new RemoteEpisode(); _remoteEpisode.Episodes = new List{ _episode }; @@ -110,7 +110,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests [Test] public void should_delete_if_the_grabbed_quality_is_the_higher() { - GivenHeldRelease(new QualityModel(Quality.MP3192)); + GivenHeldRelease(new QualityModel(Quality.MP3_192)); Subject.Handle(new EpisodeGrabbedEvent(_remoteEpisode)); @@ -120,7 +120,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests [Test] public void should_not_delete_if_the_grabbed_quality_is_the_lower() { - GivenHeldRelease(new QualityModel(Quality.MP3512)); + GivenHeldRelease(new QualityModel(Quality.MP3_512)); Subject.Handle(new EpisodeGrabbedEvent(_remoteEpisode)); diff --git a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveRejectedFixture.cs b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveRejectedFixture.cs index 9e4c85882..3b4f68efd 100644 --- a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveRejectedFixture.cs +++ b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemoveRejectedFixture.cs @@ -41,12 +41,12 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _profile = new Profile { Name = "Test", - Cutoff = Quality.MP3192, + Cutoff = Quality.MP3_192, Items = new List { - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3192 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3256 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3320 } + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_192 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_256 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_320 } }, }; @@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests _release = Builder.CreateNew().Build(); _parsedEpisodeInfo = Builder.CreateNew().Build(); - _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3192); + _parsedEpisodeInfo.Quality = new QualityModel(Quality.MP3_192); _remoteEpisode = new RemoteEpisode(); _remoteEpisode.Episodes = new List{ _episode }; diff --git a/src/NzbDrone.Core.Test/Files/Indexers/TorrentRss/ImmortalSeed.xml b/src/NzbDrone.Core.Test/Files/Indexers/TorrentRss/ImmortalSeed.xml index 801acdaea..506fdacf3 100644 --- a/src/NzbDrone.Core.Test/Files/Indexers/TorrentRss/ImmortalSeed.xml +++ b/src/NzbDrone.Core.Test/Files/Indexers/TorrentRss/ImmortalSeed.xml @@ -289,7 +289,7 @@ <br /> Finally, theres Penny. Penny is the gorgeous girl next-door to Leonard and Sheldons apartment, and though she does not have any knowledge in physics or science, she makes success by being a funny character frequently having hilarious comments and on- and off-going relationships.<br /> <br /> - All together, this unit of comedians make the shows half-hour episodes pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> + All together, this unit of comedians make the shows half-hour tracks pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> <br /> <div style="text-align: center;"><span id="lazyload"><span id="1776335379_620778c1a5d72709be3fc47a2262cdb9">&nbsp;</span> <a href="https://immortalseed.me/images/modpics/41872.jpg" id="ts_show_preview" alt=""><img src="https://immortalseed.me/images/modpics/41872.jpg" border="0" alt="" onload="TSResizeImage(this, '1776335379_620778c1a5d72709be3fc47a2262cdb9');" /></a></span></div> @@ -375,7 +375,7 @@ <br /> Finally, theres Penny. Penny is the gorgeous girl next-door to Leonard and Sheldons apartment, and though she does not have any knowledge in physics or science, she makes success by being a funny character frequently having hilarious comments and on- and off-going relationships.<br /> <br /> - All together, this unit of comedians make the shows half-hour episodes pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> + All together, this unit of comedians make the shows half-hour tracks pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> <br /> <div style="text-align: center;"><span id="lazyload"><span id="1099410497_49fffcedd2eef0506d6b92e66fc4f3d4">&nbsp;</span> <a href="https://immortalseed.me/images/modpics/57412.jpg" id="ts_show_preview" alt=""><img src="https://immortalseed.me/images/modpics/57412.jpg" border="0" alt="" onload="TSResizeImage(this, '1099410497_49fffcedd2eef0506d6b92e66fc4f3d4');" /></a></span></div> @@ -473,7 +473,7 @@ <br /> Finally, theres Penny. Penny is the gorgeous girl next-door to Leonard and Sheldons apartment, and though she does not have any knowledge in physics or science, she makes success by being a funny character frequently having hilarious comments and on- and off-going relationships.<br /> <br /> - All together, this unit of comedians make the shows half-hour episodes pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> + All together, this unit of comedians make the shows half-hour tracks pure enjoyment and whether you like physics, women or neither, this show is surely going to get you laughing!<br /> <br /> <div style="text-align: center;"><span id="lazyload"><span id="1183173375_229d6c19d62f235698f60e876f0f5ab4">&nbsp;</span> <a href="https://immortalseed.me/images/modpics/55069.jpg" id="ts_show_preview" alt=""><img src="https://immortalseed.me/images/modpics/55069.jpg" border="0" alt="" onload="TSResizeImage(this, '1183173375_229d6c19d62f235698f60e876f0f5ab4');" /></a></span></div> diff --git a/src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs b/src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs index 99ac1aaaf..4d330c1a0 100644 --- a/src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs +++ b/src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs @@ -31,13 +31,13 @@ namespace NzbDrone.Core.Test.HistoryTests public void should_get_download_history() { var historyBluray = Builder.CreateNew() - .With(c => c.Quality = new QualityModel(Quality.MP3320)) + .With(c => c.Quality = new QualityModel(Quality.MP3_320)) .With(c => c.SeriesId = 12) .With(c => c.EventType = HistoryEventType.Grabbed) .BuildNew(); var historyDvd = Builder.CreateNew() - .With(c => c.Quality = new QualityModel(Quality.MP3192)) + .With(c => c.Quality = new QualityModel(Quality.MP3_192)) .With(c => c.SeriesId = 12) .With(c => c.EventType = HistoryEventType.Grabbed) .BuildNew(); @@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.HistoryTests Subject.Insert(historyBluray); Subject.Insert(historyDvd); - var downloadHistory = Subject.FindDownloadHistory(12, new QualityModel(Quality.MP3320)); + var downloadHistory = Subject.FindDownloadHistory(12, new QualityModel(Quality.MP3_320)); downloadHistory.Should().HaveCount(1); } diff --git a/src/NzbDrone.Core.Test/HistoryTests/HistoryServiceFixture.cs b/src/NzbDrone.Core.Test/HistoryTests/HistoryServiceFixture.cs index 8c6e3e863..34e5f2962 100644 --- a/src/NzbDrone.Core.Test/HistoryTests/HistoryServiceFixture.cs +++ b/src/NzbDrone.Core.Test/HistoryTests/HistoryServiceFixture.cs @@ -25,8 +25,8 @@ namespace NzbDrone.Core.Test.HistoryTests [SetUp] public void Setup() { - _profile = new Profile { Cutoff = Quality.MP3256, Items = QualityFixture.GetDefaultQualities() }; - _profileCustom = new Profile { Cutoff = Quality.MP3256, Items = QualityFixture.GetDefaultQualities(Quality.MP3192) }; + _profile = new Profile { Cutoff = Quality.MP3_256, Items = QualityFixture.GetDefaultQualities() }; + _profileCustom = new Profile { Cutoff = Quality.MP3_256, Items = QualityFixture.GetDefaultQualities(Quality.MP3_192) }; } [Test] @@ -46,11 +46,11 @@ namespace NzbDrone.Core.Test.HistoryTests { Mocker.GetMock() .Setup(v => v.GetBestQualityInHistory(2)) - .Returns(new List { new QualityModel(Quality.MP3192), new QualityModel(Quality.MP3256) }); + .Returns(new List { new QualityModel(Quality.MP3_192), new QualityModel(Quality.MP3_256) }); var quality = Subject.GetBestQualityInHistory(_profile, 2); - quality.Should().Be(new QualityModel(Quality.MP3256)); + quality.Should().Be(new QualityModel(Quality.MP3_256)); } [Test] @@ -58,11 +58,11 @@ namespace NzbDrone.Core.Test.HistoryTests { Mocker.GetMock() .Setup(v => v.GetBestQualityInHistory(2)) - .Returns(new List { new QualityModel(Quality.MP3192), new QualityModel(Quality.MP3256) }); + .Returns(new List { new QualityModel(Quality.MP3_192), new QualityModel(Quality.MP3_256) }); var quality = Subject.GetBestQualityInHistory(_profileCustom, 2); - quality.Should().Be(new QualityModel(Quality.MP3192)); + quality.Should().Be(new QualityModel(Quality.MP3_192)); } [Test] diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs index a2dbc8216..89b62f5e0 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs @@ -56,7 +56,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport .With(e => e.Profile = new Profile { Items = Qualities.QualityFixture.GetDefaultQualities() }) .Build(); - _quality = new QualityModel(Quality.MP3256); + _quality = new QualityModel(Quality.MP3_256); _localTrack = new LocalTrack { @@ -184,7 +184,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport GivenSpecifications(_pass1, _pass2, _pass3); var expectedQuality = QualityParser.ParseQuality(_audioFiles.Single()); - var result = Subject.GetImportDecisions(_audioFiles, _artist, new ParsedTrackInfo{Quality = new QualityModel(Quality.MP3256) }); + var result = Subject.GetImportDecisions(_audioFiles, _artist, new ParsedTrackInfo{Quality = new QualityModel(Quality.MP3_256) }); result.Single().LocalTrack.Quality.Should().Be(expectedQuality); } @@ -197,9 +197,9 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport _localTrack.Path = _audioFiles.Single(); _localTrack.Quality.QualitySource = QualitySource.Extension; - _localTrack.Quality.Quality = Quality.MP3256; + _localTrack.Quality.Quality = Quality.MP3_256; - var expectedQuality = new QualityModel(Quality.MP3256); + var expectedQuality = new QualityModel(Quality.MP3_256); var result = Subject.GetImportDecisions(_audioFiles, _artist, new ParsedTrackInfo { Quality = expectedQuality }); @@ -213,9 +213,9 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport GivenVideoFiles(new string[] { @"C:\Test\Unsorted\The.Office.S03E115.mkv".AsOsAgnostic() }); _localTrack.Path = _audioFiles.Single(); - _localTrack.Quality.Quality = Quality.MP3256; + _localTrack.Quality.Quality = Quality.MP3_256; - var expectedQuality = new QualityModel(Quality.MP3256); + var expectedQuality = new QualityModel(Quality.MP3_256); var result = Subject.GetImportDecisions(_audioFiles, _artist, new ParsedTrackInfo { Quality = expectedQuality }); @@ -374,7 +374,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport _artist.Profile = new Profile { - Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3256, Quality.Unknown) + Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3_256, Quality.Unknown) }; diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs index 98241adcd..4bd76f6e8 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/SampleServiceFixture.cs @@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport Path = @"C:\Test\30 Rock\30.rock.s01e01.avi", Episodes = episodes, Series = _series, - Quality = new QualityModel(Quality.MP3256) + Quality = new QualityModel(Quality.MP3_256) }; } diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs deleted file mode 100644 index d8dced788..000000000 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs +++ /dev/null @@ -1,46 +0,0 @@ -using FizzWare.NBuilder; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; -using NzbDrone.Core.Parser.Model; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; -using NzbDrone.Test.Common; - -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications -{ - [TestFixture] - public class FullSeasonSpecificationFixture : CoreTest - { - private LocalEpisode _localEpisode; - - [SetUp] - public void Setup() - { - _localEpisode = new LocalEpisode - { - Path = @"C:\Test\30 Rock\30.rock.s01e01.avi".AsOsAgnostic(), - Size = 100, - Series = Builder.CreateNew().Build(), - ParsedEpisodeInfo = new ParsedEpisodeInfo - { - FullSeason = false - } - }; - } - - [Test] - public void should_return_false_when_file_contains_the_full_season() - { - _localEpisode.ParsedEpisodeInfo.FullSeason = true; - - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); - } - - [Test] - public void should_return_true_when_file_does_not_contain_the_full_season() - { - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - } -} diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs deleted file mode 100644 index d017ceda7..000000000 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs +++ /dev/null @@ -1,84 +0,0 @@ -using FizzWare.NBuilder; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; -using NzbDrone.Core.Parser.Model; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Test.Common; - -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications -{ - [TestFixture] - public class MatchesFolderSpecificationFixture : CoreTest - { - private LocalEpisode _localEpisode; - - [SetUp] - public void Setup() - { - _localEpisode = Builder.CreateNew() - .With(l => l.Path = @"C:\Test\Unsorted\Series.Title.S01E01.720p.HDTV-Lidarr\S01E05.mkv".AsOsAgnostic()) - .With(l => l.ParsedEpisodeInfo = - Builder.CreateNew() - .With(p => p.EpisodeNumbers = new[] {5}) - .With(p => p.FullSeason = false) - .Build()) - .Build(); - } - - [Test] - public void should_be_accepted_for_existing_file() - { - _localEpisode.ExistingFile = true; - - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - - [Test] - public void should_be_accepted_if_folder_name_is_not_parseable() - { - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title\S01E01.mkv".AsOsAgnostic(); - - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - - [Test] - public void should_should_be_accepted_for_full_season() - { - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01\S01E01.mkv".AsOsAgnostic(); - - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - - [Test] - public void should_be_accepted_if_file_and_folder_have_the_same_episode() - { - _localEpisode.ParsedEpisodeInfo.EpisodeNumbers = new[] { 1 }; - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01E01.720p.HDTV-Lidarr\S01E01.mkv".AsOsAgnostic(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - - [Test] - public void should_be_accepted_if_file_is_one_episode_in_folder() - { - _localEpisode.ParsedEpisodeInfo.EpisodeNumbers = new[] { 1 }; - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01E01E02.720p.HDTV-Lidarr\S01E01.mkv".AsOsAgnostic(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - - [Test] - public void should_be_rejected_if_file_and_folder_do_not_have_same_episode() - { - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01E01.720p.HDTV-Lidarr\S01E05.mkv".AsOsAgnostic(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); - } - - [Test] - public void should_be_rejected_if_file_and_folder_do_not_have_same_episodes() - { - _localEpisode.ParsedEpisodeInfo.EpisodeNumbers = new[] { 5, 6 }; - _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01E01E02.720p.HDTV-Lidarr\S01E05E06.mkv".AsOsAgnostic(); - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeFalse(); - } - } -} \ No newline at end of file diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs deleted file mode 100644 index 9462c5b58..000000000 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Linq; -using FizzWare.NBuilder; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; -using NzbDrone.Core.Parser.Model; -using NzbDrone.Core.Qualities; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; - -namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications -{ - [TestFixture] - public class NotSampleSpecificationFixture : CoreTest - { - private Series _series; - private LocalEpisode _localEpisode; - - [SetUp] - public void Setup() - { - _series = Builder.CreateNew() - .With(s => s.SeriesType = SeriesTypes.Standard) - .Build(); - - var episodes = Builder.CreateListOfSize(1) - .All() - .With(e => e.SeasonNumber = 1) - .Build() - .ToList(); - - _localEpisode = new LocalEpisode - { - Path = @"C:\Test\30 Rock\30.rock.s01e01.avi", - Episodes = episodes, - Series = _series, - Quality = new QualityModel(Quality.MP3256) - }; - } - - [Test] - public void should_return_true_for_existing_file() - { - _localEpisode.ExistingFile = true; - Subject.IsSatisfiedBy(_localEpisode).Accepted.Should().BeTrue(); - } - } -} diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs index be58d931f..5e738664d 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs @@ -30,7 +30,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications _localEpisode = new LocalEpisode { Path = @"C:\Test\30 Rock\30.rock.s01e01.avi", - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)), + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)), Series = _series }; } @@ -70,7 +70,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .Build() .ToList(); @@ -87,7 +87,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .Build() .ToList(); @@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .Build() .ToList(); @@ -121,7 +121,7 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .Build() .ToList(); @@ -138,14 +138,14 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .TheNext(1) .With(e => e.EpisodeFileId = 2) .With(e => e.EpisodeFile = new LazyLoaded( new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(version: 1)) + Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)) })) .Build() .ToList(); diff --git a/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs index b11db4a7d..1245e0d12 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs @@ -57,7 +57,7 @@ namespace NzbDrone.Core.Test.MediaFiles Artist = artist, Tracks = new List { track }, Path = Path.Combine(artist.Path, "30 Rock - S01E01 - Pilot.avi"), - Quality = new QualityModel(Quality.MP3256), + Quality = new QualityModel(Quality.MP3_256), ParsedTrackInfo = new ParsedTrackInfo { ReleaseGroup = "DRONE" @@ -207,7 +207,7 @@ namespace NzbDrone.Core.Test.MediaFiles Artist = fileDecision.LocalTrack.Artist, Tracks = new List { fileDecision.LocalTrack.Tracks.First() }, Path = @"C:\Test\TV\30 Rock\30 Rock - S01E01 - Pilot.avi".AsOsAgnostic(), - Quality = new QualityModel(Quality.MP3256), + Quality = new QualityModel(Quality.MP3_256), Size = 80.Megabytes() }); diff --git a/src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs index 344f23e16..1f2dd20a9 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.MediaFiles var files = Builder.CreateListOfSize(10) .All() .With(c => c.Id = 0) - .With(c => c.Quality =new QualityModel(Quality.MP3192)) + .With(c => c.Quality =new QualityModel(Quality.MP3_192)) .Random(4) .With(s => s.ArtistId = 12) .BuildListOfNew(); diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index de70a1584..652aebfa0 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -151,7 +151,6 @@ - @@ -288,9 +287,6 @@ - - - @@ -306,6 +302,7 @@ + diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs index 54fe409ac..4f8f54901 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/CleanTitleFixture.cs @@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(e => e.AbsoluteEpisodeNumber = 100) .Build(); - _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3256), ReleaseGroup = "LidarrTest" }; + _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_256), ReleaseGroup = "LidarrTest" }; _namingConfig = NamingConfig.Default; _namingConfig.RenameEpisodes = true; diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/EpisodeTitleCollapseFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/EpisodeTitleCollapseFixture.cs index c26378c18..ba7af7d83 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/EpisodeTitleCollapseFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/EpisodeTitleCollapseFixture.cs @@ -58,7 +58,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(e => e.AbsoluteEpisodeNumber = 102) .Build(); - _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3256), ReleaseGroup = "LidarrTest" }; + _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_256), ReleaseGroup = "LidarrTest" }; Mocker.GetMock() .Setup(v => v.Get(Moq.It.IsAny())) diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs index ff8bdfead..0d99e0ed8 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(e => e.AbsoluteEpisodeNumber = 100) .Build(); - _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3256), ReleaseGroup = "LidarrTest" }; + _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_256), ReleaseGroup = "LidarrTest" }; Mocker.GetMock() .Setup(v => v.Get(Moq.It.IsAny())) diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/MultiEpisodeFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/MultiEpisodeFixture.cs index 21bee4aab..4c63f6717 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/MultiEpisodeFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/MultiEpisodeFixture.cs @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .With(e => e.AbsoluteEpisodeNumber = 102) .Build(); - _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3256), ReleaseGroup = "LidarrTest" }; + _episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.MP3_256), ReleaseGroup = "LidarrTest" }; Mocker.GetMock() .Setup(v => v.Get(Moq.It.IsAny())) diff --git a/src/NzbDrone.Core.Test/ParserTests/HashedReleaseFixture.cs b/src/NzbDrone.Core.Test/ParserTests/HashedReleaseFixture.cs index 1b78e13e9..2e644ba89 100644 --- a/src/NzbDrone.Core.Test/ParserTests/HashedReleaseFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/HashedReleaseFixture.cs @@ -15,70 +15,70 @@ namespace NzbDrone.Core.Test.ParserTests { @"C:\Test\Some.Hashed.Release.(256kbps)-Mercury\0e895c37245186812cb08aab1529cf8ee389dd05.mp3".AsOsAgnostic(), "Some Hashed Release", - Quality.MP3256, + Quality.MP3_256, "Mercury" }, new object[] { @"C:\Test-[256]\0e895c37245186812cb08aab1529cf8ee389dd05\Some.Hashed.Release.S01E01.720p.WEB-DL.AAC2.0.H.264-Mercury.mp3".AsOsAgnostic(), "Some Hashed Release", - Quality.MP3256, + Quality.MP3_256, "Mercury" }, new object[] { @"C:\Test\Fake.Dir.S01E01-Test\yrucreM-462.H.0.2CAA.LD-BEW.p027.10E10S.esaeleR.dehsaH.emoS.mp3".AsOsAgnostic(), "Some Hashed Release", - Quality.MP3256, + Quality.MP3_256, "Mercury" }, new object[] { @"C:\Test\Fake.Dir.S01E01-Test\yrucreM-LN 1.5DD LD-BEW P0801 10E10S esaeleR dehsaH emoS.mp3".AsOsAgnostic(), "Some Hashed Release", - Quality.MP3256, + Quality.MP3_256, "Mercury" }, new object[] { @"C:\Test\Weeds.S01E10.DVDRip.XviD-Lidarr\AHFMZXGHEWD660.mp3".AsOsAgnostic(), "Weeds", - Quality.MP3256, + Quality.MP3_256, "Lidarr" }, new object[] { @"C:\Test\Deadwood.S02E12.1080p.BluRay.x264-Lidarr\Backup_72023S02-12.mp3".AsOsAgnostic(), "Deadwood", - Quality.MP3256, + Quality.MP3_256, null }, new object[] { @"C:\Test\Grimm S04E08 Chupacabra 720p WEB-DL DD5 1 H 264-ECI\123.mp3".AsOsAgnostic(), "Grimm", - Quality.MP3256, + Quality.MP3_256, "ECI" }, new object[] { @"C:\Test\Grimm S04E08 Chupacabra 720p WEB-DL DD5 1 H 264-ECI\abc.mp3".AsOsAgnostic(), "Grimm", - Quality.MP3256, + Quality.MP3_256, "ECI" }, new object[] { @"C:\Test\Grimm S04E08 Chupacabra 720p WEB-DL DD5 1 H 264-ECI\b00bs.mp3".AsOsAgnostic(), "Grimm", - Quality.MP3256, + Quality.MP3_256, "ECI" }, new object[] { @"C:\Test\The.Good.Wife.S02E23.720p.HDTV.x264-NZBgeek/cgajsofuejsa501.mp3".AsOsAgnostic(), "The Good Wife", - Quality.MP3256, + Quality.MP3_256, "NZBgeek" } }; diff --git a/src/NzbDrone.Core.Test/ParserTests/MusicParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/MusicParserFixture.cs new file mode 100644 index 000000000..269c6bacb --- /dev/null +++ b/src/NzbDrone.Core.Test/ParserTests/MusicParserFixture.cs @@ -0,0 +1,39 @@ +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Test.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NzbDrone.Core.Test.ParserTests +{ + [TestFixture] + public class MusicParserFixture : CoreTest + { + [TestCase("___▲▲▲___")] + [TestCase("Add N to (X)")] + [TestCase("Animal Collective")] + [TestCase("D12")] + [TestCase("David Sylvian[Discography]")] + [TestCase("Eagle-Eye Cherry")] + [TestCase("Erlend Øye")] + [TestCase("Adult.")] // Not sure if valid, not openable in Windows OS + [TestCase("Maroon 5")] + [TestCase("Moimir Papalescu & The Nihilists")] + [TestCase("N.W.A")] + [TestCase("oOoOO")] + [TestCase("Panic! at the Disco")] + [TestCase("The 5 6 7 8's")] + [TestCase("tUnE-yArDs")] + [TestCase("U2")] + [TestCase("Белые Братья")] + [TestCase("Zog Bogbean - From The Marcy Playground")] + public void should_parse_artist_names(string title) + { + Parser.Parser.ParseMusicTitle(title).ArtistTitle.Should().Be(title); + ExceptionVerification.IgnoreWarns(); + } + } +} diff --git a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs index c5d8ea9a7..fea5c335d 100644 --- a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs @@ -12,11 +12,11 @@ namespace NzbDrone.Core.Test.ParserTests { public static object[] SelfQualityParserCases = { - new object[] {Quality.MP3192}, - new object[] {Quality.MP3VBR}, - new object[] {Quality.MP3256}, - new object[] {Quality.MP3320}, - new object[] {Quality.MP3512}, + new object[] {Quality.MP3_192}, + new object[] {Quality.MP3_VBR}, + new object[] {Quality.MP3_256}, + new object[] {Quality.MP3_320}, + new object[] {Quality.MP3_512}, new object[] {Quality.FLAC}, }; @@ -32,7 +32,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Other Song (192)[2014][MP3]")] public void should_parse_mp3_192_quality(string title) { - ParseAndVerifyQuality(title, Quality.MP3192); + ParseAndVerifyQuality(title, Quality.MP3_192); } [TestCase("Beyoncé Lemonade [320] 2016 Beyonce Lemonade [320] 2016")] @@ -43,7 +43,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Anderson Paak - Malibu (320)(2016)")] public void should_parse_mp3_320_quality(string title) { - ParseAndVerifyQuality(title, Quality.MP3320); + ParseAndVerifyQuality(title, Quality.MP3_320); } @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Walk the Line Soundtrack (2005) [AAC, 256 kbps]")] public void should_parse_mp3_256_quality(string title) { - ParseAndVerifyQuality(title, Quality.MP3256); + ParseAndVerifyQuality(title, Quality.MP3_256); } [TestCase("Caetano Veloso Discografia Completa MP3 @512")] @@ -67,7 +67,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Emeli Sande Next To Me (512 Kbps)")] public void should_parse_mp3_512_quality(string title) { - ParseAndVerifyQuality(title, Quality.MP3512); + ParseAndVerifyQuality(title, Quality.MP3_512); } [TestCase("Kendrick Lamar - DAMN (2017) FLAC")] diff --git a/src/NzbDrone.Core.Test/Profiles/ProfileRepositoryFixture.cs b/src/NzbDrone.Core.Test/Profiles/ProfileRepositoryFixture.cs index 647cb21e7..97f5c7259 100644 --- a/src/NzbDrone.Core.Test/Profiles/ProfileRepositoryFixture.cs +++ b/src/NzbDrone.Core.Test/Profiles/ProfileRepositoryFixture.cs @@ -14,8 +14,8 @@ namespace NzbDrone.Core.Test.Profiles { var profile = new Profile { - Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3320, Quality.MP3192, Quality.MP3256), - Cutoff = Quality.MP3320, + Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3_320, Quality.MP3_192, Quality.MP3_256), + Cutoff = Quality.MP3_320, Name = "TestProfile" }; diff --git a/src/NzbDrone.Core.Test/Qualities/QualityDefinitionServiceFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityDefinitionServiceFixture.cs index c249ab853..27b301615 100644 --- a/src/NzbDrone.Core.Test/Qualities/QualityDefinitionServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Qualities/QualityDefinitionServiceFixture.cs @@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.Qualities .Setup(s => s.All()) .Returns(new List { - new QualityDefinition(Quality.MP3192) { Weight = 1, MinSize = 0, MaxSize = 100, Id = 20 } + new QualityDefinition(Quality.MP3_192) { Weight = 1, MinSize = 0, MaxSize = 100, Id = 20 } }); Subject.Handle(new ApplicationStartedEvent()); @@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.Qualities .Setup(s => s.All()) .Returns(new List { - new QualityDefinition(Quality.MP3192) { Weight = 1, MinSize = 0, MaxSize = 100, Id = 20 } + new QualityDefinition(Quality.MP3_192) { Weight = 1, MinSize = 0, MaxSize = 100, Id = 20 } }); Subject.Handle(new ApplicationStartedEvent()); diff --git a/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs index c635cb209..9b0e3e1c0 100644 --- a/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs +++ b/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs @@ -14,22 +14,22 @@ namespace NzbDrone.Core.Test.Qualities public static object[] FromIntCases = { new object[] {0, Quality.Unknown}, - new object[] {1, Quality.MP3192}, - new object[] {2, Quality.MP3VBR}, - new object[] {3, Quality.MP3256}, - new object[] {4, Quality.MP3320}, - new object[] {5, Quality.MP3512}, + new object[] {1, Quality.MP3_192}, + new object[] {2, Quality.MP3_VBR}, + new object[] {3, Quality.MP3_256}, + new object[] {4, Quality.MP3_320}, + new object[] {5, Quality.MP3_512}, new object[] {6, Quality.FLAC}, }; public static object[] ToIntCases = { new object[] {Quality.Unknown, 0}, - new object[] {Quality.MP3192, 1}, - new object[] {Quality.MP3VBR, 2}, - new object[] {Quality.MP3256, 3}, - new object[] {Quality.MP3320, 4}, - new object[] {Quality.MP3512, 5}, + new object[] {Quality.MP3_192, 1}, + new object[] {Quality.MP3_VBR, 2}, + new object[] {Quality.MP3_256, 3}, + new object[] {Quality.MP3_320, 4}, + new object[] {Quality.MP3_512, 5}, new object[] {Quality.FLAC, 6}, }; @@ -52,11 +52,11 @@ namespace NzbDrone.Core.Test.Qualities var qualities = new List { Quality.Unknown, - Quality.MP3192, - Quality.MP3VBR, - Quality.MP3256, - Quality.MP3320, - Quality.MP3512, + Quality.MP3_192, + Quality.MP3_VBR, + Quality.MP3_256, + Quality.MP3_320, + Quality.MP3_512, Quality.FLAC, }; diff --git a/src/NzbDrone.Core.Test/Qualities/QualityModelComparerFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityModelComparerFixture.cs index 5c6aedc2a..c42d93b7d 100644 --- a/src/NzbDrone.Core.Test/Qualities/QualityModelComparerFixture.cs +++ b/src/NzbDrone.Core.Test/Qualities/QualityModelComparerFixture.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test.Qualities private void GivenCustomProfile() { - Subject = new QualityModelComparer(new Profile { Items = QualityFixture.GetDefaultQualities(Quality.MP3320, Quality.MP3192) }); + Subject = new QualityModelComparer(new Profile { Items = QualityFixture.GetDefaultQualities(Quality.MP3_320, Quality.MP3_192) }); } [Test] @@ -26,8 +26,8 @@ namespace NzbDrone.Core.Test.Qualities { GivenDefaultProfile(); - var first = new QualityModel(Quality.MP3320); - var second = new QualityModel(Quality.MP3192); + var first = new QualityModel(Quality.MP3_320); + var second = new QualityModel(Quality.MP3_192); var compare = Subject.Compare(first, second); @@ -39,8 +39,8 @@ namespace NzbDrone.Core.Test.Qualities { GivenDefaultProfile(); - var first = new QualityModel(Quality.MP3192); - var second = new QualityModel(Quality.MP3320); + var first = new QualityModel(Quality.MP3_192); + var second = new QualityModel(Quality.MP3_320); var compare = Subject.Compare(first, second); @@ -52,8 +52,8 @@ namespace NzbDrone.Core.Test.Qualities { GivenDefaultProfile(); - var first = new QualityModel(Quality.MP3320, new Revision(version: 2)); - var second = new QualityModel(Quality.MP3320, new Revision(version: 1)); + var first = new QualityModel(Quality.MP3_320, new Revision(version: 2)); + var second = new QualityModel(Quality.MP3_320, new Revision(version: 1)); var compare = Subject.Compare(first, second); @@ -65,8 +65,8 @@ namespace NzbDrone.Core.Test.Qualities { GivenCustomProfile(); - var first = new QualityModel(Quality.MP3192); - var second = new QualityModel(Quality.MP3320); + var first = new QualityModel(Quality.MP3_192); + var second = new QualityModel(Quality.MP3_320); var compare = Subject.Compare(first, second); diff --git a/src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs b/src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs index 4227dd760..589bd57fd 100644 --- a/src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs +++ b/src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test.SeriesStatsTests _episodeFile = Builder.CreateNew() .With(e => e.SeriesId = _series.Id) - .With(e => e.Quality = new QualityModel(Quality.MP3256)) + .With(e => e.Quality = new QualityModel(Quality.MP3_256)) .BuildNew(); } diff --git a/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs index c4ce012c0..1759b5322 100644 --- a/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWhereCutoffUnmetFixture.cs @@ -28,11 +28,11 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests var profile = new Profile { Id = 1, - Cutoff = Quality.MP3256, + Cutoff = Quality.MP3_256, Items = new List { - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3192 }, - new ProfileQualityItem { Allowed = true, Quality = Quality.MP3256 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_192 }, + new ProfileQualityItem { Allowed = true, Quality = Quality.MP3_256 }, new ProfileQualityItem { Allowed = true, Quality = Quality.FLAC } } }; @@ -66,11 +66,11 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests _qualitiesBelowCutoff = new List { - new QualitiesBelowCutoff(profile.Id, new[] {Quality.MP3192.Id}) + new QualitiesBelowCutoff(profile.Id, new[] {Quality.MP3_192.Id}) }; - var qualityMet = new TrackFile { RelativePath = "a", Quality = new QualityModel { Quality = Quality.MP3256 } }; - var qualityUnmet = new TrackFile { RelativePath = "b", Quality = new QualityModel { Quality = Quality.MP3192 } }; + var qualityMet = new TrackFile { RelativePath = "a", Quality = new QualityModel { Quality = Quality.MP3_256 } }; + var qualityUnmet = new TrackFile { RelativePath = "b", Quality = new QualityModel { Quality = Quality.MP3_192 } }; var qualityRawHD = new TrackFile { RelativePath = "c", Quality = new QualityModel { Quality = Quality.FLAC } }; MediaFileRepository fileRepository = Mocker.Resolve(); @@ -142,7 +142,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests var spec = Subject.EpisodesWhereCutoffUnmet(_pagingSpec, _qualitiesBelowCutoff, false); spec.Records.Should().HaveCount(1); - spec.Records.Should().OnlyContain(e => e.EpisodeFile.Value.Quality.Quality == Quality.MP3192); + spec.Records.Should().OnlyContain(e => e.EpisodeFile.Value.Quality.Quality == Quality.MP3_192); } [Test] diff --git a/src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/SeriesRepositoryFixture.cs b/src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/SeriesRepositoryFixture.cs index 1585be981..e0febe4bc 100644 --- a/src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/SeriesRepositoryFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/SeriesRepositoryFixture.cs @@ -17,9 +17,9 @@ namespace NzbDrone.Core.Test.TvTests.SeriesRepositoryTests { var profile = new Profile { - Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3320, Quality.MP3256, Quality.MP3192), + Items = Qualities.QualityFixture.GetDefaultQualities(Quality.MP3_320, Quality.MP3_256, Quality.MP3_192), - Cutoff = Quality.MP3320, + Cutoff = Quality.MP3_320, Name = "TestProfile" }; diff --git a/src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs b/src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs index 678e8e5a0..5ae80f96b 100644 --- a/src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs +++ b/src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Test.UpdateTests Mocker.GetMock().Setup(c => c.Verify(It.IsAny(), It.IsAny())).Returns(true); Mocker.GetMock().Setup(c => c.GetCurrentProcess()).Returns(new ProcessInfo { Id = 12 }); - Mocker.GetMock().Setup(c => c.ExecutingApplication).Returns(@"C:\Test\NzbDrone.exe"); + Mocker.GetMock().Setup(c => c.ExecutingApplication).Returns(@"C:\Test\Lidarr.exe"); Mocker.GetMock() .SetupGet(s => s.UpdateAutomatically) diff --git a/src/NzbDrone.Core/DecisionEngine/SameTracksSpecification.cs b/src/NzbDrone.Core/DecisionEngine/SameTracksSpecification.cs new file mode 100644 index 000000000..56fb258f4 --- /dev/null +++ b/src/NzbDrone.Core/DecisionEngine/SameTracksSpecification.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Music; + +namespace NzbDrone.Core.DecisionEngine +{ + public class SameTracksSpecification + { + private readonly ITrackService _trackService; + + public SameTracksSpecification(ITrackService trackService) + { + _trackService = trackService; + } + + public bool IsSatisfiedBy(List tracks) + { + var trackIds = tracks.SelectList(e => e.Id); + var trackFileIds = tracks.Where(c => c.TrackFileId != 0).Select(c => c.TrackFileId).Distinct(); + + foreach (var trackFileId in trackFileIds) + { + var tracksInFile = _trackService.GetTracksByFileId(trackFileId); + + if (tracksInFile.Select(e => e.Id).Except(trackIds).Any()) + { + return false; + } + } + + return true; + } + } +} diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index db2f389f4..9f8eb33bd 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -33,7 +33,7 @@ namespace NzbDrone.Core.MediaFiles public class DiskScanService : IDiskScanService, IHandle, - IExecute + IExecute { private readonly IDiskProvider _diskProvider; private readonly IMakeImportDecision _importDecisionMaker; diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs deleted file mode 100644 index 4357c07bc..000000000 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using NLog; -using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications -{ - public class FullSeasonSpecification : IImportDecisionEngineSpecification - { - private readonly Logger _logger; - - public FullSeasonSpecification(Logger logger) - { - _logger = logger; - } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - throw new NotImplementedException("Interface will be removed"); - } - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (localEpisode.ParsedEpisodeInfo.FullSeason) - { - _logger.Debug("Single episode file detected as containing all episodes in the season"); - return Decision.Reject("Single episode file contains all episodes in seasons"); - } - - return Decision.Accept(); - } - } -} diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs deleted file mode 100644 index b97c42f35..000000000 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using NLog; -using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications -{ - public class MatchesFolderSpecification : IImportDecisionEngineSpecification - { - private readonly Logger _logger; - - public MatchesFolderSpecification(Logger logger) - { - _logger = logger; - } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - if (localTrack.ExistingFile) - { - return Decision.Accept(); - } - - var dirInfo = new FileInfo(localTrack.Path).Directory; - - if (dirInfo == null) - { - return Decision.Accept(); - } - - throw new System.NotImplementedException("Needs to be implemented"); - - //var folderInfo = Parser.Parser.ParseTitle(dirInfo.Name); - - //if (folderInfo == null) - //{ - // return Decision.Accept(); - //} - - //if (!folderInfo.TrackNumbers.Any()) - //{ - // return Decision.Accept(); - //} - - - //var unexpected = localTrack.ParsedTrackInfo.TrackNumbers.Where(f => !folderInfo.TrackNumbers.Contains(f)).ToList(); - //// TODO: Implement MatchesFolderSpecification - //if (unexpected.Any()) - //{ - // _logger.Debug("Unexpected track number(s) in file: {0}", string.Join(", ", unexpected)); - - // if (unexpected.Count == 1) - // { - // return Decision.Reject("Track Number {0} was unexpected considering the {1} folder name", unexpected.First(), dirInfo.Name); - // } - - // return Decision.Reject("Episode Numbers {0} were unexpected considering the {1} folder name", string.Join(", ", unexpected), dirInfo.Name); - //} - - return Decision.Accept(); - } - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (localEpisode.ExistingFile) - { - return Decision.Accept(); - } - - var dirInfo = new FileInfo(localEpisode.Path).Directory; - - if (dirInfo == null) - { - return Decision.Accept(); - } - - var folderInfo = Parser.Parser.ParseTitle(dirInfo.Name); - - if (folderInfo == null) - { - return Decision.Accept(); - } - - if (!folderInfo.EpisodeNumbers.Any()) - { - return Decision.Accept(); - } - - if (folderInfo.FullSeason) - { - return Decision.Accept(); - } - - var unexpected = localEpisode.ParsedEpisodeInfo.EpisodeNumbers.Where(f => !folderInfo.EpisodeNumbers.Contains(f)).ToList(); - - if (unexpected.Any()) - { - _logger.Debug("Unexpected episode number(s) in file: {0}", string.Join(", ", unexpected)); - - if (unexpected.Count == 1) - { - return Decision.Reject("Episode Number {0} was unexpected considering the {1} folder name", unexpected.First(), dirInfo.Name); - } - - return Decision.Reject("Episode Numbers {0} were unexpected considering the {1} folder name", string.Join(", ", unexpected), dirInfo.Name); - } - - return Decision.Accept(); - } - } -} diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs deleted file mode 100644 index e8eb664ec..000000000 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using NLog; -using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications -{ - public class NotSampleSpecification : IImportDecisionEngineSpecification - { - private readonly IDetectSample _detectSample; - private readonly Logger _logger; - - public NotSampleSpecification(IDetectSample detectSample, - Logger logger) - { - _detectSample = detectSample; - _logger = logger; - } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - throw new NotImplementedException(); - } - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (localEpisode.ExistingFile) - { - _logger.Debug("Existing file, skipping sample check"); - return Decision.Accept(); - } - - var sample = _detectSample.IsSample(localEpisode.Series, - localEpisode.Quality, - localEpisode.Path, - localEpisode.Size, - localEpisode.IsSpecial); - - if (sample) - { - return Decision.Reject("Sample"); - } - - return Decision.Accept(); - } - } -} diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs index 7fe4bef26..2694b89d0 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs @@ -59,6 +59,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications public Decision IsSatisfiedBy(LocalTrack localTrack) { + return Decision.Accept(); throw new NotImplementedException(); } } diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs index 8adb7416b..e7a93c0d1 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameEpisodesImportSpecification.cs @@ -31,6 +31,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications public Decision IsSatisfiedBy(LocalTrack localTrack) { + return Decision.Accept(); throw new NotImplementedException(); } } diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UnverifiedSceneNumberingSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UnverifiedSceneNumberingSpecification.cs deleted file mode 100644 index 95c39b1d6..000000000 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UnverifiedSceneNumberingSpecification.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Linq; -using NLog; -using NzbDrone.Core.DecisionEngine; -using NzbDrone.Core.Parser.Model; -namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications -{ - public class UnverifiedSceneNumberingSpecification : IImportDecisionEngineSpecification - { - private readonly Logger _logger; - - public UnverifiedSceneNumberingSpecification(Logger logger) - { - _logger = logger; - } - - public Decision IsSatisfiedBy(LocalTrack localTrack) - { - throw new NotImplementedException("This is not needed, Interface will be removed"); - } - - public Decision IsSatisfiedBy(LocalEpisode localEpisode) - { - if (localEpisode.ExistingFile) - { - _logger.Debug("Skipping scene numbering check for existing episode"); - return Decision.Accept(); - } - - if (localEpisode.Episodes.Any(v => v.UnverifiedSceneNumbering)) - { - _logger.Debug("This file uses unverified scene numbers, will not auto-import until numbering is confirmed on TheXEM. Skipping {0}", localEpisode.Path); - return Decision.Reject("This show has individual episode mappings on TheXEM but the mapping for this episode has not been confirmed yet by their administrators. TheXEM needs manual input."); - } - - return Decision.Accept(); - } - } -} diff --git a/src/NzbDrone.Core/MediaFiles/MediaFileService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileService.cs index 5cd1b65f0..1b6af1bd5 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaFileService.cs @@ -55,7 +55,7 @@ namespace NzbDrone.Core.MediaFiles public void Delete(TrackFile trackFile, DeleteMediaFileReason reason) { //Little hack so we have the tracks and artist attached for the event consumers - trackFile.Episodes.LazyLoad(); + trackFile.Tracks.LazyLoad(); trackFile.Path = Path.Combine(trackFile.Artist.Value.Path, trackFile.RelativePath); _mediaFileRepository.Delete(trackFile); @@ -70,7 +70,6 @@ namespace NzbDrone.Core.MediaFiles public List FilterExistingFiles(List files, Artist artist) { - //var artistFiles = GetFilesByArtist(artist.ForeignArtistId).Select(f => Path.Combine(artist.Path, f.RelativePath)).ToList(); var artistFiles = GetFilesByArtist(artist.Id).Select(f => Path.Combine(artist.Path, f.RelativePath)).ToList(); if (!artistFiles.Any()) return files; @@ -80,7 +79,6 @@ namespace NzbDrone.Core.MediaFiles public TrackFile Get(int id) { - // TODO: Should this be spotifyID or DB Id? return _mediaFileRepository.Get(id); } diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoLib.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoLib.cs index b18e2e462..fb7cd9243 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoLib.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoLib.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.InteropServices; using System.Text; diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs index af02288e8..7e33729ab 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs @@ -16,6 +16,7 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo public int Height { get; set; } public string AudioFormat { get; set; } public int AudioBitrate { get; set; } + public string AudioBitrateMode { get; set; } public TimeSpan RunTime { get; set; } public int AudioStreamCount { get; set; } public int AudioChannels { get; set; } diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs index a1bf6aa86..3bd5d88db 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs @@ -104,6 +104,7 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo int.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "PlayTime"), out audioRuntime); int.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out generalRuntime); + string audioBitRateMode = mediaInfo.Get(StreamKind.Audio, 0, "BitRate_Mode"); string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate"); int aBindex = aBitRate.IndexOf(" /", StringComparison.InvariantCultureIgnoreCase); if (aBindex > 0) @@ -145,6 +146,7 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo Height = height, Width = width, AudioFormat = mediaInfo.Get(StreamKind.Audio, 0, "Format"), + AudioBitrateMode = audioBitRateMode, AudioBitrate = audioBitRate, RunTime = GetBestRuntime(audioRuntime, videoRuntime, generalRuntime), AudioStreamCount = streamCount, diff --git a/src/NzbDrone.Core/MediaFiles/TrackFile.cs b/src/NzbDrone.Core/MediaFiles/TrackFile.cs index 9aab9a655..982089ef0 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackFile.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackFile.cs @@ -24,7 +24,7 @@ namespace NzbDrone.Core.MediaFiles public string ReleaseGroup { get; set; } public QualityModel Quality { get; set; } public MediaInfoModel MediaInfo { get; set; } - public LazyLoaded> Episodes { get; set; } + //public LazyLoaded> Episodes { get; set; } public LazyLoaded Artist { get; set; } public LazyLoaded> Tracks { get; set; } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs index e38c27ca8..0c783593e 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportApprovedTracks.cs @@ -6,10 +6,12 @@ using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Qualities; +using NzbDrone.Core.Parser; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using NzbDrone.Core.Music; namespace NzbDrone.Core.MediaFiles.TrackImport { @@ -25,19 +27,22 @@ namespace NzbDrone.Core.MediaFiles.TrackImport //private readonly IExtraService _extraService; private readonly IDiskProvider _diskProvider; private readonly IEventAggregator _eventAggregator; + private readonly IAlbumRepository _albumRepository; private readonly Logger _logger; public ImportApprovedTracks(IUpgradeMediaFiles episodeFileUpgrader, IMediaFileService mediaFileService, //IExtraService extraService, + IAlbumRepository albumRepository, IDiskProvider diskProvider, IEventAggregator eventAggregator, Logger logger) { _trackFileUpgrader = episodeFileUpgrader; _mediaFileService = mediaFileService; - // _extraService = extraService; - _diskProvider = diskProvider; + // _extraService = extraService; + _albumRepository = albumRepository; + _diskProvider = diskProvider; _eventAggregator = eventAggregator; _logger = logger; } @@ -78,9 +83,9 @@ namespace NzbDrone.Core.MediaFiles.TrackImport trackFile.Size = _diskProvider.GetFileSize(localTrack.Path); trackFile.Quality = localTrack.Quality; trackFile.MediaInfo = localTrack.MediaInfo; - trackFile.AlbumId = localTrack.Album.Id; - trackFile.Tracks = localTrack.Tracks; + trackFile.AlbumId = _albumRepository.FindByArtistAndName(localTrack.Artist.Name, Parser.Parser.CleanArtistTitle(localTrack.ParsedTrackInfo.AlbumTitle)).Id; trackFile.ReleaseGroup = localTrack.ParsedTrackInfo.ReleaseGroup; + trackFile.Tracks = localTrack.Tracks; bool copyOnly; switch (importMode) diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs new file mode 100644 index 000000000..fd6cf794d --- /dev/null +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameTracksImportSpecification.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NLog; +using NzbDrone.Core.DecisionEngine; +using NzbDrone.Core.MediaFiles.EpisodeImport; +using NzbDrone.Core.Parser.Model; + +namespace NzbDrone.Core.MediaFiles.TrackImport.Specifications +{ + public class SameTracksImportSpecification : IImportDecisionEngineSpecification + { + private readonly SameTracksSpecification _sameTracksSpecification; + private readonly Logger _logger; + + public SameTracksImportSpecification(SameTracksSpecification sameTracksSpecification, Logger logger) + { + _sameTracksSpecification = sameTracksSpecification; + _logger = logger; + } + + public RejectionType Type => RejectionType.Permanent; + + public Decision IsSatisfiedBy(LocalEpisode localEpisode) + { + throw new NotImplementedException(); + } + + public Decision IsSatisfiedBy(LocalTrack localTrack) + { + if (_sameTracksSpecification.IsSatisfiedBy(localTrack.Tracks)) + { + return Decision.Accept(); + } + + _logger.Debug("Track file on disk contains more tracks than this file contains"); + return Decision.Reject("Track file on disk contains more tracks than this file contains"); + } + } +} diff --git a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs index 0c729b7d4..707ba34f7 100644 --- a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs +++ b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs @@ -81,7 +81,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook // We need to perform a direct lookup of the artist var httpRequest = _requestBuilder.Create() - .SetSegment("route", "artist/" + foreignArtistId) + .SetSegment("route", "artists/" + foreignArtistId) //.SetSegment("route", "search") //.AddQueryParam("type", "artist,album") //.AddQueryParam("q", spotifyId.ToString()) diff --git a/src/NzbDrone.Core/Music/Album.cs b/src/NzbDrone.Core/Music/Album.cs index c199396e1..f57655589 100644 --- a/src/NzbDrone.Core/Music/Album.cs +++ b/src/NzbDrone.Core/Music/Album.cs @@ -32,6 +32,9 @@ namespace NzbDrone.Core.Music public List Images { get; set; } //public List Actors { get; set; } // TODO: These are band members. TODO: Refactor public List Genres { get; set; } + public DateTime? LastInfoSync { get; set; } + public DateTime? LastDiskSync { get; set; } + public DateTime Added { get; set; } public String AlbumType { get; set; } // TODO: Turn this into a type similar to Series Type in TV //public string ArtworkUrl { get; set; } //public string Explicitness { get; set; } diff --git a/src/NzbDrone.Core/Music/AlbumRepository.cs b/src/NzbDrone.Core/Music/AlbumRepository.cs index 3421bb197..4b6d03bcb 100644 --- a/src/NzbDrone.Core/Music/AlbumRepository.cs +++ b/src/NzbDrone.Core/Music/AlbumRepository.cs @@ -5,6 +5,7 @@ using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore.Extensions; using System.Collections.Generic; using NzbDrone.Core.Messaging.Events; +using Marr.Data.QGen; namespace NzbDrone.Core.Music { @@ -13,6 +14,7 @@ namespace NzbDrone.Core.Music bool AlbumPathExists(string path); List GetAlbums(int artistId); Album FindByName(string cleanTitle); + Album FindByArtistAndName(string artistName, string cleanTitle); Album FindById(string spotifyId); PagingSpec AlbumsWithoutFiles(PagingSpec pagingSpec); List AlbumsBetweenDates(DateTime startDate, DateTime endDate, bool includeUnmonitored); @@ -31,6 +33,7 @@ namespace NzbDrone.Core.Music { return Query.Where(c => c.Path == path).Any(); } + public List GetAlbums(int artistId) { return Query.Where(s => s.ArtistId == artistId).ToList(); @@ -98,5 +101,18 @@ namespace NzbDrone.Core.Music return Query.Where(s => s.CleanTitle == cleanTitle) .SingleOrDefault(); } + + public Album FindByArtistAndName(string artistName, string cleanTitle) + { + var cleanArtistName = Parser.Parser.CleanArtistTitle(artistName); + cleanTitle = cleanTitle.ToLowerInvariant(); + var query = Query.Join(JoinType.Inner, album => album.Artist, (album, artist) => album.ArtistId == artist.Id) + .Where(artist => artist.CleanName == cleanArtistName) + .Where(album => album.CleanTitle == cleanTitle); + return Query.Join(JoinType.Inner, album => album.Artist, (album, artist) => album.ArtistId == artist.Id ) + .Where(artist => artist.CleanName == cleanArtistName) + .Where(album => album.CleanTitle == cleanTitle) + .SingleOrDefault(); + } } } diff --git a/src/NzbDrone.Core/Music/AlbumService.cs b/src/NzbDrone.Core/Music/AlbumService.cs index 774225b9f..12167745b 100644 --- a/src/NzbDrone.Core/Music/AlbumService.cs +++ b/src/NzbDrone.Core/Music/AlbumService.cs @@ -35,7 +35,8 @@ namespace NzbDrone.Core.Music void RemoveAddOptions(Album album); } - public class AlbumService : IAlbumService + public class AlbumService : IAlbumService, + IHandleAsync { private readonly IAlbumRepository _albumRepository; private readonly IEventAggregator _eventAggregator; @@ -76,9 +77,9 @@ namespace NzbDrone.Core.Music _eventAggregator.PublishEvent(new AlbumDeletedEvent(album, deleteFiles)); } - public Album FindById(string spotifyId) + public Album FindById(string lidarrId) { - return _albumRepository.FindById(spotifyId); + return _albumRepository.FindById(lidarrId); } @@ -169,5 +170,16 @@ namespace NzbDrone.Core.Music return album; } + + public void HandleAsync(ArtistDeletedEvent message) + { + var albums = GetAlbumsByArtist(message.Artist.Id); + _albumRepository.DeleteMany(albums); + } + + public void Handle(ArtistDeletedEvent message) + { + throw new NotImplementedException(); + } } } diff --git a/src/NzbDrone.Core/Music/Artist.cs b/src/NzbDrone.Core/Music/Artist.cs index f16f4c3b7..0fc638803 100644 --- a/src/NzbDrone.Core/Music/Artist.cs +++ b/src/NzbDrone.Core/Music/Artist.cs @@ -81,14 +81,6 @@ namespace NzbDrone.Core.Music Ratings = otherArtist.Ratings; Members = otherArtist.Members; - Albums = otherArtist.Albums; - Path = otherArtist.Path; - ProfileId = otherArtist.ProfileId; - AlbumFolder = otherArtist.AlbumFolder; - Monitored = otherArtist.Monitored; - RootFolderPath = otherArtist.RootFolderPath; - Tags = otherArtist.Tags; - AddOptions = otherArtist.AddOptions; } diff --git a/src/NzbDrone.Core/Music/ArtistRepository.cs b/src/NzbDrone.Core/Music/ArtistRepository.cs index 907af1662..c5abc49ab 100644 --- a/src/NzbDrone.Core/Music/ArtistRepository.cs +++ b/src/NzbDrone.Core/Music/ArtistRepository.cs @@ -8,6 +8,7 @@ namespace NzbDrone.Core.Music { bool ArtistPathExists(string path); Artist FindByName(string cleanTitle); + Artist FindById(int dbId); Artist FindById(string spotifyId); } @@ -29,6 +30,11 @@ namespace NzbDrone.Core.Music return Query.Where(s => s.ForeignArtistId == foreignArtistId).SingleOrDefault(); } + public Artist FindById(int dbId) + { + return Query.Where(s => s.Id == dbId).SingleOrDefault(); + } + public Artist FindByName(string cleanName) { cleanName = cleanName.ToLowerInvariant(); diff --git a/src/NzbDrone.Core/Music/RefreshAlbumService.cs b/src/NzbDrone.Core/Music/RefreshAlbumService.cs index 1fbb8f6a8..4b5487be8 100644 --- a/src/NzbDrone.Core/Music/RefreshAlbumService.cs +++ b/src/NzbDrone.Core/Music/RefreshAlbumService.cs @@ -19,12 +19,14 @@ namespace NzbDrone.Core.Music { private readonly IAlbumService _albumService; private readonly IRefreshTrackService _refreshTrackService; + private readonly IBuildFileNames _fileNameBuilder; private readonly IEventAggregator _eventAggregator; private readonly Logger _logger; - public RefreshAlbumService(IAlbumService albumService, IRefreshTrackService refreshTrackService, IEventAggregator eventAggregator, Logger logger) + public RefreshAlbumService(IAlbumService albumService, IBuildFileNames fileNameBuilder, IRefreshTrackService refreshTrackService, IEventAggregator eventAggregator, Logger logger) { _albumService = albumService; + _fileNameBuilder = fileNameBuilder; _refreshTrackService = refreshTrackService; _eventAggregator = eventAggregator; _logger = logger; @@ -58,24 +60,28 @@ namespace NzbDrone.Core.Music { albumToUpdate = new Album(); albumToUpdate.Monitored = artist.Monitored; + albumToUpdate.ProfileId = artist.ProfileId; + albumToUpdate.Added = DateTime.UtcNow; + + if (string.IsNullOrWhiteSpace(albumToUpdate.Path)) + { + albumToUpdate.Path = _fileNameBuilder.BuildAlbumPath(artist, album); + } + newList.Add(albumToUpdate); - //var folderName = _fileNameBuilder.GetAlbumFolder(albumToUpdate); //This likely does not belong here, need to create AddAlbumService - //albumToUpdate.Path = Path.Combine(newArtist.RootFolderPath, folderName); } + albumToUpdate.ForeignAlbumId = album.ForeignAlbumId; + albumToUpdate.LastInfoSync = DateTime.UtcNow; albumToUpdate.CleanTitle = album.CleanTitle; - //albumToUpdate.TrackNumber = album.TrackNumber; albumToUpdate.Title = album.Title ?? "Unknown"; - //albumToUpdate.AlbumId = album.AlbumId; - //albumToUpdate.Album = album.Album; - //albumToUpdate.Explicit = album.Explicit; + albumToUpdate.CleanTitle = Parser.Parser.CleanArtistTitle(albumToUpdate.Title); albumToUpdate.ArtistId = artist.Id; - albumToUpdate.Path = artist.Path + album.Title; albumToUpdate.AlbumType = album.AlbumType; - //albumToUpdate.Compilation = album.Compilation; - - _refreshTrackService.RefreshTrackInfo(album, album.Tracks); + albumToUpdate.Genres = album.Genres; + albumToUpdate.Images = album.Images; + albumToUpdate.ReleaseDate = album.ReleaseDate; successCount++; @@ -121,7 +127,7 @@ namespace NzbDrone.Core.Music private Album GetAlbumToUpdate(Artist artist, Album album, List existingAlbums) { - return existingAlbums.FirstOrDefault(e => e.ForeignAlbumId == album.ForeignAlbumId && e.ReleaseDate == album.ReleaseDate); + return existingAlbums.FirstOrDefault(e => e.ForeignAlbumId == album.ForeignAlbumId/* && e.ReleaseDate == album.ReleaseDate*/); } private IEnumerable OrderAlbums(Artist artist, List albums) diff --git a/src/NzbDrone.Core/Music/RefreshArtistService.cs b/src/NzbDrone.Core/Music/RefreshArtistService.cs index 5b159bc9e..c767bf8ee 100644 --- a/src/NzbDrone.Core/Music/RefreshArtistService.cs +++ b/src/NzbDrone.Core/Music/RefreshArtistService.cs @@ -21,6 +21,7 @@ namespace NzbDrone.Core.Music private readonly IProvideArtistInfo _artistInfo; private readonly IArtistService _artistService; private readonly IRefreshAlbumService _refreshAlbumService; + private readonly IRefreshTrackService _refreshTrackService; private readonly IEventAggregator _eventAggregator; private readonly IDiskScanService _diskScanService; private readonly ICheckIfArtistShouldBeRefreshed _checkIfArtistShouldBeRefreshed; @@ -29,6 +30,7 @@ namespace NzbDrone.Core.Music public RefreshArtistService(IProvideArtistInfo artistInfo, IArtistService artistService, IRefreshAlbumService refreshAlbumService, + IRefreshTrackService refreshTrackService, IEventAggregator eventAggregator, IDiskScanService diskScanService, ICheckIfArtistShouldBeRefreshed checkIfArtistShouldBeRefreshed, @@ -37,6 +39,7 @@ namespace NzbDrone.Core.Music _artistInfo = artistInfo; _artistService = artistService; _refreshAlbumService = refreshAlbumService; + _refreshTrackService = refreshTrackService; _eventAggregator = eventAggregator; _diskScanService = diskScanService; _checkIfArtistShouldBeRefreshed = checkIfArtistShouldBeRefreshed; @@ -55,7 +58,7 @@ namespace NzbDrone.Core.Music } catch (ArtistNotFoundException) { - _logger.Error("Artist '{0}' (SpotifyId {1}) was not found, it may have been removed from Spotify.", artist.Name, artist.ForeignArtistId); + _logger.Error("Artist '{0}' (LidarrAPI {1}) was not found, it may have been removed from Metadata sources.", artist.Name, artist.ForeignArtistId); return; } @@ -63,7 +66,7 @@ namespace NzbDrone.Core.Music if (artist.ForeignArtistId != artistInfo.ForeignArtistId) { - _logger.Warn("Artist '{0}' (SpotifyId {1}) was replaced with '{2}' (SpotifyId {3}), because the original was a duplicate.", artist.Name, artist.ForeignArtistId, artistInfo.Name, artistInfo.ForeignArtistId); + _logger.Warn("Artist '{0}' (Artist {1}) was replaced with '{2}' (LidarrAPI {3}), because the original was a duplicate.", artist.Name, artist.ForeignArtistId, artistInfo.Name, artistInfo.ForeignArtistId); artist.ForeignArtistId = artistInfo.ForeignArtistId; } @@ -86,11 +89,16 @@ namespace NzbDrone.Core.Music _logger.Warn(e, "Couldn't update artist path for " + artist.Path); } - artist.Albums = UpdateAlbums(artist, artistInfo); + //artist.Albums = UpdateAlbums(artist, artistInfo); # We don't need this since we don't store albums in artist table. _artistService.UpdateArtist(artist); + _refreshAlbumService.RefreshAlbumInfo(artist, tuple.Item2); - //_refreshTrackService.RefreshTrackInfo(artist, tuple.Item2); + foreach (var album in tuple.Item2) + { + _refreshTrackService.RefreshTrackInfo(album, album.Tracks); + } + _logger.Debug("Finished artist refresh for {0}", artist.Name); _eventAggregator.PublishEvent(new ArtistUpdatedEvent(artist)); diff --git a/src/NzbDrone.Core/Music/RefreshTrackService.cs b/src/NzbDrone.Core/Music/RefreshTrackService.cs index b1bd6900f..b8d7c3615 100644 --- a/src/NzbDrone.Core/Music/RefreshTrackService.cs +++ b/src/NzbDrone.Core/Music/RefreshTrackService.cs @@ -17,12 +17,14 @@ namespace NzbDrone.Core.Music public class RefreshTrackService : IRefreshTrackService { private readonly ITrackService _trackService; + private readonly IAlbumService _albumService; private readonly IEventAggregator _eventAggregator; private readonly Logger _logger; - public RefreshTrackService(ITrackService trackService, IEventAggregator eventAggregator, Logger logger) + public RefreshTrackService(ITrackService trackService, IAlbumService albumService, IEventAggregator eventAggregator, Logger logger) { _trackService = trackService; + _albumService = albumService; _eventAggregator = eventAggregator; _logger = logger; } @@ -33,11 +35,13 @@ namespace NzbDrone.Core.Music var successCount = 0; var failCount = 0; - var existingTracks = _trackService.GetTracksByAlbum(album.ArtistId, album.Id); // TODO: JOE: I believe this should be string, string + album = _albumService.FindById(album.ForeignAlbumId); + + var existingTracks = _trackService.GetTracksByAlbum(album.ArtistId, album.Id); var updateList = new List(); var newList = new List(); - var dupeFreeRemoteTracks = remoteTracks.DistinctBy(m => new { m.AlbumId, m.TrackNumber }).ToList(); + var dupeFreeRemoteTracks = remoteTracks.DistinctBy(m => new { m.ForeignTrackId, m.TrackNumber }).ToList(); foreach (var track in OrderTracks(album, dupeFreeRemoteTracks)) { @@ -54,21 +58,20 @@ namespace NzbDrone.Core.Music { trackToUpdate = new Track(); trackToUpdate.Monitored = album.Monitored; + trackToUpdate.Id = track.Id; newList.Add(trackToUpdate); } + // TODO: Use object mapper to automatically handle this trackToUpdate.ForeignTrackId = track.ForeignTrackId; trackToUpdate.TrackNumber = track.TrackNumber; trackToUpdate.Title = track.Title ?? "Unknown"; trackToUpdate.AlbumId = album.Id; - trackToUpdate.Album = track.Album; + trackToUpdate.Album = track.Album ?? album; trackToUpdate.Explicit = track.Explicit; trackToUpdate.ArtistId = album.ArtistId; trackToUpdate.Compilation = track.Compilation; - // TODO: Implement rest of [RefreshTrackService] fields - - successCount++; } @@ -118,7 +121,8 @@ namespace NzbDrone.Core.Music private Track GetTrackToUpdate(Album album, Track track, List existingTracks) { - return existingTracks.FirstOrDefault(e => e.AlbumId == track.AlbumId && e.TrackNumber == track.TrackNumber); + var result = existingTracks.FirstOrDefault(e => e.ForeignTrackId == track.ForeignTrackId && e.TrackNumber == track.TrackNumber); + return result; } private IEnumerable OrderTracks(Album album, List tracks) diff --git a/src/NzbDrone.Core/Music/TrackService.cs b/src/NzbDrone.Core/Music/TrackService.cs index 39c065b0e..a93ac3746 100644 --- a/src/NzbDrone.Core/Music/TrackService.cs +++ b/src/NzbDrone.Core/Music/TrackService.cs @@ -3,6 +3,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music.Events; using System; using System.Collections.Generic; @@ -32,7 +33,10 @@ namespace NzbDrone.Core.Music void SetTrackMonitoredByAlbum(int artistId, int albumId, bool monitored); } - public class TrackService : ITrackService + public class TrackService : ITrackService, + IHandleAsync, + IHandle, + IHandle { private readonly ITrackRepository _trackRepository; private readonly IConfigService _configService; @@ -62,6 +66,7 @@ namespace NzbDrone.Core.Music public List GetTracksByArtist(int artistId) { + _logger.Debug("Getting Tracks for ArtistId {0}", artistId); return _trackRepository.GetTracks(artistId).ToList(); } diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index efbb3f72e..a57e58607 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -90,6 +90,10 @@ False ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + + ..\packages\taglib.2.1.0.0\lib\policy.2.0.taglib-sharp.dll + True + ..\packages\RestSharp.105.2.3\lib\net4\RestSharp.dll True @@ -110,6 +114,10 @@ ..\Libraries\Sqlite\System.Data.SQLite.dll + + ..\packages\taglib.2.1.0.0\lib\taglib-sharp.dll + True + @@ -316,6 +324,7 @@ + @@ -756,12 +765,8 @@ - - - - @@ -798,6 +803,7 @@ + diff --git a/src/NzbDrone.Core/Organizer/FileNameSampleService.cs b/src/NzbDrone.Core/Organizer/FileNameSampleService.cs index 324e6e524..2d17ba65e 100644 --- a/src/NzbDrone.Core/Organizer/FileNameSampleService.cs +++ b/src/NzbDrone.Core/Organizer/FileNameSampleService.cs @@ -137,7 +137,7 @@ namespace NzbDrone.Core.Organizer _singleEpisodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv", SceneName = "Series.Title.S01E01.720p.HDTV.x264-EVOLVE", ReleaseGroup = "RlsGrp", @@ -146,7 +146,7 @@ namespace NzbDrone.Core.Organizer _singleTrackFile = new TrackFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "Artist.Name.Album.Name.TrackNum.Track.Title.MP3256.mp3", SceneName = "Artist.Name.Album.Name.TrackNum.Track.Title.MP3256", ReleaseGroup = "RlsGrp", @@ -155,7 +155,7 @@ namespace NzbDrone.Core.Organizer _multiEpisodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "Series.Title.S01E01-E03.720p.HDTV.x264-EVOLVE.mkv", SceneName = "Series.Title.S01E01-E03.720p.HDTV.x264-EVOLVE", ReleaseGroup = "RlsGrp", @@ -164,7 +164,7 @@ namespace NzbDrone.Core.Organizer _dailyEpisodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "Series.Title.2013.10.30.HDTV.x264-EVOLVE.mkv", SceneName = "Series.Title.2013.10.30.HDTV.x264-EVOLVE", ReleaseGroup = "RlsGrp", @@ -173,7 +173,7 @@ namespace NzbDrone.Core.Organizer _animeEpisodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "[RlsGroup] Series Title - 001 [720p].mkv", SceneName = "[RlsGroup] Series Title - 001 [720p]", ReleaseGroup = "RlsGrp", @@ -182,7 +182,7 @@ namespace NzbDrone.Core.Organizer _animeMultiEpisodeFile = new EpisodeFile { - Quality = new QualityModel(Quality.MP3256, new Revision(2)), + Quality = new QualityModel(Quality.MP3_256, new Revision(2)), RelativePath = "[RlsGroup] Series Title - 001 - 103 [720p].mkv", SceneName = "[RlsGroup] Series Title - 001 - 103 [720p]", ReleaseGroup = "RlsGrp", diff --git a/src/NzbDrone.Core/Parser/Model/ParsedTrackInfo.cs b/src/NzbDrone.Core/Parser/Model/ParsedTrackInfo.cs index f05090f9b..6466e6634 100644 --- a/src/NzbDrone.Core/Parser/Model/ParsedTrackInfo.cs +++ b/src/NzbDrone.Core/Parser/Model/ParsedTrackInfo.cs @@ -9,11 +9,12 @@ namespace NzbDrone.Core.Parser.Model { public class ParsedTrackInfo { + //public int TrackNumber { get; set; } + public string Title { get; set; } public string ArtistTitle { get; set; } public string AlbumTitle { get; set; } public ArtistTitleInfo ArtistTitleInfo { get; set; } public QualityModel Quality { get; set; } - public string AlbumId { get; set; } // maybe public int[] TrackNumbers { get; set; } //public Language Language { get; set; } public string ReleaseGroup { get; set; } @@ -34,7 +35,7 @@ namespace NzbDrone.Core.Parser.Model if (TrackNumbers != null && TrackNumbers.Any()) { - episodeString = string.Format("T{1}", string.Join("-", TrackNumbers.Select(c => c.ToString("00")))); + episodeString = string.Format("T{0}", string.Join("-", TrackNumbers.Select(c => c.ToString("00")))); } diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 22e0e07be..ca1f1e482 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -6,6 +6,7 @@ using System.Text.RegularExpressions; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Common.Instrumentation; +using NzbDrone.Core.MediaFiles.MediaInfo; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Tv; @@ -15,6 +16,29 @@ namespace NzbDrone.Core.Parser { private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(Parser)); + private static readonly Regex[] ReportMusicTitleRegex = new[] + { + // Track with artist (01 - artist - trackName) + new Regex(@"(?\d*){0,1}([-| ]{0,1})(?[a-zA-Z0-9, ().&_]*)[-| ]{0,1}(?[a-zA-Z0-9, ().&_]+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + + // Track without artist (01 - trackName) + new Regex(@"(?\d*)[-| .]{0,1}(?[a-zA-Z0-9, ().&_]+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + + // Track without trackNumber or artist(trackName) + new Regex(@"(?\d*)[-| .]{0,1}(?[a-zA-Z0-9, ().&_]+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + + // Track without trackNumber and with artist(artist - trackName) + new Regex(@"(?\d*)[-| .]{0,1}(?[a-zA-Z0-9, ().&_]+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + + // Track with artist and starting title (01 - artist - trackName) + new Regex(@"(?\d*){0,1}[-| ]{0,1}(?[a-zA-Z0-9, ().&_]*)[-| ]{0,1}(?[a-zA-Z0-9, ().&_]+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + }; + private static readonly Regex[] ReportTitleRegex = new[] { //Anime - Absolute Episode Number + Title + Season+Episode @@ -22,6 +46,7 @@ namespace NzbDrone.Core.Parser // new Regex(@"^(?:(?\d{2,3})(?:_|-|\s|\.)+)+(?.+?)(?:\W|_)+(?:S?(?<season>(?<!\d+)\d{1,2}(?!\d+))(?:(?:\-|[ex]|\W[ex]){1,2}(?<episode>\d{2}(?!\d+)))+)", // RegexOptions.IgnoreCase | RegexOptions.Compiled), + //Multi-Part episodes without a title (S01E05.S01E06) new Regex(@"^(?:\W*S?(?<season>(?<!\d+)(?:\d{1,2}|\d{4})(?!\d+))(?:(?:[ex]){1,2}(?<episode>\d{1,3}(?!\d+)))+){2,}", RegexOptions.IgnoreCase | RegexOptions.Compiled), @@ -209,7 +234,7 @@ namespace NzbDrone.Core.Parser { // Generic match for md5 and mixed-case hashes. new Regex(@"^[0-9a-zA-Z]{32}", RegexOptions.Compiled), - + // Generic match for shorter lower-case hashes. new Regex(@"^[a-z0-9]{24}$", RegexOptions.Compiled), @@ -240,7 +265,7 @@ namespace NzbDrone.Core.Parser private static readonly Regex FileExtensionRegex = new Regex(@"\.[a-z0-9]{2,4}$", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex SimpleTitleRegex = new Regex(@"(?:(480|720|1080|2160)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>?*:|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?)\s*", + private static readonly Regex SimpleTitleRegex = new Regex(@"(?:(480|720|1080|2160|320)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>?*:|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?)\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex WebsitePrefixRegex = new Regex(@"^\[\s*[a-z]+(\.[a-z]+)+\s*\][- ]*", @@ -280,8 +305,52 @@ namespace NzbDrone.Core.Parser public static ParsedTrackInfo ParseMusicPath(string path) { var fileInfo = new FileInfo(path); + var file = TagLib.File.Create(path); + var trackName = file.Tag.Title; + var trackNumber = file.Tag.Track; + + var artistTitleInfo = new ArtistTitleInfo + { + Title = file.Tag.Title, + Year = (int) file.Tag.Year + }; + + var temp = new int[1]; + temp[0] = (int) trackNumber; + var result = new ParsedTrackInfo + { + AlbumTitle = file.Tag.Album, + ArtistTitle = file.Tag.FirstAlbumArtist, + Quality = QualityParser.ParseQuality(trackName), + TrackNumbers = temp, + ArtistTitleInfo = artistTitleInfo, + Title = file.Tag.Title + }; + + + Logger.Debug("Quality parsed: {0}", file.Tag.BeatsPerMinute); + + foreach (TagLib.ICodec codec in file.Properties.Codecs) + { + TagLib.IAudioCodec acodec = codec as TagLib.IAudioCodec; + TagLib.IVideoCodec vcodec = codec as TagLib.IVideoCodec; + + if (acodec != null && (acodec.MediaTypes & TagLib.MediaTypes.Audio) != TagLib.MediaTypes.None) + { + Logger.Debug("Audio Properties : " + acodec.Description); + Logger.Debug("Bitrate: " + acodec.AudioBitrate); + Logger.Debug("SampleRate: " + acodec.AudioSampleRate); + Logger.Debug("Channels: " + acodec.AudioChannels + "\n"); - var result = ParseMusicTitle(fileInfo.Name); + result.Quality = QualityParser.ParseQuality(acodec.Description, acodec.AudioBitrate, acodec.AudioSampleRate); + } + + + } + + + // TODO: Check if it is common that we might need to fallback to parser to gather details + //var result = ParseMusicTitle(fileInfo.Name); if (result == null) { @@ -367,7 +436,7 @@ namespace NzbDrone.Core.Parser } } - foreach (var regex in ReportTitleRegex) + foreach (var regex in ReportMusicTitleRegex) { var match = regex.Matches(simpleTitle); @@ -392,7 +461,7 @@ namespace NzbDrone.Core.Parser result.Quality = QualityParser.ParseQuality(title); Logger.Debug("Quality parsed: {0}", result.Quality); - // Majora: We don't currently need Release Group for Music. + // Majora: We don't currently need Release Group for Music. //result.ReleaseGroup = ParseReleaseGroup(title); //var subGroup = GetSubGroup(match); @@ -667,8 +736,79 @@ namespace NzbDrone.Core.Parser private static ParsedTrackInfo ParseMatchMusicCollection(MatchCollection matchCollection) { - throw new NotImplementedException(); + var artistName = matchCollection[0].Groups["artist"].Value./*Removed for cases like Will.I.Am Replace('.', ' ').*/Replace('_', ' '); + artistName = RequestInfoRegex.Replace(artistName, "").Trim(' '); + + // Coppied from Radarr (https://github.com/Radarr/Radarr/blob/develop/src/NzbDrone.Core/Parser/Parser.cs) + // TODO: Split into separate method and write unit tests for. + var parts = artistName.Split('.'); + artistName = ""; + int n = 0; + bool previousAcronym = false; + string nextPart = ""; + foreach (var part in parts) + { + if (parts.Length >= n + 2) + { + nextPart = parts[n + 1]; + } + if (part.Length == 1 && part.ToLower() != "a" && !int.TryParse(part, out n)) + { + artistName += part + "."; + previousAcronym = true; + } + else if (part.ToLower() == "a" && (previousAcronym == true || nextPart.Length == 1)) + { + artistName += part + "."; + previousAcronym = true; + } + else + { + if (previousAcronym) + { + artistName += " "; + previousAcronym = false; + } + artistName += part + " "; + } + n++; + } + + artistName = artistName.Trim(' '); + + int trackNumber; + int.TryParse(matchCollection[0].Groups["trackNumber"].Value, out trackNumber); + + ParsedTrackInfo result = new ParsedTrackInfo(); + + result.ArtistTitle = artistName; + result.ArtistTitleInfo = GetArtistTitleInfo(result.ArtistTitle); + + Logger.Debug("Episode Parsed. {0}", result); + return result; } + + private static ArtistTitleInfo GetArtistTitleInfo(string title) + { + var artistTitleInfo = new ArtistTitleInfo(); + artistTitleInfo.Title = title; + + //var match = YearInTitleRegex.Match(title); + + //if (!match.Success) + //{ + // artistTitleInfo.TitleWithoutYear = title; + //} + + //else + //{ + // artistTitleInfo.TitleWithoutYear = match.Groups["title"].Value; + // artistTitleInfo.Year = Convert.ToInt32(match.Groups["year"].Value); + //} + + return artistTitleInfo; + } + private static ParsedEpisodeInfo ParseMatchCollection(MatchCollection matchCollection) { var seriesName = matchCollection[0].Groups["title"].Value.Replace('.', ' ').Replace('_', ' '); diff --git a/src/NzbDrone.Core/Parser/ParsingService.cs b/src/NzbDrone.Core/Parser/ParsingService.cs index 1c4ff67d0..e8a34a6c0 100644 --- a/src/NzbDrone.Core/Parser/ParsingService.cs +++ b/src/NzbDrone.Core/Parser/ParsingService.cs @@ -34,6 +34,7 @@ namespace NzbDrone.Core.Parser private readonly IEpisodeService _episodeService; private readonly ISeriesService _seriesService; + private readonly IAlbumRepository _albumRepository; private readonly IArtistService _artistService; private readonly ITrackService _trackService; private readonly Logger _logger; @@ -41,11 +42,13 @@ namespace NzbDrone.Core.Parser public ParsingService(IEpisodeService episodeService, ISeriesService seriesService, ITrackService trackService, + IAlbumRepository albumRepository, // ISceneMappingService sceneMappingService, Logger logger) { _episodeService = episodeService; _seriesService = seriesService; + _albumRepository = albumRepository; // _sceneMappingService = sceneMappingService; _trackService = trackService; _logger = logger; @@ -409,74 +412,46 @@ namespace NzbDrone.Core.Parser return result; } - private List<Track> GetStandardTracks(Artist artist, ParsedTrackInfo parsedTrackInfo, SearchCriteriaBase searchCriteria) - { - var result = new List<Track>(); - - if (parsedTrackInfo.TrackNumbers == null) - { - return result; - } - - foreach (var trackNumber in parsedTrackInfo.TrackNumbers) - { - //if (series.UseSceneNumbering && sceneSource) - //{ - // List<Episode> episodes = new List<Episode>(); + //private List<Track> GetStandardTracks(Artist artist, ParsedTrackInfo parsedTrackInfo, SearchCriteriaBase searchCriteria) + //{ + // var result = new List<Track>(); - // if (searchCriteria != null) - // { - // episodes = searchCriteria.Episodes.Where(e => e.SceneSeasonNumber == parsedTrackInfo.SeasonNumber && - // e.SceneEpisodeNumber == trackNumber).ToList(); - // } - - // if (!episodes.Any()) - // { - // episodes = _episodeService.FindEpisodesBySceneNumbering(series.Id, seasonNumber, trackNumber); - // } + // if (parsedTrackInfo.TrackNumbers == null) + // { + // return result; + // } - // if (episodes != null && episodes.Any()) - // { - // _logger.Debug("Using Scene to TVDB Mapping for: {0} - Scene: {1}x{2:00} - TVDB: {3}", - // series.Title, - // episodes.First().SceneSeasonNumber, - // episodes.First().SceneEpisodeNumber, - // string.Join(", ", episodes.Select(e => string.Format("{0}x{1:00}", e.SeasonNumber, e.EpisodeNumber)))); - - // result.AddRange(episodes); - // continue; - // } - //} - - Track trackInfo = null; + // foreach (var trackNumber in parsedTrackInfo.TrackNumbers) + // { + // Track trackInfo = null; - if (searchCriteria != null) - { - trackInfo = searchCriteria.Tracks.SingleOrDefault(e => e.TrackNumber == trackNumber); //e => e.SeasonNumber == seasonNumber && e.TrackNumber == trackNumber - } + // if (searchCriteria != null) + // { + // trackInfo = searchCriteria.Tracks.SingleOrDefault(e => e.TrackNumber == trackNumber); //e => e.SeasonNumber == seasonNumber && e.TrackNumber == trackNumber + // } - if (trackInfo == null) - { - // TODO: [ParsingService]: FindTrack by artistID and trackNumber (or albumID and trackNumber if we change db schema to album as base) - _logger.Debug("TrackInfo is null, we will not add as FindTrack(artistId, trackNumber) is not implemented"); - //trackInfo = _trackService.FindTrack(artist.SpotifyId, trackNumber); - } + // if (trackInfo == null) + // { + // // TODO: [ParsingService]: FindTrack by artistID and trackNumber (or albumID and trackNumber if we change db schema to album as base) + // _logger.Debug("TrackInfo is null, we will not add as FindTrack(artistId, trackNumber) is not implemented"); + // //trackInfo = _trackService.FindTrack(artist.SpotifyId, trackNumber); + // } - if (trackInfo != null) - { - result.Add(trackInfo); - } + // if (trackInfo != null) + // { + // result.Add(trackInfo); + // } - else - { - _logger.Debug("Unable to find {0}", parsedTrackInfo); - } - } + // else + // { + // _logger.Debug("Unable to find {0}", parsedTrackInfo); + // } + // } - return result; - } + // return result; + //} private List<Episode> GetStandardEpisodes(Series series, ParsedEpisodeInfo parsedEpisodeInfo, bool sceneSource, SearchCriteriaBase searchCriteria) { @@ -565,6 +540,7 @@ namespace NzbDrone.Core.Parser { ParsedTrackInfo parsedTrackInfo; + if (folderInfo != null) { parsedTrackInfo = folderInfo.JsonClone(); @@ -576,16 +552,10 @@ namespace NzbDrone.Core.Parser parsedTrackInfo = Parser.ParseMusicPath(filename); } - if (parsedTrackInfo == null) - { - var title = Path.GetFileNameWithoutExtension(filename); - //var specialEpisodeInfo = ParseSpecialEpisodeTitle(title, series); - - //if (specialEpisodeInfo != null) - //{ - // parsedTrackInfo = specialEpisodeInfo; - //} - } + //if (parsedTrackInfo == null) + //{ + // var title = Path.GetFileNameWithoutExtension(filename); + //} if (parsedTrackInfo == null) { @@ -612,50 +582,12 @@ namespace NzbDrone.Core.Parser private List<Track> GetTracks(ParsedTrackInfo parsedTrackInfo, Artist artist) { - - // TODO: Ensure GetTracks(parsedTrackInfo, artist) doesn't need any checks - /*if (parsedTrackInfo.FullSeason) // IF Album - { - return _trackService.GetTracksByAlbumTitle(artist.Id, parsedTrackInfo.AlbumTitle); - } - - if (parsedTrackInfo.IsDaily) - { - if (artist.SeriesType == SeriesTypes.Standard) - { - _logger.Warn("Found daily-style episode for non-daily series: {0}.", series); - return new List<Episode>(); - } - - var episodeInfo = GetDailyEpisode(artist, parsedTrackInfo.AirDate, searchCriteria); - - if (episodeInfo != null) - { - return new List<Episode> { episodeInfo }; - } - - return new List<Track>(); - } - - return GetStandardEpisodes(artist, parsedTrackInfo, sceneSource, searchCriteria);*/ return GetStandardTracks(artist, parsedTrackInfo); } private List<Track> GetStandardTracks(Artist artist, ParsedTrackInfo parsedTrackInfo) { var result = new List<Track>(); - //var seasonNumber = parsedEpisodeInfo.SeasonNumber; - - //if (sceneSource) - //{ - // var sceneMapping = _sceneMappingService.FindSceneMapping(parsedEpisodeInfo.SeriesTitle); - - // if (sceneMapping != null && sceneMapping.SeasonNumber.HasValue && sceneMapping.SeasonNumber.Value >= 0 && - // sceneMapping.SceneSeasonNumber == seasonNumber) - // { - // seasonNumber = sceneMapping.SeasonNumber.Value; - // } - //} if (parsedTrackInfo.TrackNumbers == null) { @@ -664,7 +596,7 @@ namespace NzbDrone.Core.Parser foreach (var trackNumber in parsedTrackInfo.TrackNumbers) { - + Track trackInfo = null; @@ -675,9 +607,12 @@ namespace NzbDrone.Core.Parser if (trackInfo == null) { - // TODO: [ParsingService]: FindTrack by artistID and trackNumber (or albumID and trackNumber if we change db schema to album as base) - _logger.Debug("TrackInfo is null, we will not add as FindTrack(artistId, trackNumber) is not implemented"); - //trackInfo = _trackService.FindTrack(artist.SpotifyId, trackNumber); //series.Id, seasonNumber, trackNumber + var album = _albumRepository.FindByArtistAndName(parsedTrackInfo.ArtistTitle, Parser.CleanArtistTitle(parsedTrackInfo.AlbumTitle)); + if (album == null) + { + return new List<Track>(); + } + trackInfo = _trackService.FindTrack(artist.Id, album.Id, trackNumber); } if (trackInfo != null) @@ -694,4 +629,4 @@ namespace NzbDrone.Core.Parser return result; } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs index c70512edc..d0d7df158 100644 --- a/src/NzbDrone.Core/Parser/QualityParser.cs +++ b/src/NzbDrone.Core/Parser/QualityParser.cs @@ -39,18 +39,48 @@ namespace NzbDrone.Core.Parser private static readonly Regex RealRegex = new Regex(@"\b(?<real>REAL)\b", RegexOptions.Compiled); - private static readonly Regex BitRateRegex = new Regex(@"(?: - (?<B192>192[ ]?kbps)|(?<B192>192$)|(?<B192>[\[\(].*192.*[\]\)])| - (?<B256>256[ ]?kbps)|(?<B256>256$)|(?<B256>[\[\(].*256.*[\]\)])| - (?<B320>320[ ]?kbps)|(?<B320>320$)|(?<B320>[\[\(].*320.*[\]\)])| - (?<B512>512[ ]?kbps)|(?<B512>512$)|(?<B512>[\[\(].*512.*[\]\)])| - (?<Flac>flac[-_.\]\b)} ])|(?<Flac>flac$)| - (?<VBR>VBR[ ]?kbps)|(?<VBR>VBR$)|(?<VBR>[\[\(].*VBR.*[\]\)]) - )", - RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); - - private static readonly Regex CodecRegex = new Regex(@"\b(?:(?<x264>x264)|(?<h264>h264)|(?<xvidhd>XvidHD)|(?<xvid>Xvid)|(?<divx>divx))\b", - RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly Regex BitRateRegex = new Regex(@"\b(?:(?<B192>192[ ]?kbps|192|[\[\(].*192.*[\]\)])| + (?<B256>256[ ]?kbps|256|[\[\(].*256.*[\]\)])| + (?<B320>320[ ]?kbps|320|[\[\(].*320.*[\]\)])| + (?<B512>512[ ]?kbps|512|[\[\(].*512.*[\]\)])| + (?<VBR>VBR[ ]?kbps|VBR|[\[\(].*VBR.*[\]\)])| + (?<FLAC>FLAC))\b", + RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + + private static readonly Regex CodecRegex = new Regex(@"\b(?: + (?<MP3>MPEG Version \d+ Audio, Layer 3)| + (?<FLAC>flac)| + (?<VBR>VBR|MPEG Version \d+ Audio, Layer 3 VBR$) + )\b", + RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + + + public static QualityModel ParseQuality(string desc, int bitrate, int sampleRate) + { + var result = new QualityModel { Quality = Quality.Unknown }; + + switch (bitrate) + { + case 192: + result.Quality = Quality.MP3_192; + break; + case 256: + result.Quality = Quality.MP3_256; + break; + case 320: + result.Quality = Quality.MP3_320; + break; + default: + var match = CodecRegex.Match(desc); //TODO: BUG: Figure out why this always fails + if (!match.Success) result.Quality = Quality.Unknown; + if (match.Groups["VBR"].Success) result.Quality = Quality.MP3_VBR; + if (match.Groups["FLAC"].Success) result.Quality = Quality.FLAC; + break; + } + + + return result; + } public static QualityModel ParseQuality(string name) { @@ -63,22 +93,22 @@ namespace NzbDrone.Core.Parser switch(bitrate) { case BitRate.B192: - result.Quality = Quality.MP3192; + result.Quality = Quality.MP3_192; break; case BitRate.B256: - result.Quality = Quality.MP3256; + result.Quality = Quality.MP3_256; break; case BitRate.B320: - result.Quality = Quality.MP3320; + result.Quality = Quality.MP3_320; break; case BitRate.B512: - result.Quality = Quality.MP3512; + result.Quality = Quality.MP3_512; break; - case BitRate.Flac: + case BitRate.FLAC: result.Quality = Quality.FLAC; break; case BitRate.VBR: - result.Quality = Quality.MP3VBR; + result.Quality = Quality.MP3_VBR; break; } @@ -100,6 +130,17 @@ namespace NzbDrone.Core.Parser return result; } + private static BitRate ParseCodec(string name) + { + var match = BitRateRegex.Match(name); + + if (!match.Success) return BitRate.Unknown; + if (match.Groups["FLAC"].Success) return BitRate.FLAC; + if (match.Groups["VBR"].Success) return BitRate.VBR; + + return BitRate.Unknown; + } + private static BitRate ParseBitRate(string name) { //var nameWithNoSpaces = Regex.Replace(name, @"\s+", ""); @@ -110,7 +151,7 @@ namespace NzbDrone.Core.Parser if (match.Groups["B256"].Success) return BitRate.B256; if (match.Groups["B320"].Success) return BitRate.B320; if (match.Groups["B512"].Success) return BitRate.B512; - if (match.Groups["Flac"].Success) return BitRate.Flac; + if (match.Groups["FLAC"].Success) return BitRate.FLAC; if (match.Groups["VBR"].Success) return BitRate.VBR; return BitRate.Unknown; @@ -152,7 +193,7 @@ namespace NzbDrone.Core.Parser B320, B512, VBR, - Flac, + FLAC, Unknown, } } diff --git a/src/NzbDrone.Core/Profiles/ProfileService.cs b/src/NzbDrone.Core/Profiles/ProfileService.cs index 1317b10b9..671d4127f 100644 --- a/src/NzbDrone.Core/Profiles/ProfileService.cs +++ b/src/NzbDrone.Core/Profiles/ProfileService.cs @@ -87,20 +87,20 @@ namespace NzbDrone.Core.Profiles _logger.Info("Setting up default quality profiles"); AddDefaultProfile("Any", - Quality.MP3192, - Quality.MP3256, - Quality.MP3320, - Quality.MP3512, - Quality.MP3VBR, + Quality.MP3_192, + Quality.MP3_256, + Quality.MP3_320, + Quality.MP3_512, + Quality.MP3_VBR, Quality.FLAC); AddDefaultProfile("Lossless", Quality.FLAC); AddDefaultProfile("Standard", - Quality.MP3192, - Quality.MP3256, - Quality.MP3320); + Quality.MP3_192, + Quality.MP3_256, + Quality.MP3_320); } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Qualities/Quality.cs b/src/NzbDrone.Core/Qualities/Quality.cs index 4a8b45026..85ce79b77 100644 --- a/src/NzbDrone.Core/Qualities/Quality.cs +++ b/src/NzbDrone.Core/Qualities/Quality.cs @@ -56,11 +56,11 @@ namespace NzbDrone.Core.Qualities } public static Quality Unknown => new Quality(0, "Unknown"); - public static Quality MP3192 => new Quality(1, "MP3-192"); - public static Quality MP3VBR => new Quality(2, "MP3-VBR"); - public static Quality MP3256 => new Quality(3, "MP3-256"); - public static Quality MP3320 => new Quality(4, "MP3-320"); - public static Quality MP3512 => new Quality(5, "MP3-512"); + public static Quality MP3_192 => new Quality(1, "MP3-192"); + public static Quality MP3_VBR => new Quality(2, "MP3-VBR"); + public static Quality MP3_256 => new Quality(3, "MP3-256"); + public static Quality MP3_320 => new Quality(4, "MP3-320"); + public static Quality MP3_512 => new Quality(5, "MP3-512"); public static Quality FLAC => new Quality(6, "FLAC"); static Quality() @@ -68,11 +68,11 @@ namespace NzbDrone.Core.Qualities All = new List<Quality> { Unknown, - MP3192, - MP3VBR, - MP3256, - MP3320, - MP3512, + MP3_192, + MP3_VBR, + MP3_256, + MP3_320, + MP3_512, FLAC, }; @@ -85,11 +85,11 @@ namespace NzbDrone.Core.Qualities DefaultQualityDefinitions = new HashSet<QualityDefinition> { new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.MP3192) { Weight = 2, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.MP3VBR) { Weight = 3, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.MP3256) { Weight = 4, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.MP3320) { Weight = 5, MinSize = 0, MaxSize = 100 }, - new QualityDefinition(Quality.MP3512) { Weight = 6, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.MP3_192) { Weight = 2, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.MP3_VBR) { Weight = 3, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.MP3_256) { Weight = 4, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.MP3_320) { Weight = 5, MinSize = 0, MaxSize = 100 }, + new QualityDefinition(Quality.MP3_512) { Weight = 6, MinSize = 0, MaxSize = 100 }, new QualityDefinition(Quality.FLAC) { Weight = 7, MinSize = 0, MaxSize = null }, }; } diff --git a/src/NzbDrone.Core/packages.config b/src/NzbDrone.Core/packages.config index eb4dc5c17..6b185ed7d 100644 --- a/src/NzbDrone.Core/packages.config +++ b/src/NzbDrone.Core/packages.config @@ -9,6 +9,7 @@ <package id="OAuth" version="1.0.3" targetFramework="net40" /> <package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" /> <package id="RestSharp" version="105.2.3" targetFramework="net40" /> + <package id="taglib" version="2.1.0.0" targetFramework="net40" /> <package id="TinyTwitter" version="1.1.2" targetFramework="net40" /> <package id="xmlrpcnet" version="2.5.0" targetFramework="net40" /> </packages> \ No newline at end of file diff --git a/src/NzbDrone.Host/Properties/AssemblyInfo.cs b/src/NzbDrone.Host/Properties/AssemblyInfo.cs index dd667bbdd..4ed833932 100644 --- a/src/NzbDrone.Host/Properties/AssemblyInfo.cs +++ b/src/NzbDrone.Host/Properties/AssemblyInfo.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("NzbDrone.exe")] +[assembly: AssemblyTitle("Lidarr.exe")] [assembly: Guid("C2172AF4-F9A6-4D91-BAEE-C2E4EE680613")] [assembly: AssemblyVersion("10.0.0.*")] diff --git a/src/NzbDrone.Integration.Test/ApiTests/ArtistFixture.cs b/src/NzbDrone.Integration.Test/ApiTests/ArtistFixture.cs index 45d9a0968..a3eddea8d 100644 --- a/src/NzbDrone.Integration.Test/ApiTests/ArtistFixture.cs +++ b/src/NzbDrone.Integration.Test/ApiTests/ArtistFixture.cs @@ -45,7 +45,7 @@ namespace NzbDrone.Integration.Test.ApiTests { EnsureNoArtsit("266189", "Alien Ant Farm"); - var artist = Artist.Lookup("tvdb:266189").Single(); + var artist = Artist.Lookup("lidarr:266189").Single(); artist.ProfileId = 1; @@ -57,7 +57,7 @@ namespace NzbDrone.Integration.Test.ApiTests { EnsureNoArtsit("266189", "Alien Ant Farm"); - var artist = Artist.Lookup("tvdb:266189").Single(); + var artist = Artist.Lookup("lidarr:266189").Single(); artist.ProfileId = 1; artist.Path = Path.Combine(ArtistRootFolder, artist.Name); diff --git a/src/NzbDrone.Integration.Test/ApiTests/WantedFixture.cs b/src/NzbDrone.Integration.Test/ApiTests/WantedFixture.cs index 3881119ef..72f541868 100644 --- a/src/NzbDrone.Integration.Test/ApiTests/WantedFixture.cs +++ b/src/NzbDrone.Integration.Test/ApiTests/WantedFixture.cs @@ -42,9 +42,9 @@ namespace NzbDrone.Integration.Test.ApiTests [Test, Order(1)] public void cutoff_should_have_monitored_items() { - EnsureProfileCutoff(1, Quality.MP3256); + EnsureProfileCutoff(1, Quality.MP3_256); var artist = EnsureArtist("266189", "The Blacklist", true); - EnsureTrackFile(artist, 1, 1, Quality.MP3192); + EnsureTrackFile(artist, 1, 1, Quality.MP3_192); var result = WantedCutoffUnmet.GetPaged(0, 15, "releaseDate", "desc"); @@ -64,9 +64,9 @@ namespace NzbDrone.Integration.Test.ApiTests [Test, Order(1)] public void cutoff_should_not_have_unmonitored_items() { - EnsureProfileCutoff(1, Quality.MP3256); + EnsureProfileCutoff(1, Quality.MP3_256); var artist = EnsureArtist("266189", "The Blacklist", false); - EnsureTrackFile(artist, 1, 1, Quality.MP3192); + EnsureTrackFile(artist, 1, 1, Quality.MP3_192); var result = WantedCutoffUnmet.GetPaged(0, 15, "releaseDate", "desc"); @@ -76,9 +76,9 @@ namespace NzbDrone.Integration.Test.ApiTests [Test, Order(1)] public void cutoff_should_have_artist() { - EnsureProfileCutoff(1, Quality.MP3256); + EnsureProfileCutoff(1, Quality.MP3_256); var artist = EnsureArtist("266189", "The Blacklist", true); - EnsureTrackFile(artist, 1, 1, Quality.MP3192); + EnsureTrackFile(artist, 1, 1, Quality.MP3_192); var result = WantedCutoffUnmet.GetPaged(0, 15, "releaseDate", "desc"); @@ -99,9 +99,9 @@ namespace NzbDrone.Integration.Test.ApiTests [Test, Order(2)] public void cutoff_should_have_unmonitored_items() { - EnsureProfileCutoff(1, Quality.MP3256); + EnsureProfileCutoff(1, Quality.MP3_256); var artist = EnsureArtist("266189", "The Blacklist", false); - EnsureTrackFile(artist, 1, 1, Quality.MP3192); + EnsureTrackFile(artist, 1, 1, Quality.MP3_192); var result = WantedCutoffUnmet.GetPaged(0, 15, "releaseDate", "desc", "monitored", "false"); diff --git a/src/NzbDrone.Integration.Test/IntegrationTestBase.cs b/src/NzbDrone.Integration.Test/IntegrationTestBase.cs index 3584b9c7f..608e02b9c 100644 --- a/src/NzbDrone.Integration.Test/IntegrationTestBase.cs +++ b/src/NzbDrone.Integration.Test/IntegrationTestBase.cs @@ -221,7 +221,7 @@ namespace NzbDrone.Integration.Test result = Artist.Post(artist); Commands.WaitAll(); - WaitForCompletion(() => Episodes.GetEpisodesInSeries(result.Id).Count > 0); + WaitForCompletion(() => Tracks.GetTracksInArtist(result.Id).Count > 0); } if (monitored.HasValue) diff --git a/src/NzbDrone.Test.Common/NzbDroneRunner.cs b/src/NzbDrone.Test.Common/NzbDroneRunner.cs index 9d219e02c..0a686f3e0 100644 --- a/src/NzbDrone.Test.Common/NzbDroneRunner.cs +++ b/src/NzbDrone.Test.Common/NzbDroneRunner.cs @@ -32,16 +32,16 @@ namespace NzbDrone.Test.Common { AppData = Path.Combine(TestContext.CurrentContext.TestDirectory, "_intg_" + DateTime.Now.Ticks); - var nzbdroneConsoleExe = "NzbDrone.Console.exe"; + var nzbdroneConsoleExe = "Lidarr.Console.exe"; if (OsInfo.IsNotWindows) { - nzbdroneConsoleExe = "NzbDrone.exe"; + nzbdroneConsoleExe = "Lidarr.exe"; } if (BuildInfo.IsDebug) { - Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..\\..\\..\\..\\..\\_output\\NzbDrone.Console.exe")); + Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..\\..\\..\\..\\..\\_output\\Lidarr.Console.exe")); } else { diff --git a/src/NzbDrone.Update.Test/ProgramFixture.cs b/src/NzbDrone.Update.Test/ProgramFixture.cs index 5d9b7243a..1e8c9ec3f 100644 --- a/src/NzbDrone.Update.Test/ProgramFixture.cs +++ b/src/NzbDrone.Update.Test/ProgramFixture.cs @@ -34,7 +34,7 @@ namespace NzbDrone.Update.Test [Test] public void should_call_update_with_correct_path() { - var ProcessPath = @"C:\NzbDrone\nzbdrone.exe".AsOsAgnostic(); + var ProcessPath = @"C:\NzbDrone\lidarr.exe".AsOsAgnostic(); Mocker.GetMock<IProcessProvider>().Setup(c => c.GetProcessById(12)) .Returns(new ProcessInfo() { StartPath = ProcessPath }); diff --git a/src/NzbDrone/Properties/AssemblyInfo.cs b/src/NzbDrone/Properties/AssemblyInfo.cs index c1bca6872..4385d79f2 100644 --- a/src/NzbDrone/Properties/AssemblyInfo.cs +++ b/src/NzbDrone/Properties/AssemblyInfo.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("NzbDrone.exe")] +[assembly: AssemblyTitle("Lidarr.exe")] [assembly: Guid("67AADCD9-89AA-4D95-8281-3193740E70E5")] [assembly: AssemblyVersion("10.0.0.*")] diff --git a/src/ServiceHelpers/ServiceInstall/ServiceHelper.cs b/src/ServiceHelpers/ServiceInstall/ServiceHelper.cs index 52952dece..77aff8ee2 100644 --- a/src/ServiceHelpers/ServiceInstall/ServiceHelper.cs +++ b/src/ServiceHelpers/ServiceInstall/ServiceHelper.cs @@ -20,7 +20,7 @@ namespace ServiceInstall { if (!File.Exists(NzbDroneExe)) { - Console.WriteLine("Unable to find NzbDrone.Console.exe in the current directory."); + Console.WriteLine("Unable to find Lidarr.Console.exe in the current directory."); return; } diff --git a/src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs b/src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs index e5fedb19e..531674dc4 100644 --- a/src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs +++ b/src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.IO; using System.Reflection; @@ -8,7 +8,7 @@ namespace ServiceUninstall { public static class ServiceHelper { - private static string NzbDroneExe => Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName, "NzbDrone.Console.exe"); + private static string NzbDroneExe => Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName, "Lidarr.Console.exe"); private static bool IsAnAdministrator() { @@ -20,7 +20,7 @@ namespace ServiceUninstall { if (!File.Exists(NzbDroneExe)) { - Console.WriteLine("Unable to find NzbDrone.exe in the current directory."); + Console.WriteLine("Unable to find Lidarr.exe in the current directory."); return; } diff --git a/src/UI/AddArtist/SearchResultView.js b/src/UI/AddArtist/SearchResultView.js index 9c0529c60..ee8806a0e 100644 --- a/src/UI/AddArtist/SearchResultView.js +++ b/src/UI/AddArtist/SearchResultView.js @@ -61,7 +61,7 @@ var view = Marionette.ItemView.extend({ var defaultProfile = Config.getValue(Config.Keys.DefaultProfileId); var defaultRoot = Config.getValue(Config.Keys.DefaultRootFolderId); - var useSeasonFolder = Config.getValueBoolean(Config.Keys.UseSeasonFolder, true); + var useAlbumFolder = Config.getValueBoolean(Config.Keys.UseAlbumFolder, true); var defaultArtistType = Config.getValue(Config.Keys.DefaultSeriesType, 'standard'); var defaultMonitorEpisodes = Config.getValue(Config.Keys.MonitorEpisodes, 'missing'); @@ -73,7 +73,7 @@ var view = Marionette.ItemView.extend({ this.ui.rootFolder.val(defaultRoot); } - this.ui.albumFolder.prop('checked', useSeasonFolder); + this.ui.albumFolder.prop('checked', useAlbumFolder); this.ui.artistType.val(defaultArtistType); this.ui.monitor.val(defaultMonitorEpisodes); diff --git a/src/UI/AddArtist/SearchResultViewTemplate.hbs b/src/UI/AddArtist/SearchResultViewTemplate.hbs index 0a3bbe016..4eca0364f 100644 --- a/src/UI/AddArtist/SearchResultViewTemplate.hbs +++ b/src/UI/AddArtist/SearchResultViewTemplate.hbs @@ -55,7 +55,7 @@ <div class="input-group"> <label class="checkbox toggle well"> - <input type="checkbox" class="x-season-folder"/> + <input type="checkbox" class="x-album-folder"/> <p> <span>Yes</span> <span>No</span> diff --git a/src/UI/Artist/Index/ArtistIndexItemView.js b/src/UI/Artist/Index/ArtistIndexItemView.js index df8c1379b..f3cf4faee 100644 --- a/src/UI/Artist/Index/ArtistIndexItemView.js +++ b/src/UI/Artist/Index/ArtistIndexItemView.js @@ -17,7 +17,7 @@ module.exports = Marionette.ItemView.extend({ element : this.ui.refresh, command : { name : 'refreshArtist', - seriesId : this.model.get('id') + artistId : this.model.get('id') } }); }, @@ -29,7 +29,7 @@ module.exports = Marionette.ItemView.extend({ _refreshArtist : function() { CommandController.Execute('refreshArtist', { name : 'refreshArtist', - seriesId : this.model.id + artistId : this.model.id }); } }); \ No newline at end of file