Cleanup Conflicts in Sonarr/Lidarr Pulls

Co-Authored-By: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com>
pull/770/head
Qstick 3 years ago
parent ffc12656ee
commit 93ba5ade9e

@ -96,7 +96,7 @@
margin-left: 20px;
}
.artistNavigationButtons {
.authorNavigationButtons {
position: absolute;
right: 0;
white-space: nowrap;

@ -25,7 +25,7 @@ function OrganizeAuthorModalContent(props) {
<ModalBody>
<Alert>
Tip: To preview a rename, select "Cancel", then select any artist name and use the
Tip: To preview a rename, select "Cancel", then select any author name and use the
<Icon
className={styles.renameIcon}
name={icons.ORGANIZE}

@ -1,3 +1,3 @@
.albumRow {
.bookRow {
cursor: pointer;
}

@ -475,7 +475,7 @@ class InteractiveImportModalContent extends Component {
<SelectEditionModal
isOpen={selectModalOpen === EDITION}
importIdsByBook={_.chain(items).filter((x) => x.album).groupBy((x) => x.book.id).mapValues((x) => x.map((y) => y.id)).value()}
importIdsByBook={_.chain(items).filter((x) => x.book).groupBy((x) => x.book.id).mapValues((x) => x.map((y) => y.id)).value()}
books={_.chain(items).filter((x) => x.book).keyBy((x) => x.book.id).mapValues((x) => ({ matchedEditionId: x.editionId, book: x.book })).values().value()}
onModalClose={this.onSelectModalClose}
/>

@ -389,7 +389,7 @@ class MediaManagement extends Component {
type={inputTypes.UMASK}
name="chmodFolder"
helpText="Octal, applied during import/rename to media folders and files (without execute bits)"
helpTextWarning="This only works if the user running Lidarr is the owner of the file. It's better to ensure the download client sets the permissions properly."
helpTextWarning="This only works if the user running Readarr is the owner of the file. It's better to ensure the download client sets the permissions properly."
onChange={onInputChange}
{...settings.chmodFolder}
/>

@ -9,7 +9,7 @@ function findMatchingItems(ids, items) {
});
}
function createMatchingAuthorSelector() {
function createUnorderedMatchingAuthorSelector() {
return createSelector(
(state, { authorIds }) => authorIds,
createAllAuthorSelector(),
@ -17,13 +17,13 @@ function createMatchingAuthorSelector() {
);
}
function createMatchingArtistSelector() {
function createMatchingAuthorSelector() {
return createSelector(
createUnorderedMatchingArtistSelector(),
(artists) => {
return artists.sort((artistA, artistB) => {
const sortNameA = artistA.sortName;
const sortNameB = artistB.sortName;
createUnorderedMatchingAuthorSelector(),
(authors) => {
return authors.sort((authorA, authorB) => {
const sortNameA = authorA.sortName;
const sortNameB = authorB.sortName;
if (sortNameA > sortNameB) {
return 1;

@ -220,9 +220,9 @@ export const actionHandlers = handleThunks({
...bookFileIds.map((id) => {
const props = {};
const trackFile = data.find((file) => file.id === id);
const bookFile = data.find((file) => file.id === id);
props.qualityCutoffNotMet = trackFile.qualityCutoffNotMet;
props.qualityCutoffNotMet = bookFile.qualityCutoffNotMet;
if (quality) {
props.quality = quality;

@ -4,6 +4,7 @@ import { createThunk, handleThunks } from 'Store/thunks';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
import createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetSettingValueReducer from './Creators/Reducers/createSetSettingValueReducer';
//
// Variables
@ -96,6 +97,7 @@ export const defaultState = {
export const FETCH_SERIES = 'series/fetchSeries';
export const SET_SERIES_SORT = 'books/setSeriesSort';
export const CLEAR_SERIES = 'series/clearSeries';
export const SET_SERIES_VALUE = 'books/setBookValue';
//
// Action Creators
@ -118,6 +120,8 @@ export const reducers = createHandleActions({
[SET_SERIES_SORT]: createSetClientSideCollectionSortReducer(section),
[SET_SERIES_VALUE]: createSetSettingValueReducer(section),
[CLEAR_SERIES]: (state) => {
return Object.assign({}, state, {
isFetching: false,

@ -46,7 +46,7 @@ module.exports = {
// Modal
modalBodyPadding: '30px',
// Artist
// Author
authorIndexColumnPadding: '10px',
authorIndexColumnPaddingSmallScreen: '5px',
authorIndexOverviewInfoRowHeight: '21px'

@ -44,8 +44,8 @@
<!-- TV, Movies -->
<xs:enumeration value="genre" />
<!-- Music -->
<xs:enumeration value="artist" />
<xs:enumeration value="album" />
<xs:enumeration value="author" />
<xs:enumeration value="book" />
<xs:enumeration value="publisher" />
<xs:enumeration value="tracks" />
<!-- Mixed -->

@ -18,7 +18,7 @@ namespace NzbDrone.Automation.Test
}
[Test]
public void artist_page()
public void author_page()
{
_page.LibraryNavIcon.Click();
_page.WaitForNoSpinner();
@ -78,7 +78,7 @@ namespace NzbDrone.Automation.Test
}
[Test]
public void add_artist_page()
public void add_author_page()
{
_page.LibraryNavIcon.Click();
_page.WaitForNoSpinner();

@ -125,16 +125,16 @@ namespace NzbDrone.Common.Test.DiskTests
[Test]
public void should_be_able_to_delete_nested_empty_subdirs()
{
var artistDir = Path.Combine(GetTempFilePath(), "Artist");
var albumDir = Path.Combine(artistDir, "Album");
var authorDir = Path.Combine(GetTempFilePath(), "Author");
var bookDir = Path.Combine(authorDir, "Book");
Directory.CreateDirectory(Path.Combine(albumDir));
Directory.CreateDirectory(Path.Combine(albumDir, "Album"));
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD1"));
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD2"));
Directory.CreateDirectory(Path.Combine(bookDir));
Directory.CreateDirectory(Path.Combine(bookDir, "Book"));
Directory.CreateDirectory(Path.Combine(bookDir, "Book", "CD1"));
Directory.CreateDirectory(Path.Combine(bookDir, "Book", "CD2"));
Subject.RemoveEmptySubfolders(artistDir);
Directory.Exists(albumDir).Should().BeFalse();
Subject.RemoveEmptySubfolders(authorDir);
Directory.Exists(bookDir).Should().BeFalse();
}
[Test]

@ -283,13 +283,13 @@ namespace NzbDrone.Common.Test.Http
{
var file = GetTempFilePath();
var url = "https://lidarr.audio/img/slider/artistdetails.png";
var url = "https://readarr.com/img/slider/artistdetails.png";
Subject.DownloadFile(url, file);
var fileInfo = new FileInfo(file);
fileInfo.Exists.Should().BeTrue();
fileInfo.Length.Should().Be(146122);
fileInfo.Length.Should().Be(192367);
}
[Test]
@ -298,7 +298,7 @@ namespace NzbDrone.Common.Test.Http
var file = GetTempFilePath();
var request = new HttpRequestBuilder($"https://{_httpBinHost}/redirect-to")
.AddQueryParam("url", $"https://lidarr.audio/img/slider/artistdetails.png")
.AddQueryParam("url", $"https://readarr.com/img/slider/artistdetails.png")
.Build();
Subject.DownloadFile(request.Url.FullUri, file);
@ -307,7 +307,7 @@ namespace NzbDrone.Common.Test.Http
var fileInfo = new FileInfo(file);
fileInfo.Exists.Should().BeTrue();
fileInfo.Length.Should().Be(146122);
fileInfo.Length.Should().Be(192367);
}
[Test]

@ -17,9 +17,11 @@ namespace NzbDrone.Common.Test.InstrumentationTests
[TestCase(@"https://baconbits.org/feeds.php?feed=torrents_tv&user=12345&auth=2b51db35e1910123321025a12b9933d2&passkey=mySecret&authkey=2b51db35e1910123321025a12b9933d2")]
[TestCase(@"http://127.0.0.1:9117/dl/indexername?jackett_apikey=flwjiefewklfjacketmySecretsdfldskjfsdlk&path=we0re9f0sdfbase64sfdkfjsdlfjk&file=The+Torrent+File+Name.torrent")]
[TestCase(@"http://nzb.su/getnzb/2b51db35e1912ffc138825a12b9933d2.nzb&i=37292&r=2b51db35e1910123321025a12b9933d2")]
// NzbGet
[TestCase(@"{ ""Name"" : ""ControlUsername"", ""Value"" : ""mySecret"" }, { ""Name"" : ""ControlPassword"", ""Value"" : ""mySecret"" }, ")]
[TestCase(@"{ ""Name"" : ""Server1.Username"", ""Value"" : ""mySecret"" }, { ""Name"" : ""Server1.Password"", ""Value"" : ""mySecret"" }, ")]
// Sabnzbd
[TestCase(@"http://127.0.0.1:1234/api/call?vv=1&apikey=mySecret")]
[TestCase(@"http://127.0.0.1:1234/api/call?vv=1&ma_username=mySecret&ma_password=mySecret")]
@ -30,6 +32,7 @@ namespace NzbDrone.Common.Test.InstrumentationTests
[TestCase(@"""misc"":{""username"":""mySecret"",""api_key"":""mySecret"",""password"":""mySecret"",""nzb_key"":""mySecret""}")]
[TestCase(@"""servers"":[{""username"":""mySecret"",""password"":""mySecret""}]")]
[TestCase(@"""misc"":{""email_account"":""mySecret"",""email_to"":[],""email_from"":"""",""email_pwd"":""mySecret""}")]
// uTorrent
[TestCase(@"http://localhost:9091/gui/?token=wThmph5l0ZXfH-a6WOA4lqiLvyjCP0FpMrMeXmySecret_VXBO11HoKL751MAAAAA&list=1")]
[TestCase(@",[""boss_key"",0,""mySecret"",{""access"":""Y""}],[""boss_key_salt"",0,""mySecret"",{""access"":""W""}]")]
@ -37,18 +40,23 @@ namespace NzbDrone.Common.Test.InstrumentationTests
[TestCase(@",[""webui.uconnect_username"",2,""mySecret"",{""access"":""Y""}],[""webui.uconnect_password"",2,""mySecret"",{""access"":""Y""}]")]
[TestCase(@",[""proxy.proxy"",2,""mySecret"",{""access"":""Y""}]")]
[TestCase(@",[""proxy.username"",2,""mySecret"",{""access"":""Y""}],[""proxy.password"",2,""mySecret"",{""access"":""Y""}]")]
// Deluge
[TestCase(@",{""download_location"": ""C:\Users\\mySecret mySecret\\Downloads""}")]
[TestCase(@",{""download_location"": ""/home/mySecret/Downloads""}")]
[TestCase(@"auth.login(""mySecret"")")]
// Download Station
[TestCase(@"webapi/entry.cgi?api=(removed)&version=2&method=login&account=01233210&passwd=mySecret&format=sid&session=DownloadStation")]
// BroadcastheNet
[TestCase(@"method: ""getTorrents"", ""params"": [ ""mySecret"",")]
[TestCase(@"getTorrents(""mySecret"", [asdfasdf], 100, 0)")]
[TestCase(@"""DownloadURL"":""https:\/\/broadcasthe.net\/torrents.php?action=download&id=123&authkey=mySecret&torrent_pass=mySecret""")]
// Spotify Refresh
[TestCase(@"https://auth.servarr.com/renew?refresh_token=mySecret")]
// Plex
[TestCase(@" http://localhost:32400/library/metadata/12345/refresh?X-Plex-Client-Identifier=1234530f-422f-4aac-b6b3-01233210aaaa&X-Plex-Product=Sonarr&X-Plex-Platform=Windows&X-Plex-Platform-Version=7&X-Plex-Device-Name=Sonarr&X-Plex-Version=3.0.3.833&X-Plex-Token=mySecret")]
public void should_clean_message(string message)

@ -292,28 +292,28 @@ namespace NzbDrone.Common.Test
public void GetAncestorFolders_should_return_all_ancestors_in_path_Windows()
{
WindowsOnly();
var path = @"C:\Test\Music\Artist Title";
var path = @"C:\Test\Music\Author Title";
var result = path.GetAncestorFolders();
result.Count.Should().Be(4);
result[0].Should().Be(@"C:\");
result[1].Should().Be(@"Test");
result[2].Should().Be(@"Music");
result[3].Should().Be(@"Artist Title");
result[3].Should().Be(@"Author Title");
}
[Test]
public void GetAncestorFolders_should_return_all_ancestors_in_path_Linux()
{
PosixOnly();
var path = @"/Test/Music/Artist Title";
var path = @"/Test/Music/Author Title";
var result = path.GetAncestorFolders();
result.Count.Should().Be(4);
result[0].Should().Be(@"/");
result[1].Should().Be(@"Test");
result[2].Should().Be(@"Music");
result[3].Should().Be(@"Artist Title");
result[3].Should().Be(@"Author Title");
}
}
}

@ -1,4 +1,3 @@
using System;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;

@ -9,38 +9,38 @@ using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.ArtistStatsTests
namespace NzbDrone.Core.Test.AuthorStatsTests
{
[TestFixture]
public class ArtistStatisticsFixture : DbTest<AuthorStatisticsRepository, Author>
public class AuthorStatisticsFixture : DbTest<AuthorStatisticsRepository, Author>
{
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
private Edition _edition;
private BookFile _trackFile;
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.With(a => a.AuthorMetadataId = 10)
.BuildNew();
Db.Insert(_artist);
Db.Insert(_author);
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.With(e => e.ReleaseDate = DateTime.Today.AddDays(-5))
.With(e => e.AuthorMetadataId = 10)
.BuildNew();
Db.Insert(_album);
Db.Insert(_book);
_edition = Builder<Edition>.CreateNew()
.With(e => e.BookId = _album.Id)
.With(e => e.BookId = _book.Id)
.With(e => e.Monitored = true)
.BuildNew();
Db.Insert(_edition);
_trackFile = Builder<BookFile>.CreateNew()
.With(e => e.Author = _artist)
.With(e => e.Author = _author)
.With(e => e.Edition = _edition)
.With(e => e.EditionId == _edition.Id)
.With(e => e.Quality = new QualityModel(Quality.MP3_320))
@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test.ArtistStatsTests
}
[Test]
public void should_get_stats_for_artist()
public void should_get_stats_for_author()
{
var stats = Subject.AuthorStatistics();

@ -22,7 +22,7 @@ namespace NzbDrone.Core.Test.Blacklisting
AuthorId = 12345,
BookIds = new List<int> { 1 },
Quality = new QualityModel(Quality.FLAC),
SourceTitle = "artist.name.album.title",
SourceTitle = "author.name.book.title",
Date = DateTime.UtcNow
};
}
@ -35,7 +35,7 @@ namespace NzbDrone.Core.Test.Blacklisting
}
[Test]
public void should_should_have_album_ids()
public void should_should_have_book_ids()
{
Subject.Insert(_blacklist);

@ -22,7 +22,7 @@ namespace NzbDrone.Core.Test.Blacklisting
AuthorId = 12345,
BookIds = new List<int> { 1 },
Quality = new QualityModel(Quality.MP3_320),
SourceTitle = "artist.name.album.title",
SourceTitle = "author.name.book.title",
DownloadClient = "SabnzbdClient",
DownloadId = "Sabnzbd_nzo_2dfh73k"
};

@ -15,13 +15,13 @@ namespace NzbDrone.Core.Test.Datastore
[Test]
public void one_to_one()
{
var album = Builder<Book>.CreateNew()
var book = Builder<Book>.CreateNew()
.With(c => c.Id = 0)
.With(x => x.ReleaseDate = DateTime.UtcNow)
.With(x => x.LastInfoSync = DateTime.UtcNow)
.With(x => x.Added = DateTime.UtcNow)
.BuildNew();
Db.Insert(album);
Db.Insert(book);
}
[Test]

@ -34,31 +34,31 @@ namespace NzbDrone.Core.Test.Datastore
.Build();
Db.Insert(metadata);
var artist = Builder<Author>.CreateListOfSize(1)
var author = Builder<Author>.CreateListOfSize(1)
.All()
.With(v => v.Id = 0)
.With(v => v.QualityProfileId = profile.Id)
.With(v => v.AuthorMetadataId = metadata.Id)
.BuildListOfNew();
Db.InsertMany(artist);
Db.InsertMany(author);
var albums = Builder<Book>.CreateListOfSize(3)
var books = Builder<Book>.CreateListOfSize(3)
.All()
.With(v => v.Id = 0)
.With(v => v.AuthorMetadataId = metadata.Id)
.BuildListOfNew();
Db.InsertMany(albums);
Db.InsertMany(books);
var editions = new List<Edition>();
foreach (var album in albums)
foreach (var book in books)
{
editions.Add(
Builder<Edition>.CreateNew()
.With(v => v.Id = 0)
.With(v => v.BookId = album.Id)
.With(v => v.ForeignEditionId = "test" + album.Id)
.With(v => v.BookId = book.Id)
.With(v => v.ForeignEditionId = "test" + book.Id)
.Build());
}
@ -75,7 +75,7 @@ namespace NzbDrone.Core.Test.Datastore
}
[Test]
public void should_lazy_load_artist_for_trackfile()
public void should_lazy_load_author_for_trackfile()
{
var db = Mocker.Resolve<IDatabase>();
var tracks = db.Query<BookFile>(new SqlBuilder()).ToList();
@ -112,7 +112,7 @@ namespace NzbDrone.Core.Test.Datastore
new SqlBuilder()
.Join<BookFile, Edition>((t, a) => t.EditionId == a.Id)
.Join<Edition, Book>((e, b) => e.BookId == b.Id)
.Join<Book, Author>((album, artist) => album.AuthorMetadataId == artist.AuthorMetadataId)
.Join<Book, Author>((book, author) => book.AuthorMetadataId == author.AuthorMetadataId)
.Join<Author, AuthorMetadata>((a, m) => a.AuthorMetadataId == m.Id));
Assert.IsNotEmpty(files);

@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.Datastore
public class TypeWithNoMappableProperties
{
public Author Artist { get; set; }
public Author Author { get; set; }
public int ReadOnly { get; private set; }
public int WriteOnly { private get; set; }

@ -54,12 +54,12 @@ namespace NzbDrone.Core.Test.Datastore
[Test]
public void where_equal_property()
{
var artist = new Author { Id = 10 };
_subject = Where(x => x.Id == artist.Id);
var author = new Author { Id = 10 };
_subject = Where(x => x.Id == author.Id);
_subject.Parameters.ParameterNames.Should().HaveCount(1);
_subject.ToString().Should().Be($"(\"Authors\".\"Id\" = @Clause1_P1)");
_subject.Parameters.Get<int>("Clause1_P1").Should().Be(artist.Id);
_subject.Parameters.Get<int>("Clause1_P1").Should().Be(author.Id);
}
[Test]
@ -108,8 +108,8 @@ namespace NzbDrone.Core.Test.Datastore
[Test]
public void where_equal_null_property()
{
var artist = new Author { CleanName = null };
_subject = Where(x => x.CleanName == artist.CleanName);
var author = new Author { CleanName = null };
_subject = Where(x => x.CleanName == author.CleanName);
_subject.ToString().Should().Be($"(\"Authors\".\"CleanName\" IS NULL)");
}

@ -20,9 +20,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public class AlreadyImportedSpecificationFixture : CoreTest<AlreadyImportedSpecification>
{
private const int FIRST_ALBUM_ID = 1;
private const string TITLE = "Some.Artist-Some.Album-2018-320kbps-CD-Readarr";
private const string TITLE = "Some.Author-Some.Book-2018-320kbps-CD-Readarr";
private Author _artist;
private Author _author;
private QualityModel _mp3;
private QualityModel _flac;
private RemoteBook _remoteBook;
@ -32,16 +32,16 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[SetUp]
public void Setup()
{
var singleAlbumList = new List<Book>
var singleBookList = new List<Book>
{
new Book
{
Id = FIRST_ALBUM_ID,
Title = "Some Album"
Title = "Some Book"
}
};
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.Build();
_firstFile = new BookFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
@ -51,9 +51,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_remoteBook = new RemoteBook
{
Author = _artist,
Author = _author,
ParsedBookInfo = new ParsedBookInfo { Quality = _mp3 },
Books = singleAlbumList,
Books = singleBookList,
Release = Builder<ReleaseInfo>.CreateNew()
.Build()
};
@ -101,7 +101,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_be_accepted_if_album_does_not_have_a_file()
public void should_be_accepted_if_book_does_not_have_a_file()
{
Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetFilesByBook(It.IsAny<int>()))
@ -111,13 +111,13 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_be_accepted_if_album_does_not_have_grabbed_event()
public void should_be_accepted_if_book_does_not_have_grabbed_event()
{
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeTrue();
}
[Test]
public void should_be_accepted_if_album_does_not_have_imported_event()
public void should_be_accepted_if_book_does_not_have_imported_event()
{
GivenHistoryItem(Guid.NewGuid().ToString().ToUpper(), TITLE, _mp3, HistoryEventType.Grabbed);

@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
private static readonly int NoPreferredWordScore = 0;
[Test]
public void should_return_true_if_current_album_is_less_than_cutoff()
public void should_return_true_if_current_book_is_less_than_cutoff()
{
Subject.CutoffNotMet(
new QualityProfile
@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_false_if_current_album_is_equal_to_cutoff()
public void should_return_false_if_current_book_is_equal_to_cutoff()
{
Subject.CutoffNotMet(
new QualityProfile
@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_false_if_current_album_is_greater_than_cutoff()
public void should_return_false_if_current_book_is_greater_than_cutoff()
{
Subject.CutoffNotMet(
new QualityProfile
@ -53,7 +53,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_when_new_album_is_proper_but_existing_is_not()
public void should_return_true_when_new_book_is_proper_but_existing_is_not()
{
Subject.CutoffNotMet(
new QualityProfile

@ -20,7 +20,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[SetUp]
public void Setup()
{
var artist = Builder<Author>.CreateNew().With(s => s.Id = 1234).Build();
var author = Builder<Author>.CreateNew().With(s => s.Id = 1234).Build();
_remoteBook = new RemoteBook
{
ParsedBookInfo = new ParsedBookInfo
@ -30,12 +30,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Books = Builder<Book>.CreateListOfSize(3)
.All()
.With(e => e.ReleaseDate = DateTime.UtcNow.AddDays(-8))
.With(s => s.AuthorId = artist.Id)
.With(s => s.AuthorId = author.Id)
.BuildList(),
Author = artist,
Author = author,
Release = new ReleaseInfo
{
Title = "Artist.Discography.1978.2005.FLAC-RlsGrp"
Title = "Author.Discography.1978.2005.FLAC-RlsGrp"
}
};
@ -52,20 +52,20 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_if_all_albums_have_released()
public void should_return_true_if_all_books_have_released()
{
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeTrue();
}
[Test]
public void should_return_false_if_one_album_has_not_released()
public void should_return_false_if_one_book_has_not_released()
{
_remoteBook.Books.Last().ReleaseDate = DateTime.UtcNow.AddDays(+2);
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();
}
[Test]
public void should_return_false_if_an_album_does_not_have_an_release_date()
public void should_return_false_if_an_book_does_not_have_an_release_date()
{
_remoteBook.Books.Last().ReleaseDate = null;
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();

@ -147,7 +147,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_not_attempt_to_map_album_if_not_parsable()
public void should_not_attempt_to_map_book_if_not_parsable()
{
GivenSpecifications(_pass1, _pass2, _pass3);
_reports[0].Title = "Not parsable";
@ -159,11 +159,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_pass1.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
_pass2.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
_pass3.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
}
[Test]
public void should_not_attempt_to_map_album_if_artist_title_is_blank()
public void should_not_attempt_to_map_book_if_author_title_is_blank()
{
GivenSpecifications(_pass1, _pass2, _pass3);
_reports[0].Title = "2013 - Night Visions";
@ -185,20 +184,20 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
GivenSpecifications(_pass1, _pass2, _pass3);
_reports[0].Title = "1937 - Snow White and the Seven Dwarves";
var artist = new Artist { Name = "Some Artist" };
var albums = new List<Album> { new Album { Title = "Some Album" } };
var author = new Author { Name = "Some Author" };
var books = new List<Book> { new Book { Title = "Some Book" } };
Subject.GetSearchDecision(_reports, new AlbumSearchCriteria { Artist = artist, Albums = albums }).ToList();
Subject.GetSearchDecision(_reports, new BookSearchCriteria { Author = author, Books = books }).ToList();
Mocker.GetMock<IParsingService>().Verify(c => c.Map(It.IsAny<ParsedAlbumInfo>(), It.IsAny<SearchCriteriaBase>()), Times.Never());
Mocker.GetMock<IParsingService>().Verify(c => c.Map(It.IsAny<ParsedBookInfo>(), It.IsAny<SearchCriteriaBase>()), Times.Never());
_pass1.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteAlbum>(), null), Times.Never());
_pass2.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteAlbum>(), null), Times.Never());
_pass3.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteAlbum>(), null), Times.Never());
_pass1.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
_pass2.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
_pass3.Verify(c => c.IsSatisfiedBy(It.IsAny<RemoteBook>(), null), Times.Never());
}
[Test]
public void should_not_attempt_to_make_decision_if_artist_is_unknown()
public void should_not_attempt_to_make_decision_if_author_is_unknown()
{
GivenSpecifications(_pass1, _pass2, _pass3);
@ -234,7 +233,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_unknown_artist_rejection_if_artist_is_unknown()
public void should_return_unknown_author_rejection_if_author_is_unknown()
{
GivenSpecifications(_pass1, _pass2, _pass3);
@ -246,22 +245,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_only_include_reports_for_requested_albums()
public void should_only_include_reports_for_requested_books()
{
var artist = Builder<Author>.CreateNew().Build();
var author = Builder<Author>.CreateNew().Build();
var albums = Builder<Book>.CreateListOfSize(2)
var books = Builder<Book>.CreateListOfSize(2)
.All()
.With(v => v.AuthorId, artist.Id)
.With(v => v.Author, new LazyLoaded<Author>(artist))
.With(v => v.AuthorId, author.Id)
.With(v => v.Author, new LazyLoaded<Author>(author))
.BuildList();
var criteria = new AuthorSearchCriteria { Books = albums.Take(1).ToList() };
var criteria = new AuthorSearchCriteria { Books = books.Take(1).ToList() };
var reports = albums.Select(v =>
var reports = books.Select(v =>
new ReleaseInfo()
{
Title = string.Format("{0}-{1}[FLAC][2017][DRONE]", artist.Name, v.Title)
Title = string.Format("{0}-{1}[FLAC][2017][DRONE]", author.Name, v.Title)
}).ToList();
Mocker.GetMock<IParsingService>()
@ -271,8 +270,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
DownloadAllowed = true,
ParsedBookInfo = p,
Author = artist,
Books = albums.Where(v => v.Title == p.BookTitle).ToList()
Author = author,
Books = books.Where(v => v.Title == p.BookTitle).ToList()
});
Mocker.SetConstant<IEnumerable<IDecisionEngineSpecification>>(new List<IDecisionEngineSpecification>
@ -288,7 +287,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_not_allow_download_if_artist_is_unknown()
public void should_not_allow_download_if_author_is_unknown()
{
GivenSpecifications(_pass1, _pass2, _pass3);
@ -302,7 +301,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_not_allow_download_if_no_albums_found()
public void should_not_allow_download_if_no_books_found()
{
GivenSpecifications(_pass1, _pass2, _pass3);

@ -17,27 +17,27 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[TestFixture]
public class EarlyReleaseSpecificationFixture : TestBase<EarlyReleaseSpecification>
{
private Author _artist;
private Book _album1;
private Book _album2;
private Author _author;
private Book _book1;
private Book _book2;
private RemoteBook _remoteBook;
private IndexerDefinition _indexerDefinition;
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_album1 = Builder<Book>.CreateNew().With(s => s.ReleaseDate = DateTime.Today).Build();
_album2 = Builder<Book>.CreateNew().With(s => s.ReleaseDate = DateTime.Today).Build();
_author = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_book1 = Builder<Book>.CreateNew().With(s => s.ReleaseDate = DateTime.Today).Build();
_book2 = Builder<Book>.CreateNew().With(s => s.ReleaseDate = DateTime.Today).Build();
_remoteBook = new RemoteBook
{
Author = _artist,
Books = new List<Book> { _album1 },
Author = _author,
Books = new List<Book> { _book1 },
Release = new TorrentInfo
{
IndexerId = 1,
Title = "Artist - Album [FLAC-RlsGrp]",
Title = "Author - Book [FLAC-RlsGrp]",
PublishDate = DateTime.Today
}
};
@ -66,9 +66,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_if_release_contains_multiple_albums()
public void should_return_true_if_release_contains_multiple_books()
{
_remoteBook.Books.Add(_album2);
_remoteBook.Books.Add(_book2);
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeTrue();
}

@ -29,7 +29,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
private RemoteBook _parseResultSingle;
private QualityModel _upgradableQuality;
private QualityModel _notupgradableQuality;
private Author _fakeArtist;
private Author _fakeAuthor;
[SetUp]
public void Setup()
@ -37,15 +37,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Mocker.Resolve<UpgradableSpecification>();
_upgradeHistory = Mocker.Resolve<HistorySpecification>();
var singleAlbumList = new List<Book> { new Book { Id = FIRST_ALBUM_ID } };
var doubleAlbumList = new List<Book>
var singleBookList = new List<Book> { new Book { Id = FIRST_ALBUM_ID } };
var doubleBookList = new List<Book>
{
new Book { Id = FIRST_ALBUM_ID },
new Book { Id = SECOND_ALBUM_ID },
new Book { Id = 3 }
};
_fakeArtist = Builder<Author>.CreateNew()
_fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.QualityProfile = new QualityProfile
{
UpgradeAllowed = true,
@ -56,16 +56,16 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_parseResultMulti = new RemoteBook
{
Author = _fakeArtist,
Author = _fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = doubleAlbumList
Books = doubleBookList
};
_parseResultSingle = new RemoteBook
{
Author = _fakeArtist,
Author = _fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = singleAlbumList
Books = singleBookList
};
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
@ -76,7 +76,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Returns(true);
}
private void GivenMostRecentForAlbum(int bookId, string downloadId, QualityModel quality, DateTime date, HistoryEventType eventType)
private void GivenMostRecentForBook(int bookId, string downloadId, QualityModel quality, DateTime date, HistoryEventType eventType)
{
Mocker.GetMock<IHistoryService>().Setup(s => s.MostRecentForBook(bookId))
.Returns(new History.History { DownloadId = downloadId, Quality = quality, Date = date, EventType = eventType });
@ -105,7 +105,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_true_if_latest_history_item_is_not_grabbed()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.DownloadFailed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.DownloadFailed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
}
@ -118,57 +118,57 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_true_if_latest_history_item_is_older_than_twelve_hours()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow.AddHours(-12).AddMilliseconds(-1), HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow.AddHours(-12).AddMilliseconds(-1), HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
}
[Test]
public void should_be_upgradable_if_only_album_is_upgradable()
public void should_be_upgradable_if_only_book_is_upgradable()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeTrue();
}
[Test]
public void should_be_upgradable_if_both_albums_are_upgradable()
public void should_be_upgradable_if_both_books_are_upgradable()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForAlbum(SECOND_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(SECOND_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
}
[Test]
public void should_not_be_upgradable_if_both_albums_are_not_upgradable()
public void should_not_be_upgradable_if_both_books_are_not_upgradable()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForAlbum(SECOND_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(SECOND_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void should_be_not_upgradable_if_only_first_albums_is_upgradable()
public void should_be_not_upgradable_if_only_first_books_is_upgradable()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void should_be_not_upgradable_if_only_second_albums_is_upgradable()
public void should_be_not_upgradable_if_only_second_books_is_upgradable()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForAlbum(SECOND_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(SECOND_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void should_not_be_upgradable_if_album_is_of_same_quality_as_existing()
public void should_not_be_upgradable_if_book_is_of_same_quality_as_existing()
{
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_fakeAuthor.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_parseResultSingle.ParsedBookInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
}
@ -176,11 +176,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_not_be_upgradable_if_cutoff_already_met()
{
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_fakeAuthor.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_parseResultSingle.ParsedBookInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _upgradableQuality, DateTime.UtcNow, HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
}
@ -188,7 +188,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_false_if_latest_history_item_is_only_one_hour_old()
{
GivenMostRecentForAlbum(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow.AddHours(-1), HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, string.Empty, _notupgradableQuality, DateTime.UtcNow.AddHours(-1), HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
@ -196,7 +196,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public void should_return_false_if_latest_history_has_a_download_id_and_cdh_is_disabled()
{
GivenCdhDisabled();
GivenMostRecentForAlbum(FIRST_ALBUM_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
}
@ -204,20 +204,20 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public void should_return_false_if_cutoff_already_met_and_cdh_is_disabled()
{
GivenCdhDisabled();
_fakeArtist.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_fakeAuthor.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() };
_parseResultSingle.ParsedBookInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
_upgradableQuality = new QualityModel(Quality.MP3_320, new Revision(version: 1));
GivenMostRecentForAlbum(FIRST_ALBUM_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, "test", _upgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
}
[Test]
public void should_return_false_if_only_album_is_not_upgradable_and_cdh_is_disabled()
public void should_return_false_if_only_book_is_not_upgradable_and_cdh_is_disabled()
{
GivenCdhDisabled();
GivenMostRecentForAlbum(FIRST_ALBUM_ID, "test", _notupgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
GivenMostRecentForBook(FIRST_ALBUM_ID, "test", _notupgradableQuality, DateTime.UtcNow.AddDays(-100), HistoryEventType.Grabbed);
_upgradeHistory.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
}
}

@ -12,128 +12,128 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
[TestFixture]
public class MonitoredAlbumSpecificationFixture : CoreTest<MonitoredBookSpecification>
public class MonitoredBookSpecificationFixture : CoreTest<MonitoredBookSpecification>
{
private MonitoredBookSpecification _monitoredAlbumSpecification;
private MonitoredBookSpecification _monitoredBookSpecification;
private RemoteBook _parseResultMulti;
private RemoteBook _parseResultSingle;
private Author _fakeArtist;
private Book _firstAlbum;
private Book _secondAlbum;
private Author _fakeAuthor;
private Book _firstBook;
private Book _secondBook;
[SetUp]
public void Setup()
{
_monitoredAlbumSpecification = Mocker.Resolve<MonitoredBookSpecification>();
_monitoredBookSpecification = Mocker.Resolve<MonitoredBookSpecification>();
_fakeArtist = Builder<Author>.CreateNew()
_fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.Monitored = true)
.Build();
_firstAlbum = new Book { Monitored = true };
_secondAlbum = new Book { Monitored = true };
_firstBook = new Book { Monitored = true };
_secondBook = new Book { Monitored = true };
var singleAlbumList = new List<Book> { _firstAlbum };
var doubleAlbumList = new List<Book> { _firstAlbum, _secondAlbum };
var singleBookList = new List<Book> { _firstBook };
var doubleBookList = new List<Book> { _firstBook, _secondBook };
_parseResultMulti = new RemoteBook
{
Author = _fakeArtist,
Books = doubleAlbumList
Author = _fakeAuthor,
Books = doubleBookList
};
_parseResultSingle = new RemoteBook
{
Author = _fakeArtist,
Books = singleAlbumList
Author = _fakeAuthor,
Books = singleBookList
};
}
private void WithFirstAlbumUnmonitored()
private void WithFirstBookUnmonitored()
{
_firstAlbum.Monitored = false;
_firstBook.Monitored = false;
}
private void WithSecondAlbumUnmonitored()
private void WithSecondBookUnmonitored()
{
_secondAlbum.Monitored = false;
_secondBook.Monitored = false;
}
[Test]
public void setup_should_return_monitored_album_should_return_true()
public void setup_should_return_monitored_book_should_return_true()
{
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeTrue();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeTrue();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
}
[Test]
public void not_monitored_artist_should_be_skipped()
public void not_monitored_author_should_be_skipped()
{
_fakeArtist.Monitored = false;
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
_fakeAuthor.Monitored = false;
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void only_album_not_monitored_should_return_false()
public void only_book_not_monitored_should_return_false()
{
WithFirstAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
WithFirstBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
}
[Test]
public void both_albums_not_monitored_should_return_false()
public void both_books_not_monitored_should_return_false()
{
WithFirstAlbumUnmonitored();
WithSecondAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
WithFirstBookUnmonitored();
WithSecondBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void only_first_album_not_monitored_should_return_false()
public void only_first_book_not_monitored_should_return_false()
{
WithFirstAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
WithFirstBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void only_second_album_not_monitored_should_return_false()
public void only_second_book_not_monitored_should_return_false()
{
WithSecondAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
WithSecondBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
[Test]
public void should_return_true_for_single_album_search()
public void should_return_true_for_single_book_search()
{
_fakeArtist.Monitored = false;
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria()).Accepted.Should().BeTrue();
_fakeAuthor.Monitored = false;
_monitoredBookSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria()).Accepted.Should().BeTrue();
}
[Test]
public void should_return_true_if_album_is_not_monitored_and_monitoredEpisodesOnly_flag_is_false()
public void should_return_true_if_book_is_not_monitored_and_monitoredEpisodesOnly_flag_is_false()
{
WithFirstAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria { MonitoredBooksOnly = false }).Accepted.Should().BeTrue();
WithFirstBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria { MonitoredBooksOnly = false }).Accepted.Should().BeTrue();
}
[Test]
public void should_return_false_if_album_is_not_monitored_and_monitoredEpisodesOnly_flag_is_true()
public void should_return_false_if_book_is_not_monitored_and_monitoredEpisodesOnly_flag_is_true()
{
WithFirstAlbumUnmonitored();
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria { MonitoredBooksOnly = true }).Accepted.Should().BeFalse();
WithFirstBookUnmonitored();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultSingle, new BookSearchCriteria { MonitoredBooksOnly = true }).Accepted.Should().BeFalse();
}
[Test]
public void should_return_false_if_all_albums_are_not_monitored_for_discography_pack_release()
public void should_return_false_if_all_books_are_not_monitored_for_discography_pack_release()
{
WithSecondAlbumUnmonitored();
WithSecondBookUnmonitored();
_parseResultMulti.ParsedBookInfo = new ParsedBookInfo()
{
Discography = true
};
_monitoredAlbumSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
_monitoredBookSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
}
}
}

@ -27,21 +27,21 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
GivenPreferredDownloadProtocol(DownloadProtocol.Usenet);
}
private Book GivenAlbum(int id)
private Book GivenBook(int id)
{
return Builder<Book>.CreateNew()
.With(e => e.Id = id)
.Build();
}
private RemoteBook GivenRemoteAlbum(List<Book> albums, QualityModel quality, int age = 0, long size = 0, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet, int indexerPriority = 25)
private RemoteBook GivenRemoteBook(List<Book> books, QualityModel quality, int age = 0, long size = 0, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet, int indexerPriority = 25)
{
var remoteBook = new RemoteBook();
remoteBook.ParsedBookInfo = new ParsedBookInfo();
remoteBook.ParsedBookInfo.Quality = quality;
remoteBook.Books = new List<Book>();
remoteBook.Books.AddRange(albums);
remoteBook.Books.AddRange(books);
remoteBook.Release = new ReleaseInfo();
remoteBook.Release.PublishDate = DateTime.Now.AddDays(-age);
@ -73,22 +73,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_reals_before_non_reals()
{
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 1, real: 0)));
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.MP3_256, new Revision(version: 1, real: 1)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1, real: 0)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1, real: 1)));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteAlbum1));
decisions.Add(new DownloadDecision(remoteAlbum2));
decisions.Add(new DownloadDecision(remoteBook1));
decisions.Add(new DownloadDecision(remoteBook2));
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
qualifiedReports.First().RemoteAlbum.ParsedAlbumInfo.Quality.Revision.Real.Should().Be(1);
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Real.Should().Be(1);
}
[Test]
public void should_put_propers_before_non_propers()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1)));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 2)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 2)));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -101,8 +101,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_higher_quality_before_lower()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -115,10 +115,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_age_then_largest_rounded_to_200mb()
{
var remoteBookSd = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 100.Megabytes(), age: 1);
var remoteBookHdSmallOld = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1200.Megabytes(), age: 1000);
var remoteBookSmallYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1250.Megabytes(), age: 10);
var remoteBookHdLargeYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 3000.Megabytes(), age: 1);
var remoteBookSd = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 100.Megabytes(), age: 1);
var remoteBookHdSmallOld = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 1200.Megabytes(), age: 1000);
var remoteBookSmallYoung = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 1250.Megabytes(), age: 10);
var remoteBookHdLargeYoung = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 3000.Megabytes(), age: 1);
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBookSd));
@ -133,8 +133,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_youngest()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 10);
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 5);
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), age: 10);
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), age: 5);
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -145,10 +145,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_not_throw_if_no_albums_are_found()
public void should_not_throw_if_no_books_are_found()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
remoteBook1.Books = new List<Book>();
@ -164,8 +164,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
GivenPreferredDownloadProtocol(DownloadProtocol.Usenet);
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -180,8 +180,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
GivenPreferredDownloadProtocol(DownloadProtocol.Torrent);
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -192,10 +192,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_prefer_discography_pack_above_single_album()
public void should_prefer_discography_pack_above_single_book()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.FLAC));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1), GivenBook(2) }, new QualityModel(Quality.FLAC));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC));
remoteBook1.ParsedBookInfo.Discography = true;
@ -210,8 +210,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_quality_over_discography_pack()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1), GivenBook(2) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC));
remoteBook1.ParsedBookInfo.Discography = true;
@ -224,10 +224,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_prefer_single_album_over_multi_album()
public void should_prefer_single_book_over_multi_book()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1), GivenBook(2) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -240,8 +240,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_seeders()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var torrentInfo1 = new TorrentInfo();
torrentInfo1.PublishDate = DateTime.Now;
@ -266,8 +266,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_peers_given_equal_number_of_seeds()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var torrentInfo1 = new TorrentInfo();
torrentInfo1.PublishDate = DateTime.Now;
@ -293,8 +293,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_peers_no_seeds()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var torrentInfo1 = new TorrentInfo();
torrentInfo1.PublishDate = DateTime.Now;
@ -321,8 +321,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_first_release_if_peers_and_size_are_too_similar()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var torrentInfo1 = new TorrentInfo();
torrentInfo1.PublishDate = DateTime.Now;
@ -350,8 +350,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_first_release_if_age_and_size_are_too_similar()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
remoteBook1.Release.PublishDate = DateTime.UtcNow.AddDays(-100);
remoteBook1.Release.Size = 200.Megabytes();
@ -370,8 +370,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_quality_over_the_number_of_peers()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3));
var torrentInfo1 = new TorrentInfo();
torrentInfo1.PublishDate = DateTime.Now;
@ -399,8 +399,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_higher_quality_before_lower_always()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook1));
@ -413,8 +413,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_higher_score_over_lower_score()
{
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC));
remoteBook1.PreferredWordScore = 10;
remoteBook2.PreferredWordScore = 0;
@ -434,8 +434,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.PreferAndUpgrade);
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
remoteBook1.PreferredWordScore = 10;
remoteBook2.PreferredWordScore = 0;
@ -455,8 +455,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotUpgrade);
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
remoteBook1.PreferredWordScore = 10;
remoteBook2.PreferredWordScore = 0;
@ -476,8 +476,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotPrefer);
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
remoteBook1.PreferredWordScore = 10;
remoteBook2.PreferredWordScore = 0;
@ -495,35 +495,35 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void sort_download_decisions_based_on_indexer_priority()
{
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 25);
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 50);
var remoteAlbum3 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 1);
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 25);
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 50);
var remoteBook3 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 1);
var decisions = new List<DownloadDecision>();
decisions.AddRange(new[] { new DownloadDecision(remoteAlbum1), new DownloadDecision(remoteAlbum2), new DownloadDecision(remoteAlbum3) });
decisions.AddRange(new[] { new DownloadDecision(remoteBook1), new DownloadDecision(remoteBook2), new DownloadDecision(remoteBook3) });
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
qualifiedReports.First().RemoteBook.Should().Be(remoteAlbum3);
qualifiedReports.Skip(1).First().RemoteBook.Should().Be(remoteAlbum1);
qualifiedReports.Last().RemoteBook.Should().Be(remoteAlbum2);
qualifiedReports.First().RemoteBook.Should().Be(remoteBook3);
qualifiedReports.Skip(1).First().RemoteBook.Should().Be(remoteBook1);
qualifiedReports.Last().RemoteBook.Should().Be(remoteBook2);
}
[Test]
public void ensure_download_decisions_indexer_priority_is_not_perfered_over_quality()
{
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.EPUB, new Revision(1)), indexerPriority: 25);
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 50);
var remoteAlbum3 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.PDF, new Revision(1)), indexerPriority: 1);
var remoteAlbum4 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 25);
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.EPUB, new Revision(1)), indexerPriority: 25);
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 50);
var remoteBook3 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.PDF, new Revision(1)), indexerPriority: 1);
var remoteBook4 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.AZW3, new Revision(1)), indexerPriority: 25);
var decisions = new List<DownloadDecision>();
decisions.AddRange(new[] { new DownloadDecision(remoteAlbum1), new DownloadDecision(remoteAlbum2), new DownloadDecision(remoteAlbum3), new DownloadDecision(remoteAlbum4) });
decisions.AddRange(new[] { new DownloadDecision(remoteBook1), new DownloadDecision(remoteBook2), new DownloadDecision(remoteBook3), new DownloadDecision(remoteBook4) });
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
qualifiedReports.First().RemoteBook.Should().Be(remoteAlbum4);
qualifiedReports.Skip(1).First().RemoteBook.Should().Be(remoteAlbum2);
qualifiedReports.Skip(2).First().RemoteBook.Should().Be(remoteAlbum1);
qualifiedReports.Last().RemoteBook.Should().Be(remoteAlbum3);
qualifiedReports.First().RemoteBook.Should().Be(remoteBook4);
qualifiedReports.Skip(1).First().RemoteBook.Should().Be(remoteBook2);
qualifiedReports.Skip(2).First().RemoteBook.Should().Be(remoteBook1);
qualifiedReports.Last().RemoteBook.Should().Be(remoteBook3);
}
[Test]
@ -533,21 +533,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotPrefer);
var remoteAlbum1 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1, 0)));
var remoteAlbum2 = GivenRemoteAlbum(new List<Album> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1, 1)));
var remoteBook1 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(1, 0)));
var remoteBook2 = GivenRemoteBook(new List<Book> { GivenBook(1) }, new QualityModel(Quality.FLAC, new Revision(1, 1)));
remoteAlbum1.PreferredWordScore = 10;
remoteAlbum2.PreferredWordScore = 0;
remoteBook1.PreferredWordScore = 10;
remoteBook2.PreferredWordScore = 0;
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteAlbum1));
decisions.Add(new DownloadDecision(remoteAlbum2));
decisions.Add(new DownloadDecision(remoteBook1));
decisions.Add(new DownloadDecision(remoteBook2));
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
qualifiedReports.First().RemoteAlbum.ParsedAlbumInfo.Quality.Quality.Should().Be(Quality.FLAC);
qualifiedReports.First().RemoteAlbum.ParsedAlbumInfo.Quality.Revision.Version.Should().Be(1);
qualifiedReports.First().RemoteAlbum.ParsedAlbumInfo.Quality.Revision.Real.Should().Be(0);
qualifiedReports.First().RemoteAlbum.PreferredWordScore.Should().Be(10);
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Quality.Should().Be(Quality.FLAC);
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Version.Should().Be(1);
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Real.Should().Be(0);
qualifiedReports.First().RemoteBook.PreferredWordScore.Should().Be(10);
}
}
}

@ -32,13 +32,13 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[SetUp]
public void Setup()
{
var fakeArtist = Builder<Author>.CreateNew()
var fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.QualityProfile = new QualityProfile { Cutoff = Quality.MP3_320.Id })
.Build();
_remoteBook = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
};
}

@ -17,12 +17,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[TestFixture]
public class QueueSpecificationFixture : CoreTest<QueueSpecification>
{
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
private RemoteBook _remoteBook;
private Author _otherArtist;
private Book _otherAlbum;
private Author _otherAuthor;
private Book _otherBook;
private ReleaseInfo _releaseInfo;
@ -31,7 +31,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
Mocker.Resolve<UpgradableSpecification>();
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.With(e => e.QualityProfile = new QualityProfile
{
UpgradeAllowed = true,
@ -39,16 +39,16 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
})
.Build();
_album = Builder<Book>.CreateNew()
.With(e => e.AuthorId = _artist.Id)
_book = Builder<Book>.CreateNew()
.With(e => e.AuthorId = _author.Id)
.Build();
_otherArtist = Builder<Author>.CreateNew()
_otherAuthor = Builder<Author>.CreateNew()
.With(s => s.Id = 2)
.Build();
_otherAlbum = Builder<Book>.CreateNew()
.With(e => e.AuthorId = _otherArtist.Id)
_otherBook = Builder<Book>.CreateNew()
.With(e => e.AuthorId = _otherAuthor.Id)
.With(e => e.Id = 2)
.Build();
@ -56,8 +56,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.Build();
_remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320) })
.With(r => r.PreferredWordScore = 0)
.Build();
@ -91,11 +91,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_when_artist_doesnt_match()
public void should_return_true_when_author_doesnt_match()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _otherArtist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _otherAuthor)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.Release = _releaseInfo)
.Build();
@ -106,11 +106,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_false_if_everything_is_the_same()
{
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
_author.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -126,11 +126,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_true_when_quality_in_queue_is_lower()
{
_artist.QualityProfile.Value.Cutoff = Quality.MP3_320.Id;
_author.QualityProfile.Value.Cutoff = Quality.MP3_320.Id;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.AZW3)
@ -143,11 +143,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_when_album_doesnt_match()
public void should_return_true_when_book_doesnt_match()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _otherAlbum })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _otherBook })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -165,8 +165,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_remoteBook.PreferredWordScore = 1;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -182,8 +182,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public void should_return_false_when_qualities_are_the_same()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -198,11 +198,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_false_when_quality_in_queue_is_better()
{
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
_author.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -215,11 +215,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_false_if_matching_multi_album_is_in_queue()
public void should_return_false_if_matching_multi_book_is_in_queue()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album, _otherAlbum })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book, _otherBook })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -232,11 +232,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_false_if_multi_album_has_one_album_in_queue()
public void should_return_false_if_multi_book_has_one_book_in_queue()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -244,18 +244,18 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.With(r => r.Release = _releaseInfo)
.Build();
_remoteBook.Books.Add(_otherAlbum);
_remoteBook.Books.Add(_otherBook);
GivenQueue(new List<RemoteBook> { remoteBook });
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();
}
[Test]
public void should_return_false_if_multi_part_album_is_already_in_queue()
public void should_return_false_if_multi_part_book_is_already_in_queue()
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album, _otherAlbum })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book, _otherBook })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
@ -263,30 +263,30 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.With(r => r.Release = _releaseInfo)
.Build();
_remoteBook.Books.Add(_otherAlbum);
_remoteBook.Books.Add(_otherBook);
GivenQueue(new List<RemoteBook> { remoteBook });
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();
}
[Test]
public void should_return_false_if_multi_part_album_has_two_albums_in_queue()
public void should_return_false_if_multi_part_book_has_two_books_in_queue()
{
var remoteBooks = Builder<RemoteBook>.CreateListOfSize(2)
.All()
.With(r => r.Author = _artist)
.With(r => r.Author = _author)
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)
})
.With(r => r.Release = _releaseInfo)
.TheFirst(1)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Books = new List<Book> { _book })
.TheNext(1)
.With(r => r.Books = new List<Book> { _otherAlbum })
.With(r => r.Books = new List<Book> { _otherBook })
.Build();
_remoteBook.Books.Add(_otherAlbum);
_remoteBook.Books.Add(_otherBook);
GivenQueue(remoteBooks);
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeFalse();
}
@ -294,12 +294,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_false_when_quality_is_better_and_upgrade_allowed_is_false_for_quality_profile()
{
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
_artist.QualityProfile.Value.UpgradeAllowed = false;
_author.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
_author.QualityProfile.Value.UpgradeAllowed = false;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.FLAC)
@ -314,11 +314,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_return_true_if_everything_is_the_same_for_failed_pending()
{
_artist.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
_author.QualityProfile.Value.Cutoff = Quality.FLAC.Id;
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = _artist)
.With(r => r.Books = new List<Book> { _album })
.With(r => r.Author = _author)
.With(r => r.Books = new List<Book> { _book })
.With(r => r.ParsedBookInfo = new ParsedBookInfo
{
Quality = new QualityModel(Quality.MP3_320)

@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
public class RepackSpecificationFixture : CoreTest<RepackSpecification>
{
private ParsedBookInfo _parsedBookInfo;
private List<Book> _albums;
private List<Book> _books;
private List<BookFile> _trackFiles;
[SetUp]
@ -31,13 +31,13 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
.With(p => p.ReleaseGroup = "Readarr")
.Build();
_albums = Builder<Book>.CreateListOfSize(1)
_books = Builder<Book>.CreateListOfSize(1)
.All()
.BuildList();
_trackFiles = Builder<BookFile>.CreateListOfSize(3)
.All()
.With(t => t.EditionId = _albums.First().Id)
.With(t => t.EditionId = _books.First().Id)
.BuildList();
Mocker.GetMock<IMediaFileService>()
@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -70,7 +70,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -97,7 +97,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -124,7 +124,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -153,7 +153,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -180,7 +180,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -207,7 +207,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)
@ -236,7 +236,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(e => e.ParsedBookInfo = _parsedBookInfo)
.With(e => e.Books = _albums)
.With(e => e.Books = _books)
.Build();
Subject.IsSatisfiedBy(remoteBook, null)

@ -37,12 +37,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
.With(d => d.PreferredProtocol = DownloadProtocol.Usenet)
.Build();
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.With(s => s.QualityProfile = _profile)
.Build();
_remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Author = artist)
.With(r => r.Author = author)
.Build();
_profile.Items = new List<QualityProfileQualityItem>();
@ -87,7 +87,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
private void GivenUpgradeForExistingFile()
{
Mocker.GetMock<IUpgradableSpecification>()
.Setup(s => s.IsUpgradable(It.IsAny<QualityProfile>(), It.IsAny<List<QualityModel>>(), It.IsAny<int>(), It.IsAny<QualityModel>(), It.IsAny<int>()))
.Setup(s => s.IsUpgradable(It.IsAny<QualityProfile>(), It.IsAny<QualityModel>(), It.IsAny<int>(), It.IsAny<QualityModel>(), It.IsAny<int>()))
.Returns(true);
}
@ -147,7 +147,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
}
[Test]
public void should_be_true_when_release_is_a_proper_for_existing_album()
public void should_be_true_when_release_is_a_proper_for_existing_book()
{
_remoteBook.ParsedBookInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2));
_remoteBook.Release.PublishDate = DateTime.UtcNow;
@ -165,7 +165,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
}
[Test]
public void should_be_true_when_release_is_a_real_for_existing_album()
public void should_be_true_when_release_is_a_real_for_existing_book()
{
_remoteBook.ParsedBookInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(real: 1));
_remoteBook.Release.PublishDate = DateTime.UtcNow;
@ -183,19 +183,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
}
[Test]
public void should_be_false_when_release_is_proper_for_existing_album_of_different_quality()
public void should_be_false_when_release_is_proper_for_existing_book_of_different_quality()
{
<<<<<<< HEAD
_remoteBook.ParsedBookInfo.Quality = new QualityModel(Quality.AZW3, new Revision(version: 2));
_remoteBook.Release.PublishDate = DateTime.UtcNow;
GivenExistingFile(new QualityModel(Quality.PDF));
=======
_remoteAlbum.ParsedAlbumInfo.Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2));
_remoteAlbum.Release.PublishDate = DateTime.UtcNow;
GivenExistingFile(new QualityModel(Quality.MP3_256));
>>>>>>> Fixed: Delay profile being ignored for non-revision upgrades
_delayProfile.UsenetDelay = 720;

@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
new BookFile
{
Id = 1,
Path = "/My.Artist.S01E01.mp3",
Path = "/My.Author.S01E01.mp3",
Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)),
DateAdded = DateTime.Now,
EditionId = 1
@ -42,36 +42,36 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
new BookFile
{
Id = 2,
Path = "/My.Artist.S01E02.mp3",
Path = "/My.Author.S01E02.mp3",
Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)),
DateAdded = DateTime.Now,
EditionId = 2
};
var singleAlbumList = new List<Book> { new Book { Id = 1 } };
var doubleAlbumList = new List<Book>
var singleBookList = new List<Book> { new Book { Id = 1 } };
var doubleBookList = new List<Book>
{
new Book { Id = 1 },
new Book { Id = 2 }
};
var fakeArtist = Builder<Author>.CreateNew()
var fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.QualityProfile = new QualityProfile { Cutoff = Quality.FLAC.Id })
.With(c => c.Path = @"C:\Music\My.Artist".AsOsAgnostic())
.With(c => c.Path = @"C:\Music\My.Author".AsOsAgnostic())
.Build();
_parseResultMulti = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = doubleAlbumList
Books = doubleBookList
};
_parseResultSingle = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = singleAlbumList
Books = singleBookList
};
GivenUnmonitorDeletedTracks(true);

@ -34,10 +34,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
_firstFile = new BookFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)), DateAdded = DateTime.Now };
_secondFile = new BookFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 1)), DateAdded = DateTime.Now };
var singleAlbumList = new List<Book> { new Book { }, new Book { } };
var doubleAlbumList = new List<Book> { new Book { }, new Book { }, new Book { } };
var singleBookList = new List<Book> { new Book { }, new Book { } };
var doubleBookList = new List<Book> { new Book { }, new Book { }, new Book { } };
var fakeArtist = Builder<Author>.CreateNew()
var fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.QualityProfile = new QualityProfile { Cutoff = Quality.FLAC.Id })
.Build();
@ -47,16 +47,16 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync
_parseResultMulti = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MOBI, new Revision(version: 2)) },
Books = doubleAlbumList
Books = doubleBookList
};
_parseResultSingle = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MOBI, new Revision(version: 2)) },
Books = singleAlbumList
Books = singleBookList
};
}

@ -10,34 +10,34 @@ using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.DecisionEngineTests.Search
{
[TestFixture]
public class ArtistSpecificationFixture : TestBase<AuthorSpecification>
public class AuthorSpecificationFixture : TestBase<AuthorSpecification>
{
private Author _artist1;
private Author _artist2;
private Author _author1;
private Author _author2;
private RemoteBook _remoteBook = new RemoteBook();
private SearchCriteriaBase _searchCriteria = new BookSearchCriteria();
[SetUp]
public void Setup()
{
_artist1 = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_artist2 = Builder<Author>.CreateNew().With(s => s.Id = 2).Build();
_author1 = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_author2 = Builder<Author>.CreateNew().With(s => s.Id = 2).Build();
_remoteBook.Author = _artist1;
_remoteBook.Author = _author1;
}
[Test]
public void should_return_false_if_artist_doesnt_match()
public void should_return_false_if_author_doesnt_match()
{
_searchCriteria.Author = _artist2;
_searchCriteria.Author = _author2;
Subject.IsSatisfiedBy(_remoteBook, _searchCriteria).Accepted.Should().BeFalse();
}
[Test]
public void should_return_true_when_artist_ids_match()
public void should_return_true_when_author_ids_match()
{
_searchCriteria.Author = _artist1;
_searchCriteria.Author = _author1;
Subject.IsSatisfiedBy(_remoteBook, _searchCriteria).Accepted.Should().BeTrue();
}

@ -15,22 +15,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.Search
[TestFixture]
public class TorrentSeedingSpecificationFixture : TestBase<TorrentSeedingSpecification>
{
private Author _artist;
private Author _author;
private RemoteBook _remoteBook;
private IndexerDefinition _indexerDefinition;
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_author = Builder<Author>.CreateNew().With(s => s.Id = 1).Build();
_remoteBook = new RemoteBook
{
Author = _artist,
Author = _author,
Release = new TorrentInfo
{
IndexerId = 1,
Title = "Artist - Album [FLAC-RlsGrp]",
Title = "Author - Book [FLAC-RlsGrp]",
Seeders = 0
}
};
@ -56,7 +56,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests.Search
_remoteBook.Release = new ReleaseInfo
{
IndexerId = 1,
Title = "Artist - Album [FLAC-RlsGrp]"
Title = "Author - Book [FLAC-RlsGrp]"
};
Subject.IsSatisfiedBy(_remoteBook, null).Accepted.Should().BeTrue();

@ -21,7 +21,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = false
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.FLAC))
.Should().BeFalse();
}
@ -36,7 +36,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = true
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.FLAC))
.Should().BeTrue();
}
@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = true
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.MP3_320))
.Should().BeTrue();
}
@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = false
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.MP3_320))
.Should().BeTrue();
}
@ -81,7 +81,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = true
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.MP3_320))
.Should().BeTrue();
}
@ -96,7 +96,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Items = Qualities.QualityFixture.GetDefaultQualities(),
UpgradeAllowed = false
},
new List<QualityModel> { new QualityModel(Quality.MP3_320) },
new QualityModel(Quality.MP3_320),
new QualityModel(Quality.MP3_320))
.Should().BeTrue();
}

@ -32,10 +32,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_firstFile = new BookFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
_secondFile = new BookFile { Quality = new QualityModel(Quality.FLAC, new Revision(version: 2)), DateAdded = DateTime.Now };
var singleAlbumList = new List<Book> { new Book { BookFiles = new List<BookFile>() } };
var doubleAlbumList = new List<Book> { new Book { BookFiles = new List<BookFile>() }, new Book { BookFiles = new List<BookFile>() }, new Book { BookFiles = new List<BookFile>() } };
var singleBookList = new List<Book> { new Book { BookFiles = new List<BookFile>() } };
var doubleBookList = new List<Book> { new Book { BookFiles = new List<BookFile>() }, new Book { BookFiles = new List<BookFile>() }, new Book { BookFiles = new List<BookFile>() } };
var fakeArtist = Builder<Author>.CreateNew()
var fakeAuthor = Builder<Author>.CreateNew()
.With(c => c.QualityProfile = new QualityProfile
{
UpgradeAllowed = true,
@ -50,16 +50,16 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
_parseResultMulti = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = doubleAlbumList
Books = doubleBookList
};
_parseResultSingle = new RemoteBook
{
Author = fakeArtist,
Author = fakeAuthor,
ParsedBookInfo = new ParsedBookInfo { Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2)) },
Books = singleAlbumList
Books = singleBookList
};
}
@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_if_album_has_no_existing_file()
public void should_return_true_if_book_has_no_existing_file()
{
_parseResultSingle.Books.First().BookFiles = new List<BookFile>();
@ -95,7 +95,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
}
[Test]
public void should_return_true_if_single_album_doesnt_exist_on_disk()
public void should_return_true_if_single_book_doesnt_exist_on_disk()
{
_parseResultSingle.Books = new List<Book>();

@ -46,7 +46,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Subject.IsUpgradable(
profile,
new List<QualityModel> { new QualityModel(current, new Revision(version: currentVersion)) },
new QualityModel(current, new Revision(version: currentVersion)),
NoPreferredWordScore,
new QualityModel(newQuality, new Revision(version: newVersion)),
NoPreferredWordScore)
@ -65,7 +65,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Subject.IsUpgradable(
profile,
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 1)) },
new QualityModel(Quality.MP3_320, new Revision(version: 1)),
NoPreferredWordScore,
new QualityModel(Quality.MP3_320, new Revision(version: 2)),
NoPreferredWordScore)
@ -84,7 +84,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
Subject.IsUpgradable(
profile,
new List<QualityModel> { new QualityModel(Quality.MP3_320, new Revision(version: 1)) },
new QualityModel(Quality.MP3_320, new Revision(version: 1)),
NoPreferredWordScore,
new QualityModel(Quality.MP3_320, new Revision(version: 2)),
NoPreferredWordScore)

@ -17,15 +17,15 @@ namespace NzbDrone.Core.Test.DiskSpace
public class DiskSpaceServiceFixture : CoreTest<DiskSpaceService>
{
private RootFolder _rootDir;
private string _artistFolder1;
private string _artistFolder2;
private string _authorFolder1;
private string _authorFolder2;
[SetUp]
public void SetUp()
{
_rootDir = new RootFolder { Path = @"G:\fasdlfsdf".AsOsAgnostic() };
_artistFolder1 = Path.Combine(_rootDir.Path, "artist1");
_artistFolder2 = Path.Combine(_rootDir.Path, "artist2");
_authorFolder1 = Path.Combine(_rootDir.Path, "author1");
_authorFolder2 = Path.Combine(_rootDir.Path, "author2");
Mocker.GetMock<IRootFolderService>()
.Setup(x => x.All())
@ -47,14 +47,14 @@ namespace NzbDrone.Core.Test.DiskSpace
.Setup(v => v.GetTotalSize(It.IsAny<string>()))
.Returns(0);
GivenArtist();
GivenAuthor();
}
private void GivenArtist(params Author[] artist)
private void GivenAuthor(params Author[] author)
{
Mocker.GetMock<IAuthorService>()
.Setup(v => v.GetAllAuthors())
.Returns(artist.ToList());
.Returns(author.ToList());
}
private void GivenExistingFolder(string folder)
@ -65,11 +65,11 @@ namespace NzbDrone.Core.Test.DiskSpace
}
[Test]
public void should_check_diskspace_for_artist_folders()
public void should_check_diskspace_for_author_folders()
{
GivenArtist(new Author { Path = _artistFolder1 });
GivenAuthor(new Author { Path = _authorFolder1 });
GivenExistingFolder(_artistFolder1);
GivenExistingFolder(_authorFolder1);
var freeSpace = Subject.GetFreeSpace();
@ -79,10 +79,10 @@ namespace NzbDrone.Core.Test.DiskSpace
[Test]
public void should_check_diskspace_for_same_root_folder_only_once()
{
GivenArtist(new Author { Path = _artistFolder1 }, new Author { Path = _artistFolder2 });
GivenAuthor(new Author { Path = _authorFolder1 }, new Author { Path = _authorFolder2 });
GivenExistingFolder(_artistFolder1);
GivenExistingFolder(_artistFolder2);
GivenExistingFolder(_authorFolder1);
GivenExistingFolder(_authorFolder2);
var freeSpace = Subject.GetFreeSpace();

@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.With(h => h.Title = "Drone.S01E01.HDTV")
.Build();
var remoteBook = BuildRemoteAlbum();
var remoteBook = BuildRemoteBook();
_trackedDownload = Builder<TrackedDownload>.CreateNew()
.With(c => c.State = TrackedDownloadState.Downloading)
@ -55,11 +55,11 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.Returns(new History.History());
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist("Drone.S01E01.HDTV"))
.Setup(s => s.GetAuthor("Drone.S01E01.HDTV"))
.Returns(remoteBook.Author);
}
private Book CreateAlbum(int id)
private Book CreateBook(int id)
{
return new Book
{
@ -67,12 +67,12 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
};
}
private RemoteBook BuildRemoteAlbum()
private RemoteBook BuildRemoteBook()
{
return new RemoteBook
{
Author = new Author(),
Books = new List<Book> { CreateAlbum(1) }
Books = new List<Book> { CreateBook(1) }
};
}
@ -86,18 +86,18 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.Returns(new History.History() { SourceTitle = "Droned S01E01" });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist(It.IsAny<string>()))
.Setup(s => s.GetAuthor(It.IsAny<string>()))
.Returns((Author)null);
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist("Droned S01E01"))
.Returns(BuildRemoteAlbum().Author);
.Setup(s => s.GetAuthor("Droned S01E01"))
.Returns(BuildRemoteBook().Author);
}
private void GivenArtistMatch()
private void GivenAuthorMatch()
{
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist(It.IsAny<string>()))
.Setup(s => s.GetAuthor(It.IsAny<string>()))
.Returns(_trackedDownload.RemoteBook.Author);
}
@ -167,11 +167,11 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
[Test]
public void should_mark_as_imported_if_all_tracks_were_imported_but_extra_files_were_not()
{
GivenArtistMatch();
GivenAuthorMatch();
_trackedDownload.RemoteBook.Books = new List<Book>
{
CreateAlbum(1)
CreateBook(1)
};
Mocker.GetMock<IDownloadedBooksImportService>()
@ -192,9 +192,9 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
{
_trackedDownload.RemoteBook.Books = new List<Book>
{
CreateAlbum(1),
CreateAlbum(1),
CreateAlbum(1)
CreateBook(1),
CreateBook(1),
CreateBook(1)
};
Mocker.GetMock<IDownloadedBooksImportService>()
@ -227,9 +227,9 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
[Test]
public void should_not_mark_as_imported_if_some_of_episodes_were_not_imported_including_history()
{
var albums = Builder<Book>.CreateListOfSize(3).BuildList();
var books = Builder<Book>.CreateListOfSize(3).BuildList();
_trackedDownload.RemoteBook.Books = albums;
_trackedDownload.RemoteBook.Books = books;
Mocker.GetMock<IDownloadedBooksImportService>()
.Setup(v => v.ProcessPath(It.IsAny<string>(), It.IsAny<ImportMode>(), It.IsAny<Author>(), It.IsAny<DownloadClientItem>()))
@ -261,7 +261,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
{
_trackedDownload.RemoteBook.Books = new List<Book>
{
CreateAlbum(1)
CreateBook(1)
};
Mocker.GetMock<IDownloadedBooksImportService>()
@ -285,9 +285,9 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
[Test]
public void should_mark_as_imported_if_all_episodes_were_imported_including_history()
{
var albums = Builder<Book>.CreateListOfSize(2).BuildList();
var books = Builder<Book>.CreateListOfSize(2).BuildList();
_trackedDownload.RemoteBook.Books = albums;
_trackedDownload.RemoteBook.Books = books;
Mocker.GetMock<IDownloadedBooksImportService>()
.Setup(v => v.ProcessPath(It.IsAny<string>(), It.IsAny<ImportMode>(), It.IsAny<Author>(), It.IsAny<DownloadClientItem>()))
@ -295,11 +295,11 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
{
new ImportResult(
new ImportDecision<LocalBook>(
new LocalBook { Path = @"C:\TestPath\Droned.S01E01.mkv", Book = albums[0] })),
new LocalBook { Path = @"C:\TestPath\Droned.S01E01.mkv", Book = books[0] })),
new ImportResult(
new ImportDecision<LocalBook>(
new LocalBook { Path = @"C:\TestPath\Droned.S01E02.mkv", Book = albums[1] }), "Test Failure")
new LocalBook { Path = @"C:\TestPath\Droned.S01E02.mkv", Book = books[1] }), "Test Failure")
});
var history = Builder<History.History>.CreateListOfSize(2)

@ -29,7 +29,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.With(h => h.Title = "Drone.S01E01.HDTV")
.Build();
var remoteBook = BuildRemoteAlbum();
var remoteBook = BuildRemoteBook();
_trackedDownload = Builder<TrackedDownload>.CreateNew()
.With(c => c.State = TrackedDownloadState.Downloading)
@ -54,11 +54,11 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.Returns(new History.History());
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist("Drone.S01E01.HDTV"))
.Setup(s => s.GetAuthor("Drone.S01E01.HDTV"))
.Returns(remoteBook.Author);
}
private RemoteBook BuildRemoteAlbum()
private RemoteBook BuildRemoteBook()
{
return new RemoteBook
{
@ -74,10 +74,10 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.Returns((History.History)null);
}
private void GivenArtistMatch()
private void GivenAuthorMatch()
{
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist(It.IsAny<string>()))
.Setup(s => s.GetAuthor(It.IsAny<string>()))
.Returns(_trackedDownload.RemoteBook.Author);
}
@ -90,12 +90,12 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
.Returns(new History.History() { SourceTitle = "Droned S01E01" });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist(It.IsAny<string>()))
.Setup(s => s.GetAuthor(It.IsAny<string>()))
.Returns((Author)null);
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist("Droned S01E01"))
.Returns(BuildRemoteAlbum().Author);
.Setup(s => s.GetAuthor("Droned S01E01"))
.Returns(BuildRemoteBook().Author);
}
[TestCase(DownloadItemStatus.Downloading)]
@ -128,7 +128,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
{
_trackedDownload.DownloadItem.Category = "tv";
GivenNoGrabbedHistory();
GivenArtistMatch();
GivenAuthorMatch();
Subject.Check(_trackedDownload);
@ -164,7 +164,7 @@ namespace NzbDrone.Core.Test.Download.CompletedDownloadServiceTests
{
_trackedDownload.RemoteBook.Author = null;
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist("Drone.S01E01.HDTV"))
.Setup(s => s.GetAuthor("Drone.S01E01.HDTV"))
.Returns((Author)null);
Subject.Check(_trackedDownload);

@ -30,21 +30,21 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
.Returns<List<DownloadDecision>>(v => v);
}
private Book GetAlbum(int id)
private Book GetBook(int id)
{
return Builder<Book>.CreateNew()
.With(e => e.Id = id)
.Build();
}
private RemoteBook GetRemoteAlbum(List<Book> albums, QualityModel quality, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet)
private RemoteBook GetRemoteBook(List<Book> books, QualityModel quality, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet)
{
var remoteBook = new RemoteBook();
remoteBook.ParsedBookInfo = new ParsedBookInfo();
remoteBook.ParsedBookInfo.Quality = quality;
remoteBook.Books = new List<Book>();
remoteBook.Books.AddRange(albums);
remoteBook.Books.AddRange(books);
remoteBook.Release = new ReleaseInfo();
remoteBook.Release.DownloadProtocol = downloadProtocol;
@ -58,10 +58,10 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
}
[Test]
public void should_download_report_if_album_was_not_already_downloaded()
public void should_download_report_if_book_was_not_already_downloaded()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -71,10 +71,10 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
}
[Test]
public void should_only_download_album_once()
public void should_only_download_book_once()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -85,14 +85,14 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
}
[Test]
public void should_not_download_if_any_album_was_already_downloaded()
public void should_not_download_if_any_book_was_already_downloaded()
{
var remoteBook1 = GetRemoteAlbum(
new List<Book> { GetAlbum(1) },
var remoteBook1 = GetRemoteBook(
new List<Book> { GetBook(1) },
new QualityModel(Quality.MP3_320));
var remoteBook2 = GetRemoteAlbum(
new List<Book> { GetAlbum(1), GetAlbum(2) },
var remoteBook2 = GetRemoteBook(
new List<Book> { GetBook(1), GetBook(2) },
new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
@ -106,8 +106,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_return_downloaded_reports()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -118,12 +118,12 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_return_all_downloaded_reports()
{
var remoteBook1 = GetRemoteAlbum(
new List<Book> { GetAlbum(1) },
var remoteBook1 = GetRemoteBook(
new List<Book> { GetBook(1) },
new QualityModel(Quality.MP3_320));
var remoteBook2 = GetRemoteAlbum(
new List<Book> { GetAlbum(2) },
var remoteBook2 = GetRemoteBook(
new List<Book> { GetBook(2) },
new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
@ -136,16 +136,16 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_only_return_downloaded_reports()
{
var remoteBook1 = GetRemoteAlbum(
new List<Book> { GetAlbum(1) },
var remoteBook1 = GetRemoteBook(
new List<Book> { GetBook(1) },
new QualityModel(Quality.MP3_320));
var remoteBook2 = GetRemoteAlbum(
new List<Book> { GetAlbum(2) },
var remoteBook2 = GetRemoteBook(
new List<Book> { GetBook(2) },
new QualityModel(Quality.MP3_320));
var remoteBook3 = GetRemoteAlbum(
new List<Book> { GetAlbum(2) },
var remoteBook3 = GetRemoteBook(
new List<Book> { GetBook(2) },
new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
@ -159,8 +159,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_not_add_to_downloaded_list_when_download_fails()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -183,8 +183,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_not_grab_if_pending()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook, new Rejection("Failure!", RejectionType.Temporary)));
@ -194,10 +194,10 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
}
[Test]
public void should_not_add_to_pending_if_album_was_grabbed()
public void should_not_add_to_pending_if_book_was_grabbed()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -210,8 +210,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_add_to_pending_even_if_already_added_to_pending()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook, new Rejection("Failure!", RejectionType.Temporary)));
@ -224,8 +224,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_add_to_failed_if_already_failed_for_that_protocol()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -241,9 +241,9 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_not_add_to_failed_if_failed_for_a_different_protocol()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320), DownloadProtocol.Usenet);
var remoteBook2 = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320), DownloadProtocol.Torrent);
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320), DownloadProtocol.Usenet);
var remoteBook2 = GetRemoteBook(books, new QualityModel(Quality.MP3_320), DownloadProtocol.Torrent);
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));
@ -260,8 +260,8 @@ namespace NzbDrone.Core.Test.Download.DownloadApprovedReportsTests
[Test]
public void should_add_to_rejected_if_release_unavailable_on_indexer()
{
var albums = new List<Book> { GetAlbum(1) };
var remoteBook = GetRemoteAlbum(albums, new QualityModel(Quality.MP3_320));
var books = new List<Book> { GetBook(1) };
var remoteBook = GetRemoteBook(books, new QualityModel(Quality.MP3_320));
var decisions = new List<DownloadDecision>();
decisions.Add(new DownloadDecision(remoteBook));

@ -87,15 +87,15 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
_magnetFilePath = Path.ChangeExtension(_filePath, extension);
}
protected override RemoteBook CreateRemoteAlbum()
protected override RemoteBook CreateRemoteBook()
{
var remoteBook = base.CreateRemoteAlbum();
var remoteBook = base.CreateRemoteBook();
var torrentInfo = new TorrentInfo();
torrentInfo.Title = remoteBook.Release.Title;
torrentInfo.DownloadUrl = remoteBook.Release.DownloadUrl;
torrentInfo.DownloadProtocol = remoteBook.Release.DownloadProtocol;
torrentInfo.MagnetUrl = "magnet:?xt=urn:btih:755248817d32b00cc853e633ecdc48e4c21bff15&dn=Artist.Album.FLAC.loseless-DEFiNE%5Brartv%5D&tr=http%3A%2F%2Ftracker.trackerfix.com%3A80%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710&tr=udp%3A%2F%2F9.rarbg.to%3A2710";
torrentInfo.MagnetUrl = "magnet:?xt=urn:btih:755248817d32b00cc853e633ecdc48e4c21bff15&dn=Author.Book.FLAC.loseless-DEFiNE%5Brartv%5D&tr=http%3A%2F%2Ftracker.trackerfix.com%3A80%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710&tr=udp%3A%2F%2F9.rarbg.to%3A2710";
remoteBook.Release = torrentInfo;
@ -141,7 +141,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
[Test]
public void Download_should_download_file_if_it_doesnt_exist()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Subject.Download(remoteBook);
@ -155,7 +155,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
{
GivenMagnetFilePath();
Subject.Definition.Settings.As<TorrentBlackholeSettings>().SaveMagnetFiles = true;
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = null;
Subject.Download(remoteBook);
Mocker.GetMock<IHttpClient>().Verify(c => c.Get(It.Is<HttpRequest>(v => v.Url.FullUri == _downloadUrl)), Times.Never());
@ -173,7 +173,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
Subject.Definition.Settings.As<TorrentBlackholeSettings>().SaveMagnetFiles = true;
Subject.Definition.Settings.As<TorrentBlackholeSettings>().MagnetFileExtension = magnetFileExtension;
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = null;
Subject.Download(remoteBook);
@ -188,7 +188,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
public void Download_should_not_save_magnet_if_disabled()
{
GivenMagnetFilePath();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = null;
Assert.Throws<ReleaseDownloadException>(() => Subject.Download(remoteBook));
@ -204,7 +204,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
{
Subject.Definition.Settings.As<TorrentBlackholeSettings>().SaveMagnetFiles = true;
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Subject.Download(remoteBook);
@ -220,7 +220,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
var illegalTitle = "Radiohead - Scotch Mist [2008/FLAC/Lossless]";
var expectedFilename = Path.Combine(_blackholeFolder, "Radiohead - Scotch Mist [2008+FLAC+Lossless]" + Path.GetExtension(_filePath));
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.Title = illegalTitle;
Subject.Download(remoteBook);
@ -233,7 +233,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
[Test]
public void Download_should_throw_if_magnet_and_torrent_url_does_not_exist()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = null;
Assert.Throws<ReleaseDownloadException>(() => Subject.Download(remoteBook));
@ -308,7 +308,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
[Test]
public void should_return_null_hash()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Subject.Download(remoteBook).Should().BeNull();
}

@ -113,7 +113,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
[Test]
public void Download_should_download_file_if_it_doesnt_exist()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Subject.Download(remoteBook);
@ -128,7 +128,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.Blackhole
var illegalTitle = "Radiohead - Scotch Mist [2008/FLAC/Lossless]";
var expectedFilename = Path.Combine(_blackholeFolder, "Radiohead - Scotch Mist [2008+FLAC+Lossless]" + Path.GetExtension(_filePath));
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.Title = illegalTitle;
Subject.Download(remoteBook);

@ -204,7 +204,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -216,7 +216,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = magnetUrl;
var id = Subject.Download(remoteBook);

@ -30,7 +30,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests
Mocker.GetMock<IParsingService>()
.Setup(s => s.Map(It.IsAny<ParsedBookInfo>(), null))
.Returns(() => CreateRemoteAlbum());
.Returns(() => CreateRemoteBook());
Mocker.GetMock<IHttpClient>()
.Setup(s => s.Get(It.IsAny<HttpRequest>()))
@ -41,7 +41,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests
.Returns<string, OsPath>((h, r) => r);
}
protected virtual RemoteBook CreateRemoteAlbum()
protected virtual RemoteBook CreateRemoteBook()
{
var remoteBook = new RemoteBook();
remoteBook.Release = new ReleaseInfo();

@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
protected string _serialNumber = "SERIALNUMBER";
protected string _category = "readarr";
protected string _musicDirectory = @"music/Artist";
protected string _musicDirectory = @"music/Author";
protected string _defaultDestination = "somepath";
protected OsPath _physicalPath = new OsPath("/mnt/sdb1/mydata");
@ -360,13 +360,13 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
.Callback(PrepareClientToReturnQueuedItem);
}
protected override RemoteBook CreateRemoteAlbum()
protected override RemoteBook CreateRemoteBook()
{
var album = base.CreateRemoteAlbum();
var book = base.CreateRemoteBook();
album.Release.DownloadUrl = DownloadURL;
book.Release.DownloadUrl = DownloadURL;
return album;
return book;
}
protected int GivenAllKindOfTasks()
@ -387,7 +387,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenTvDirectory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -404,7 +404,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenMusicCategory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -420,7 +420,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenSerialNumber();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -495,7 +495,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
[Test]
public void Download_should_throw_and_not_add_task_if_cannot_get_serial_number()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Mocker.GetMock<ISerialNumberProvider>()
.Setup(s => s.GetSerialNumber(_settings))

@ -29,7 +29,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
protected string _serialNumber = "SERIALNUMBER";
protected string _category = "readarr";
protected string _musicDirectory = @"music/Artist";
protected string _musicDirectory = @"music/Author";
protected string _defaultDestination = "somepath";
protected OsPath _physicalPath = new OsPath("/mnt/sdb1/mydata");
@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
[SetUp]
public void Setup()
{
_remoteBook = CreateRemoteAlbum();
_remoteBook = CreateRemoteBook();
_settings = new DownloadStationSettings()
{
@ -264,7 +264,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenTvDirectory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -281,7 +281,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenMusicCategory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -297,7 +297,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
GivenSerialNumber();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -372,7 +372,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests
[Test]
public void Download_should_throw_and_not_add_task_if_cannot_get_serial_number()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Mocker.GetMock<ISerialNumberProvider>()
.Setup(s => s.GetSerialNumber(_settings))

@ -200,7 +200,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.HadoukenTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -279,7 +279,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.HadoukenTests
[Test]
public void Download_from_magnet_link_should_return_hash_uppercase()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = "magnet:?xt=urn:btih:a45129e59d8750f9da982f53552b1e4f0457ee9f";
@ -294,7 +294,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.HadoukenTests
[Test]
public void Download_from_torrent_file_should_return_hash_uppercase()
{
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Mocker.GetMock<IHadoukenProxy>()
.Setup(v => v.AddTorrentFile(It.IsAny<HadoukenSettings>(), It.IsAny<byte[]>()))

@ -204,7 +204,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbVortexTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -216,7 +216,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbVortexTests
{
GivenFailedDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Assert.Throws<DownloadClientException>(() => Subject.Download(remoteBook));
}

@ -335,7 +335,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbgetTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -347,7 +347,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbgetTests
{
GivenFailedDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
Assert.Throws<DownloadClientRejectedReleaseException>(() => Subject.Download(remoteBook));
}
@ -452,7 +452,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbgetTests
[Test]
public void should_use_final_dir_when_set_instead_of_dest_dir()
{
_completed.FinalDir = "/remote/mount/music2/Some.Artist-Some.Album.FLAC.2018-DRONE";
_completed.FinalDir = "/remote/mount/music2/Some.Author-Some.Book.FLAC.2018-DRONE";
GivenQueue(null);
GivenHistory(_completed);

@ -422,7 +422,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -434,7 +434,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = magnetUrl;
var id = Subject.Download(remoteBook);
@ -449,7 +449,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
.Setup(s => s.GetConfig(It.IsAny<QBittorrentSettings>()))
.Returns(new QBittorrentPreferences() { DhtEnabled = false });
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = "magnet:?xt=urn:btih:ZPBPA2P6ROZPKRHK44D5OW6NHXU5Z6KR";
Assert.Throws<ReleaseDownloadException>(() => Subject.Download(remoteBook));
@ -462,7 +462,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
.Setup(s => s.GetConfig(It.IsAny<QBittorrentSettings>()))
.Returns(new QBittorrentPreferences { DhtEnabled = false });
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = "magnet:?xt=urn:btih:ZPBPA2P6ROZPKRHK44D5OW6NHXU5Z6KR&tr=udp://abc";
Assert.DoesNotThrow(() => Subject.Download(remoteBook));
@ -477,7 +477,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
GivenHighPriority();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -495,7 +495,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
.Setup(v => v.MoveTorrentToTopInQueue(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()))
.Throws(new HttpException(new HttpResponse(new HttpRequest("http://me.local/"), new HttpHeader(), new byte[0], System.Net.HttpStatusCode.Forbidden)));
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -529,7 +529,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
GivenRedirectToMagnet();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -542,7 +542,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
GivenRedirectToTorrent();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);

@ -115,7 +115,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.RTorrentTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);

@ -298,7 +298,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.Title = title;
var id = Subject.Download(remoteBook);
@ -312,7 +312,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -353,7 +353,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
.Setup(s => s.DownloadNzb(It.IsAny<byte[]>(), It.IsAny<string>(), It.IsAny<string>(), (int)SabnzbdPriority.High, It.IsAny<SabnzbdSettings>()))
.Returns(new SabnzbdAddResponse { Ids = new List<string> { "readarrtest" } });
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Books = Builder<Book>.CreateListOfSize(1)
.All()
.With(e => e.ReleaseDate = DateTime.Today)

@ -58,7 +58,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
GivenTvDirectory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -87,7 +87,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
GivenMusicCategory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -105,7 +105,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
_transmissionConfigItems["download-dir"] += "/";
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -120,7 +120,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -135,7 +135,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = magnetUrl;
var id = Subject.Download(remoteBook);

@ -232,7 +232,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.UTorrentTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -256,7 +256,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.UTorrentTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = magnetUrl;
var id = Subject.Download(remoteBook);
@ -355,7 +355,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.UTorrentTests
GivenRedirectToMagnet();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -368,7 +368,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.UTorrentTests
GivenRedirectToTorrent();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);

@ -67,7 +67,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -80,7 +80,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
GivenTvDirectory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -96,7 +96,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
GivenMusicCategory();
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -114,7 +114,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
_transmissionConfigItems["download-dir"] += "/";
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -129,7 +129,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
var id = Subject.Download(remoteBook);
@ -144,7 +144,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
{
GivenSuccessfulDownload();
var remoteBook = CreateRemoteAlbum();
var remoteBook = CreateRemoteBook();
remoteBook.Release.DownloadUrl = magnetUrl;
var id = Subject.Download(remoteBook);

@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.Download.FailedDownloadServiceTests
var completed = Builder<DownloadClientItem>.CreateNew()
.With(h => h.Status = DownloadItemStatus.Completed)
.With(h => h.OutputPath = new OsPath(@"C:\DropFolder\MyDownload".AsOsAgnostic()))
.With(h => h.Title = "Drone.DroneTheAlbum.FLAC")
.With(h => h.Title = "Drone.DroneTheBook.FLAC")
.Build();
_grabHistory = Builder<History.History>.CreateListOfSize(2).BuildList();

@ -21,8 +21,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
public class AddFixture : CoreTest<PendingReleaseService>
{
private DownloadDecision _temporarilyRejected;
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
private QualityProfile _profile;
private ReleaseInfo _release;
private ParsedBookInfo _parsedBookInfo;
@ -32,10 +32,10 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.Build();
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.Build();
_profile = new QualityProfile
@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
},
};
_artist.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_author.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_release = Builder<ReleaseInfo>.CreateNew().Build();
@ -58,8 +58,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
_parsedBookInfo.Quality = new QualityModel(Quality.MP3_320);
_remoteBook = new RemoteBook();
_remoteBook.Books = new List<Book> { _album };
_remoteBook.Author = _artist;
_remoteBook.Books = new List<Book> { _book };
_remoteBook.Author = _author;
_remoteBook.ParsedBookInfo = _parsedBookInfo;
_remoteBook.Release = _release;
@ -77,15 +77,15 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthor(It.IsAny<int>()))
.Returns(_artist);
.Returns(_author);
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthors(It.IsAny<IEnumerable<int>>()))
.Returns(new List<Author> { _artist });
.Returns(new List<Author> { _author });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetAlbums(It.IsAny<ParsedBookInfo>(), _artist, null))
.Returns(new List<Book> { _album });
.Setup(s => s.GetBooks(It.IsAny<ParsedBookInfo>(), _author, null))
.Returns(new List<Book> { _book });
Mocker.GetMock<IPrioritizeDownloadDecision>()
.Setup(s => s.PrioritizeDecisions(It.IsAny<List<DownloadDecision>>()))
@ -100,7 +100,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
var heldReleases = Builder<PendingRelease>.CreateListOfSize(1)
.All()
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.With(h => h.Title = title)
.With(h => h.Release = release)
.With(h => h.Reason = reason)

@ -21,8 +21,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
public class RemoveGrabbedFixture : CoreTest<PendingReleaseService>
{
private DownloadDecision _temporarilyRejected;
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
private QualityProfile _profile;
private ReleaseInfo _release;
private ParsedBookInfo _parsedBookInfo;
@ -32,10 +32,10 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.Build();
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.Build();
_profile = new QualityProfile
@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
},
};
_artist.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_author.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_release = Builder<ReleaseInfo>.CreateNew().Build();
@ -58,8 +58,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
_parsedBookInfo.Quality = new QualityModel(Quality.MP3_320);
_remoteBook = new RemoteBook();
_remoteBook.Books = new List<Book> { _album };
_remoteBook.Author = _artist;
_remoteBook.Books = new List<Book> { _book };
_remoteBook.Author = _author;
_remoteBook.ParsedBookInfo = _parsedBookInfo;
_remoteBook.Release = _release;
@ -77,15 +77,15 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthor(It.IsAny<int>()))
.Returns(_artist);
.Returns(_author);
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthors(It.IsAny<IEnumerable<int>>()))
.Returns(new List<Author> { _artist });
.Returns(new List<Author> { _author });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetAlbums(It.IsAny<ParsedBookInfo>(), _artist, null))
.Returns(new List<Book> { _album });
.Setup(s => s.GetBooks(It.IsAny<ParsedBookInfo>(), _author, null))
.Returns(new List<Book> { _book });
Mocker.GetMock<IPrioritizeDownloadDecision>()
.Setup(s => s.PrioritizeDecisions(It.IsAny<List<DownloadDecision>>()))
@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
var heldReleases = Builder<PendingRelease>.CreateListOfSize(1)
.All()
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.With(h => h.Release = _release.JsonClone())
.With(h => h.ParsedBookInfo = parsedEpisodeInfo)
.Build();

@ -16,14 +16,14 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
public class RemovePendingFixture : CoreTest<PendingReleaseService>
{
private List<PendingRelease> _pending;
private Book _album;
private Book _book;
[SetUp]
public void Setup()
{
_pending = new List<PendingRelease>();
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.Build();
Mocker.GetMock<IPendingReleaseRepository>()
@ -43,25 +43,25 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
.Returns(new List<Author> { new Author() });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetAlbums(It.IsAny<ParsedBookInfo>(), It.IsAny<Author>(), null))
.Returns(new List<Book> { _album });
.Setup(s => s.GetBooks(It.IsAny<ParsedBookInfo>(), It.IsAny<Author>(), null))
.Returns(new List<Book> { _book });
}
private void AddPending(int id, string album)
private void AddPending(int id, string book)
{
_pending.Add(new PendingRelease
{
Id = id,
ParsedBookInfo = new ParsedBookInfo { BookTitle = album }
ParsedBookInfo = new ParsedBookInfo { BookTitle = book }
});
}
[Test]
public void should_remove_same_release()
{
AddPending(id: 1, album: "Album");
AddPending(id: 1, book: "Book");
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _album.Id));
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _book.Id));
Subject.RemovePendingQueueItems(queueId);
@ -71,12 +71,12 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
[Test]
public void should_remove_multiple_releases_release()
{
AddPending(id: 1, album: "Album 1");
AddPending(id: 2, album: "Album 2");
AddPending(id: 3, album: "Album 3");
AddPending(id: 4, album: "Album 3");
AddPending(id: 1, book: "Book 1");
AddPending(id: 2, book: "Book 2");
AddPending(id: 3, book: "Book 3");
AddPending(id: 4, book: "Book 3");
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 3, _album.Id));
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 3, _book.Id));
Subject.RemovePendingQueueItems(queueId);
@ -84,14 +84,14 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
}
[Test]
public void should_not_remove_diffrent_albums()
public void should_not_remove_diffrent_books()
{
AddPending(id: 1, album: "Album 1");
AddPending(id: 2, album: "Album 1");
AddPending(id: 3, album: "Album 2");
AddPending(id: 4, album: "Album 3");
AddPending(id: 1, book: "Book 1");
AddPending(id: 2, book: "Book 1");
AddPending(id: 3, book: "Book 2");
AddPending(id: 4, book: "Book 3");
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _album.Id));
var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _book.Id));
Subject.RemovePendingQueueItems(queueId);

@ -22,8 +22,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
public class RemoveRejectedFixture : CoreTest<PendingReleaseService>
{
private DownloadDecision _temporarilyRejected;
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
private QualityProfile _profile;
private ReleaseInfo _release;
private ParsedBookInfo _parsedBookInfo;
@ -32,10 +32,10 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.Build();
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.Build();
_profile = new QualityProfile
@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
},
};
_artist.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_author.QualityProfile = new LazyLoaded<QualityProfile>(_profile);
_release = Builder<ReleaseInfo>.CreateNew().Build();
@ -58,8 +58,8 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
_parsedBookInfo.Quality = new QualityModel(Quality.MP3_320);
_remoteBook = new RemoteBook();
_remoteBook.Books = new List<Book> { _album };
_remoteBook.Author = _artist;
_remoteBook.Books = new List<Book> { _book };
_remoteBook.Author = _author;
_remoteBook.ParsedBookInfo = _parsedBookInfo;
_remoteBook.Release = _release;
@ -71,15 +71,15 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthor(It.IsAny<int>()))
.Returns(_artist);
.Returns(_author);
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthors(It.IsAny<IEnumerable<int>>()))
.Returns(new List<Author> { _artist });
.Returns(new List<Author> { _author });
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetAlbums(It.IsAny<ParsedBookInfo>(), _artist, null))
.Returns(new List<Book> { _album });
.Setup(s => s.GetBooks(It.IsAny<ParsedBookInfo>(), _author, null))
.Returns(new List<Book> { _book });
Mocker.GetMock<IPrioritizeDownloadDecision>()
.Setup(s => s.PrioritizeDecisions(It.IsAny<List<DownloadDecision>>()))
@ -94,7 +94,7 @@ namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests
var heldReleases = Builder<PendingRelease>.CreateListOfSize(1)
.All()
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.With(h => h.Title = title)
.With(h => h.Release = release)
.Build();

@ -64,7 +64,7 @@ namespace NzbDrone.Core.Test.Download
}
[Test]
public void should_redownload_album_on_failure()
public void should_redownload_book_on_failure()
{
var failedEvent = new DownloadFailedEvent
{
@ -87,7 +87,7 @@ namespace NzbDrone.Core.Test.Download
}
[Test]
public void should_redownload_multiple_albums_on_failure()
public void should_redownload_multiple_books_on_failure()
{
var failedEvent = new DownloadFailedEvent
{
@ -111,9 +111,9 @@ namespace NzbDrone.Core.Test.Download
}
[Test]
public void should_redownload_artist_on_failure()
public void should_redownload_author_on_failure()
{
// note that artist is set to have 3 albums in setup
// note that author is set to have 3 books in setup
var failedEvent = new DownloadFailedEvent
{
AuthorId = 2,

@ -13,17 +13,17 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
[TestFixture]
public class TrackedDownloadAlreadyImportedFixture : CoreTest<TrackedDownloadAlreadyImported>
{
private List<Book> _albums;
private List<Book> _books;
private TrackedDownload _trackedDownload;
private List<History.History> _historyItems;
[SetUp]
public void Setup()
{
_albums = new List<Book>();
_books = new List<Book>();
var remoteBook = Builder<RemoteBook>.CreateNew()
.With(r => r.Books = _albums)
.With(r => r.Books = _books)
.Build();
_trackedDownload = Builder<TrackedDownload>.CreateNew()
@ -35,7 +35,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
public void GivenEpisodes(int count)
{
_albums.AddRange(Builder<Book>.CreateListOfSize(count)
_books.AddRange(Builder<Book>.CreateListOfSize(count)
.BuildList());
}
@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
{
GivenEpisodes(1);
GivenHistoryForEpisode(_albums[0], HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[0], HistoryEventType.Grabbed);
Subject.IsImported(_trackedDownload, _historyItems)
.Should()
@ -78,8 +78,8 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
{
GivenEpisodes(2);
GivenHistoryForEpisode(_albums[0], HistoryEventType.Grabbed);
GivenHistoryForEpisode(_albums[1], HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[0], HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[1], HistoryEventType.Grabbed);
Subject.IsImported(_trackedDownload, _historyItems)
.Should()
@ -91,8 +91,8 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
{
GivenEpisodes(2);
GivenHistoryForEpisode(_albums[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_albums[1], HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[1], HistoryEventType.Grabbed);
Subject.IsImported(_trackedDownload, _historyItems)
.Should()
@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
{
GivenEpisodes(1);
GivenHistoryForEpisode(_albums[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
Subject.IsImported(_trackedDownload, _historyItems)
.Should()
@ -116,8 +116,8 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
{
GivenEpisodes(2);
GivenHistoryForEpisode(_albums[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_albums[1], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[0], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
GivenHistoryForEpisode(_books[1], HistoryEventType.DownloadImported, HistoryEventType.Grabbed);
Subject.IsImported(_trackedDownload, _historyItems)
.Should()

@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
new History.History()
{
DownloadId = "35238",
SourceTitle = "Audio Artist - Audio Album [2018 - FLAC]",
SourceTitle = "Audio Author - Audio Book [2018 - FLAC]",
AuthorId = 5,
BookId = 4,
}
@ -45,13 +45,13 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
Books = new List<Book> { new Book { Id = 4 } },
ParsedBookInfo = new ParsedBookInfo()
{
BookTitle = "Audio Album",
AuthorName = "Audio Artist"
BookTitle = "Audio Book",
AuthorName = "Audio Author"
}
};
Mocker.GetMock<IParsingService>()
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Album" && i.AuthorName == "Audio Artist"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Book" && i.AuthorName == "Audio Author"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Returns(remoteBook);
var client = new DownloadClientDefinition()
@ -82,7 +82,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
}
[Test]
public void should_unmap_tracked_download_if_album_deleted()
public void should_unmap_tracked_download_if_book_deleted()
{
GivenDownloadHistory();
@ -92,13 +92,13 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
Books = new List<Book> { new Book { Id = 4 } },
ParsedBookInfo = new ParsedBookInfo()
{
BookTitle = "Audio Album",
AuthorName = "Audio Artist"
BookTitle = "Audio Book",
AuthorName = "Audio Author"
}
};
Mocker.GetMock<IParsingService>()
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Album" && i.AuthorName == "Audio Artist"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Book" && i.AuthorName == "Audio Author"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Returns(remoteBook);
var client = new DownloadClientDefinition()
@ -109,7 +109,7 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
var item = new DownloadClientItem()
{
Title = "Audio Artist - Audio Album [2018 - FLAC]",
Title = "Audio Author - Audio Book [2018 - FLAC]",
DownloadId = "35238",
DownloadClientInfo = new DownloadClientItemClientInfo
{
@ -123,15 +123,15 @@ namespace NzbDrone.Core.Test.Download.TrackedDownloads
var trackedDownload = Subject.TrackDownload(client, item);
Subject.GetTrackedDownloads().Should().HaveCount(1);
// simulate deletion - album no longer maps
// simulate deletion - book no longer maps
Mocker.GetMock<IParsingService>()
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Album" && i.AuthorName == "Audio Artist"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Setup(s => s.Map(It.Is<ParsedBookInfo>(i => i.BookTitle == "Audio Book" && i.AuthorName == "Audio Author"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
.Returns(default(RemoteBook));
// handle deletion event
Subject.Handle(new BookDeletedEvent(remoteBook.Books.First(), false, false));
// verify download has null remote album
// verify download has null remote book
var trackedDownloads = Subject.GetTrackedDownloads();
trackedDownloads.Should().HaveCount(1);
trackedDownloads.First().RemoteBook.Should().BeNull();

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"e34999c7-36bd-4d77-a10b-627b1b4f3904"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "401c3991-b76b-499d-8082-9f2df958ef78",
"author": "401c3991-b76b-499d-8082-9f2df958ef78",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -156,8 +156,8 @@
{
"path": "/media/nas/video/unpacked/music/Phil_Collins_The_Essential_Going_Back_(081227946470)_REMASTERED_DELUXE_EDITION_2CD_FLAC_2016_WRE/101-phil_collins-going_back.flac",
"fileTrackInfo": {
"artistTitle": "Phil Collins The Essential Going Back (081227946470) REMASTERED DELUXE EDITION 2CD FLAC 2016 WRE 101",
"artistTitleInfo": {
"authorTitle": "Phil Collins The Essential Going Back (081227946470) REMASTERED DELUXE EDITION 2CD FLAC 2016 WRE 101",
"authorTitleInfo": {
"title": "Phil Collins The Essential Going Back (081227946470) REMASTERED DELUXE EDITION 2CD FLAC 2016 WRE 101",
"year": 0
},
@ -183,9 +183,9 @@
"fileTrackInfo": {
"title": "Girl (Why You Wanna Make Me Blue)",
"cleanTitle": "Girl (Why You Wanna Make Me Blue)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -221,9 +221,9 @@
"fileTrackInfo": {
"title": "(Love Is Like A) Heatwave",
"cleanTitle": "(Love Is Like A) Heatwave",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -259,9 +259,9 @@
"fileTrackInfo": {
"title": "Some Of Your Lovin'",
"cleanTitle": "Some Of Your Lovin'",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -297,9 +297,9 @@
"fileTrackInfo": {
"title": "Going To A Go-Go",
"cleanTitle": "Going To A Go-Go",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -335,9 +335,9 @@
"fileTrackInfo": {
"title": "Papa Was A Rolling Stone",
"cleanTitle": "Papa Was A Rolling Stone",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -373,9 +373,9 @@
"fileTrackInfo": {
"title": "Loving You Is Sweeter Than Ever",
"cleanTitle": "Loving You Is Sweeter Than Ever",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -411,9 +411,9 @@
"fileTrackInfo": {
"title": "Something About You",
"cleanTitle": "Something About You",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -449,9 +449,9 @@
"fileTrackInfo": {
"title": "Talkin' About My Baby",
"cleanTitle": "Talkin' About My Baby",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -487,9 +487,9 @@
"fileTrackInfo": {
"title": "Do I Love You",
"cleanTitle": "Do I Love You",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -525,9 +525,9 @@
"fileTrackInfo": {
"title": "Never Dreamed You'd Leave In Summer",
"cleanTitle": "Never Dreamed You'd Leave In Summer",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -563,9 +563,9 @@
"fileTrackInfo": {
"title": "Take Me In Your Arms (Rock Me For A Little While)",
"cleanTitle": "Take Me In Your Arms (Rock Me For A Little While)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -601,9 +601,9 @@
"fileTrackInfo": {
"title": "Too Many Fish In The Sea",
"cleanTitle": "Too Many Fish In The Sea",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -639,9 +639,9 @@
"fileTrackInfo": {
"title": "Uptight (Everything's Alright)",
"cleanTitle": "Uptight (Everything's Alright)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -677,9 +677,9 @@
"fileTrackInfo": {
"title": "Signed, Sealed, Delivered (I'm Yours) Intro (Live)",
"cleanTitle": "Signed, Sealed, Delivered (I'm Yours) Intro (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -715,9 +715,9 @@
"fileTrackInfo": {
"title": "Ain't Too Proud To Beg (Live)",
"cleanTitle": "Ain't Too Proud To Beg (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -753,9 +753,9 @@
"fileTrackInfo": {
"title": "Girl (Why You Wanna Make Me Blue) (Live)",
"cleanTitle": "Girl (Why You Wanna Make Me Blue) (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -791,9 +791,9 @@
"fileTrackInfo": {
"title": "Dancing In The Street (Live)",
"cleanTitle": "Dancing In The Street (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -829,9 +829,9 @@
"fileTrackInfo": {
"title": "(Love Is Like A) Heatwave (Live)",
"cleanTitle": "(Love Is Like A) Heatwave (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -867,9 +867,9 @@
"fileTrackInfo": {
"title": "Papa Was A Rolling Stone (Live)",
"cleanTitle": "Papa Was A Rolling Stone (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -905,9 +905,9 @@
"fileTrackInfo": {
"title": "Never Dreamed You'd Leave In Summer (Live)",
"cleanTitle": "Never Dreamed You'd Leave In Summer (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -943,9 +943,9 @@
"fileTrackInfo": {
"title": "Talkin' About My Baby (Live)",
"cleanTitle": "Talkin' About My Baby (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -981,9 +981,9 @@
"fileTrackInfo": {
"title": "Do I Love You (Live)",
"cleanTitle": "Do I Love You (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1019,9 +1019,9 @@
"fileTrackInfo": {
"title": "Ain't That Peculiar (Live)",
"cleanTitle": "Ain't That Peculiar (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1057,9 +1057,9 @@
"fileTrackInfo": {
"title": "Too Many Fish In The Sea (Live)",
"cleanTitle": "Too Many Fish In The Sea (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1095,9 +1095,9 @@
"fileTrackInfo": {
"title": "You Really Got A Hold On Me (Live)",
"cleanTitle": "You Really Got A Hold On Me (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1133,9 +1133,9 @@
"fileTrackInfo": {
"title": "Something About You (Live)",
"cleanTitle": "Something About You (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1171,9 +1171,9 @@
"fileTrackInfo": {
"title": "Uptight (Everything's Alright) (Live)",
"cleanTitle": "Uptight (Everything's Alright) (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1209,9 +1209,9 @@
"fileTrackInfo": {
"title": "My Girl (Live)",
"cleanTitle": "My Girl (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},
@ -1247,9 +1247,9 @@
"fileTrackInfo": {
"title": "Going Back (Live)",
"cleanTitle": "Going Back (Live)",
"artistTitle": "Phil Collins",
"albumTitle": "The Essential Going Back",
"artistTitleInfo": {
"authorTitle": "Phil Collins",
"bookTitle": "The Essential Going Back",
"authorTitleInfo": {
"title": "Phil Collins",
"year": 2016
},

@ -4,114 +4,114 @@
"97189482-89ee-4d31-90c7-ba07b412d7f9",
"9105a5b3-eb68-3a03-9aa8-f3495e602a4f"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"author": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -160,14 +160,14 @@
"fileTrackInfo": {
"title": "Rolling in the Deep",
"cleanTitle": "Rolling in the Deep",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "1a13c710-4b7e-4701-8968-cd61f2e58110",
"discNumber": 1,
@ -207,14 +207,14 @@
"fileTrackInfo": {
"title": "Rumour Has It",
"cleanTitle": "Rumour Has It",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "797ae656-81d4-4d89-bddb-eca56f77ba72",
"discNumber": 1,
@ -254,14 +254,14 @@
"fileTrackInfo": {
"title": "Turning Tables",
"cleanTitle": "Turning Tables",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "5ac6c47f-bce8-4718-8bc6-f1de40693d14",
"discNumber": 1,
@ -301,14 +301,14 @@
"fileTrackInfo": {
"title": "Dont You Remember",
"cleanTitle": "Dont You Remember",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "f5057d26-1aac-47fe-b766-18c5a28927b1",
"discNumber": 1,
@ -348,14 +348,14 @@
"fileTrackInfo": {
"title": "Set Fire to the Rain",
"cleanTitle": "Set Fire to the Rain",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "d1e0a99e-1894-457b-ba6a-985eeef4d0c4",
"discNumber": 1,
@ -395,14 +395,14 @@
"fileTrackInfo": {
"title": "He Wont Go",
"cleanTitle": "He Wont Go",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "4dd209b9-80fd-4e11-8093-3bab2db810fc",
"discNumber": 1,
@ -442,14 +442,14 @@
"fileTrackInfo": {
"title": "Take It All",
"cleanTitle": "Take It All",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "4f515654-052b-4631-8a78-57ea362cd18a",
"discNumber": 1,
@ -489,14 +489,14 @@
"fileTrackInfo": {
"title": "Ill Be Waiting",
"cleanTitle": "Ill Be Waiting",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "dd2d2073-50c4-438a-91cc-a1fea1c81b12",
"discNumber": 1,
@ -536,14 +536,14 @@
"fileTrackInfo": {
"title": "One and Only",
"cleanTitle": "One and Only",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "04f96056-91ac-4b64-af89-24c596013f05",
"discNumber": 1,
@ -583,14 +583,14 @@
"fileTrackInfo": {
"title": "Lovesong",
"cleanTitle": "Lovesong",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "7932ba40-a0d3-4a7e-8d85-b351fd33317e",
"discNumber": 1,
@ -630,14 +630,14 @@
"fileTrackInfo": {
"title": "Someone Like You",
"cleanTitle": "Someone Like You",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "028efe7f-cdfb-4135-846f-848f2fff15b1",
"discNumber": 1,
@ -677,14 +677,14 @@
"fileTrackInfo": {
"title": "I Found a Boy",
"cleanTitle": "I Found a Boy",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "a027bfd5-c002-4a85-906e-f2c613c45022",
"discNumber": 1,
@ -724,14 +724,14 @@
"fileTrackInfo": {
"title": "Turning Tables (live acoustic)",
"cleanTitle": "Turning Tables (live acoustic)",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "b2e47e6d-b69a-420a-aa52-31d3f38978ed",
"discNumber": 1,
@ -771,14 +771,14 @@
"fileTrackInfo": {
"title": "Dont You Remember (live acoustic)",
"cleanTitle": "Dont You Remember (live acoustic)",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "b19a4995-7fbf-406a-8ff1-db5b8896bd28",
"discNumber": 1,
@ -818,14 +818,14 @@
"fileTrackInfo": {
"title": "Someone Like You (live acoustic)",
"cleanTitle": "Someone Like You (live acoustic)",
"artistTitle": "Adele",
"albumTitle": "21",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "21",
"authorTitleInfo": {
"title": "Adele",
"year": 2011
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "e4174758-d333-4a8e-a31f-dd0edd51518e",
"releaseMBId": "768bc7f7-6b91-4b57-8a7b-1508636719e6",
"recordingMBId": "c365d988-0f2d-4313-9c5f-a557c30f027b",
"discNumber": 1,
@ -865,14 +865,14 @@
"fileTrackInfo": {
"title": "Hello",
"cleanTitle": "Hello",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "0a8e8d55-4b83-4f8a-9732-fbb5ded9f344",
"discNumber": 1,
@ -912,14 +912,14 @@
"fileTrackInfo": {
"title": "Send My Love (to Your New Lover)",
"cleanTitle": "Send My Love (to Your New Lover)",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "1e74cd4c-cfa7-4bdb-99da-41869f5f1171",
"discNumber": 1,
@ -959,14 +959,14 @@
"fileTrackInfo": {
"title": "I Miss You",
"cleanTitle": "I Miss You",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "20594682-fa10-43e8-80fa-b116c68f1b7f",
"discNumber": 1,
@ -1006,14 +1006,14 @@
"fileTrackInfo": {
"title": "When We Were Young",
"cleanTitle": "When We Were Young",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "c5ad2611-071b-4003-bb22-eee8b4f48fe9",
"discNumber": 1,
@ -1053,14 +1053,14 @@
"fileTrackInfo": {
"title": "Remedy",
"cleanTitle": "Remedy",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "cdc9f701-60b4-4e37-a94f-87d0e396f2bc",
"discNumber": 1,
@ -1100,14 +1100,14 @@
"fileTrackInfo": {
"title": "Water Under the Bridge",
"cleanTitle": "Water Under the Bridge",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "ade2f0f3-39bf-46ad-a44d-7fc4a8069db7",
"discNumber": 1,
@ -1147,14 +1147,14 @@
"fileTrackInfo": {
"title": "River Lea",
"cleanTitle": "River Lea",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "b7c37d3d-feea-4a73-8346-9e2392a292e6",
"discNumber": 1,
@ -1194,14 +1194,14 @@
"fileTrackInfo": {
"title": "Love in the Dark",
"cleanTitle": "Love in the Dark",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "dedf519d-8eca-4756-9f93-c390308e0c1b",
"discNumber": 1,
@ -1241,14 +1241,14 @@
"fileTrackInfo": {
"title": "Million Years Ago",
"cleanTitle": "Million Years Ago",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "870c62b6-ba2c-4873-b962-6289128e4a90",
"discNumber": 1,
@ -1288,14 +1288,14 @@
"fileTrackInfo": {
"title": "All I Ask",
"cleanTitle": "All I Ask",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "bfe7a94e-4161-4802-8916-efe57e611842",
"discNumber": 1,
@ -1335,14 +1335,14 @@
"fileTrackInfo": {
"title": "Sweetest Devotion",
"cleanTitle": "Sweetest Devotion",
"artistTitle": "Adele",
"albumTitle": "25",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "25",
"authorTitleInfo": {
"title": "Adele",
"year": 2015
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "5537624c-3d2f-4f5c-8099-df916082c85c",
"releaseMBId": "97189482-89ee-4d31-90c7-ba07b412d7f9",
"recordingMBId": "b2c8aed1-777d-409b-941e-7d4c594697a2",
"discNumber": 1,
@ -1382,14 +1382,14 @@
"fileTrackInfo": {
"title": "Right as Rain",
"cleanTitle": "Right as Rain",
"artistTitle": "Adele",
"albumTitle": "19",
"artistTitleInfo": {
"authorTitle": "Adele",
"bookTitle": "19",
"authorTitleInfo": {
"title": "Adele",
"year": 2008
},
"artistMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"albumMBId": "9796da06-2d59-3176-8598-2105f31ee54a",
"authorMBId": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"bookMBId": "9796da06-2d59-3176-8598-2105f31ee54a",
"releaseMBId": "9105a5b3-eb68-3a03-9aa8-f3495e602a4f",
"recordingMBId": "e5aa0386-15cc-43a8-a059-b14fc39b8301",
"trackMBId": "d98b4797-f47e-3acf-b334-54c71c9cb608",

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"9105a5b3-eb68-3a03-9aa8-f3495e602a4f"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"author": "cc2c9c3c-b7bc-4b8b-84d8-4fbd8779e493",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -156,7 +156,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 101 - Daydreamer.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -188,7 +188,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 102 - Best for Last.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -220,7 +220,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 103 - Chasing Pavements.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -252,7 +252,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 104 - Cold Shoulder.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -284,7 +284,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 105 - Crazy for You.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -316,7 +316,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 106 - Melt My Heart to Stone.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -348,7 +348,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 107 - First Love.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -380,7 +380,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 108 - Right as Rain.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -412,7 +412,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 109 - Make You Feel My Love.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -444,7 +444,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 110 - My Same.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -476,7 +476,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 111 - Tired.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -508,7 +508,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD1/Adele - 19 - 112 - Hometown Glory.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -540,7 +540,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 201 - Chasing Pavements.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -572,7 +572,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 202 - Melt My Heart to Stone.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -604,7 +604,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 203 - That's It, I Quit, I'm Moving On.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -636,7 +636,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 204 - Crazy for You.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -668,7 +668,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 205 - Right as Rain.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -700,7 +700,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 206 - My Same.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -732,7 +732,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 207 - Make You Feel My Love.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -764,7 +764,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 208 - Daydreamer.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -796,7 +796,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 209 - Hometown Glory.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,
@ -828,7 +828,7 @@
{
"path": "/mnt/data1/ImportTest/19_no_tags/CD2/Adele - 19 - 210 - Many Shades of Black.mp3",
"fileTrackInfo": {
"artistTitleInfo": {
"authorTitleInfo": {
"year": 0
},
"discNumber": 0,

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"134f5f3e-8b5f-46ab-809d-8c0dbc794f3e"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "c296e10c-110a-4103-9e77-47bfebb7fb2e",
"author": "c296e10c-110a-4103-9e77-47bfebb7fb2e",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -158,9 +158,9 @@
"fileTrackInfo": {
"title": "Positive Vibration",
"cleanTitle": "Positive Vibration",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -195,9 +195,9 @@
"fileTrackInfo": {
"title": "Roots Rock Reggae",
"cleanTitle": "Roots Rock Reggae",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -232,9 +232,9 @@
"fileTrackInfo": {
"title": "Johnny Was",
"cleanTitle": "Johnny Was",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -269,9 +269,9 @@
"fileTrackInfo": {
"title": "Cry To Me",
"cleanTitle": "Cry To Me",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -306,9 +306,9 @@
"fileTrackInfo": {
"title": "Want More",
"cleanTitle": "Want More",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -343,9 +343,9 @@
"fileTrackInfo": {
"title": "Crazy Baldhead",
"cleanTitle": "Crazy Baldhead",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -380,9 +380,9 @@
"fileTrackInfo": {
"title": "Who The Cap Fit",
"cleanTitle": "Who The Cap Fit",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -417,9 +417,9 @@
"fileTrackInfo": {
"title": "Night Shift",
"cleanTitle": "Night Shift",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -454,9 +454,9 @@
"fileTrackInfo": {
"title": "War",
"cleanTitle": "War",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -491,9 +491,9 @@
"fileTrackInfo": {
"title": "Rat Race",
"cleanTitle": "Rat Race",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -528,9 +528,9 @@
"fileTrackInfo": {
"title": "Jah Live (Original Mix)",
"cleanTitle": "Jah Live (Original Mix)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -565,9 +565,9 @@
"fileTrackInfo": {
"title": "Concrete",
"cleanTitle": "Concrete",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -602,9 +602,9 @@
"fileTrackInfo": {
"title": "Roots Rock Reggae",
"cleanTitle": "Roots Rock Reggae",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -639,9 +639,9 @@
"fileTrackInfo": {
"title": "Roots Rock Dub",
"cleanTitle": "Roots Rock Dub",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -676,9 +676,9 @@
"fileTrackInfo": {
"title": "Want More (Alternate Mix)",
"cleanTitle": "Want More (Alternate Mix)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -713,9 +713,9 @@
"fileTrackInfo": {
"title": "Crazy Baldhead (Alternate Mix)",
"cleanTitle": "Crazy Baldhead (Alternate Mix)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -750,9 +750,9 @@
"fileTrackInfo": {
"title": "War (Alternate Mix)",
"cleanTitle": "War (Alternate Mix)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -787,9 +787,9 @@
"fileTrackInfo": {
"title": "Johnny Was (Alternate Mix)",
"cleanTitle": "Johnny Was (Alternate Mix)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -824,9 +824,9 @@
"fileTrackInfo": {
"title": "Introduction",
"cleanTitle": "Introduction",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -861,9 +861,9 @@
"fileTrackInfo": {
"title": "Trenchtown Rock (Live)",
"cleanTitle": "Trenchtown Rock (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -898,9 +898,9 @@
"fileTrackInfo": {
"title": "Burnin And Looting (Live)",
"cleanTitle": "Burnin And Looting (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -935,9 +935,9 @@
"fileTrackInfo": {
"title": "Them Belly Full (Live)",
"cleanTitle": "Them Belly Full (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -972,9 +972,9 @@
"fileTrackInfo": {
"title": "Rebel Music (Live)",
"cleanTitle": "Rebel Music (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1009,9 +1009,9 @@
"fileTrackInfo": {
"title": "I Shot The Sheriff (Live)",
"cleanTitle": "I Shot The Sheriff (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1046,9 +1046,9 @@
"fileTrackInfo": {
"title": "Want More (Live)",
"cleanTitle": "Want More (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1083,9 +1083,9 @@
"fileTrackInfo": {
"title": "No Woman No Cry (Live)",
"cleanTitle": "No Woman No Cry (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1120,9 +1120,9 @@
"fileTrackInfo": {
"title": "Lively Up Yourself (Live)",
"cleanTitle": "Lively Up Yourself (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1157,9 +1157,9 @@
"fileTrackInfo": {
"title": "Roots Rock Reggae (Live)",
"cleanTitle": "Roots Rock Reggae (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1194,9 +1194,9 @@
"fileTrackInfo": {
"title": "Rat Race (Live)",
"cleanTitle": "Rat Race (Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1231,9 +1231,9 @@
"fileTrackInfo": {
"title": "Smile Jamica (Part One Live)",
"cleanTitle": "Smile Jamica (Part One Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},
@ -1268,9 +1268,9 @@
"fileTrackInfo": {
"title": "Smile Jamica (Part 2 Live)",
"cleanTitle": "Smile Jamica (Part 2 Live)",
"artistTitle": "Bob Marley & The Wailers",
"albumTitle": "Rastaman Vibration (Remastered)",
"artistTitleInfo": {
"authorTitle": "Bob Marley & The Wailers",
"bookTitle": "Rastaman Vibration (Remastered)",
"authorTitleInfo": {
"title": "Bob Marley & The Wailers",
"year": 2002
},

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"0ce2d66f-e871-415a-9a85-e564f99d4021"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "7ac055fa-e357-4890-9098-010b8094a900",
"author": "7ac055fa-e357-4890-9098-010b8094a900",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": true
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -158,9 +158,9 @@
"fileTrackInfo": {
"title": "Touch Me When We're Dancing",
"cleanTitle": "Touch Me When We're Dancing",
"artistTitle": "Alabama",
"albumTitle": "The Touch",
"artistTitleInfo": {
"authorTitle": "Alabama",
"bookTitle": "The Touch",
"authorTitleInfo": {
"title": "Alabama",
"year": 1986
},

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"25f0fa1b-ae04-479a-a182-18a655ff6040"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "70248960-cb53-4ea4-943a-edb18f7d336f",
"author": "70248960-cb53-4ea4-943a-edb18f7d336f",
"metadataProfile": {
"name": "Album+Single",
"primaryAlbumTypes": [
"name": "Book+Single",
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": true
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
@ -154,13 +154,13 @@
"singleRelease": false,
"tracks": [
{
"path": "/mnt/data1/ReadarrTest/Bruce Springsteen/Album/10_Glory_Days.mp3",
"path": "/mnt/data1/ReadarrTest/Bruce Springsteen/Book/10_Glory_Days.mp3",
"fileTrackInfo": {
"title": "Glory Days",
"cleanTitle": "Glory Days",
"artistTitle": "Bruce Springsteen",
"albumTitle": "Born in the U.S.A.",
"artistTitleInfo": {
"authorTitle": "Bruce Springsteen",
"bookTitle": "Born in the U.S.A.",
"authorTitleInfo": {
"title": "Bruce Springsteen",
"year": 1984
},
@ -191,13 +191,13 @@
}
},
{
"path": "/mnt/data1/ReadarrTest/Bruce Springsteen/Album/11_Dancing_In_The_Dark.mp3",
"path": "/mnt/data1/ReadarrTest/Bruce Springsteen/Book/11_Dancing_In_The_Dark.mp3",
"fileTrackInfo": {
"title": "Dancing In The Dark",
"cleanTitle": "Dancing In The Dark",
"artistTitle": "Bruce Springsteen",
"albumTitle": "Born in the U.S.A.",
"artistTitleInfo": {
"authorTitle": "Bruce Springsteen",
"bookTitle": "Born in the U.S.A.",
"authorTitleInfo": {
"title": "Bruce Springsteen",
"year": 1984
},

@ -2,114 +2,114 @@
"expectedMusicBrainzReleaseIds": [
"4e2dd34f-53fe-4d54-b564-b14a2871505e"
],
"libraryArtists": [
"libraryAuthors": [
{
"artist": "6fe07aa5-fec0-4eca-a456-f29bff451b04",
"author": "6fe07aa5-fec0-4eca-a456-f29bff451b04",
"metadataProfile": {
"name": "Standard",
"primaryAlbumTypes": [
"primaryBookTypes": [
{
"primaryAlbumType": {
"primaryBookType": {
"id": 2,
"name": "Single"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 4,
"name": "Other"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 1,
"name": "EP"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 3,
"name": "Broadcast"
},
"allowed": false
},
{
"primaryAlbumType": {
"primaryBookType": {
"id": 0,
"name": "Album"
"name": "Book"
},
"allowed": true
}
],
"secondaryAlbumTypes": [
"secondaryBookTypes": [
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 0,
"name": "Studio"
},
"allowed": true
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 3,
"name": "Spokenword"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 2,
"name": "Soundtrack"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 7,
"name": "Remix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 9,
"name": "Mixtape/Street"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 6,
"name": "Live"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 4,
"name": "Interview"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 8,
"name": "DJ-mix"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 10,
"name": "Demo"
},
"allowed": false
},
{
"secondaryAlbumType": {
"secondaryBookType": {
"id": 1,
"name": "Compilation"
},
@ -158,9 +158,9 @@
"fileTrackInfo": {
"title": "Africa",
"cleanTitle": "Africa",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -196,9 +196,9 @@
"fileTrackInfo": {
"title": "Everybody Wants To Rule The World",
"cleanTitle": "Everybody Wants To Rule The World",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -234,9 +234,9 @@
"fileTrackInfo": {
"title": "Sweet Dreams (Are Made Of This)",
"cleanTitle": "Sweet Dreams (Are Made Of This)",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -272,9 +272,9 @@
"fileTrackInfo": {
"title": "Take On Me",
"cleanTitle": "Take On Me",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -310,9 +310,9 @@
"fileTrackInfo": {
"title": "Happy Together",
"cleanTitle": "Happy Together",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -348,9 +348,9 @@
"fileTrackInfo": {
"title": "Paranoid",
"cleanTitle": "Paranoid",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -386,9 +386,9 @@
"fileTrackInfo": {
"title": "Mr. Blue Sky",
"cleanTitle": "Mr. Blue Sky",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -424,9 +424,9 @@
"fileTrackInfo": {
"title": "No Scrubs",
"cleanTitle": "No Scrubs",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -462,9 +462,9 @@
"fileTrackInfo": {
"title": "Billie Jean",
"cleanTitle": "Billie Jean",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},
@ -500,9 +500,9 @@
"fileTrackInfo": {
"title": "Stand By Me",
"cleanTitle": "Stand By Me",
"artistTitle": "Weezer",
"albumTitle": "Weezer (Teal Album)",
"artistTitleInfo": {
"authorTitle": "Weezer",
"bookTitle": "Weezer (Teal Book)",
"authorTitleInfo": {
"title": "Weezer",
"year": 2019
},

@ -7,7 +7,7 @@
{
"groupId": 106951,
"groupName": "Shania Twain",
"artist": "Shania Twain",
"author": "Shania Twain",
"cover": "https:\\/\\/ptpimg.me\\/460az6.jpg",
"tags": [
"rock",
@ -16,7 +16,7 @@
"bookmarked": false,
"vanityHouse": false,
"groupYear": 1993,
"releaseType": "Album",
"releaseType": "Book",
"groupTime": "1512951473",
"maxSize": 653734702,
"totalSnatched": 33,
@ -26,7 +26,7 @@
{
"torrentId": 194008,
"editionId": 1,
"artists": [
"authors": [
{
"id": 9504,
"name": "Shania Twain",
@ -60,7 +60,7 @@
{
"torrentId": 230096,
"editionId": 1,
"artists": [
"authors": [
{
"id": 9504,
"name": "Shania Twain",
@ -94,7 +94,7 @@
{
"torrentId": 230086,
"editionId": 1,
"artists": [
"authors": [
{
"id": 9504,
"name": "Shania Twain",
@ -128,7 +128,7 @@
{
"torrentId": 1541452,
"editionId": 2,
"artists": [
"authors": [
{
"id": 9504,
"name": "Shania Twain",

@ -28,8 +28,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="492735000" />
<newznab:attr name="guid" value="38884827e1e56b9336278a449e0a38ec" />
<newznab:attr name="album" value="Scary Creatures" />
<newznab:attr name="artist" value="Brainstorm" />
<newznab:attr name="book" value="Scary Creatures" />
<newznab:attr name="author" value="Brainstorm" />
<newznab:attr name="label" value="AFM Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -49,8 +49,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="295696000" />
<newznab:attr name="guid" value="d6395e3218b0b2ed15cbc3743df77112" />
<newznab:attr name="album" value="Cautionary Tale" />
<newznab:attr name="artist" value="Dylan LeBlanc" />
<newznab:attr name="book" value="Cautionary Tale" />
<newznab:attr name="author" value="Dylan LeBlanc" />
<newznab:attr name="label" value="Single Lock Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Folk" />
@ -71,8 +71,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="608379000" />
<newznab:attr name="guid" value="dc3230ac8143dd9a2fab65c07ad0f295" />
<newznab:attr name="album" value="This Is Acting" />
<newznab:attr name="artist" value="Sia" />
<newznab:attr name="book" value="This Is Acting" />
<newznab:attr name="author" value="Sia" />
<newznab:attr name="label" value="Monkey Puzzle RecordsRCA Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -93,8 +93,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="908727000" />
<newznab:attr name="guid" value="a5560bb5ecf2ad19642527a567d427d0" />
<newznab:attr name="album" value="Leben II Explicit" />
<newznab:attr name="artist" value="Azad" />
<newznab:attr name="book" value="Leben II Explicit" />
<newznab:attr name="author" value="Azad" />
<newznab:attr name="label" value="Bozz Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rap &amp; Hip-Hop" />
@ -115,8 +115,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="693728000" />
<newznab:attr name="guid" value="eb42bbef1b5d8e0697962a291371655b" />
<newznab:attr name="album" value="Planeta Mix Hits 2016 Winter Edition" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Planeta Mix Hits 2016 Winter Edition" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Planet Dance Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -137,8 +137,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="557772000" />
<newznab:attr name="guid" value="812d0f7b9c38b6989d07c125eb35eabd" />
<newznab:attr name="album" value="Into the Legend" />
<newznab:attr name="artist" value="Rhapsody Of Fire" />
<newznab:attr name="book" value="Into the Legend" />
<newznab:attr name="author" value="Rhapsody Of Fire" />
<newznab:attr name="label" value="AFM Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -159,8 +159,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="433859000" />
<newznab:attr name="guid" value="6ac8a40d20fb27a3d8fc11cb41afae4b" />
<newznab:attr name="album" value="Dystopia" />
<newznab:attr name="artist" value="Megadeth" />
<newznab:attr name="book" value="Dystopia" />
<newznab:attr name="author" value="Megadeth" />
<newznab:attr name="label" value="UMeTBoy Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -181,8 +181,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="409419000" />
<newznab:attr name="guid" value="36b4176e900767359b5ad2cb5c3b9906" />
<newznab:attr name="album" value="Wildfire" />
<newznab:attr name="artist" value="Rachel Platten" />
<newznab:attr name="book" value="Wildfire" />
<newznab:attr name="author" value="Rachel Platten" />
<newznab:attr name="label" value="Columbia" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -203,8 +203,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="602702000" />
<newznab:attr name="guid" value="fc1aaca4356bef96677483c7da2b5693" />
<newznab:attr name="album" value="For All Kings" />
<newznab:attr name="artist" value="Anthrax" />
<newznab:attr name="book" value="For All Kings" />
<newznab:attr name="author" value="Anthrax" />
<newznab:attr name="label" value="Megaforce" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -225,8 +225,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="331143000" />
<newznab:attr name="guid" value="c14b90c40483c0fe9ab9e93541453449" />
<newznab:attr name="album" value="Rare Breed" />
<newznab:attr name="artist" value="Shrine, The" />
<newznab:attr name="book" value="Rare Breed" />
<newznab:attr name="author" value="Shrine, The" />
<newznab:attr name="label" value="Century Media" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -247,8 +247,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="512689000" />
<newznab:attr name="guid" value="cf9908f3c878107d84c015aad48b8845" />
<newznab:attr name="album" value="For All Kings" />
<newznab:attr name="artist" value="Anthrax" />
<newznab:attr name="book" value="For All Kings" />
<newznab:attr name="author" value="Anthrax" />
<newznab:attr name="label" value="Megaforce" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -269,8 +269,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="164608000" />
<newznab:attr name="guid" value="06dcfac7a4b7f46dc1e9ec483f8ec73f" />
<newznab:attr name="album" value="For All Kings" />
<newznab:attr name="artist" value="Anthrax" />
<newznab:attr name="book" value="For All Kings" />
<newznab:attr name="author" value="Anthrax" />
<newznab:attr name="label" value="Megaforce" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -291,8 +291,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="116494000" />
<newznab:attr name="guid" value="952effe2dc87e5d1c271d5ea8fa3801f" />
<newznab:attr name="album" value="Exoplanet" />
<newznab:attr name="artist" value="Contortionist, The" />
<newznab:attr name="book" value="Exoplanet" />
<newznab:attr name="author" value="Contortionist, The" />
<newznab:attr name="label" value="Good Fight Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -313,8 +313,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="627256000" />
<newznab:attr name="guid" value="474de3b6fe44b3190bf35fba59328327" />
<newznab:attr name="album" value="Hard Bass 2016" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Hard Bass 2016" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Imports" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -335,8 +335,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="400294000" />
<newznab:attr name="guid" value="31c118f3e86f87b071768a7e090176d1" />
<newznab:attr name="album" value="This Is Acting" />
<newznab:attr name="artist" value="Sia" />
<newznab:attr name="book" value="This Is Acting" />
<newznab:attr name="author" value="Sia" />
<newznab:attr name="label" value="Monkey Puzzle RecordsRCA Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -357,8 +357,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="549938000" />
<newznab:attr name="guid" value="664f15bd457f6669745fa494091f8108" />
<newznab:attr name="album" value="Monsieur Fall" />
<newznab:attr name="artist" value="Lefa" />
<newznab:attr name="book" value="Monsieur Fall" />
<newznab:attr name="author" value="Lefa" />
<newznab:attr name="label" value="Imports" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -379,8 +379,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="624799000" />
<newznab:attr name="guid" value="a57f2a5d61f0b403b05904dc0e8a0d9e" />
<newznab:attr name="album" value="Now Thats What I Call Classic Rock" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Now Thats What I Call Classic Rock" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="NOW Joint Venture" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -401,8 +401,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="971446000" />
<newznab:attr name="guid" value="6b0315222a1df2a4b07f2681a9dbbc41" />
<newznab:attr name="album" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="artist" value="Anime" />
<newznab:attr name="book" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="author" value="Anime" />
<newznab:attr name="genre" value="Hardcore" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="5" />
@ -421,8 +421,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="154908000" />
<newznab:attr name="guid" value="51ac24dbb3122346e6fa2860efc3cff7" />
<newznab:attr name="album" value="Absolute Uplifter, Vol 2 Euphoric Trance" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Absolute Uplifter, Vol 2 Euphoric Trance" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Rimoshee Traxx" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -443,8 +443,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="358513000" />
<newznab:attr name="guid" value="d9e64c5efa86444f4c227fc99c155861" />
<newznab:attr name="album" value="The Gift Of Music" />
<newznab:attr name="artist" value="Dream Theater" />
<newznab:attr name="book" value="The Gift Of Music" />
<newznab:attr name="author" value="Dream Theater" />
<newznab:attr name="label" value="Roadrunner Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -465,8 +465,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="152033000" />
<newznab:attr name="guid" value="0d720fffa565fd1ab16f2f1eb8ef2129" />
<newznab:attr name="album" value="The End" />
<newznab:attr name="artist" value="Black Sabbath" />
<newznab:attr name="book" value="The End" />
<newznab:attr name="author" value="Black Sabbath" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="341" />
<newznab:attr name="usenetdate" value="Mon, 25 Jan 2016 18:52:05 +0000" />
@ -484,8 +484,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="253814000" />
<newznab:attr name="guid" value="0040f26df09ad3b0742f3b32afe7f3ab" />
<newznab:attr name="album" value="Status Quo Remastered Explicit" />
<newznab:attr name="artist" value="Status Quo Quo" />
<newznab:attr name="book" value="Status Quo Remastered Explicit" />
<newznab:attr name="author" value="Status Quo Quo" />
<newznab:attr name="label" value="Sidipus Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -506,8 +506,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="307205000" />
<newznab:attr name="guid" value="b0109c03014ff38a7b080e4791a31cb1" />
<newznab:attr name="album" value="Polonaise Deel 12" />
<newznab:attr name="artist" value="Stanneke amp Goldfinger" />
<newznab:attr name="book" value="Polonaise Deel 12" />
<newznab:attr name="author" value="Stanneke amp Goldfinger" />
<newznab:attr name="genre" value="Folk" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="3" />
@ -526,8 +526,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="139348000" />
<newznab:attr name="guid" value="3606e4c22779a8aa9da0fda29c851913" />
<newznab:attr name="album" value="From Glory Towards Void" />
<newznab:attr name="artist" value="Lutece" />
<newznab:attr name="book" value="From Glory Towards Void" />
<newznab:attr name="author" value="Lutece" />
<newznab:attr name="label" value="Dooweet Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Classical" />
@ -548,8 +548,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="85396000" />
<newznab:attr name="guid" value="94b8ed888b3b42279961c3472e0b080d" />
<newznab:attr name="album" value="II" />
<newznab:attr name="artist" value="The Black Market Trust" />
<newznab:attr name="book" value="II" />
<newznab:attr name="author" value="The Black Market Trust" />
<newznab:attr name="genre" value="Vocal Jazz; Pop" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="usenetdate" value="Mon, 25 Jan 2016 04:00:51 +0000" />
@ -567,8 +567,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="494061000" />
<newznab:attr name="guid" value="ab70097392213165d77bc41b5375aa4a" />
<newznab:attr name="album" value="Winter Thrice" />
<newznab:attr name="artist" value="Borknagar" />
<newznab:attr name="book" value="Winter Thrice" />
<newznab:attr name="author" value="Borknagar" />
<newznab:attr name="label" value="Century Media" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -589,8 +589,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="157346000" />
<newznab:attr name="guid" value="e562e530012f8e7b8e0340baed72060e" />
<newznab:attr name="album" value="Straight Outta Compton Original Motion Picture Score" />
<newznab:attr name="artist" value="Joseph Trapanese" />
<newznab:attr name="book" value="Straight Outta Compton Original Motion Picture Score" />
<newznab:attr name="author" value="Joseph Trapanese" />
<newznab:attr name="label" value="UME" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Soundtracks" />
@ -611,8 +611,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="344739000" />
<newznab:attr name="guid" value="1b1d1cf2690e9cf344968d6e4cd5432f" />
<newznab:attr name="album" value="Deephouse Top 100 Vol3" />
<newznab:attr name="artist" value="VA" />
<newznab:attr name="book" value="Deephouse Top 100 Vol3" />
<newznab:attr name="author" value="VA" />
<newznab:attr name="genre" value="House" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="6" />
@ -631,8 +631,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="344739000" />
<newznab:attr name="guid" value="bde795d6aa76e337ca996075d092f79a" />
<newznab:attr name="album" value="Deephouse Top 100 Vol3" />
<newznab:attr name="artist" value="VA" />
<newznab:attr name="book" value="Deephouse Top 100 Vol3" />
<newznab:attr name="author" value="VA" />
<newznab:attr name="genre" value="House" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="8" />
@ -651,8 +651,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="627117000" />
<newznab:attr name="guid" value="4deac3811667801dce66637d05f4e6ca" />
<newznab:attr name="album" value="2016 GRAMMY Nominees" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="2016 GRAMMY Nominees" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="NARAS Grammy Nominees Republic" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -673,8 +673,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="109371000" />
<newznab:attr name="guid" value="ba6e1b072dc863b65c1ea73c8c0994f3" />
<newznab:attr name="album" value="Aus Dem Schatten" />
<newznab:attr name="artist" value="Dvalin" />
<newznab:attr name="book" value="Aus Dem Schatten" />
<newznab:attr name="author" value="Dvalin" />
<newznab:attr name="label" value="Imports" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -695,8 +695,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="24272000" />
<newznab:attr name="guid" value="c6cca22fbd4e5c21584a88d7f7324965" />
<newznab:attr name="album" value="Pond Scum" />
<newznab:attr name="artist" value="Bonnie Prince Billy" />
<newznab:attr name="book" value="Pond Scum" />
<newznab:attr name="author" value="Bonnie Prince Billy" />
<newznab:attr name="label" value="Drag City" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -717,8 +717,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="456256000" />
<newznab:attr name="guid" value="c3a554620060484770cd0d2034b5191d" />
<newznab:attr name="album" value="Urban Vibes, Vol 15 the Underground Sound of House Music" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Urban Vibes, Vol 15 the Underground Sound of House Music" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Recovery House" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -739,8 +739,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="456256000" />
<newznab:attr name="guid" value="19ad406b3e21480794e5905f335fe19c" />
<newznab:attr name="album" value="Urban Vibes, Vol 15 the Underground Sound of House Music" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Urban Vibes, Vol 15 the Underground Sound of House Music" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Recovery House" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -761,8 +761,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="358555000" />
<newznab:attr name="guid" value="44905e4b6dd3be7488dce4959d23103a" />
<newznab:attr name="album" value="Handsup Hits 2 Explicit" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Handsup Hits 2 Explicit" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Earthquake" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -783,8 +783,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="358555000" />
<newznab:attr name="guid" value="32968fa3ecc7f15d9145477dc3f823aa" />
<newznab:attr name="album" value="Handsup Hits 2 Explicit" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Handsup Hits 2 Explicit" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Earthquake" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -805,8 +805,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="1324404000" />
<newznab:attr name="guid" value="878d45b6cac8ccdb8d80ae60ae581af8" />
<newznab:attr name="album" value="Ultimate Trance Reflections" />
<newznab:attr name="artist" value="MKampTW" />
<newznab:attr name="book" value="Ultimate Trance Reflections" />
<newznab:attr name="author" value="MKampTW" />
<newznab:attr name="genre" value="Trance" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="4" />
@ -825,8 +825,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="111538000" />
<newznab:attr name="guid" value="81f9e2d70f1164aef1a9543ccf817331" />
<newznab:attr name="album" value="Descent" />
<newznab:attr name="artist" value="Highborne" />
<newznab:attr name="book" value="Descent" />
<newznab:attr name="author" value="Highborne" />
<newznab:attr name="label" value="Imminent Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -847,8 +847,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="117578000" />
<newznab:attr name="guid" value="da8c9de4ee5e9a4362dcac650ae42ef7" />
<newznab:attr name="album" value="L2l" />
<newznab:attr name="artist" value="Lifelss 2 Life" />
<newznab:attr name="book" value="L2l" />
<newznab:attr name="author" value="Lifelss 2 Life" />
<newznab:attr name="label" value="Unsigned" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Christian &amp; Gospel" />
@ -869,8 +869,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="110230000" />
<newznab:attr name="guid" value="682506affbe0a2aaccc0f5f830e5349e" />
<newznab:attr name="album" value="Blackened Visions" />
<newznab:attr name="artist" value="Lumberjack Feedback" />
<newznab:attr name="book" value="Blackened Visions" />
<newznab:attr name="author" value="Lumberjack Feedback" />
<newznab:attr name="label" value="KAOTOXIN" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -891,8 +891,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="120720000" />
<newznab:attr name="guid" value="6a1b8e3bdae227fc1f6d1a1819123ea0" />
<newznab:attr name="album" value="The Same Old Stories" />
<newznab:attr name="artist" value="Semidimes" />
<newznab:attr name="book" value="The Same Old Stories" />
<newznab:attr name="author" value="Semidimes" />
<newznab:attr name="label" value="Gateways Productions Art Gates Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -913,8 +913,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="105702000" />
<newznab:attr name="guid" value="6afe8e823a75b1e122701e58ef31f4ed" />
<newznab:attr name="album" value="Rare Breed" />
<newznab:attr name="artist" value="Shrine, The" />
<newznab:attr name="book" value="Rare Breed" />
<newznab:attr name="author" value="Shrine, The" />
<newznab:attr name="label" value="Century Media" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -935,8 +935,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="121798000" />
<newznab:attr name="guid" value="c8d7048ddbb7044eecb3722dd532f2b9" />
<newznab:attr name="album" value="Exoplanet" />
<newznab:attr name="artist" value="Contortionist, The" />
<newznab:attr name="book" value="Exoplanet" />
<newznab:attr name="author" value="Contortionist, The" />
<newznab:attr name="label" value="Good Fight Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -957,8 +957,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="138935000" />
<newznab:attr name="guid" value="ec0d7b18c13a076f6417ca7da1018c04" />
<newznab:attr name="album" value="Dystopia" />
<newznab:attr name="artist" value="Megadeth" />
<newznab:attr name="book" value="Dystopia" />
<newznab:attr name="author" value="Megadeth" />
<newznab:attr name="label" value="UMeTBoy Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -979,8 +979,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="100495000" />
<newznab:attr name="guid" value="fef4f9ead88a88d33253efdc25909263" />
<newznab:attr name="album" value="Klein Geluk" />
<newznab:attr name="artist" value="Will Tura" />
<newznab:attr name="book" value="Klein Geluk" />
<newznab:attr name="author" value="Will Tura" />
<newznab:attr name="label" value="Universal Music Belgium" />
<newznab:attr name="genre" value="Folk" />
<newznab:attr name="year" value="2016" />
@ -1000,8 +1000,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="124254000" />
<newznab:attr name="guid" value="a932af5da0bc8e35967f4b00f72b2790" />
<newznab:attr name="album" value="Winter Thrice" />
<newznab:attr name="artist" value="Borknagar" />
<newznab:attr name="book" value="Winter Thrice" />
<newznab:attr name="author" value="Borknagar" />
<newznab:attr name="label" value="Century Media" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1022,8 +1022,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="491897000" />
<newznab:attr name="guid" value="8a5309e266d1fb7676dff6c256de0b6a" />
<newznab:attr name="album" value="Media Markt TOP 40 2016 WEEK 04" />
<newznab:attr name="artist" value="Justin Bieber" />
<newznab:attr name="book" value="Media Markt TOP 40 2016 WEEK 04" />
<newznab:attr name="author" value="Justin Bieber" />
<newznab:attr name="genre" value="Top 40" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="4" />
@ -1042,8 +1042,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="393058000" />
<newznab:attr name="guid" value="3a1cd051d0d477f35e9255fcbc77b0c9" />
<newznab:attr name="album" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="artist" value="Anime" />
<newznab:attr name="book" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="author" value="Anime" />
<newznab:attr name="genre" value="Hardcore" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="4" />
@ -1062,8 +1062,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="228128000" />
<newznab:attr name="guid" value="7cf3e8abcb2a7ac2e660b97d2d7df788" />
<newznab:attr name="album" value="Number Two Explicit" />
<newznab:attr name="artist" value="Turkish Techno" />
<newznab:attr name="book" value="Number Two Explicit" />
<newznab:attr name="author" value="Turkish Techno" />
<newznab:attr name="label" value="Dirt Cult Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />
@ -1084,8 +1084,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="480863000" />
<newznab:attr name="guid" value="31482d6031794cfb9cb52eedd4e8b960" />
<newznab:attr name="album" value="Dystopia" />
<newznab:attr name="artist" value="Megadeth" />
<newznab:attr name="book" value="Dystopia" />
<newznab:attr name="author" value="Megadeth" />
<newznab:attr name="label" value="UMeTBoy Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1106,8 +1106,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="264470000" />
<newznab:attr name="guid" value="7fdf940f3d459c1e33c31d6a89ef13f2" />
<newznab:attr name="album" value="Love Dont Live Here Explicit" />
<newznab:attr name="artist" value="Lionheart" />
<newznab:attr name="book" value="Love Dont Live Here Explicit" />
<newznab:attr name="author" value="Lionheart" />
<newznab:attr name="label" value="LHHC RECORDS" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1128,8 +1128,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="517476000" />
<newznab:attr name="guid" value="6bbf1e1423d477a6f942224e54eac60b" />
<newznab:attr name="album" value="House Clubhits Megamix Vol6" />
<newznab:attr name="artist" value="VA" />
<newznab:attr name="book" value="House Clubhits Megamix Vol6" />
<newznab:attr name="author" value="VA" />
<newznab:attr name="genre" value="House" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="10" />
@ -1148,8 +1148,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="337003000" />
<newznab:attr name="guid" value="a88a5cc38ea18ea66e4e2b6ab918a0b8" />
<newznab:attr name="album" value="Wildfire" />
<newznab:attr name="artist" value="Rachel Platten" />
<newznab:attr name="book" value="Wildfire" />
<newznab:attr name="author" value="Rachel Platten" />
<newznab:attr name="label" value="Columbia" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -1170,8 +1170,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="319452000" />
<newznab:attr name="guid" value="427874c8793cdbf0998d1271b5523b49" />
<newznab:attr name="album" value="Moth" />
<newznab:attr name="artist" value="Chairlift" />
<newznab:attr name="book" value="Moth" />
<newznab:attr name="author" value="Chairlift" />
<newznab:attr name="label" value="Columbia" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />
@ -1192,8 +1192,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="393726000" />
<newznab:attr name="guid" value="573e6c6b7320094b89a9135538559f21" />
<newznab:attr name="album" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="artist" value="Anime" />
<newznab:attr name="book" value="Exterminate Extended DJ Versions WEB" />
<newznab:attr name="author" value="Anime" />
<newznab:attr name="genre" value="Hardcore" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="3" />
@ -1212,8 +1212,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="215392000" />
<newznab:attr name="guid" value="e3e39d2cac1e2f7b509d02f8391ec0ac" />
<newznab:attr name="album" value="Crack House Explicit" />
<newznab:attr name="artist" value="Danforth" />
<newznab:attr name="book" value="Crack House Explicit" />
<newznab:attr name="author" value="Danforth" />
<newznab:attr name="label" value="Danforth Hardcore Paris" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />
@ -1234,8 +1234,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="483771000" />
<newznab:attr name="guid" value="5011e7db085ac89d11c6a6378ca7d7d2" />
<newznab:attr name="album" value="Monster Tape" />
<newznab:attr name="artist" value="Rimk" />
<newznab:attr name="book" value="Monster Tape" />
<newznab:attr name="author" value="Rimk" />
<newznab:attr name="label" value="Imports" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Pop" />
@ -1256,8 +1256,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="580190000" />
<newznab:attr name="guid" value="b00e5ec0b5466aaf1b5ae33d0e7c7036" />
<newznab:attr name="album" value="Fin de Dream Avant Gotham City Explicit" />
<newznab:attr name="artist" value="HMagnum" />
<newznab:attr name="book" value="Fin de Dream Avant Gotham City Explicit" />
<newznab:attr name="author" value="HMagnum" />
<newznab:attr name="label" value="Loudschool" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="World Music" />
@ -1278,8 +1278,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="2786608000" />
<newznab:attr name="guid" value="7cf1334353e9196b8473f0ea361c099b" />
<newznab:attr name="album" value="Hard Bass 2016" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Hard Bass 2016" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Imports" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -1300,8 +1300,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="329213000" />
<newznab:attr name="guid" value="34f4a16d0bb579dde38de29f716f1bdf" />
<newznab:attr name="album" value="Cautionary Tale" />
<newznab:attr name="artist" value="Dylan LeBlanc" />
<newznab:attr name="book" value="Cautionary Tale" />
<newznab:attr name="author" value="Dylan LeBlanc" />
<newznab:attr name="label" value="Single Lock Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Folk" />
@ -1322,8 +1322,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="44773000" />
<newznab:attr name="guid" value="d47f7d44a4aef15259e21323f3780ec1" />
<newznab:attr name="album" value="Jan 20 2016" />
<newznab:attr name="artist" value="Howard Stern Show" />
<newznab:attr name="book" value="Jan 20 2016" />
<newznab:attr name="author" value="Howard Stern Show" />
<newznab:attr name="genre" value="Comedy" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="7" />
@ -1342,8 +1342,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="28241000" />
<newznab:attr name="guid" value="2dc103b2b15a63f2779e36dd7cf40232" />
<newznab:attr name="album" value="Cautionary Tale" />
<newznab:attr name="artist" value="Dylan LeBlanc" />
<newznab:attr name="book" value="Cautionary Tale" />
<newznab:attr name="author" value="Dylan LeBlanc" />
<newznab:attr name="label" value="Single Lock Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Folk" />
@ -1364,8 +1364,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="44754000" />
<newznab:attr name="guid" value="be3cf337f012387b0e26c5e3a9c51281" />
<newznab:attr name="album" value="Jan 20 2016" />
<newznab:attr name="artist" value="Howard Stern Show" />
<newznab:attr name="book" value="Jan 20 2016" />
<newznab:attr name="author" value="Howard Stern Show" />
<newznab:attr name="genre" value="Comedy" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="7" />
@ -1384,8 +1384,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="44763000" />
<newznab:attr name="guid" value="218d85679fdc286720b35763380d715b" />
<newznab:attr name="album" value="Jan 20 2016" />
<newznab:attr name="artist" value="Howard Stern Show" />
<newznab:attr name="book" value="Jan 20 2016" />
<newznab:attr name="author" value="Howard Stern Show" />
<newznab:attr name="genre" value="Comedy" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="7" />
@ -1404,8 +1404,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="393377000" />
<newznab:attr name="guid" value="158c3782cbb82996b0a67dc43b5ad87b" />
<newznab:attr name="album" value="NRJ Winter Hits 2016" />
<newznab:attr name="artist" value="Justin Bieber" />
<newznab:attr name="book" value="NRJ Winter Hits 2016" />
<newznab:attr name="author" value="Justin Bieber" />
<newznab:attr name="genre" value="Pop" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="8" />
@ -1424,8 +1424,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="42361000" />
<newznab:attr name="guid" value="fbc231e82faef5759a9742f678946e78" />
<newznab:attr name="album" value="Jan 20 2016" />
<newznab:attr name="artist" value="Howard Stern Show" />
<newznab:attr name="book" value="Jan 20 2016" />
<newznab:attr name="author" value="Howard Stern Show" />
<newznab:attr name="genre" value="Comedy" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="8" />
@ -1444,8 +1444,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="41082000" />
<newznab:attr name="guid" value="2a6101c2e09ba53517186c3f211525c0" />
<newznab:attr name="album" value="Jan 20 2016" />
<newznab:attr name="artist" value="Howard Stern Show" />
<newznab:attr name="book" value="Jan 20 2016" />
<newznab:attr name="author" value="Howard Stern Show" />
<newznab:attr name="genre" value="Comedy" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="8" />
@ -1464,8 +1464,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="991267000" />
<newznab:attr name="guid" value="b051509428cf7d265677e57e55e21a78" />
<newznab:attr name="album" value="German Top 100 Single Charts 16 Jan 2016" />
<newznab:attr name="artist" value="Adele" />
<newznab:attr name="book" value="German Top 100 Single Charts 16 Jan 2016" />
<newznab:attr name="author" value="Adele" />
<newznab:attr name="genre" value="Pop" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="6" />
@ -1484,8 +1484,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="672245000" />
<newznab:attr name="guid" value="f6263050e63c48b3c169deea08019ae2" />
<newznab:attr name="album" value="DJ Sounds 20161" />
<newznab:attr name="artist" value="Avicii" />
<newznab:attr name="book" value="DJ Sounds 20161" />
<newznab:attr name="author" value="Avicii" />
<newznab:attr name="label" value="Pink Revolver" />
<newznab:attr name="genre" value="Dance" />
<newznab:attr name="year" value="2016" />
@ -1505,8 +1505,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="672245000" />
<newznab:attr name="guid" value="6ce01dc1a826621c1892276af045b938" />
<newznab:attr name="album" value="DJ Sounds 20161" />
<newznab:attr name="artist" value="Avicii" />
<newznab:attr name="book" value="DJ Sounds 20161" />
<newznab:attr name="author" value="Avicii" />
<newznab:attr name="label" value="Pink Revolver" />
<newznab:attr name="genre" value="Dance" />
<newznab:attr name="year" value="2016" />
@ -1526,8 +1526,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="135093000" />
<newznab:attr name="guid" value="be1bd46c6ecdf495bfcc780137853514" />
<newznab:attr name="album" value="Caged In Memories" />
<newznab:attr name="artist" value="Anima Tempo" />
<newznab:attr name="book" value="Caged In Memories" />
<newznab:attr name="author" value="Anima Tempo" />
<newznab:attr name="genre" value="Metal" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="4" />
@ -1546,8 +1546,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="303751000" />
<newznab:attr name="guid" value="2408b6aff117464c5a577dcc35b8bac1" />
<newznab:attr name="album" value="Into the Legend" />
<newznab:attr name="artist" value="Rhapsody Of Fire" />
<newznab:attr name="book" value="Into the Legend" />
<newznab:attr name="author" value="Rhapsody Of Fire" />
<newznab:attr name="label" value="AFM Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1568,8 +1568,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="220695000" />
<newznab:attr name="guid" value="0eee04bc2599d4b9627944cc3fef6b0a" />
<newznab:attr name="album" value="Scary Creatures" />
<newznab:attr name="artist" value="Brainstorm" />
<newznab:attr name="book" value="Scary Creatures" />
<newznab:attr name="author" value="Brainstorm" />
<newznab:attr name="label" value="AFM Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1590,8 +1590,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="661012000" />
<newznab:attr name="guid" value="be4ac48e3a40631b3611cd50bb471841" />
<newznab:attr name="album" value="Hardstyle The Annual 2016 Explicit" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Hardstyle The Annual 2016 Explicit" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Be Yourself Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -1612,7 +1612,7 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="271778000" />
<newznab:attr name="guid" value="e2afc175525a5ea0f5269ef5a03b507d" />
<newznab:attr name="artist" value="Benjamin Bluemchen" />
<newznab:attr name="author" value="Benjamin Bluemchen" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />
<newznab:attr name="year" value="2016" />
@ -1632,8 +1632,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="117666000" />
<newznab:attr name="guid" value="59b0acad0a23ae5c0ccf2ef7a9d994b6" />
<newznab:attr name="album" value="Melancholia" />
<newznab:attr name="artist" value="Tribulation" />
<newznab:attr name="book" value="Melancholia" />
<newznab:attr name="author" value="Tribulation" />
<newznab:attr name="label" value="Century Media" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1654,8 +1654,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="205842000" />
<newznab:attr name="guid" value="f55fd82e73969feee4a18a561bf61df1" />
<newznab:attr name="album" value="A State Of Trance Radio Top 20 January 2016" />
<newznab:attr name="artist" value="Dash Berlin" />
<newznab:attr name="book" value="A State Of Trance Radio Top 20 January 2016" />
<newznab:attr name="author" value="Dash Berlin" />
<newznab:attr name="genre" value="Trance" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="14" />
@ -1674,8 +1674,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="145323000" />
<newznab:attr name="guid" value="39992159d6488a00adcfb39ee26408e8" />
<newznab:attr name="album" value="Tanz Der Skelette Folge 48 by Videomann" />
<newznab:attr name="artist" value="Die Drei Fragezeichen Kids" />
<newznab:attr name="book" value="Tanz Der Skelette Folge 48 by Videomann" />
<newznab:attr name="author" value="Die Drei Fragezeichen Kids" />
<newznab:attr name="genre" value="Hoerspiel" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="usenetdate" value="Sun, 17 Jan 2016 00:01:02 +0000" />
@ -1693,8 +1693,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="145144000" />
<newznab:attr name="guid" value="9568ef54e722af0d827fadd7c4f3719e" />
<newznab:attr name="album" value="Tanz Der Skelette Folge 48 by Videomann" />
<newznab:attr name="artist" value="Die Drei Fragezeichen Kids" />
<newznab:attr name="book" value="Tanz Der Skelette Folge 48 by Videomann" />
<newznab:attr name="author" value="Die Drei Fragezeichen Kids" />
<newznab:attr name="genre" value="Hoerspiel" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="usenetdate" value="Sun, 17 Jan 2016 00:01:02 +0000" />
@ -1712,8 +1712,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="303085000" />
<newznab:attr name="guid" value="7a545e70c7fb59de811a164089ca3cd4" />
<newznab:attr name="album" value="Deep Nirvana, Vol 4 25 DeepHouse Tunes" />
<newznab:attr name="artist" value="Deep Nirvana Vol 4 25 Deep" />
<newznab:attr name="book" value="Deep Nirvana, Vol 4 25 DeepHouse Tunes" />
<newznab:attr name="author" value="Deep Nirvana Vol 4 25 Deep" />
<newznab:attr name="label" value="Groove Nation" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -1734,8 +1734,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="626000000" />
<newznab:attr name="guid" value="03a7c325f9c7f5c90d3a0b9200f58b86" />
<newznab:attr name="album" value="Straight Outta Compton Music From The Motion Picture Explicit" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Straight Outta Compton Music From The Motion Picture Explicit" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="UME" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Soundtracks" />
@ -1757,8 +1757,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="460165000" />
<newznab:attr name="guid" value="201513128394d6471174f4c42d73e26c" />
<newznab:attr name="album" value="The Infinite Steve Vai An Anthology" />
<newznab:attr name="artist" value="Steve Vai" />
<newznab:attr name="book" value="The Infinite Steve Vai An Anthology" />
<newznab:attr name="author" value="Steve Vai" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="9" />
<newznab:attr name="usenetdate" value="Sat, 16 Jan 2016 11:49:53 +0000" />
@ -1776,7 +1776,7 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="190955000" />
<newznab:attr name="guid" value="577a981b680b896fce8bb8a5c6829c4d" />
<newznab:attr name="artist" value="Varg" />
<newznab:attr name="author" value="Varg" />
<newznab:attr name="label" value="Napalm Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1797,8 +1797,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="133681000" />
<newznab:attr name="guid" value="8297d9b82646f8aff603b1f8b277d673" />
<newznab:attr name="album" value="Motvind" />
<newznab:attr name="artist" value="Nifrost" />
<newznab:attr name="book" value="Motvind" />
<newznab:attr name="author" value="Nifrost" />
<newznab:attr name="label" value="IndiGoBoom" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -1819,8 +1819,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="158783000" />
<newznab:attr name="guid" value="5c3ef6652729ed046a22f5b749b6c8f1" />
<newznab:attr name="album" value="Die Rache des Untoten Folge 179 by Videomann" />
<newznab:attr name="artist" value="Die drei Fragezeichen" />
<newznab:attr name="book" value="Die Rache des Untoten Folge 179 by Videomann" />
<newznab:attr name="author" value="Die drei Fragezeichen" />
<newznab:attr name="genre" value="Hoespiel" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="7" />
@ -1839,8 +1839,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="384044000" />
<newznab:attr name="guid" value="f8b01b2bf982572922980b45ed587d47" />
<newznab:attr name="album" value="The Best Deep House, Vol 1" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="The Best Deep House, Vol 1" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Twentythree Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -1861,8 +1861,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="485959000" />
<newznab:attr name="guid" value="dc53f812c384fadc25af8d800e3870a3" />
<newznab:attr name="album" value="Hand aufs Herz Explicit" />
<newznab:attr name="artist" value="Unantastbar" />
<newznab:attr name="book" value="Hand aufs Herz Explicit" />
<newznab:attr name="author" value="Unantastbar" />
<newznab:attr name="label" value="RookiesampKings" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rock" />
@ -1883,8 +1883,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="371163000" />
<newznab:attr name="guid" value="288cd748eb0de993baad85d0ed13b0d2" />
<newznab:attr name="album" value="Tiergarten Explicit" />
<newznab:attr name="artist" value="Terrorgruppe" />
<newznab:attr name="book" value="Tiergarten Explicit" />
<newznab:attr name="author" value="Terrorgruppe" />
<newznab:attr name="label" value="AggropopRecords" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />
@ -1905,8 +1905,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="412969000" />
<newznab:attr name="guid" value="031f0dc6f560180a935521a35bc11170" />
<newznab:attr name="album" value="Hardstyle Sounds Vol05" />
<newznab:attr name="artist" value="VA" />
<newznab:attr name="book" value="Hardstyle Sounds Vol05" />
<newznab:attr name="author" value="VA" />
<newznab:attr name="label" value="I Love This Sound" />
<newznab:attr name="genre" value="Techno" />
<newznab:attr name="year" value="2016" />
@ -1926,8 +1926,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="444843000" />
<newznab:attr name="guid" value="8ce80d7775a0ef8799d91b432f842194" />
<newznab:attr name="album" value="Media Markt TOP 40 2016 WEEK 03" />
<newznab:attr name="artist" value="Justin Bieber" />
<newznab:attr name="book" value="Media Markt TOP 40 2016 WEEK 03" />
<newznab:attr name="author" value="Justin Bieber" />
<newznab:attr name="genre" value="Top 40" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="2" />
@ -1946,8 +1946,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="444843000" />
<newznab:attr name="guid" value="13763b97f75ee8245f9fb14f5ea0b5c7" />
<newznab:attr name="album" value="Media Markt TOP 40 2016 WEEK 03" />
<newznab:attr name="artist" value="Justin Bieber" />
<newznab:attr name="book" value="Media Markt TOP 40 2016 WEEK 03" />
<newznab:attr name="author" value="Justin Bieber" />
<newznab:attr name="genre" value="Top 40" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="4" />
@ -1966,8 +1966,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="345186000" />
<newznab:attr name="guid" value="8bb7a0045f07af8a39ae4568d366b2ca" />
<newznab:attr name="album" value="House Do Brasil, Vol 2" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="House Do Brasil, Vol 2" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="label" value="Gaathy Recordings" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Dance &amp; Electronic" />
@ -1988,8 +1988,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="233252000" />
<newznab:attr name="guid" value="802c4caf3ac508b49abcd9a5f06ec97c" />
<newznab:attr name="album" value="Rinse FM 01012016" />
<newznab:attr name="artist" value="Todd Edwards" />
<newznab:attr name="book" value="Rinse FM 01012016" />
<newznab:attr name="author" value="Todd Edwards" />
<newznab:attr name="genre" value="House" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="2" />
@ -2008,8 +2008,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="414959000" />
<newznab:attr name="guid" value="59c990e1a889c7e6d436ea069ab90336" />
<newznab:attr name="album" value="Leben II Explicit" />
<newznab:attr name="artist" value="Azad" />
<newznab:attr name="book" value="Leben II Explicit" />
<newznab:attr name="author" value="Azad" />
<newznab:attr name="label" value="Bozz Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Rap &amp; Hip-Hop" />
@ -2030,8 +2030,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="166201000" />
<newznab:attr name="guid" value="9ea015decb1907fb579f8fcd2d08daa2" />
<newznab:attr name="album" value="Into the Legend" />
<newznab:attr name="artist" value="Rhapsody Of Fire" />
<newznab:attr name="book" value="Into the Legend" />
<newznab:attr name="author" value="Rhapsody Of Fire" />
<newznab:attr name="label" value="AFM Records" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Hard Rock &amp; Metal" />
@ -2052,8 +2052,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="721704000" />
<newznab:attr name="guid" value="10e3b9bc3c73702d3e1be80bdaceba5c" />
<newznab:attr name="album" value="Berlin Deep House 20161" />
<newznab:attr name="artist" value="Various Artists" />
<newznab:attr name="book" value="Berlin Deep House 20161" />
<newznab:attr name="author" value="Various Authors" />
<newznab:attr name="genre" value="House, Club House, Deep House" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="6" />
@ -2072,8 +2072,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="1544589000" />
<newznab:attr name="guid" value="d62c60cd848b93d55d44266338f2918b" />
<newznab:attr name="album" value="Tech House Masters Fresh" />
<newznab:attr name="artist" value="Derek Howell" />
<newznab:attr name="book" value="Tech House Masters Fresh" />
<newznab:attr name="author" value="Derek Howell" />
<newznab:attr name="genre" value="Electronic" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="5" />
@ -2092,8 +2092,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="1470081000" />
<newznab:attr name="guid" value="792c03529273a5f8fe44cd29c177ce22" />
<newznab:attr name="album" value="EDM Essentials Future Banging Concert" />
<newznab:attr name="artist" value="Hardwell amp Armin van Buuren" />
<newznab:attr name="book" value="EDM Essentials Future Banging Concert" />
<newznab:attr name="author" value="Hardwell amp Armin van Buuren" />
<newznab:attr name="label" value="DO IT YOURSELF" />
<newznab:attr name="genre" value="House" />
<newznab:attr name="year" value="2016" />
@ -2113,8 +2113,8 @@
<newznab:attr name="category" value="3010" />
<newznab:attr name="size" value="619827000" />
<newznab:attr name="guid" value="a98724fb81f939a0c7b8b5a9852ea731" />
<newznab:attr name="album" value="Dance 2016" />
<newznab:attr name="artist" value="Sigala featuring Bryn Christopher" />
<newznab:attr name="book" value="Dance 2016" />
<newznab:attr name="author" value="Sigala featuring Bryn Christopher" />
<newznab:attr name="genre" value="Dance" />
<newznab:attr name="year" value="2016" />
<newznab:attr name="grabs" value="5" />
@ -2133,8 +2133,8 @@
<newznab:attr name="category" value="3040" />
<newznab:attr name="size" value="302517000" />
<newznab:attr name="guid" value="184ba8c920c587da880b55bacb3d43c6" />
<newznab:attr name="album" value="Leave Me Alone" />
<newznab:attr name="artist" value="Hinds" />
<newznab:attr name="book" value="Leave Me Alone" />
<newznab:attr name="author" value="Hinds" />
<newznab:attr name="label" value="Mom amp Pop Music" />
<newznab:attr name="coverurl" value="https://api.nzbgeek.info/covers/music/.jpg" />
<newznab:attr name="genre" value="Alternative Rock" />

@ -8,12 +8,12 @@
<copyright>Copyright 2009 Waffles</copyright>
<webMaster>waffles@waffles.ch</webMaster>
<image>
<title>artist:coldplay</title>
<title>author:coldplay</title>
<url>https://waffles.ch/favicon.ico</url>
<link>https://waffles.ch/browse.php?c0=1&#x26;q=artist%3Acoldplay&#x26;limit=50</link>
<link>https://waffles.ch/browse.php?c0=1&#x26;q=author%3Acoldplay&#x26;limit=50</link>
<width>16</width>
<height>16</height>
<description>artist:coldplay</description>
<description>author:coldplay</description>
</image>
<item>
<title>Coldplay - Kaleidoscope EP (FLAC HD) [2017-Web-FLAC-Lossless]</title>
@ -81,7 +81,7 @@
&lt;br /&gt;
&lt;b&gt;Total length:&lt;/b&gt; 24:56&lt;br /&gt;
&lt;br /&gt;
More information: &lt;a href=&quot;https://anon.click/https://itunes.apple.com/us/album/kaleidoscope-ep/id1248904974?uo=4&quot; target=&quot;_blank&quot;&gt;https://itunes.apple.com/us/album/kaleidoscope-ep/id1248904974?uo=4&lt;/a&gt;
More information: &lt;a href=&quot;https://anon.click/https://itunes.apple.com/us/book/kaleidoscope-ep/id1248904974?uo=4&quot; target=&quot;_blank&quot;&gt;https://itunes.apple.com/us/book/kaleidoscope-ep/id1248904974?uo=4&lt;/a&gt;
</description>
<link>https://waffles.ch/download.php/xxx/1166785/Coldplay%20-%20Kaleidoscope%20EP%20%5B2017-Web-MP3-320%5D.torrent?passkey=123456789&#x26;uid=xxx&#x26;rss=1</link>
<comments>https://waffles.ch/details.php?id=1166785&#x26;hit=1</comments>
@ -156,7 +156,7 @@
&lt;br /&gt;
&lt;b&gt;Total length:&lt;/b&gt; 24:56&lt;br /&gt;
&lt;br /&gt;
More information: &lt;a href=&quot;https://anon.click/https://itunes.apple.com/us/album/kaleidoscope-ep/id1248904974?uo=4&quot; target=&quot;_blank&quot;&gt;https://itunes.apple.com/us/album/kaleidoscope-ep/id1248904974?uo=4&lt;/a&gt;
More information: &lt;a href=&quot;https://anon.click/https://itunes.apple.com/us/book/kaleidoscope-ep/id1248904974?uo=4&quot; target=&quot;_blank&quot;&gt;https://itunes.apple.com/us/book/kaleidoscope-ep/id1248904974?uo=4&lt;/a&gt;
</description>
<link>https://waffles.ch/download.php/xxx/1166765/Coldplay%20-%20Kaleidoscope%20EP%20%5B2017-Web-MP3-V0%28VBR%29%5D.torrent?passkey=123456789&#x26;uid=xxx&#x26;rss=1</link>
<comments>https://waffles.ch/details.php?id=1166765&#x26;hit=1</comments>
@ -224,7 +224,7 @@
&lt;b&gt;Country:&lt;/b&gt; UK&lt;br /&gt;
&lt;b&gt;Year:&lt;/b&gt; 2000&lt;br /&gt;
&lt;b&gt;Genre:&lt;/b&gt; Alternative Rock, Britpop&lt;br /&gt;
&lt;b&gt;Format:&lt;/b&gt; WEB, Album&lt;br /&gt;
&lt;b&gt;Format:&lt;/b&gt; WEB, Book&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tracklist&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
@ -546,7 +546,7 @@
Bitrate: Lossless&lt;br/&gt;
&lt;/tr&gt;&lt;/td&gt;&lt;/table&gt;&lt;br/&gt;
Year: 2017&lt;br /&gt;
Artist: The Chainsmokers &amp;amp; Coldplay&lt;br /&gt;
Author: The Chainsmokers &amp;amp; Coldplay&lt;br /&gt;
Source: WEB &lt;br /&gt;
Quality: FLAC&lt;br /&gt;
&lt;br /&gt;

@ -1,9 +1,9 @@
nin.* in this directory are re-encodes of nin.mp3
title : 999,999
artist : Nine Inch Nails
author : Nine Inch Nails
track : 1
album : The Slip
book : The Slip
copyright : Attribution-Noncommercial-Share Alike 3.0 United States: http://creativecommons.org/licenses/by-nc-sa/3.0/us/
comment : URL: http://freemusicarchive.org/music/Nine_Inch_Nails/The_Slip/999999
: Comments: http://freemusicarchive.org/

@ -20,12 +20,12 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
public class DeleteBadMediaCoversFixture : CoreTest<DeleteBadMediaCovers>
{
private List<MetadataFile> _metadata;
private List<Author> _artist;
private List<Author> _author;
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateListOfSize(1)
_author = Builder<Author>.CreateListOfSize(1)
.All()
.With(c => c.Path = "C:\\Music\\".AsOsAgnostic())
.Build().ToList();
@ -33,12 +33,12 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
_metadata = Builder<MetadataFile>.CreateListOfSize(1)
.Build().ToList();
Mocker.GetMock<IArtistService>()
.Setup(c => c.AllArtistPaths())
.Returns(_artist.ToDictionary(x => x.Id, x => x.Path));
Mocker.GetMock<IAuthorService>()
.Setup(c => c.AllAuthorPaths())
.Returns(_author.ToDictionary(x => x.Id, x => x.Path));
Mocker.GetMock<IMetadataFileService>()
.Setup(c => c.GetFilesByAuthor(_artist.First().Id))
.Setup(c => c.GetFilesByAuthor(_author.First().Id))
.Returns(_metadata);
Mocker.GetMock<IConfigService>().SetupGet(c => c.CleanupMetadataImages).Returns(true);
@ -47,7 +47,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
[Test]
public void should_not_process_non_image_files()
{
_metadata.First().RelativePath = "album\\file.xml".AsOsAgnostic();
_metadata.First().RelativePath = "book\\file.xml".AsOsAgnostic();
_metadata.First().Type = MetadataType.BookMetadata;
Subject.Clean();
@ -73,7 +73,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
Subject.Clean();
Mocker.GetMock<IConfigService>().VerifySet(c => c.CleanupMetadataImages = true, Times.Never());
Mocker.GetMock<IArtistService>().Verify(c => c.GetAllAuthors(), Times.Never());
Mocker.GetMock<IAuthorService>().Verify(c => c.GetAllAuthors(), Times.Never());
AssertImageWasNotRemoved();
}
@ -91,9 +91,9 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
[Test]
public void should_delete_html_images()
{
var imagePath = "C:\\Music\\Album\\image.jpg".AsOsAgnostic();
var imagePath = "C:\\Music\\Book\\image.jpg".AsOsAgnostic();
_metadata.First().LastUpdated = new DateTime(2014, 12, 29);
_metadata.First().RelativePath = "Album\\image.jpg".AsOsAgnostic();
_metadata.First().RelativePath = "Book\\image.jpg".AsOsAgnostic();
_metadata.First().Type = MetadataType.AuthorImage;
Mocker.GetMock<IDiskProvider>()
@ -109,10 +109,10 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
[Test]
public void should_delete_empty_images()
{
var imagePath = "C:\\Music\\Album\\image.jpg".AsOsAgnostic();
var imagePath = "C:\\Music\\Book\\image.jpg".AsOsAgnostic();
_metadata.First().LastUpdated = new DateTime(2014, 12, 29);
_metadata.First().Type = MetadataType.BookImage;
_metadata.First().RelativePath = "Album\\image.jpg".AsOsAgnostic();
_metadata.First().RelativePath = "Book\\image.jpg".AsOsAgnostic();
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.OpenReadStream(imagePath))
@ -127,9 +127,9 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
[Test]
public void should_not_delete_non_html_files()
{
var imagePath = "C:\\Music\\Album\\image.jpg".AsOsAgnostic();
var imagePath = "C:\\Music\\Book\\image.jpg".AsOsAgnostic();
_metadata.First().LastUpdated = new DateTime(2014, 12, 29);
_metadata.First().RelativePath = "Album\\image.jpg".AsOsAgnostic();
_metadata.First().RelativePath = "Book\\image.jpg".AsOsAgnostic();
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.OpenReadStream(imagePath))

@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
{
private void GivenMissingRootFolder()
{
var artist = Builder<Author>.CreateListOfSize(1)
var author = Builder<Author>.CreateListOfSize(1)
.Build()
.ToList();
@ -26,14 +26,14 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
Mocker.GetMock<IAuthorService>()
.Setup(s => s.AllAuthorPaths())
.Returns(artist.ToDictionary(x => x.Id, x => x.Path));
.Returns(author.ToDictionary(x => x.Id, x => x.Path));
Mocker.GetMock<IImportListFactory>()
.Setup(s => s.All())
.Returns(importList);
Mocker.GetMock<IDiskProvider>()
.Setup(s => s.GetParentFolder(artist.First().Path))
.Setup(s => s.GetParentFolder(author.First().Path))
.Returns(@"C:\Music");
Mocker.GetMock<IDiskProvider>()
@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
}
[Test]
public void should_not_return_error_when_no_artist()
public void should_not_return_error_when_no_author()
{
Mocker.GetMock<IAuthorService>()
.Setup(s => s.AllAuthorPaths())
@ -56,7 +56,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
}
[Test]
public void should_return_error_if_artist_parent_is_missing()
public void should_return_error_if_author_parent_is_missing()
{
GivenMissingRootFolder();

@ -42,17 +42,17 @@ namespace NzbDrone.Core.Test.HistoryTests
[Test]
public void should_use_file_name_for_source_title_if_scene_name_is_null()
{
var artist = Builder<Author>.CreateNew().Build();
var author = Builder<Author>.CreateNew().Build();
var trackFile = Builder<BookFile>.CreateNew()
.With(f => f.SceneName = null)
.With(f => f.Author = artist)
.With(f => f.Author = author)
.Build();
var localTrack = new LocalBook
{
Author = artist,
Author = author,
Book = new Book(),
Path = @"C:\Test\Unsorted\Artist.01.Hymn.mp3"
Path = @"C:\Test\Unsorted\Author.01.Hymn.mp3"
};
var downloadClientItem = new DownloadClientItem

@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
public class CleanupDuplicateMetadataFilesFixture : DbTest<CleanupDuplicateMetadataFiles, MetadataFile>
{
[Test]
public void should_not_delete_metadata_files_when_they_are_for_the_same_artist_but_different_consumers()
public void should_not_delete_metadata_files_when_they_are_for_the_same_author_but_different_consumers()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_for_different_artist()
public void should_not_delete_metadata_files_for_different_author()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -40,7 +40,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_metadata_files_when_they_are_for_the_same_artist_and_consumer()
public void should_delete_metadata_files_when_they_are_for_the_same_author_and_consumer()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_when_there_is_only_one_for_that_artist_and_consumer()
public void should_not_delete_metadata_files_when_there_is_only_one_for_that_author_and_consumer()
{
var file = Builder<MetadataFile>.CreateNew()
.BuildNew();
@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_when_they_are_for_the_same_album_but_different_consumers()
public void should_not_delete_metadata_files_when_they_are_for_the_same_book_but_different_consumers()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -81,7 +81,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_for_different_album()
public void should_not_delete_metadata_files_for_different_book()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -96,7 +96,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_metadata_files_when_they_are_for_the_same_album_and_consumer()
public void should_delete_metadata_files_when_they_are_for_the_same_book_and_consumer()
{
var files = Builder<MetadataFile>.CreateListOfSize(2)
.All()
@ -112,7 +112,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_when_there_is_only_one_for_that_album_and_consumer()
public void should_not_delete_metadata_files_when_there_is_only_one_for_that_book_and_consumer()
{
var file = Builder<MetadataFile>.CreateNew()
.BuildNew();

@ -29,14 +29,14 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_not_delete_unorphaned_blacklist_items()
{
var artist = Builder<Author>.CreateNew().BuildNew();
var author = Builder<Author>.CreateNew().BuildNew();
Db.Insert(artist);
Db.Insert(author);
var blacklist = Builder<Blacklist>.CreateNew()
.With(h => h.BookIds = new List<int>())
.With(h => h.Quality = new QualityModel())
.With(b => b.AuthorId = artist.Id)
.With(b => b.AuthorId = author.Id)
.BuildNew();
Db.Insert(blacklist);

@ -11,34 +11,34 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
public class CleanupOrphanedBooksFixture : DbTest<CleanupOrphanedBooks, Book>
{
[Test]
public void should_delete_orphaned_albums()
public void should_delete_orphaned_books()
{
var album = Builder<Book>.CreateNew()
var book = Builder<Book>.CreateNew()
.BuildNew();
Db.Insert(album);
Db.Insert(book);
Subject.Clean();
AllStoredModels.Should().BeEmpty();
}
[Test]
public void should_not_delete_unorphaned_albums()
public void should_not_delete_unorphaned_books()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.With(e => e.Metadata = new AuthorMetadata { Id = 1 })
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var albums = Builder<Book>.CreateListOfSize(2)
var books = Builder<Book>.CreateListOfSize(2)
.TheFirst(1)
.With(e => e.AuthorMetadataId = artist.Metadata.Value.Id)
.With(e => e.AuthorMetadataId = author.Metadata.Value.Id)
.BuildListOfNew();
Db.InsertMany(albums);
Db.InsertMany(books);
Subject.Clean();
AllStoredModels.Should().HaveCount(1);
AllStoredModels.Should().Contain(e => e.AuthorMetadataId == artist.Metadata.Value.Id);
AllStoredModels.Should().Contain(e => e.AuthorMetadataId == author.Metadata.Value.Id);
}
}
}

@ -11,37 +11,37 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[TestFixture]
public class CleanupOrphanedHistoryItemsFixture : DbTest<CleanupOrphanedHistoryItems, History.History>
{
private Author _artist;
private Book _album;
private Author _author;
private Book _book;
[SetUp]
public void Setup()
{
_artist = Builder<Author>.CreateNew()
_author = Builder<Author>.CreateNew()
.BuildNew();
_album = Builder<Book>.CreateNew()
_book = Builder<Book>.CreateNew()
.BuildNew();
}
private void GivenArtist()
private void GivenAuthor()
{
Db.Insert(_artist);
Db.Insert(_author);
}
private void GivenAlbum()
private void GivenBook()
{
Db.Insert(_album);
Db.Insert(_book);
}
[Test]
public void should_delete_orphaned_items_by_artist()
public void should_delete_orphaned_items_by_author()
{
GivenAlbum();
GivenBook();
var history = Builder<History.History>.CreateNew()
.With(h => h.Quality = new QualityModel())
.With(h => h.BookId = _album.Id)
.With(h => h.BookId = _book.Id)
.BuildNew();
Db.Insert(history);
@ -50,13 +50,13 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_orphaned_items_by_album()
public void should_delete_orphaned_items_by_book()
{
GivenArtist();
GivenAuthor();
var history = Builder<History.History>.CreateNew()
.With(h => h.Quality = new QualityModel())
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.BuildNew();
Db.Insert(history);
@ -65,45 +65,45 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_unorphaned_data_by_artist()
public void should_not_delete_unorphaned_data_by_author()
{
GivenArtist();
GivenAlbum();
GivenAuthor();
GivenBook();
var history = Builder<History.History>.CreateListOfSize(2)
.All()
.With(h => h.Quality = new QualityModel())
.With(h => h.BookId = _album.Id)
.With(h => h.BookId = _book.Id)
.TheFirst(1)
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.BuildListOfNew();
Db.InsertMany(history);
Subject.Clean();
AllStoredModels.Should().HaveCount(1);
AllStoredModels.Should().Contain(h => h.AuthorId == _artist.Id);
AllStoredModels.Should().Contain(h => h.AuthorId == _author.Id);
}
[Test]
public void should_not_delete_unorphaned_data_by_album()
public void should_not_delete_unorphaned_data_by_book()
{
GivenArtist();
GivenAlbum();
GivenAuthor();
GivenBook();
var history = Builder<History.History>.CreateListOfSize(2)
.All()
.With(h => h.Quality = new QualityModel())
.With(h => h.AuthorId = _artist.Id)
.With(h => h.AuthorId = _author.Id)
.TheFirst(1)
.With(h => h.BookId = _album.Id)
.With(h => h.BookId = _book.Id)
.BuildListOfNew();
Db.InsertMany(history);
Subject.Clean();
AllStoredModels.Should().HaveCount(1);
AllStoredModels.Should().Contain(h => h.BookId == _album.Id);
AllStoredModels.Should().Contain(h => h.BookId == _book.Id);
}
}
}

@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
public class CleanupOrphanedMetadataFilesFixture : DbTest<CleanupOrphanedMetadataFiles, MetadataFile>
{
[Test]
public void should_delete_metadata_files_that_dont_have_a_coresponding_artist()
public void should_delete_metadata_files_that_dont_have_a_coresponding_author()
{
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.BookFileId = null)
@ -27,15 +27,15 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_metadata_files_that_dont_have_a_coresponding_album()
public void should_delete_metadata_files_that_dont_have_a_coresponding_book()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.BookFileId = null)
.BuildNew();
@ -45,15 +45,15 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_that_have_a_coresponding_artist()
public void should_not_delete_metadata_files_that_have_a_coresponding_author()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.BookId = null)
.With(m => m.BookFileId = null)
.BuildNew();
@ -65,20 +65,20 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_not_delete_metadata_files_that_have_a_coresponding_album()
public void should_not_delete_metadata_files_that_have_a_coresponding_book()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
var album = Builder<Book>.CreateNew()
var book = Builder<Book>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(album);
Db.Insert(author);
Db.Insert(book);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.BookId = album.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.BookId = book.Id)
.With(m => m.BookFileId = null)
.BuildNew();
@ -90,18 +90,18 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_delete_metadata_files_that_dont_have_a_coresponding_track_file()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
var album = Builder<Book>.CreateNew()
var book = Builder<Book>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(album);
Db.Insert(author);
Db.Insert(book);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.BookId = album.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.BookId = book.Id)
.With(m => m.BookFileId = 10)
.BuildNew();
@ -113,23 +113,23 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_not_delete_metadata_files_that_have_a_coresponding_track_file()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
var album = Builder<Book>.CreateNew()
var book = Builder<Book>.CreateNew()
.BuildNew();
var trackFile = Builder<BookFile>.CreateNew()
.With(h => h.Quality = new QualityModel())
.BuildNew();
Db.Insert(artist);
Db.Insert(album);
Db.Insert(author);
Db.Insert(book);
Db.Insert(trackFile);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.BookId = album.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.BookId = book.Id)
.With(m => m.BookFileId = trackFile.Id)
.BuildNew();
@ -139,15 +139,15 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_album_metadata_files_that_have_albumid_of_zero()
public void should_delete_book_metadata_files_that_have_bookid_of_zero()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.Type = MetadataType.BookMetadata)
.With(m => m.BookId = 0)
.With(m => m.BookFileId = null)
@ -159,15 +159,15 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
}
[Test]
public void should_delete_album_image_files_that_have_albumid_of_zero()
public void should_delete_book_image_files_that_have_bookid_of_zero()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.Type = MetadataType.BookImage)
.With(m => m.BookId = 0)
.With(m => m.BookFileId = null)
@ -181,13 +181,13 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_delete_track_metadata_files_that_have_trackfileid_of_zero()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.BuildNew();
Db.Insert(artist);
Db.Insert(author);
var metadataFile = Builder<MetadataFile>.CreateNew()
.With(m => m.AuthorId = artist.Id)
.With(m => m.AuthorId = author.Id)
.With(m => m.Type = MetadataType.BookMetadata)
.With(m => m.BookFileId = 0)
.BuildNew();

@ -28,12 +28,12 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_not_delete_unorphaned_pending_items()
{
var artist = Builder<Author>.CreateNew().BuildNew();
var author = Builder<Author>.CreateNew().BuildNew();
Db.Insert(artist);
Db.Insert(author);
var pendingRelease = Builder<PendingRelease>.CreateNew()
.With(h => h.AuthorId = artist.Id)
.With(h => h.AuthorId = author.Id)
.With(h => h.ParsedBookInfo = new ParsedBookInfo())
.With(h => h.Release = new ReleaseInfo())
.BuildNew();

@ -13,14 +13,14 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_update_clean_title()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.With(s => s.Name = "Full Name")
.With(s => s.CleanName = "unclean")
.Build();
Mocker.GetMock<IAuthorRepository>()
.Setup(s => s.All())
.Returns(new[] { artist });
.Returns(new[] { author });
Subject.Clean();
@ -31,14 +31,14 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
[Test]
public void should_not_update_unchanged_title()
{
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.With(s => s.Name = "Full Name")
.With(s => s.CleanName = "fullname")
.Build();
Mocker.GetMock<IAuthorRepository>()
.Setup(s => s.All())
.Returns(new[] { artist });
.Returns(new[] { author });
Subject.Clean();

@ -73,7 +73,7 @@ namespace NzbDrone.Core.Test.ImportListTests
.Returns<List<Author>, bool>((x, y) => x);
}
private void WithAlbum()
private void WithBook()
{
_importListReports.First().Book = "Meteora";
}
@ -88,21 +88,21 @@ namespace NzbDrone.Core.Test.ImportListTests
_importListReports.First().EditionGoodreadsId = "1234";
}
private void WithExistingArtist()
private void WithExistingAuthor()
{
Mocker.GetMock<IAuthorService>()
.Setup(v => v.FindById(_importListReports.First().AuthorGoodreadsId))
.Returns(new Author { ForeignAuthorId = _importListReports.First().AuthorGoodreadsId });
}
private void WithExistingAlbum()
private void WithExistingBook()
{
Mocker.GetMock<IBookService>()
.Setup(v => v.FindById(_importListReports.First().EditionGoodreadsId))
.Returns(new Book { ForeignBookId = _importListReports.First().EditionGoodreadsId });
}
private void WithExcludedArtist()
private void WithExcludedAuthor()
{
Mocker.GetMock<IImportListExclusionService>()
.Setup(v => v.All())
@ -115,7 +115,7 @@ namespace NzbDrone.Core.Test.ImportListTests
});
}
private void WithExcludedAlbum()
private void WithExcludedBook()
{
Mocker.GetMock<IImportListExclusionService>()
.Setup(v => v.All())
@ -136,7 +136,7 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_search_if_artist_title_and_no_artist_id()
public void should_search_if_author_title_and_no_author_id()
{
Subject.Execute(new ImportListSyncCommand());
@ -145,7 +145,7 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_search_if_artist_title_and_artist_id()
public void should_not_search_if_author_title_and_author_id()
{
WithAuthorId();
Subject.Execute(new ImportListSyncCommand());
@ -155,9 +155,9 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_search_if_album_title_and_no_album_id()
public void should_search_if_book_title_and_no_book_id()
{
WithAlbum();
WithBook();
Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<ISearchForNewBook>()
@ -165,7 +165,7 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_search_if_album_title_and_album_id()
public void should_not_search_if_book_title_and_book_id()
{
WithAuthorId();
WithBookId();
@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test.ImportListTests
public void should_not_search_if_all_info()
{
WithAuthorId();
WithAlbum();
WithBook();
WithBookId();
Subject.Execute(new ImportListSyncCommand());
@ -191,10 +191,10 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_add_if_existing_artist()
public void should_not_add_if_existing_author()
{
WithAuthorId();
WithExistingArtist();
WithExistingAuthor();
Subject.Execute(new ImportListSyncCommand());
@ -203,10 +203,10 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_add_if_existing_album()
public void should_not_add_if_existing_book()
{
WithBookId();
WithExistingAlbum();
WithExistingBook();
Subject.Execute(new ImportListSyncCommand());
@ -215,10 +215,10 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_add_if_existing_artist_but_new_album()
public void should_add_if_existing_author_but_new_book()
{
WithBookId();
WithExistingArtist();
WithExistingAuthor();
Subject.Execute(new ImportListSyncCommand());
@ -229,7 +229,7 @@ namespace NzbDrone.Core.Test.ImportListTests
[TestCase(ImportListMonitorType.None, false)]
[TestCase(ImportListMonitorType.SpecificBook, true)]
[TestCase(ImportListMonitorType.EntireAuthor, true)]
public void should_add_if_not_existing_artist(ImportListMonitorType monitor, bool expectedArtistMonitored)
public void should_add_if_not_existing_author(ImportListMonitorType monitor, bool expectedAuthorMonitored)
{
WithAuthorId();
WithMonitorType(monitor);
@ -237,13 +237,13 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddAuthorService>()
.Verify(v => v.AddAuthors(It.Is<List<Author>>(t => t.Count == 1 && t.First().Monitored == expectedArtistMonitored), false));
.Verify(v => v.AddAuthors(It.Is<List<Author>>(t => t.Count == 1 && t.First().Monitored == expectedAuthorMonitored), false));
}
[TestCase(ImportListMonitorType.None, false)]
[TestCase(ImportListMonitorType.SpecificBook, true)]
[TestCase(ImportListMonitorType.EntireAuthor, true)]
public void should_add_if_not_existing_album(ImportListMonitorType monitor, bool expectedAlbumMonitored)
public void should_add_if_not_existing_book(ImportListMonitorType monitor, bool expectedBookMonitored)
{
WithBookId();
WithMonitorType(monitor);
@ -251,14 +251,14 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddBookService>()
.Verify(v => v.AddBooks(It.Is<List<Book>>(t => t.Count == 1 && t.First().Monitored == expectedAlbumMonitored), false));
.Verify(v => v.AddBooks(It.Is<List<Book>>(t => t.Count == 1 && t.First().Monitored == expectedBookMonitored), false));
}
[Test]
public void should_not_add_artist_if_excluded_artist()
public void should_not_add_author_if_excluded_author()
{
WithAuthorId();
WithExcludedArtist();
WithExcludedAuthor();
Subject.Execute(new ImportListSyncCommand());
@ -267,10 +267,10 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_add_album_if_excluded_album()
public void should_not_add_book_if_excluded_book()
{
WithBookId();
WithExcludedAlbum();
WithExcludedBook();
Subject.Execute(new ImportListSyncCommand());
@ -279,11 +279,11 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
public void should_not_add_album_if_excluded_artist()
public void should_not_add_book_if_excluded_author()
{
WithBookId();
WithAuthorId();
WithExcludedArtist();
WithExcludedAuthor();
Subject.Execute(new ImportListSyncCommand());

@ -12,21 +12,21 @@ using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.IndexerSearchTests
{
[TestFixture]
public class ArtistSearchServiceFixture : CoreTest<AuthorSearchService>
public class AuthorSearchServiceFixture : CoreTest<AuthorSearchService>
{
private Author _artist;
private Author _author;
[SetUp]
public void Setup()
{
_artist = new Author();
_author = new Author();
Mocker.GetMock<IAuthorService>()
.Setup(s => s.GetAuthor(It.IsAny<int>()))
.Returns(_artist);
.Returns(_author);
Mocker.GetMock<ISearchForNzb>()
.Setup(s => s.AuthorSearch(_artist.Id, false, true, false))
.Setup(s => s.AuthorSearch(_author.Id, false, true, false))
.Returns(new List<DownloadDecision>());
Mocker.GetMock<IProcessDownloadDecisions>()
@ -35,19 +35,19 @@ namespace NzbDrone.Core.Test.IndexerSearchTests
}
[Test]
public void should_only_include_monitored_albums()
public void should_only_include_monitored_books()
{
_artist.Books = new List<Book>
_author.Books = new List<Book>
{
new Book { Monitored = false },
new Book { Monitored = true }
};
Subject.Execute(new AuthorSearchCommand { AuthorId = _artist.Id, Trigger = CommandTrigger.Manual });
Subject.Execute(new AuthorSearchCommand { AuthorId = _author.Id, Trigger = CommandTrigger.Manual });
Mocker.GetMock<ISearchForNzb>()
.Verify(v => v.AuthorSearch(_artist.Id, false, true, false),
Times.Exactly(_artist.Books.Value.Count(s => s.Monitored)));
.Verify(v => v.AuthorSearch(_author.Id, false, true, false),
Times.Exactly(_author.Books.Value.Count(s => s.Monitored)));
}
}
}

@ -6,13 +6,13 @@ using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.IndexerSearchTests
{
public class AlbumSearchDefinitionFixture : CoreTest<BookSearchCriteria>
public class BookSearchDefinitionFixture : CoreTest<BookSearchCriteria>
{
[TestCase("Mötley Crüe", "Motley+Crue")]
[TestCase("방탄소년단", "방탄소년단")]
public void should_replace_some_special_characters_artist(string artist, string expected)
public void should_replace_some_special_characters_author(string author, string expected)
{
Subject.Author = new Author { Name = artist };
Subject.Author = new Author { Name = author };
Subject.AuthorQuery.Should().Be(expected);
}
@ -22,16 +22,16 @@ namespace NzbDrone.Core.Test.IndexerSearchTests
[TestCase("¿Quién sabe?", "Quien+sabe")]
[TestCase("Seal the Deal & Lets Boogie", "Seal+the+Deal+Lets+Boogie")]
[TestCase("Section.80", "Section+80")]
public void should_replace_some_special_characters(string album, string expected)
public void should_replace_some_special_characters(string book, string expected)
{
Subject.BookTitle = album;
Subject.BookTitle = book;
Subject.BookQuery.Should().Be(expected);
}
[TestCase("+", "+")]
public void should_not_replace_some_special_characters_if_result_empty_string(string album, string expected)
public void should_not_replace_some_special_characters_if_result_empty_string(string book, string expected)
{
Subject.BookTitle = album;
Subject.BookTitle = book;
Subject.BookQuery.Should().Be(expected);
}
}

@ -14,14 +14,14 @@ namespace NzbDrone.Core.Test.IndexerTests.IntegrationTests
[IntegrationTest]
public class IndexerIntegrationTests : CoreTest
{
private BookSearchCriteria _albumSearchCriteria;
private BookSearchCriteria _bookSearchCriteria;
[SetUp]
public void SetUp()
{
UseRealHttp();
_albumSearchCriteria = new BookSearchCriteria()
_bookSearchCriteria = new BookSearchCriteria()
{
};
}

@ -10,7 +10,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
{
public class NewznabRequestGeneratorFixture : CoreTest<NewznabRequestGenerator>
{
private BookSearchCriteria _singleAlbumSearchCriteria;
private BookSearchCriteria _singleBookSearchCriteria;
private NewznabCapabilities _capabilities;
[SetUp]
@ -23,7 +23,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
ApiKey = "abcd",
};
_singleAlbumSearchCriteria = new BookSearchCriteria
_singleBookSearchCriteria = new BookSearchCriteria
{
Author = new Books.Author { Name = "Alien Ant Farm" },
BookTitle = "TruANT"
@ -50,11 +50,11 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
[Test]
[Ignore("Disabled since no usenet indexers seem to support it")]
public void should_search_by_artist_and_album_if_supported()
public void should_search_by_author_and_book_if_supported()
{
_capabilities.SupportedBookSearchParameters = new[] { "q", "author", "title" };
var results = Subject.GetSearchRequests(_singleAlbumSearchCriteria);
var results = Subject.GetSearchRequests(_singleBookSearchCriteria);
results.GetTier(0).Should().HaveCount(1);
var page = results.GetAllTiers().First().First();

@ -98,7 +98,7 @@ namespace NzbDrone.Core.Test.MediaCoverTests
[TestCase(".png")]
[TestCase(".jpg")]
public void should_convert_album_cover_urls_to_local(string extension)
public void should_convert_book_cover_urls_to_local(string extension)
{
var covers = new List<MediaCover.MediaCover>
{

@ -78,7 +78,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
.With(x => x.OriginalReleaseDate = new DateTime(2009, 4, 1))
.With(x => x.OriginalYear = 2009)
.With(x => x.Performers = new[] { "Performer1" })
.With(x => x.AlbumArtists = new[] { "방탄소년단" })
.With(x => x.BookAuthors = new[] { "방탄소년단" })
.With(x => x.Genres = new[] { "Genre1", "Genre2" })
.With(x => x.ImageFile = imageFile)
.With(x => x.ImageSize = imageSize)
@ -209,7 +209,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
var expected = new AudioTag()
{
Performers = new string[0],
AlbumArtists = new string[0],
BookAuthors = new string[0],
Genres = new string[0]
};
@ -307,21 +307,21 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
private BookFile GivenPopulatedTrackfile(int mediumOffset)
{
var meta = Builder<AuthorMetadata>.CreateNew().Build();
var artist = Builder<Author>.CreateNew()
var author = Builder<Author>.CreateNew()
.With(x => x.Metadata = meta)
.Build();
var album = Builder<Book>.CreateNew()
.With(x => x.Author = artist)
var book = Builder<Book>.CreateNew()
.With(x => x.Author = author)
.Build();
var edition = Builder<Edition>.CreateNew()
.With(x => x.Book = album)
.With(x => x.Book = book)
.Build();
var file = Builder<BookFile>.CreateNew()
.With(x => x.Edition = edition)
.With(x => x.Author = artist)
.With(x => x.Author = author)
.Build();
return file;

@ -9,6 +9,7 @@ using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Common.Disk;
using NzbDrone.Core.Books;
using NzbDrone.Core.DecisionEngine;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.MediaFiles.BookImport;
@ -31,11 +32,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
public void Setup()
{
_rootFolder = @"C:\Test\Music".AsOsAgnostic();
_otherAuthorFolder = @"C:\Test\Music\OtherArtist".AsOsAgnostic();
var artistFolder = @"C:\Test\Music\Artist".AsOsAgnostic();
_otherAuthorFolder = @"C:\Test\Music\OtherAuthor".AsOsAgnostic();
var authorFolder = @"C:\Test\Music\Author".AsOsAgnostic();
_author = Builder<Author>.CreateNew()
.With(s => s.Path = artistFolder)
.With(s => s.Path = authorFolder)
.Build();
Mocker.GetMock<IRootFolderService>()
@ -73,7 +74,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
}
}
private void GivenArtistFolder()
private void GivenAuthorFolder()
{
GivenRootFolder(_author.Path);
}
@ -161,9 +162,9 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
}
[Test]
public void should_find_files_at_root_of_artist_folder()
public void should_find_files_at_root_of_author_folder()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -180,7 +181,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_extras_subfolder()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -200,7 +201,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_AppleDouble_subfolder()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -216,11 +217,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
}
[Test]
public void should_scan_extras_artist_and_subfolders()
public void should_scan_extras_author_and_subfolders()
{
_author.Path = @"C:\Test\Music\Extras".AsOsAgnostic();
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -241,11 +242,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_scan_files_that_start_with_period()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
Path.Combine(_author.Path, "Album 1", ".t01.mobi")
Path.Combine(_author.Path, "Book 1", ".t01.mobi")
});
Subject.Scan(new List<string> { _author.Path });
@ -257,7 +258,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_subfolders_that_start_with_period()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -276,7 +277,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_subfolder_of_season_folder_that_starts_with_a_period()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -296,7 +297,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_Synology_eaDir()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -313,7 +314,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_not_scan_thumb_folder()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -332,7 +333,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
{
_author.Path = @"C:\Test\Music\.hack".AsOsAgnostic();
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{
@ -349,7 +350,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
[Test]
public void should_exclude_osx_metadata_files()
{
GivenArtistFolder();
GivenAuthorFolder();
GivenFiles(new List<string>
{

@ -18,7 +18,7 @@ using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MediaFiles
{
[TestFixture]
public class DownloadedAlbumsCommandServiceFixture : FileSystemTest<DownloadedBooksCommandService>
public class DownloadedBooksCommandServiceFixture : FileSystemTest<DownloadedBooksCommandService>
{
private string _downloadFolder = "c:\\drop_other\\Show.S01E01\\".AsOsAgnostic();
private string _downloadFile = "c:\\drop_other\\Show.S01E01.mkv".AsOsAgnostic();

@ -69,10 +69,10 @@ namespace NzbDrone.Core.Test.MediaFiles
}
}
private void GivenValidArtist()
private void GivenValidAuthor()
{
Mocker.GetMock<IParsingService>()
.Setup(s => s.GetArtist(It.IsAny<string>()))
.Setup(s => s.GetAuthor(It.IsAny<string>()))
.Returns(Builder<Author>.CreateNew().Build());
}
@ -100,17 +100,17 @@ namespace NzbDrone.Core.Test.MediaFiles
}
[Test]
public void should_search_for_artist_using_folder_name()
public void should_search_for_author_using_folder_name()
{
Subject.ProcessRootFolder(DiskProvider.GetDirectoryInfo(_droneFactory));
Mocker.GetMock<IParsingService>().Verify(c => c.GetArtist("foldername"), Times.Once());
Mocker.GetMock<IParsingService>().Verify(c => c.GetAuthor("foldername"), Times.Once());
}
[Test]
public void should_skip_if_file_is_in_use_by_another_process()
{
GivenValidArtist();
GivenValidAuthor();
foreach (var file in _audioFiles)
{
@ -123,9 +123,9 @@ namespace NzbDrone.Core.Test.MediaFiles
}
[Test]
public void should_skip_if_no_artist_found()
public void should_skip_if_no_author_found()
{
Mocker.GetMock<IParsingService>().Setup(c => c.GetArtist("foldername")).Returns((Author)null);
Mocker.GetMock<IParsingService>().Setup(c => c.GetAuthor("foldername")).Returns((Author)null);
Subject.ProcessRootFolder(DiskProvider.GetDirectoryInfo(_droneFactory));
@ -137,9 +137,9 @@ namespace NzbDrone.Core.Test.MediaFiles
}
[Test]
public void should_not_import_if_folder_is_a_artist_path()
public void should_not_import_if_folder_is_a_author_path()
{
GivenValidArtist();
GivenValidAuthor();
Mocker.GetMock<IAuthorService>()
.Setup(s => s.AuthorPathExists(It.IsAny<string>()))
@ -173,7 +173,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_not_delete_folder_if_files_were_imported_and_audio_files_remain()
{
GivenValidArtist();
GivenValidAuthor();
var localTrack = new LocalBook();
@ -206,14 +206,14 @@ namespace NzbDrone.Core.Test.MediaFiles
Subject.ProcessRootFolder(DiskProvider.GetDirectoryInfo(_droneFactory));
Mocker.GetMock<IParsingService>()
.Verify(v => v.GetArtist(folderName), Times.Once());
.Verify(v => v.GetAuthor(folderName), Times.Once());
Mocker.GetMock<IParsingService>()
.Verify(v => v.GetArtist(It.Is<string>(s => s.StartsWith(prefix))), Times.Never());
.Verify(v => v.GetAuthor(It.Is<string>(s => s.StartsWith(prefix))), Times.Never());
}
[Test]
public void should_return_importresult_on_unknown_artist()
public void should_return_importresult_on_unknown_author()
{
var fileName = @"C:\folder\file.mkv".AsOsAgnostic();
FileSystem.AddFile(fileName, new MockFileData(string.Empty));
@ -230,7 +230,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_not_delete_if_there_is_large_rar_file()
{
GivenValidArtist();
GivenValidAuthor();
var localTrack = new LocalBook();
@ -262,7 +262,7 @@ namespace NzbDrone.Core.Test.MediaFiles
Subject.ProcessPath(folderName).Should().BeEmpty();
Mocker.GetMock<IParsingService>()
.Verify(v => v.GetArtist(It.IsAny<string>()), Times.Never());
.Verify(v => v.GetAuthor(It.IsAny<string>()), Times.Never());
ExceptionVerification.ExpectedErrors(1);
}
@ -270,7 +270,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_not_delete_if_no_files_were_imported()
{
GivenValidArtist();
GivenValidAuthor();
var localTrack = new LocalBook();
@ -296,7 +296,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_not_delete_folder_after_import()
{
GivenValidArtist();
GivenValidAuthor();
GivenSuccessfulImport();
@ -310,7 +310,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_delete_folder_if_importmode_move()
{
GivenValidArtist();
GivenValidAuthor();
GivenSuccessfulImport();
@ -324,7 +324,7 @@ namespace NzbDrone.Core.Test.MediaFiles
[Test]
public void should_not_delete_folder_if_importmode_copy()
{
GivenValidArtist();
GivenValidAuthor();
GivenSuccessfulImport();

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save