moved media file service

pull/6/head
kay.one 12 years ago
parent 8900bbb3a1
commit de5d5b76e8

@ -192,6 +192,29 @@ namespace NzbDrone.Core.Test.Datastore
Db.AsQueryable<ParentModel>().Single().ChildList.Should().HaveCount(4); Db.AsQueryable<ParentModel>().Single().ChildList.Should().HaveCount(4);
} }
[Test]
public void update_field_should_only_update_that_filed()
{
var childModel = new ChildModel
{
A = "A_Original",
B = 1,
C = 1
};
Db.Insert(childModel);
_childModel.A = "A_New";
_childModel.B = 2;
_childModel.C = 2;
Db.UpdateField(childModel, "B");
Db.AsQueryable<ChildModel>().Single().A.Should().Be("A_Original");
Db.AsQueryable<ChildModel>().Single().B.Should().Be(2);
Db.AsQueryable<ChildModel>().Single().C.Should().Be(1);
}
[Test] [Test]
public void should_be_able_to_read_unknown_type() public void should_be_able_to_read_unknown_type()

@ -6,6 +6,7 @@ using System.Linq;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;

@ -5,6 +5,7 @@ using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;

@ -2,6 +2,7 @@
using FizzWare.NBuilder; using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;

@ -4,6 +4,7 @@ using System.Linq;
using FluentAssertions; using FluentAssertions;
using NLog; using NLog;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Instrumentation; using NzbDrone.Core.Instrumentation;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;

@ -6,6 +6,7 @@ using System.Collections.Generic;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Jobs; using NzbDrone.Core.Jobs;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;

@ -6,6 +6,7 @@ using System.Collections.Generic;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Jobs; using NzbDrone.Core.Jobs;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
@ -67,8 +68,8 @@ namespace NzbDrone.Core.Test.JobTests
Mocker.GetMock<ISeriesRepository>() Mocker.GetMock<ISeriesRepository>()
.Setup(s => s.Get(series[1].Id)).Returns(series[1]); .Setup(s => s.Get(series[1].Id)).Returns(series[1]);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(s => s.GetSeriesFiles(It.IsAny<int>())).Returns(new List<EpisodeFile>()); .Setup(s => s.GetFilesBySeries(It.IsAny<int>())).Returns(new List<EpisodeFile>());
//Act //Act
Mocker.Resolve<ImportNewSeriesJob>().Start(notification, null); Mocker.Resolve<ImportNewSeriesJob>().Start(notification, null);
@ -121,8 +122,8 @@ namespace NzbDrone.Core.Test.JobTests
Mocker.GetMock<ISeriesRepository>() Mocker.GetMock<ISeriesRepository>()
.Setup(s => s.Get(series[0].Id)).Returns(series[0]); .Setup(s => s.Get(series[0].Id)).Returns(series[0]);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(s => s.GetSeriesFiles(It.IsAny<int>())).Returns(new List<EpisodeFile>()); .Setup(s => s.GetFilesBySeries(It.IsAny<int>())).Returns(new List<EpisodeFile>());
Mocker.GetMock<XemUpdateJob>() Mocker.GetMock<XemUpdateJob>()
.Setup(j => j.Start(notification, It.Is<object>(d => d.GetPropertyValue<int>("SeriesId") == series[0].Id))); .Setup(j => j.Start(notification, It.Is<object>(d => d.GetPropertyValue<int>("SeriesId") == series[0].Id)));
@ -148,8 +149,8 @@ namespace NzbDrone.Core.Test.JobTests
int seriesId = 12; int seriesId = 12;
WithStrictMocker(); WithStrictMocker();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.GetSeriesFiles(seriesId)) .Setup(p => p.GetFilesBySeries(seriesId))
.Returns(new List<EpisodeFile>()); .Returns(new List<EpisodeFile>());
Mocker.GetMock<ISeasonRepository>() Mocker.GetMock<ISeasonRepository>()
@ -176,8 +177,8 @@ namespace NzbDrone.Core.Test.JobTests
WithStrictMocker(); WithStrictMocker();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.GetSeriesFiles(seriesId)) .Setup(p => p.GetFilesBySeries(seriesId))
.Returns(episodesFiles); .Returns(episodesFiles);
Mocker.GetMock<ISeasonRepository>() Mocker.GetMock<ISeasonRepository>()
@ -202,8 +203,8 @@ namespace NzbDrone.Core.Test.JobTests
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.GetSeriesFiles(seriesId)) .Setup(p => p.GetFilesBySeries(seriesId))
.Returns(episodesFiles); .Returns(episodesFiles);
Mocker.GetMock<ISeasonRepository>() Mocker.GetMock<ISeasonRepository>()

@ -5,6 +5,7 @@ using System.Text;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Jobs; using NzbDrone.Core.Jobs;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
@ -40,8 +41,8 @@ namespace NzbDrone.Core.Test.JobTests
.Setup(s => s.Get(_series.Id)) .Setup(s => s.Get(_series.Id))
.Returns(_series); .Returns(_series);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(s => s.GetSeasonFiles(_series.Id, 5)) .Setup(s => s.GetFilesBySeason(_series.Id, 5))
.Returns(_episodeFiles); .Returns(_episodeFiles);
} }

@ -1,20 +1,16 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests namespace NzbDrone.Core.Test.MediaFileTests
{ {
[TestFixture] [TestFixture]
public class CleanUpDatabaseFixture : SqlCeTest public class CleanUpDatabaseFixture : SqlCeTest
@ -50,7 +46,6 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
Db.InsertMany(episodes); Db.InsertMany(episodes);
//Act //Act
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
var result = Db.Fetch<Episode>(); var result = Db.Fetch<Episode>();
//Assert //Assert
@ -77,7 +72,6 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
Db.InsertMany(episodes); Db.InsertMany(episodes);
//Act //Act
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
var result = Db.Fetch<Episode>(); var result = Db.Fetch<Episode>();
//Assert //Assert
@ -102,7 +96,6 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
Db.InsertMany(episodes); Db.InsertMany(episodes);
//Act //Act
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
var result = Db.Fetch<Episode>(); var result = Db.Fetch<Episode>();
//Assert //Assert
@ -129,12 +122,11 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
Db.InsertMany(episodeFiles); Db.InsertMany(episodeFiles);
//Act //Act
Mocker.Resolve<MediaFileProvider>().CleanUpDatabase();
var result = Db.Fetch<EpisodeFile>(); var result = Db.Fetch<EpisodeFile>();
//Assert //Assert
result.Should().HaveCount(5); result.Should().HaveCount(5);
result.Should().OnlyContain(e => e.EpisodeFileId > 0); result.Should().OnlyContain(e => e.Id > 0);
} }
} }
} }

@ -8,15 +8,12 @@ using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common.AutoMoq;
namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests namespace NzbDrone.Core.Test.MediaFileTests
{ {
[TestFixture] [TestFixture]
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
@ -54,7 +51,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South Park - S15E06 - City Sushi [HDTV-720p]", result); Assert.AreEqual("South Park - S15E06 - City Sushi [HDTV-720p]", result);
@ -81,7 +78,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("15x06 - City Sushi [HDTV-720p]", result); Assert.AreEqual("15x06 - City Sushi [HDTV-720p]", result);
@ -108,7 +105,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South Park 05x06 [HDTV-720p]", result); Assert.AreEqual("South Park 05x06 [HDTV-720p]", result);
@ -136,7 +133,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South Park s05e06", result); Assert.AreEqual("South Park s05e06", result);
@ -163,7 +160,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South.Park.s05e06.City.Sushi", result); Assert.AreEqual("South.Park.s05e06.City.Sushi", result);
@ -190,7 +187,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South.Park.-.s05e06.-.City.Sushi.[HDTV-720p]", result); Assert.AreEqual("South.Park.-.s05e06.-.City.Sushi.[HDTV-720p]", result);
@ -218,7 +215,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("S15E06", result); Assert.AreEqual("S15E06", result);
@ -252,7 +249,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("The Mentalist - S03E23-E24 - Strawberries and Cream [HDTV-720p]", result); Assert.AreEqual("The Mentalist - S03E23-E24 - Strawberries and Cream [HDTV-720p]", result);
@ -286,7 +283,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("3x23x24 - Strawberries and Cream [HDTV-720p]", result); Assert.AreEqual("3x23x24 - Strawberries and Cream [HDTV-720p]", result);
@ -320,7 +317,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("3x23x24 Strawberries and Cream [HDTV-720p]", result); Assert.AreEqual("3x23x24 Strawberries and Cream [HDTV-720p]", result);
@ -354,7 +351,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("The.Mentalist.s03e23.s03e24.Strawberries.and.Cream", result); Assert.AreEqual("The.Mentalist.s03e23.s03e24.Strawberries.and.Cream", result);
@ -388,7 +385,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("The.Mentalist.-.S03E23-24", result); Assert.AreEqual("The.Mentalist.-.S03E23-24", result);
@ -422,7 +419,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episodeOne, episodeTwo }, new Series { Title = "The Mentalist" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("3x23x24", result); Assert.AreEqual("3x23x24", result);
@ -447,7 +444,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, true, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, true, new EpisodeFile());
//Assert //Assert
result.Should().Be("South Park - S15E06 - City Sushi [HDTV-720p] [Proper]"); result.Should().Be("South Park - S15E06 - City Sushi [HDTV-720p] [Proper]");
@ -472,7 +469,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
result.Should().Be("South Park - S15E06 - City Sushi [HDTV-720p]"); result.Should().Be("South Park - S15E06 - City Sushi [HDTV-720p]");
@ -497,7 +494,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, true, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, true, new EpisodeFile());
//Assert //Assert
result.Should().Be("South Park - S15E06 - City Sushi"); result.Should().Be("South Park - S15E06 - City Sushi");
@ -529,7 +526,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
result.Should().Be("30 Rock - S06E06-E07 - Hey, Baby, What's Wrong!"); result.Should().Be("30 Rock - S06E06-E07 - Hey, Baby, What's Wrong!");
@ -556,7 +553,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("South Park.S15E06.City Sushi [HDTV-720p]", result); Assert.AreEqual("South Park.S15E06.City Sushi [HDTV-720p]", result);
@ -583,7 +580,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
Assert.AreEqual("15x06.City Sushi [HDTV-720p]", result); Assert.AreEqual("15x06.City Sushi [HDTV-720p]", result);
@ -614,7 +611,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, episodeFile); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, episodeFile);
//Assert //Assert
result.Should().Be(Path.GetFileNameWithoutExtension(episodeFile.Path)); result.Should().Be(Path.GetFileNameWithoutExtension(episodeFile.Path));
@ -645,7 +642,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, episodeFile); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode }, _series, Quality.HDTV720p, false, episodeFile);
//Assert //Assert
result.Should().Be(episodeFile.SceneName); result.Should().Be(episodeFile.SceneName);
@ -677,7 +674,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
result.Should().Be("30 Rock - S06E06-E07 - Hey, Baby, What's Wrong!"); result.Should().Be("30 Rock - S06E06-E07 - Hey, Baby, What's Wrong!");
@ -709,7 +706,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode2, episode }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
result.Should().Be("30 Rock - S06E06-E07 - Hello + World"); result.Should().Be("30 Rock - S06E06-E07 - Hello + World");
@ -747,7 +744,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.Build(); .Build();
//Act //Act
string result = Mocker.Resolve<MediaFileProvider>().GetNewFilename(new List<Episode> { episode, episode2, episode3 }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile()); string result = Mocker.Resolve<IMediaFileService>().GetNewFilename(new List<Episode> { episode, episode2, episode3 }, new Series { Title = "30 Rock" }, Quality.HDTV720p, false, new EpisodeFile());
//Assert //Assert
result.Should().Be("30 Rock - S06E06-E07-E08 - Hello + World"); result.Should().Be("30 Rock - S06E06-E07-E08 - Hello + World");
@ -777,7 +774,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.With(e => e.Title = "Kristen Stewart") .With(e => e.Title = "Kristen Stewart")
.Build(); .Build();
var result = Mocker.Resolve<MediaFileProvider>() var result = Mocker.Resolve<IMediaFileService>()
.GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile()); .GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile());
result.Should().Be("The Daily Show with Jon Stewart - 2012-12-13 - Kristen Stewart [HDTV-720p]"); result.Should().Be("The Daily Show with Jon Stewart - 2012-12-13 - Kristen Stewart [HDTV-720p]");
} }
@ -806,7 +803,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.With(e => e.Title = "Kristen Stewart") .With(e => e.Title = "Kristen Stewart")
.Build(); .Build();
var result = Mocker.Resolve<MediaFileProvider>() var result = Mocker.Resolve<IMediaFileService>()
.GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile()); .GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile());
result.Should().Be("The Daily Show with Jon Stewart - 2012-12-13"); result.Should().Be("The Daily Show with Jon Stewart - 2012-12-13");
} }
@ -835,7 +832,7 @@ namespace NzbDrone.Core.Test.ProviderTests.MediaFileProviderTests
.With(e => e.Title = "Kristen Stewart") .With(e => e.Title = "Kristen Stewart")
.Build(); .Build();
var result = Mocker.Resolve<MediaFileProvider>() var result = Mocker.Resolve<IMediaFileService>()
.GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile()); .GetNewFilename(episodes, series, Quality.HDTV720p, false, new EpisodeFile());
result.Should().Be("The Daily Show with Jon Stewart - Unknown - Kristen Stewart"); result.Should().Be("The Daily Show with Jon Stewart - Unknown - Kristen Stewart");
} }

@ -1,28 +1,25 @@
// ReSharper disable RedundantUsingDirective // ReSharper disable RedundantUsingDirective
using System.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using FizzWare.NBuilder; using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common.AutoMoq;
namespace NzbDrone.Core.Test.ProviderTests namespace NzbDrone.Core.Test.MediaFileTests
{ {
[TestFixture] [TestFixture]
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
public class MediaFileProviderTest : SqlCeTest public class MediaFileServiceTest : SqlCeTest
{ {
[Test] [Test]
public void get_series_files() public void get_series_files()
@ -45,7 +42,7 @@ namespace NzbDrone.Core.Test.ProviderTests
Db.InsertMany(firstSeriesFiles); Db.InsertMany(firstSeriesFiles);
Db.InsertMany(secondSeriesFiles); Db.InsertMany(secondSeriesFiles);
var result = Mocker.Resolve<MediaFileProvider>().GetSeriesFiles(12); var result = Mocker.Resolve<IMediaFileService>().GetFilesBySeries(12);
result.Should().HaveSameCount(firstSeriesFiles); result.Should().HaveSameCount(firstSeriesFiles);
@ -74,7 +71,7 @@ namespace NzbDrone.Core.Test.ProviderTests
Db.InsertMany(firstSeriesFiles); Db.InsertMany(firstSeriesFiles);
Db.InsertMany(secondSeriesFiles); Db.InsertMany(secondSeriesFiles);
var result = Mocker.Resolve<MediaFileProvider>().GetSeasonFiles(12, 1); var result = Mocker.Resolve<IMediaFileService>().GetFilesBySeason(12, 1);
result.Should().HaveSameCount(firstSeriesFiles); result.Should().HaveSameCount(firstSeriesFiles);
} }
@ -88,9 +85,6 @@ namespace NzbDrone.Core.Test.ProviderTests
.Setup(c => c.GetEpisodeBySeries(12)) .Setup(c => c.GetEpisodeBySeries(12))
.Returns(new List<Episode>()); .Returns(new List<Episode>());
Mocker.GetMock<MediaFileProvider>()
.Setup(e => e.CleanUpDatabase());
Mocker.GetMock<DiskProvider>() Mocker.GetMock<DiskProvider>()
.Setup(c => c.FolderExists(It.IsAny<string>())) .Setup(c => c.FolderExists(It.IsAny<string>()))
@ -112,7 +106,7 @@ namespace NzbDrone.Core.Test.ProviderTests
public void CleanFileName(string name, string expectedName) public void CleanFileName(string name, string expectedName)
{ {
//Act //Act
var result = MediaFileProvider.CleanFilename(name); var result = MediaFileService.CleanFilename(name);
//Assert //Assert
Assert.AreEqual(expectedName, result); Assert.AreEqual(expectedName, result);
@ -137,7 +131,7 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IConfigService>().Setup(e => e.SortingSeasonFolderFormat).Returns(seasonFolderFormat); Mocker.GetMock<IConfigService>().Setup(e => e.SortingSeasonFolderFormat).Returns(seasonFolderFormat);
//Act //Act
var result = Mocker.Resolve<MediaFileProvider>().CalculateFilePath(fakeSeries, 1, filename, ".mkv"); var result = Mocker.Resolve<IMediaFileService>().CalculateFilePath(fakeSeries, 1, filename, ".mkv");
//Assert //Assert
Assert.AreEqual(expectedPath, result.FullName); Assert.AreEqual(expectedPath, result.FullName);
@ -158,12 +152,12 @@ namespace NzbDrone.Core.Test.ProviderTests
Db.InsertMany(episodeFiles); Db.InsertMany(episodeFiles);
//Act //Act
Mocker.Resolve<MediaFileProvider>().Delete(1); Mocker.Resolve<IMediaFileService>().Delete(1);
var result = Db.Fetch<EpisodeFile>(); var result = Db.Fetch<EpisodeFile>();
//Assert //Assert
result.Should().HaveCount(9); result.Should().HaveCount(9);
result.Should().NotContain(e => e.EpisodeFileId == 1); result.Should().NotContain(e => e.Id == 1);
} }
[Test] [Test]
@ -173,7 +167,7 @@ namespace NzbDrone.Core.Test.ProviderTests
WithRealDb(); WithRealDb();
//Act //Act
var result = Mocker.Resolve<MediaFileProvider>().GetFileByPath(@"C:\Test\EpisodeFile.avi"); var result = Mocker.Resolve<IMediaFileService>().GetFileByPath(@"C:\Test\EpisodeFile.avi");
//Resolve //Resolve
result.Should().BeNull(); result.Should().BeNull();
@ -194,12 +188,12 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFileId = Convert.ToInt32(Db.Insert(episodeFile)); var episodeFileId = Convert.ToInt32(Db.Insert(episodeFile));
//Act //Act
var result = Mocker.Resolve<MediaFileProvider>().GetFileByPath(path); var result = Mocker.Resolve<IMediaFileService>().GetFileByPath(path);
//Resolve //Resolve
result.Should().NotBeNull(); result.Should().NotBeNull();
result.Path.Should().Be(path.NormalizePath()); result.Path.Should().Be(path.NormalizePath());
result.EpisodeFileId.Should().Be(episodeFileId); result.Id.Should().Be(episodeFileId);
} }
} }
} }

@ -199,7 +199,7 @@
<Compile Include="DecisionEngineTests\QualityUpgradeSpecificationFixture.cs" /> <Compile Include="DecisionEngineTests\QualityUpgradeSpecificationFixture.cs" />
<Compile Include="DecisionEngineTests\UpgradePossibleSpecificationFixture.cs" /> <Compile Include="DecisionEngineTests\UpgradePossibleSpecificationFixture.cs" />
<Compile Include="ProviderTests\DownloadClientTests\BlackholeProviderFixture.cs" /> <Compile Include="ProviderTests\DownloadClientTests\BlackholeProviderFixture.cs" />
<Compile Include="ProviderTests\MediaFileProviderTests\CleanUpDatabaseFixture.cs" /> <Compile Include="MediaFileTests\CleanUpDatabaseFixture.cs" />
<Compile Include="ProviderTests\ReferenceDataProviderTest.cs" /> <Compile Include="ProviderTests\ReferenceDataProviderTest.cs" />
<Compile Include="ProviderTests\NotificationProviderTests\NotificationProviderFixture.cs" /> <Compile Include="ProviderTests\NotificationProviderTests\NotificationProviderFixture.cs" />
<Compile Include="ProviderTests\DownloadClientTests\SabProviderTests\QueueFixture.cs" /> <Compile Include="ProviderTests\DownloadClientTests\SabProviderTests\QueueFixture.cs" />
@ -232,7 +232,7 @@
<Compile Include="ProviderTests\DiskScanProviderTests\ImportFileFixture.cs" /> <Compile Include="ProviderTests\DiskScanProviderTests\ImportFileFixture.cs" />
<Compile Include="FluentTest.cs" /> <Compile Include="FluentTest.cs" />
<Compile Include="InstrumentationTests\DatabaseTargetFixture.cs" /> <Compile Include="InstrumentationTests\DatabaseTargetFixture.cs" />
<Compile Include="ProviderTests\MediaFileProviderTests\GetNewFilenameFixture.cs" /> <Compile Include="MediaFileTests\GetNewFilenameFixture.cs" />
<Compile Include="Framework\SqlCeTest.cs" /> <Compile Include="Framework\SqlCeTest.cs" />
<Compile Include="DecisionEngineTests\MonitoredEpisodeSpecificationFixture.cs" /> <Compile Include="DecisionEngineTests\MonitoredEpisodeSpecificationFixture.cs" />
<Compile Include="ProviderTests\DownloadProviderTests\DownloadProviderFixture.cs" /> <Compile Include="ProviderTests\DownloadProviderTests\DownloadProviderFixture.cs" />
@ -246,7 +246,7 @@
<Compile Include="RootFolderTests\RootFolderServiceFixture.cs" /> <Compile Include="RootFolderTests\RootFolderServiceFixture.cs" />
<Compile Include="Indexers\IndexerServiceTest.cs" /> <Compile Include="Indexers\IndexerServiceTest.cs" />
<Compile Include="HistoryTests\HistoryServiceTest.cs" /> <Compile Include="HistoryTests\HistoryServiceTest.cs" />
<Compile Include="ProviderTests\MediaFileProviderTest.cs" /> <Compile Include="MediaFileTests\MediaFileServiceTest.cs" />
<Compile Include="Configuration\ConfigServiceFixture.cs" /> <Compile Include="Configuration\ConfigServiceFixture.cs" />
<Compile Include="TvTests\EpisodeProviderTests\EpisodeProviderTest.cs" /> <Compile Include="TvTests\EpisodeProviderTests\EpisodeProviderTest.cs" />
<Compile Include="Framework\TestDbHelper.cs" /> <Compile Include="Framework\TestDbHelper.cs" />

@ -8,6 +8,7 @@ using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
@ -36,7 +37,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder); Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder);
//Assert //Assert
Mocker.GetMock<MediaFileProvider>().Verify(v => v.GetFileByPath(It.IsAny<string>()), Times.Never()); Mocker.GetMock<IMediaFileService>().Verify(v => v.GetFileByPath(It.IsAny<string>()), Times.Never());
} }
[Test] [Test]
@ -54,14 +55,14 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<DiskProvider>().Setup(s => s.GetFiles(folder, SearchOption.AllDirectories)) Mocker.GetMock<DiskProvider>().Setup(s => s.GetFiles(folder, SearchOption.AllDirectories))
.Returns(new string[] { filename }); .Returns(new string[] { filename });
Mocker.GetMock<MediaFileProvider>().Setup(s => s.GetFileByPath(filename)) Mocker.GetMock<IMediaFileService>().Setup(s => s.GetFileByPath(filename))
.Returns(() => null); .Returns(() => null);
//Act //Act
Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder); Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder);
//Assert //Assert
Mocker.GetMock<MediaFileProvider>().Verify(v => v.GetFileByPath(filename), Times.Once()); Mocker.GetMock<IMediaFileService>().Verify(v => v.GetFileByPath(filename), Times.Once());
Mocker.GetMock<ISeriesRepository>().Verify(v => v.Get(It.IsAny<int>()), Times.Never()); Mocker.GetMock<ISeriesRepository>().Verify(v => v.Get(It.IsAny<int>()), Times.Never());
} }
@ -91,25 +92,25 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.With(e => e.EpisodeFile = episodeFile) .With(e => e.EpisodeFile = episodeFile)
.Build(); .Build();
Mocker.GetMock<MediaFileProvider>().Setup(v => v.GetFileByPath(filename)) Mocker.GetMock<IMediaFileService>().Setup(v => v.GetFileByPath(filename))
.Returns(() => null); .Returns(() => null);
Mocker.GetMock<DiskProvider>().Setup(s => s.GetFiles(folder, SearchOption.AllDirectories)) Mocker.GetMock<DiskProvider>().Setup(s => s.GetFiles(folder, SearchOption.AllDirectories))
.Returns(new string[] { filename }); .Returns(new string[] { filename });
Mocker.GetMock<MediaFileProvider>().Setup(s => s.GetFileByPath(filename)) Mocker.GetMock<IMediaFileService>().Setup(s => s.GetFileByPath(filename))
.Returns(episodeFile); .Returns(episodeFile);
Mocker.GetMock<ISeriesRepository>().Setup(s => s.Get(It.IsAny<int>())) Mocker.GetMock<ISeriesRepository>().Setup(s => s.Get(It.IsAny<int>()))
.Returns(series); .Returns(series);
Mocker.GetMock<IEpisodeService>().Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) Mocker.GetMock<IEpisodeService>().Setup(s => s.GetEpisodesByFileId(episodeFile.Id))
.Returns(episode); .Returns(episode);
Mocker.GetMock<MediaFileProvider>().Setup(s => s.GetNewFilename(It.IsAny<IList<Episode>>(), series, Quality.Unknown, false, It.IsAny<EpisodeFile>())) Mocker.GetMock<IMediaFileService>().Setup(s => s.GetNewFilename(It.IsAny<IList<Episode>>(), series, Quality.Unknown, false, It.IsAny<EpisodeFile>()))
.Returns(newFilename); .Returns(newFilename);
Mocker.GetMock<MediaFileProvider>().Setup(s => s.CalculateFilePath(It.IsAny<Series>(), It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>())) Mocker.GetMock<IMediaFileService>().Setup(s => s.CalculateFilePath(It.IsAny<Series>(), It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(new FileInfo(newFilePath)); .Returns(new FileInfo(newFilePath));
Mocker.GetMock<DiskProvider>() Mocker.GetMock<DiskProvider>()
@ -122,7 +123,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder); Mocker.Resolve<DiskScanProvider>().CleanUpDropFolder(folder);
//Assert //Assert
Mocker.GetMock<MediaFileProvider>().Verify(v => v.GetFileByPath(filename), Times.Once()); Mocker.GetMock<IMediaFileService>().Verify(v => v.GetFileByPath(filename), Times.Once());
Mocker.GetMock<DiskProvider>().Verify(v => v.MoveFile(filename.NormalizePath(), newFilePath), Times.Once()); Mocker.GetMock<DiskProvider>().Verify(v => v.MoveFile(filename.NormalizePath(), newFilePath), Times.Once());
} }
} }

@ -9,6 +9,7 @@ using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -53,7 +54,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Setup(e => e.GetEpisodesByFileId(It.IsAny<int>())) .Setup(e => e.GetEpisodesByFileId(It.IsAny<int>()))
.Returns(new List<Episode>()); .Returns(new List<Episode>());
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.Delete(It.IsAny<int>())); .Setup(e => e.Delete(It.IsAny<int>()));
@ -66,7 +67,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Verify(e => e.GetEpisodesByFileId(It.IsAny<int>()), Times.Exactly(10)); .Verify(e => e.GetEpisodesByFileId(It.IsAny<int>()), Times.Exactly(10));
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10)); .Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10));
} }
@ -82,12 +83,12 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(e => e.GetEpisodesByFileId(It.IsAny<int>())) .Setup(e => e.GetEpisodesByFileId(It.IsAny<int>()))
.Returns(new List<Episode> { new Episode { EpisodeFile = new EpisodeFile { EpisodeFileId = 10 } }, new Episode { EpisodeFile = new EpisodeFile { EpisodeFileId = 10 } } }); .Returns(new List<Episode> { new Episode { EpisodeFile = new EpisodeFile { Id = 10 } }, new Episode { EpisodeFile = new EpisodeFile { Id = 10 } } });
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(e => e.UpdateEpisode(It.IsAny<Episode>())); .Setup(e => e.UpdateEpisode(It.IsAny<Episode>()));
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.Delete(It.IsAny<int>())); .Setup(e => e.Delete(It.IsAny<int>()));
Mocker.GetMock<IConfigService>() Mocker.GetMock<IConfigService>()
@ -106,10 +107,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Verify(e => e.UpdateEpisode(It.Is<Episode>(g => g.EpisodeFileId == 0)), Times.Exactly(20)); .Verify(e => e.UpdateEpisode(It.Is<Episode>(g => g.EpisodeFileId == 0)), Times.Exactly(20));
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10)); .Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10));
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10)); .Verify(e => e.Delete(It.IsAny<int>()), Times.Exactly(10));
} }

@ -6,6 +6,7 @@ using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
@ -63,7 +64,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
//Mocks //Mocks
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -120,7 +121,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
//Mocks //Mocks
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -141,7 +142,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())).Returns(false); .Setup(p => p.Exists(It.IsAny<String>())).Returns(false);
With80MBFile(); With80MBFile();
@ -162,7 +163,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
WithStrictMocker(); WithStrictMocker();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(true); .Returns(true);
@ -190,7 +191,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -221,7 +222,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
//Mocks //Mocks
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -253,7 +254,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -286,7 +287,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -324,7 +325,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
//Mocks //Mocks
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -353,7 +354,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
//Mocks //Mocks
With80MBFile(); With80MBFile();
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(p => p.Exists(It.IsAny<String>())) .Setup(p => p.Exists(It.IsAny<String>()))
.Returns(false); .Returns(false);
@ -419,7 +420,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
{ {
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(m => m.Exists(path)) .Setup(m => m.Exists(path))
.Returns(false); .Returns(false);
@ -442,7 +443,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(m => m.Exists(path)) .Setup(m => m.Exists(path))
.Returns(false); .Returns(false);
@ -473,7 +474,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(m => m.Exists(path)) .Setup(m => m.Exists(path))
.Returns(false); .Returns(false);
@ -500,7 +501,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
const string path = @"C:\Test\TV\30.rock.s00e01.pre-pilot.avi"; const string path = @"C:\Test\TV\30.rock.s00e01.pre-pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(m => m.Exists(path)) .Setup(m => m.Exists(path))
.Returns(false); .Returns(false);
@ -528,7 +529,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(m => m.Exists(path)) .Setup(m => m.Exists(path))
.Returns(false); .Returns(false);
@ -549,18 +550,18 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
result.SeriesId.Should().Be(fakeEpisode.SeriesId); result.SeriesId.Should().Be(fakeEpisode.SeriesId);
result.Size.Should().Be(size); result.Size.Should().Be(size);
result.DateAdded.Should().HaveDay(DateTime.Now.Day); result.DateAdded.Should().HaveDay(DateTime.Now.Day);
Mocker.GetMock<MediaFileProvider>().Verify(p => p.Add(It.IsAny<EpisodeFile>()), Times.Once()); Mocker.GetMock<IMediaFileService>().Verify(p => p.Add(It.IsAny<EpisodeFile>()), Times.Once());
//Get the count of episodes linked //Get the count of episodes linked
var count = Mocker.GetMock<IEpisodeService>().Object.GetEpisodesByParseResult(null).Count; var count = Mocker.GetMock<IEpisodeService>().Object.GetEpisodesByParseResult(null).Count;
Mocker.GetMock<IEpisodeService>().Verify(p => p.UpdateEpisode(It.Is<Episode>(e => e.EpisodeFileId == result.EpisodeFileId)), Times.Exactly(count)); Mocker.GetMock<IEpisodeService>().Verify(p => p.UpdateEpisode(It.Is<Episode>(e => e.EpisodeFileId == result.Id)), Times.Exactly(count));
} }
private static void VerifySkipImport(EpisodeFile result, AutoMoqer Mocker) private static void VerifySkipImport(EpisodeFile result, AutoMoqer Mocker)
{ {
result.Should().BeNull(); result.Should().BeNull();
Mocker.GetMock<MediaFileProvider>().Verify(p => p.Add(It.IsAny<EpisodeFile>()), Times.Never()); Mocker.GetMock<IMediaFileService>().Verify(p => p.Add(It.IsAny<EpisodeFile>()), Times.Never());
Mocker.GetMock<IEpisodeService>().Verify(p => p.UpdateEpisode(It.IsAny<Episode>()), Times.Never()); Mocker.GetMock<IEpisodeService>().Verify(p => p.UpdateEpisode(It.IsAny<Episode>()), Times.Never());
Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never()); Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never());
} }

@ -10,6 +10,7 @@ using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.ExternalNotification; using NzbDrone.Core.ExternalNotification;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
@ -53,14 +54,14 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Returns(fakeSeries); .Returns(fakeSeries);
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Setup(e => e.GetEpisodesByFileId(file.Id))
.Returns(fakeEpisode); .Returns(fakeEpisode);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>())) .Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>()))
.Returns(filename); .Returns(filename);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".avi")) .Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".avi"))
.Returns(fi); .Returns(fi);
@ -103,14 +104,14 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Returns(fakeSeries); .Returns(fakeSeries);
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Setup(e => e.GetEpisodesByFileId(file.Id))
.Returns(fakeEpisode); .Returns(fakeEpisode);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>())) .Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>()))
.Returns(filename); .Returns(filename);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".mkv")) .Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".mkv"))
.Returns(fi); .Returns(fi);
@ -155,14 +156,14 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Returns(fakeSeries); .Returns(fakeSeries);
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) .Setup(e => e.GetEpisodesByFileId(file.Id))
.Returns(fakeEpisode); .Returns(fakeEpisode);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>())) .Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny<Quality>(), It.IsAny<bool>(), It.IsAny<EpisodeFile>()))
.Returns(filename); .Returns(filename);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".mkv")) .Setup(e => e.CalculateFilePath(It.IsAny<Series>(), fakeEpisode.First().SeasonNumber, filename, ".mkv"))
.Returns(fi); .Returns(fi);

@ -4,6 +4,7 @@ using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Test.Framework;
@ -30,8 +31,8 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Setup(c => c.FolderExists(It.IsAny<string>())) .Setup(c => c.FolderExists(It.IsAny<string>()))
.Returns(true); .Returns(true);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetSeriesFiles(It.IsAny<int>())) .Setup(c => c.GetFilesBySeries(It.IsAny<int>()))
.Returns(new List<EpisodeFile>()); .Returns(new List<EpisodeFile>());
Mocker.Resolve<DiskScanProvider>().Scan(new Series()); Mocker.Resolve<DiskScanProvider>().Scan(new Series());
@ -51,10 +52,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Build(); .Build();
Mocker.GetMock<MediaFileProvider>()
.Setup(c => c.CleanUpDatabase());
Mocker.GetMock<DiskProvider>() Mocker.GetMock<DiskProvider>()
.Setup(c => c.FolderExists(series.Path)) .Setup(c => c.FolderExists(series.Path))
.Returns(false); .Returns(false);

@ -9,6 +9,7 @@ using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -105,7 +106,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata
.Build(); .Build();
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) .Setup(s => s.GetEpisodesByFileId(episodeFile.Id))
.Returns(new List<Episode> { episode }); .Returns(new List<Episode> { episode });
} }
@ -118,7 +119,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata
.Build(); .Build();
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(s => s.GetEpisodesByFileId(episodeFile.EpisodeFileId)) .Setup(s => s.GetEpisodesByFileId(episodeFile.Id))
.Returns(episodes.ToList()); .Returns(episodes.ToList());
} }

@ -4,6 +4,7 @@ using FizzWare.NBuilder;
using FluentAssertions; using FluentAssertions;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -26,10 +27,10 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2) var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
.TheFirst(1) .TheFirst(1)
.With(f => f.EpisodeFileId = 1) .With(f => f.Id = 1)
.With(f => f.Path = @"C:\Test\Title1.avi") .With(f => f.Path = @"C:\Test\Title1.avi")
.TheNext(1) .TheNext(1)
.With(f => f.EpisodeFileId = 2) .With(f => f.Id = 2)
.With(f => f.Path = @"C:\Test\Title2.avi") .With(f => f.Path = @"C:\Test\Title2.avi")
.Build(); .Build();
@ -47,11 +48,11 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(c => c.EpisodesWithFiles()).Returns(episodes); .Setup(c => c.EpisodesWithFiles()).Returns(episodes);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0]))
.Returns("Title1"); .Returns("Title1");
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1]))
.Returns("Title2"); .Returns("Title2");
@ -73,10 +74,10 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2) var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
.TheFirst(1) .TheFirst(1)
.With(f => f.EpisodeFileId = 1) .With(f => f.Id = 1)
.With(f => f.Path = @"C:\Test\Title1.avi") .With(f => f.Path = @"C:\Test\Title1.avi")
.TheNext(1) .TheNext(1)
.With(f => f.EpisodeFileId = 2) .With(f => f.Id = 2)
.With(f => f.Path = @"C:\Test\Title2.avi") .With(f => f.Path = @"C:\Test\Title2.avi")
.Build(); .Build();
@ -94,11 +95,11 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(c => c.EpisodesWithFiles()).Returns(episodes); .Setup(c => c.EpisodesWithFiles()).Returns(episodes);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0]))
.Returns("New Title 1"); .Returns("New Title 1");
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1]))
.Returns("New Title 2"); .Returns("New Title 2");
@ -120,10 +121,10 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2) var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
.TheFirst(1) .TheFirst(1)
.With(f => f.EpisodeFileId = 1) .With(f => f.Id = 1)
.With(f => f.Path = @"C:\Test\Title1.avi") .With(f => f.Path = @"C:\Test\Title1.avi")
.TheNext(1) .TheNext(1)
.With(f => f.EpisodeFileId = 2) .With(f => f.Id = 2)
.With(f => f.Path = @"C:\Test\Title2.avi") .With(f => f.Path = @"C:\Test\Title2.avi")
.Build(); .Build();
@ -141,11 +142,11 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(c => c.EpisodesWithFiles()).Returns(episodes); .Setup(c => c.EpisodesWithFiles()).Returns(episodes);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0]))
.Returns("New Title 1"); .Returns("New Title 1");
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1]))
.Returns("Title2"); .Returns("Title2");
@ -169,10 +170,10 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2) var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
.TheFirst(1) .TheFirst(1)
.With(f => f.EpisodeFileId = 1) .With(f => f.Id = 1)
.With(f => f.Path = @"C:\Test\Title1.avi") .With(f => f.Path = @"C:\Test\Title1.avi")
.TheNext(1) .TheNext(1)
.With(f => f.EpisodeFileId = 2) .With(f => f.Id = 2)
.With(f => f.Path = @"C:\Test\Title2.avi") .With(f => f.Path = @"C:\Test\Title2.avi")
.Build(); .Build();
@ -190,11 +191,11 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(c => c.EpisodesWithFiles()).Returns(episodes); .Setup(c => c.EpisodesWithFiles()).Returns(episodes);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0]))
.Returns("New Title 1"); .Returns("New Title 1");
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1]))
.Returns("Title2"); .Returns("Title2");
@ -218,10 +219,10 @@ namespace NzbDrone.Core.Test.ProviderTests
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2) var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
.TheFirst(1) .TheFirst(1)
.With(f => f.EpisodeFileId = 1) .With(f => f.Id = 1)
.With(f => f.Path = @"C:\Test\Title1.avi") .With(f => f.Path = @"C:\Test\Title1.avi")
.TheNext(1) .TheNext(1)
.With(f => f.EpisodeFileId = 2) .With(f => f.Id = 2)
.With(f => f.Path = @"C:\Test\Title2.avi") .With(f => f.Path = @"C:\Test\Title2.avi")
.Build(); .Build();
@ -239,11 +240,11 @@ namespace NzbDrone.Core.Test.ProviderTests
Mocker.GetMock<IEpisodeService>() Mocker.GetMock<IEpisodeService>()
.Setup(c => c.EpisodesWithFiles()).Returns(episodes); .Setup(c => c.EpisodesWithFiles()).Returns(episodes);
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[0]))
.Returns("Title1"); .Returns("Title1");
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<IMediaFileService>()
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1])) .Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, It.IsAny<Series>(), It.IsAny<Quality>(), It.IsAny<bool>(), episodeFiles[1]))
.Returns("Title2"); .Returns("Title2");

@ -8,6 +8,7 @@ using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;

@ -8,6 +8,7 @@ using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;

@ -8,6 +8,7 @@ using FizzWare.NBuilder;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;

@ -9,6 +9,7 @@ using Moq;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
@ -86,9 +87,9 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = Quality.SDTV).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.Id).With(c => c.Quality = Quality.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { Id = 1 }).With(e => e.EpisodeFile = fakeFile).Build();
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
Db.InsertMany(fakeEpisodes); Db.InsertMany(fakeEpisodes);
@ -630,7 +631,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
{ {
TvDbEpisodeId = tvDbEpisode.Id, TvDbEpisodeId = tvDbEpisode.Id,
Id = 99, Id = 99,
EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, EpisodeFile = new EpisodeFile { Id = 69 },
Ignored = true, Ignored = true,
Series = fakeSeries, Series = fakeSeries,
EpisodeNumber = tvDbEpisode.EpisodeNumber, EpisodeNumber = tvDbEpisode.EpisodeNumber,
@ -679,7 +680,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
{ {
TvDbEpisodeId = tvDbEpisode.Id, TvDbEpisodeId = tvDbEpisode.Id,
Id = 99, Id = 99,
EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, EpisodeFile = new EpisodeFile { Id = 69 },
Ignored = true, Ignored = true,
Series = fakeSeries, Series = fakeSeries,
EpisodeNumber = tvDbEpisode.EpisodeNumber + 1, EpisodeNumber = tvDbEpisode.EpisodeNumber + 1,
@ -725,7 +726,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
{ {
TvDbEpisodeId = tvDbEpisode.Id, TvDbEpisodeId = tvDbEpisode.Id,
Id = 99, Id = 99,
EpisodeFile = new EpisodeFile { EpisodeFileId = 69 }, EpisodeFile = new EpisodeFile { Id = 69 },
Ignored = true, Ignored = true,
Series = fakeSeries, Series = fakeSeries,
EpisodeNumber = tvDbEpisode.EpisodeNumber, EpisodeNumber = tvDbEpisode.EpisodeNumber,
@ -857,9 +858,9 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = Quality.SDTV).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.Id).With(c => c.Quality = Quality.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(c => c.EpisodeFile = new EpisodeFile { Id = 1 }).With(e => e.EpisodeFile = fakeFile).Build();
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
Db.InsertMany(fakeEpisodes); Db.InsertMany(fakeEpisodes);
@ -901,9 +902,9 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
WithRealDb(); WithRealDb();
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.EpisodeFileId).With(c => c.Quality = Quality.SDTV).Build(); var fakeFile = Builder<EpisodeFile>.CreateNew().With(f => f.Id).With(c => c.Quality = Quality.SDTV).Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).With(e => e.EpisodeFile = fakeFile).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { Id = 1 }).With(e => e.EpisodeFile = fakeFile).Build();
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
Db.InsertMany(fakeEpisodes); Db.InsertMany(fakeEpisodes);
@ -925,7 +926,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
var fakeSeries = Builder<Series>.CreateNew().Build(); var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisodes = Builder<Episode>.CreateListOfSize(5) var fakeEpisodes = Builder<Episode>.CreateListOfSize(5)
.All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { EpisodeFileId = 1 }).Build(); .All().With(e => e.SeriesId = 1).TheFirst(1).With(e => e.EpisodeFile = new EpisodeFile { Id = 1 }).Build();
Db.InsertMany(fakeEpisodes); Db.InsertMany(fakeEpisodes);
Db.Insert(fakeSeries); Db.Insert(fakeSeries);
@ -1212,7 +1213,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
.Build(); .Build();
var episodeFile = Builder<EpisodeFile>.CreateNew() var episodeFile = Builder<EpisodeFile>.CreateNew()
.With(c => c.EpisodeFileId = 1) .With(c => c.Id = 1)
.With(c => c.Quality = Quality.SDTV) .With(c => c.Quality = Quality.SDTV)
.Build(); .Build();
@ -1288,7 +1289,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
.All() .All()
.With(c => c.SeriesId = 10) .With(c => c.SeriesId = 10)
.With(c => c.SeasonNumber = 1) .With(c => c.SeasonNumber = 1)
.With(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 12345 }) .With(c => c.EpisodeFile = new EpisodeFile { Id = 12345 })
.Build(); .Build();
Db.Insert(series); Db.Insert(series);
@ -1314,7 +1315,7 @@ namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
var fakeEpisode = Builder<Episode>.CreateNew() var fakeEpisode = Builder<Episode>.CreateNew()
.With(c => c.SeriesId = 10) .With(c => c.SeriesId = 10)
.With(c => c.SeasonNumber = 1) .With(c => c.SeasonNumber = 1)
.With(c => c.EpisodeFile = new EpisodeFile { EpisodeFileId = 12345 }) .With(c => c.EpisodeFile = new EpisodeFile { Id = 12345 })
.Build(); .Build();
Db.Insert(series); Db.Insert(series);

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;

@ -15,6 +15,7 @@ namespace NzbDrone.Core.Datastore
IList<T> UpdateMany<T>(IList<T> objects) where T : ModelBase; IList<T> UpdateMany<T>(IList<T> objects) where T : ModelBase;
void Delete<T>(T obj) where T : ModelBase; void Delete<T>(T obj) where T : ModelBase;
void DeleteMany<T>(IEnumerable<T> objects) where T : ModelBase; void DeleteMany<T>(IEnumerable<T> objects) where T : ModelBase;
void UpdateField<T>(T model, string fieldName) where T : ModelBase;
} }
public static class SiaqodbLogger public static class SiaqodbLogger
@ -22,8 +23,8 @@ namespace NzbDrone.Core.Datastore
public static void ListenTo(Siaqodb db) public static void ListenTo(Siaqodb db)
{ {
db.DeletedObject += OnDeletedObject; db.DeletedObject += OnDeletedObject;
db.LoadingObject +=OnLoadingObject; db.LoadingObject += OnLoadingObject;
db.LoadedObject +=OnLoadedObject; db.LoadedObject += OnLoadedObject;
} }
private static void OnLoadedObject(object sender, LoadedObjectEventArgs e) private static void OnLoadedObject(object sender, LoadedObjectEventArgs e)
@ -116,6 +117,11 @@ namespace NzbDrone.Core.Datastore
} }
} }
public void UpdateField<T>(T model, string fieldName) where T : ModelBase
{
_db.UpdateObjectBy(model, fieldName);
}
private IList<T> DoMany<T>(IEnumerable<T> objects, Func<T, T> function) where T : ModelBase private IList<T> DoMany<T>(IEnumerable<T> objects, Func<T, T> function) where T : ModelBase
{ {
return objects.Select(function).ToList(); return objects.Select(function).ToList();

@ -4,6 +4,7 @@ using System.IO;
using System.Linq; using System.Linq;
using NLog; using NLog;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -18,7 +19,7 @@ namespace NzbDrone.Core.Jobs
{ {
private readonly ISeriesService _seriesService; private readonly ISeriesService _seriesService;
private readonly IEpisodeService _episodeService; private readonly IEpisodeService _episodeService;
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly UpdateInfoJob _updateInfoJob; private readonly UpdateInfoJob _updateInfoJob;
private readonly DiskScanJob _diskScanJob; private readonly DiskScanJob _diskScanJob;
private readonly BannerDownloadJob _bannerDownloadJob; private readonly BannerDownloadJob _bannerDownloadJob;
@ -32,13 +33,13 @@ namespace NzbDrone.Core.Jobs
private List<int> _attemptedSeries; private List<int> _attemptedSeries;
public ImportNewSeriesJob(ISeriesService seriesService, IEpisodeService episodeService, public ImportNewSeriesJob(ISeriesService seriesService, IEpisodeService episodeService,
MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob, IMediaFileService mediaFileService, UpdateInfoJob updateInfoJob,
DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob, DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob,
ISeasonRepository seasonRepository, XemUpdateJob xemUpdateJob, ISeriesRepository seriesRepository,ISeasonService seasonService) ISeasonRepository seasonRepository, XemUpdateJob xemUpdateJob, ISeriesRepository seriesRepository,ISeasonService seasonService)
{ {
_seriesService = seriesService; _seriesService = seriesService;
_episodeService = episodeService; _episodeService = episodeService;
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_updateInfoJob = updateInfoJob; _updateInfoJob = updateInfoJob;
_diskScanJob = diskScanJob; _diskScanJob = diskScanJob;
_bannerDownloadJob = bannerDownloadJob; _bannerDownloadJob = bannerDownloadJob;
@ -108,7 +109,7 @@ namespace NzbDrone.Core.Jobs
{ {
//Todo: Need to convert this over to ObjectDb //Todo: Need to convert this over to ObjectDb
return; return;
var episodeFiles = _mediaFileProvider.GetSeriesFiles(seriesId); var episodeFiles = _mediaFileService.GetFilesBySeries(seriesId);
if (episodeFiles.Count() != 0) if (episodeFiles.Count() != 0)
{ {

@ -3,6 +3,7 @@ using System.Linq;
using System; using System;
using NLog; using NLog;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -12,17 +13,17 @@ namespace NzbDrone.Core.Jobs
{ {
public class RefreshEpisodeMetadata : IJob public class RefreshEpisodeMetadata : IJob
{ {
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly ISeriesService _seriesService; private readonly ISeriesService _seriesService;
private readonly MetadataProvider _metadataProvider; private readonly MetadataProvider _metadataProvider;
private readonly ISeriesRepository _seriesRepository; private readonly ISeriesRepository _seriesRepository;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public RefreshEpisodeMetadata(MediaFileProvider mediaFileProvider, ISeriesService seriesService, public RefreshEpisodeMetadata(IMediaFileService mediaFileService, ISeriesService seriesService,
MetadataProvider metadataProvider,ISeriesRepository seriesRepository) MetadataProvider metadataProvider,ISeriesRepository seriesRepository)
{ {
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_seriesService = seriesService; _seriesService = seriesService;
_metadataProvider = metadataProvider; _metadataProvider = metadataProvider;
_seriesRepository = seriesRepository; _seriesRepository = seriesRepository;
@ -59,7 +60,7 @@ namespace NzbDrone.Core.Jobs
notification.CurrentMessage = String.Format("Refreshing episode metadata for '{0}'", series.Title); notification.CurrentMessage = String.Format("Refreshing episode metadata for '{0}'", series.Title);
Logger.Debug("Getting episodes from database for series: {0}", series.Id); Logger.Debug("Getting episodes from database for series: {0}", series.Id);
var episodeFiles = _mediaFileProvider.GetSeriesFiles(series.Id); var episodeFiles = _mediaFileService.GetFilesBySeries(series.Id);
if (episodeFiles == null || episodeFiles.Count == 0) if (episodeFiles == null || episodeFiles.Count == 0)
{ {

@ -5,6 +5,7 @@ using NLog;
using NzbDrone.Common.Eventing; using NzbDrone.Common.Eventing;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.ExternalNotification; using NzbDrone.Core.ExternalNotification;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -13,7 +14,7 @@ namespace NzbDrone.Core.Jobs
{ {
public class RenameSeasonJob : IJob public class RenameSeasonJob : IJob
{ {
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly DiskScanProvider _diskScanProvider; private readonly DiskScanProvider _diskScanProvider;
private readonly ISeriesService _seriesService; private readonly ISeriesService _seriesService;
private readonly MetadataProvider _metadataProvider; private readonly MetadataProvider _metadataProvider;
@ -22,10 +23,10 @@ namespace NzbDrone.Core.Jobs
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public RenameSeasonJob(MediaFileProvider mediaFileProvider, DiskScanProvider diskScanProvider, ISeriesService seriesService, public RenameSeasonJob(IMediaFileService mediaFileService, DiskScanProvider diskScanProvider, ISeriesService seriesService,
MetadataProvider metadataProvider, ISeriesRepository seriesRepository, IEventAggregator eventAggregator) MetadataProvider metadataProvider, ISeriesRepository seriesRepository, IEventAggregator eventAggregator)
{ {
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_diskScanProvider = diskScanProvider; _diskScanProvider = diskScanProvider;
_seriesService = seriesService; _seriesService = seriesService;
_metadataProvider = metadataProvider; _metadataProvider = metadataProvider;
@ -56,7 +57,7 @@ namespace NzbDrone.Core.Jobs
notification.CurrentMessage = String.Format("Renaming episodes for {0} Season {1}", series.Title, options.SeasonNumber); notification.CurrentMessage = String.Format("Renaming episodes for {0} Season {1}", series.Title, options.SeasonNumber);
logger.Debug("Getting episodes from database for series: {0} and season: {1}", options.SeriesId, options.SeasonNumber); logger.Debug("Getting episodes from database for series: {0} and season: {1}", options.SeriesId, options.SeasonNumber);
IList<EpisodeFile> episodeFiles = _mediaFileProvider.GetSeasonFiles((int)options.SeriesId, (int)options.SeasonNumber); IList<EpisodeFile> episodeFiles = _mediaFileService.GetFilesBySeason((int)options.SeriesId, (int)options.SeasonNumber);
if (episodeFiles == null || !episodeFiles.Any()) if (episodeFiles == null || !episodeFiles.Any())
{ {

@ -4,6 +4,7 @@ using System;
using NLog; using NLog;
using NzbDrone.Common.Eventing; using NzbDrone.Common.Eventing;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -12,7 +13,7 @@ namespace NzbDrone.Core.Jobs
{ {
public class RenameSeriesJob : IJob public class RenameSeriesJob : IJob
{ {
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly DiskScanProvider _diskScanProvider; private readonly DiskScanProvider _diskScanProvider;
private readonly MetadataProvider _metadataProvider; private readonly MetadataProvider _metadataProvider;
private readonly ISeriesRepository _seriesRepository; private readonly ISeriesRepository _seriesRepository;
@ -20,10 +21,10 @@ namespace NzbDrone.Core.Jobs
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public RenameSeriesJob(MediaFileProvider mediaFileProvider, DiskScanProvider diskScanProvider, public RenameSeriesJob(IMediaFileService mediaFileService, DiskScanProvider diskScanProvider,
MetadataProvider metadataProvider,ISeriesRepository seriesRepository,IEventAggregator eventAggregator) MetadataProvider metadataProvider,ISeriesRepository seriesRepository,IEventAggregator eventAggregator)
{ {
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_diskScanProvider = diskScanProvider; _diskScanProvider = diskScanProvider;
_metadataProvider = metadataProvider; _metadataProvider = metadataProvider;
_seriesRepository = seriesRepository; _seriesRepository = seriesRepository;
@ -59,7 +60,7 @@ namespace NzbDrone.Core.Jobs
notification.CurrentMessage = String.Format("Renaming episodes for '{0}'", series.Title); notification.CurrentMessage = String.Format("Renaming episodes for '{0}'", series.Title);
Logger.Debug("Getting episodes from database for series: {0}", series.Id); Logger.Debug("Getting episodes from database for series: {0}", series.Id);
var episodeFiles = _mediaFileProvider.GetSeriesFiles(series.Id); var episodeFiles = _mediaFileService.GetFilesBySeries(series.Id);
if (episodeFiles == null || episodeFiles.Count == 0) if (episodeFiles == null || episodeFiles.Count == 0)
{ {

@ -1,11 +1,12 @@
using System.Linq; using System.Linq;
using System; using System;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using PetaPoco; using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Tv namespace NzbDrone.Core.MediaFiles
{ {
public class EpisodeFile public class EpisodeFile : ModelBase
{ {
public EpisodeFile() public EpisodeFile()
{ {
@ -14,7 +15,7 @@ namespace NzbDrone.Core.Tv
public EpisodeFile(EpisodeFile source) public EpisodeFile(EpisodeFile source)
{ {
EpisodeFileId = source.EpisodeFileId; Id = source.Id;
SeriesId = source.SeriesId; SeriesId = source.SeriesId;
SeasonNumber = source.SeasonNumber; SeasonNumber = source.SeasonNumber;
Path = source.Path; Path = source.Path;
@ -23,8 +24,6 @@ namespace NzbDrone.Core.Tv
Size = source.Size; Size = source.Size;
} }
public int EpisodeFileId { get; set; }
public int SeriesId { get; set; } public int SeriesId { get; set; }
public int SeasonNumber { get; set; } public int SeasonNumber { get; set; }
public string Path { get; set; } public string Path { get; set; }

@ -0,0 +1,39 @@
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.MediaFiles
{
public interface IMediaFileRepository : IBasicRepository<EpisodeFile>
{
EpisodeFile GetFileByPath(string path);
List<EpisodeFile> GetFilesBySeries(int seriesId);
List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber);
}
public class MediaFileRepository : BasicRepository<EpisodeFile>, IMediaFileRepository
{
public MediaFileRepository(IObjectDatabase objectDatabase)
: base(objectDatabase)
{
}
public EpisodeFile GetFileByPath(string path)
{
return Queryable.SingleOrDefault(c => c.Path == path);
}
public List<EpisodeFile> GetFilesBySeries(int seriesId)
{
return Queryable.Where(c => c.SeriesId == seriesId).ToList();
}
public List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber)
{
return Queryable.Where(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber).ToList();
}
}
}

@ -0,0 +1,214 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NLog;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv;
using NzbDrone.Core.Helpers;
namespace NzbDrone.Core.MediaFiles
{
public interface IMediaFileService
{
EpisodeFile Add(EpisodeFile episodeFile);
void Update(EpisodeFile episodeFile);
void Delete(int episodeFileId);
bool Exists(string path);
EpisodeFile GetFileByPath(string path);
IList<EpisodeFile> GetFilesBySeries(int seriesId);
IList<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber);
FileInfo CalculateFilePath(Series series, int seasonNumber, string fileName, string extention);
string GetNewFilename(IList<Episode> episodes, Series series, Quality quality, bool proper, EpisodeFile episodeFile);
}
public class MediaFileService : IMediaFileService
{
private readonly IConfigService _configService;
private readonly IEpisodeService _episodeService;
private readonly Logger _logger;
private readonly IMediaFileRepository _mediaFileRepository;
public MediaFileService(IMediaFileRepository mediaFileRepository, IConfigService configService, IEpisodeService episodeService, Logger logger)
{
_mediaFileRepository = mediaFileRepository;
_configService = configService;
_episodeService = episodeService;
_logger = logger;
}
public EpisodeFile Add(EpisodeFile episodeFile)
{
return _mediaFileRepository.Insert(episodeFile);
}
public void Update(EpisodeFile episodeFile)
{
_mediaFileRepository.Update(episodeFile);
}
public void Delete(int episodeFileId)
{
_mediaFileRepository.Delete(episodeFileId);
var ep = _episodeService.GetEpisodesByFileId(episodeFileId);
foreach (var episode in ep)
{
_episodeService.SetEpisodeIgnore(episode.Id, true);
}
}
public bool Exists(string path)
{
return GetFileByPath(path) != null;
}
public EpisodeFile GetFileByPath(string path)
{
return _mediaFileRepository.GetFileByPath(path.Normalize());
}
public IList<EpisodeFile> GetFilesBySeries(int seriesId)
{
return _mediaFileRepository.GetFilesBySeries(seriesId);
}
public IList<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber)
{
return _mediaFileRepository.GetFilesBySeason(seriesId, seasonNumber);
}
public FileInfo CalculateFilePath(Series series, int seasonNumber, string fileName, string extention)
{
string path = series.Path;
if (series.SeasonFolder)
{
var seasonFolder = _configService.SortingSeasonFolderFormat
.Replace("%0s", seasonNumber.ToString("00"))
.Replace("%s", seasonNumber.ToString());
path = Path.Combine(path, seasonFolder);
}
path = Path.Combine(path, fileName + extention);
return new FileInfo(path);
}
public string GetNewFilename(IList<Episode> episodes, Series series, Quality quality, bool proper, EpisodeFile episodeFile)
{
if (_configService.SortingUseSceneName)
{
_logger.Trace("Attempting to use scene name");
if (String.IsNullOrWhiteSpace(episodeFile.SceneName))
{
var name = Path.GetFileNameWithoutExtension(episodeFile.Path);
_logger.Trace("Unable to use scene name, because it is null, sticking with current name: {0}", name);
return name;
}
return episodeFile.SceneName;
}
var sortedEpisodes = episodes.OrderBy(e => e.EpisodeNumber);
var separatorStyle = EpisodeSortingHelper.GetSeparatorStyle(_configService.SortingSeparatorStyle);
var numberStyle = EpisodeSortingHelper.GetNumberStyle(_configService.SortingNumberStyle);
var episodeNames = new List<String>();
episodeNames.Add(Parser.CleanupEpisodeTitle(sortedEpisodes.First().Title));
string result = String.Empty;
if (_configService.SortingIncludeSeriesName)
{
result += series.Title + separatorStyle.Pattern;
}
if (series.SeriesType == SeriesType.Standard)
{
result += numberStyle.Pattern.Replace("%0e",
String.Format("{0:00}", sortedEpisodes.First().EpisodeNumber));
if (episodes.Count > 1)
{
var multiEpisodeStyle =
EpisodeSortingHelper.GetMultiEpisodeStyle(_configService.SortingMultiEpisodeStyle);
foreach (var episode in sortedEpisodes.Skip(1))
{
if (multiEpisodeStyle.Name == "Duplicate")
{
result += separatorStyle.Pattern + numberStyle.Pattern;
}
else
{
result += multiEpisodeStyle.Pattern;
}
result = result.Replace("%0e", String.Format("{0:00}", episode.EpisodeNumber));
episodeNames.Add(Parser.CleanupEpisodeTitle(episode.Title));
}
}
result = result
.Replace("%s", String.Format("{0}", episodes.First().SeasonNumber))
.Replace("%0s", String.Format("{0:00}", episodes.First().SeasonNumber))
.Replace("%x", numberStyle.EpisodeSeparator)
.Replace("%p", separatorStyle.Pattern);
}
else
{
if (episodes.First().AirDate.HasValue)
result += episodes.First().AirDate.Value.ToString("yyyy-MM-dd");
else
result += "Unknown";
}
if (_configService.SortingIncludeEpisodeTitle)
{
if (episodeNames.Distinct().Count() == 1)
result += separatorStyle.Pattern + episodeNames.First();
else
result += separatorStyle.Pattern + String.Join(" + ", episodeNames.Distinct());
}
if (_configService.SortingAppendQuality)
{
result += String.Format(" [{0}]", quality);
if (proper)
result += " [Proper]";
}
if (_configService.SortingReplaceSpaces)
result = result.Replace(' ', '.');
_logger.Trace("New File Name is: [{0}]", result.Trim());
return CleanFilename(result.Trim());
}
public static string CleanFilename(string name)
{
string result = name;
string[] badCharacters = { "\\", "/", "<", ">", "?", "*", ":", "|", "\"" };
string[] goodCharacters = { "+", "+", "{", "}", "!", "@", "-", "#", "`" };
for (int i = 0; i < badCharacters.Length; i++)
result = result.Replace(badCharacters[i], goodCharacters[i]);
return result.Trim();
}
}
}

@ -1,6 +1,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
@ -76,7 +77,7 @@ namespace NzbDrone.Core.Model
public string GetDownloadTitle() public string GetDownloadTitle()
{ {
var seriesTitle = MediaFileProvider.CleanFilename(Series.Title); var seriesTitle = MediaFileService.CleanFilename(Series.Title);
//Handle Full Naming //Handle Full Naming
if (FullSeason) if (FullSeason)

@ -285,6 +285,7 @@
<Compile Include="Jobs\RefreshEpsiodeMetadata.cs" /> <Compile Include="Jobs\RefreshEpsiodeMetadata.cs" />
<Compile Include="Jobs\PastWeekBacklogSearchJob.cs" /> <Compile Include="Jobs\PastWeekBacklogSearchJob.cs" />
<Compile Include="Lifecycle\IInitializable.cs" /> <Compile Include="Lifecycle\IInitializable.cs" />
<Compile Include="MediaFiles\MediaFileRepository.cs" />
<Compile Include="Model\DownloadClientType.cs" /> <Compile Include="Model\DownloadClientType.cs" />
<Compile Include="Instrumentation\LogService.cs" /> <Compile Include="Instrumentation\LogService.cs" />
<Compile Include="Instrumentation\DatabaseTarget.cs" /> <Compile Include="Instrumentation\DatabaseTarget.cs" />
@ -508,7 +509,7 @@
<Compile Include="Indexers\SyndicationFeedXmlReader.cs"> <Compile Include="Indexers\SyndicationFeedXmlReader.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Providers\MediaFileProvider.cs"> <Compile Include="MediaFiles\MediaFileService.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Providers\MisnamedProvider.cs"> <Compile Include="Providers\MisnamedProvider.cs">
@ -582,7 +583,7 @@
<Compile Include="Model\EpisodeStatusType.cs" /> <Compile Include="Model\EpisodeStatusType.cs" />
<Compile Include="Model\Sabnzbd\SabPriorityType.cs" /> <Compile Include="Model\Sabnzbd\SabPriorityType.cs" />
<Compile Include="Model\SeasonParseResult.cs" /> <Compile Include="Model\SeasonParseResult.cs" />
<Compile Include="Tv\EpisodeFile.cs" /> <Compile Include="MediaFiles\EpisodeFile.cs" />
<Compile Include="Model\Notification\ProgressNotificationStatus.cs" /> <Compile Include="Model\Notification\ProgressNotificationStatus.cs" />
<Compile Include="Parser.cs" /> <Compile Include="Parser.cs" />
<Compile Include="Model\Notification\ProgressNotification.cs" /> <Compile Include="Model\Notification\ProgressNotification.cs" />

@ -8,6 +8,7 @@ using NzbDrone.Common.Eventing;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.ExternalNotification; using NzbDrone.Core.ExternalNotification;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
@ -19,7 +20,7 @@ namespace NzbDrone.Core.Providers
private static readonly string[] mediaExtentions = new[] { ".mkv", ".avi", ".wmv", ".mp4", ".mpg", ".mpeg", ".xvid", ".flv", ".mov", ".rm", ".rmvb", ".divx", ".dvr-ms", ".ts", ".ogm", ".m4v", ".strm" }; private static readonly string[] mediaExtentions = new[] { ".mkv", ".avi", ".wmv", ".mp4", ".mpg", ".mpeg", ".xvid", ".flv", ".mov", ".rm", ".rmvb", ".divx", ".dvr-ms", ".ts", ".ogm", ".m4v", ".strm" };
private readonly DiskProvider _diskProvider; private readonly DiskProvider _diskProvider;
private readonly IEpisodeService _episodeService; private readonly IEpisodeService _episodeService;
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly SignalRProvider _signalRProvider; private readonly SignalRProvider _signalRProvider;
private readonly IConfigService _configService; private readonly IConfigService _configService;
private readonly RecycleBinProvider _recycleBinProvider; private readonly RecycleBinProvider _recycleBinProvider;
@ -27,13 +28,13 @@ namespace NzbDrone.Core.Providers
private readonly ISeriesRepository _seriesRepository; private readonly ISeriesRepository _seriesRepository;
private readonly IEventAggregator _eventAggregator; private readonly IEventAggregator _eventAggregator;
public DiskScanProvider(DiskProvider diskProvider, IEpisodeService episodeService, MediaFileProvider mediaFileProvider, public DiskScanProvider(DiskProvider diskProvider, IEpisodeService episodeService, IMediaFileService mediaFileService,
SignalRProvider signalRProvider, IConfigService configService, SignalRProvider signalRProvider, IConfigService configService,
RecycleBinProvider recycleBinProvider, MediaInfoProvider mediaInfoProvider, ISeriesRepository seriesRepository, IEventAggregator eventAggregator) RecycleBinProvider recycleBinProvider, MediaInfoProvider mediaInfoProvider, ISeriesRepository seriesRepository, IEventAggregator eventAggregator)
{ {
_diskProvider = diskProvider; _diskProvider = diskProvider;
_episodeService = episodeService; _episodeService = episodeService;
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_signalRProvider = signalRProvider; _signalRProvider = signalRProvider;
_configService = configService; _configService = configService;
_recycleBinProvider = recycleBinProvider; _recycleBinProvider = recycleBinProvider;
@ -62,8 +63,6 @@ namespace NzbDrone.Core.Providers
/// <param name="path">Path to scan</param> /// <param name="path">Path to scan</param>
public virtual List<EpisodeFile> Scan(Series series, string path) public virtual List<EpisodeFile> Scan(Series series, string path)
{ {
_mediaFileProvider.CleanUpDatabase();
if (!_diskProvider.FolderExists(path)) if (!_diskProvider.FolderExists(path))
{ {
Logger.Warn("Series folder doesn't exist: {0}", path); Logger.Warn("Series folder doesn't exist: {0}", path);
@ -76,7 +75,7 @@ namespace NzbDrone.Core.Providers
return new List<EpisodeFile>(); return new List<EpisodeFile>();
} }
var seriesFile = _mediaFileProvider.GetSeriesFiles(series.Id); var seriesFile = _mediaFileService.GetFilesBySeries(series.Id);
CleanUp(seriesFile); CleanUp(seriesFile);
var mediaFileList = GetVideoFiles(path); var mediaFileList = GetVideoFiles(path);
@ -104,7 +103,7 @@ namespace NzbDrone.Core.Providers
{ {
Logger.Trace("Importing file to database [{0}]", filePath); Logger.Trace("Importing file to database [{0}]", filePath);
if (_mediaFileProvider.Exists(filePath)) if (_mediaFileService.Exists(filePath))
{ {
Logger.Trace("[{0}] already exists in the database. skipping.", filePath); Logger.Trace("[{0}] already exists in the database. skipping.", filePath);
return null; return null;
@ -169,7 +168,7 @@ namespace NzbDrone.Core.Providers
//Todo: We shouldn't actually import the file until we confirm its the only one we want. //Todo: We shouldn't actually import the file until we confirm its the only one we want.
//Todo: Separate episodeFile creation from importing (pass file to import to import) //Todo: Separate episodeFile creation from importing (pass file to import to import)
_mediaFileProvider.Add(episodeFile); _mediaFileService.Add(episodeFile);
//Link file to all episodes //Link file to all episodes
foreach (var ep in episodes) foreach (var ep in episodes)
@ -189,9 +188,9 @@ namespace NzbDrone.Core.Providers
throw new ArgumentNullException("episodeFile"); throw new ArgumentNullException("episodeFile");
var series = _seriesRepository.Get(episodeFile.SeriesId); var series = _seriesRepository.Get(episodeFile.SeriesId);
var episodes = _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId); var episodes = _episodeService.GetEpisodesByFileId(episodeFile.Id);
string newFileName = _mediaFileProvider.GetNewFilename(episodes, series, episodeFile.Quality, episodeFile.Proper, episodeFile); string newFileName = _mediaFileService.GetNewFilename(episodes, series, episodeFile.Quality, episodeFile.Proper, episodeFile);
var newFile = _mediaFileProvider.CalculateFilePath(series, episodes.First().SeasonNumber, newFileName, Path.GetExtension(episodeFile.Path)); var newFile = _mediaFileService.CalculateFilePath(series, episodes.First().SeasonNumber, newFileName, Path.GetExtension(episodeFile.Path));
//Only rename if existing and new filenames don't match //Only rename if existing and new filenames don't match
if (DiskProvider.PathEquals(episodeFile.Path, newFile.FullName)) if (DiskProvider.PathEquals(episodeFile.Path, newFile.FullName))
@ -223,7 +222,7 @@ namespace NzbDrone.Core.Providers
} }
episodeFile.Path = newFile.FullName; episodeFile.Path = newFile.FullName;
_mediaFileProvider.Update(episodeFile); _mediaFileService.Update(episodeFile);
var parseResult = Parser.ParsePath(episodeFile.Path); var parseResult = Parser.ParsePath(episodeFile.Path);
parseResult.Series = series; parseResult.Series = series;
@ -257,7 +256,7 @@ namespace NzbDrone.Core.Providers
Logger.Trace("File [{0}] no longer exists on disk. removing from db", episodeFile.Path); Logger.Trace("File [{0}] no longer exists on disk. removing from db", episodeFile.Path);
//Set the EpisodeFileId for each episode attached to this file to 0 //Set the EpisodeFileId for each episode attached to this file to 0
foreach (var episode in _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId)) foreach (var episode in _episodeService.GetEpisodesByFileId(episodeFile.Id))
{ {
Logger.Trace("Detaching episode {0} from file.", episode.Id); Logger.Trace("Detaching episode {0} from file.", episode.Id);
episode.EpisodeFile = null; episode.EpisodeFile = null;
@ -269,12 +268,12 @@ namespace NzbDrone.Core.Providers
//Delete it from the DB //Delete it from the DB
Logger.Trace("Removing EpisodeFile from DB."); Logger.Trace("Removing EpisodeFile from DB.");
_mediaFileProvider.Delete(episodeFile.EpisodeFileId); _mediaFileService.Delete(episodeFile.Id);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
var message = String.Format("Unable to cleanup EpisodeFile in DB: {0}", episodeFile.EpisodeFileId); var message = String.Format("Unable to cleanup EpisodeFile in DB: {0}", episodeFile.Id);
Logger.ErrorException(message, ex); Logger.ErrorException(message, ex);
} }
} }
@ -290,7 +289,7 @@ namespace NzbDrone.Core.Providers
{ {
try try
{ {
var episodeFile = _mediaFileProvider.GetFileByPath(file); var episodeFile = _mediaFileService.GetFileByPath(file);
if (episodeFile != null) if (episodeFile != null)
{ {

@ -5,6 +5,7 @@ using NLog;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.History; using NzbDrone.Core.History;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine;
@ -38,7 +39,7 @@ namespace NzbDrone.Core.Providers.DownloadClients
{ {
try try
{ {
title = MediaFileProvider.CleanFilename(title); title = MediaFileService.CleanFilename(title);
var filename = Path.Combine(_configService.BlackholeDirectory, title + ".nzb"); var filename = Path.Combine(_configService.BlackholeDirectory, title + ".nzb");

@ -4,6 +4,7 @@ using System.Linq;
using NLog; using NLog;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine;
@ -43,7 +44,7 @@ namespace NzbDrone.Core.Providers.DownloadClients
return false; return false;
} }
title = MediaFileProvider.CleanFilename(title); title = MediaFileService.CleanFilename(title);
//Save to the Pneumatic directory (The user will need to ensure its accessible by XBMC) //Save to the Pneumatic directory (The user will need to ensure its accessible by XBMC)
var filename = Path.Combine(_configService.PneumaticDirectory, title + ".nzb"); var filename = Path.Combine(_configService.PneumaticDirectory, title + ".nzb");

@ -1,265 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NLog;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using PetaPoco;
using NzbDrone.Common;
namespace NzbDrone.Core.Providers
{
public class MediaFileProvider
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IConfigService _configService;
private readonly IDatabase _database;
private readonly IEpisodeService _episodeService;
public MediaFileProvider(IEpisodeService episodeService, IConfigService configService, IDatabase database)
{
_episodeService = episodeService;
_configService = configService;
_database = database;
}
public MediaFileProvider()
{
}
public virtual int Add(EpisodeFile episodeFile)
{
return Convert.ToInt32(_database.Insert(episodeFile));
}
public virtual void Update(EpisodeFile episodeFile)
{
_database.Update(episodeFile);
}
public virtual void Delete(int episodeFileId)
{
_database.Delete<EpisodeFile>(episodeFileId);
}
public virtual bool Exists(string path)
{
return _database.Exists<EpisodeFile>("WHERE Path =@0", path.NormalizePath());
}
public virtual EpisodeFile GetFileByPath(string path)
{
return _database.SingleOrDefault<EpisodeFile>("WHERE Path =@0", path.NormalizePath());
}
public virtual EpisodeFile GetEpisodeFile(int episodeFileId)
{
return _database.Single<EpisodeFile>(episodeFileId);
}
public virtual List<EpisodeFile> GetEpisodeFiles()
{
return _database.Fetch<EpisodeFile>();
}
public virtual IList<EpisodeFile> GetSeriesFiles(int seriesId)
{
return _database.Fetch<EpisodeFile>("WHERE SeriesId= @0", seriesId);
}
public virtual IList<EpisodeFile> GetSeasonFiles(int seriesId, int seasonNumber)
{
return _database.Fetch<EpisodeFile>("WHERE SeriesId= @0 AND SeasonNumber = @1", seriesId, seasonNumber);
}
public virtual Tuple<int, int> GetEpisodeFilesCount(int seriesId)
{
var allEpisodes = _episodeService.GetEpisodeBySeries(seriesId).ToList();
var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate != null && e.AirDate <= DateTime.Today).ToList();
var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0).ToList();
return new Tuple<int, int>(avilableEpisodes.Count, episodeTotal.Count);
}
public virtual FileInfo CalculateFilePath(Series series, int seasonNumber, string fileName, string extention)
{
string path = series.Path;
if (series.SeasonFolder)
{
var seasonFolder = _configService.SortingSeasonFolderFormat
.Replace("%0s", seasonNumber.ToString("00"))
.Replace("%s", seasonNumber.ToString());
path = Path.Combine(path, seasonFolder);
}
path = Path.Combine(path, fileName + extention);
return new FileInfo(path);
}
public virtual void CleanUpDatabase()
{
Logger.Trace("Verifying Episode > Episode file relationships.");
string updateString = "UPDATE Episodes SET EpisodeFileId = 0, GrabDate = NULL, PostDownloadStatus = 0";
if (_configService.AutoIgnorePreviouslyDownloadedEpisodes)
{
updateString += ", Ignored = 1";
}
var updated = _database.Execute(updateString +
@"WHERE EpisodeFileId IN
(SELECT Episodes.EpisodeFileId FROM Episodes
LEFT OUTER JOIN EpisodeFiles
ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId
WHERE Episodes.EpisodeFileId > 0 AND EpisodeFiles.EpisodeFileId IS NULL)");
if (updated > 0)
{
Logger.Debug("Removed {0} invalid links to episode files.", updated);
}
Logger.Trace("Deleting orphan files.");
updated = _database.Execute(@"DELETE FROM EpisodeFiles
WHERE EpisodeFileId IN
(SELECT EpisodeFiles.EpisodeFileId FROM EpisodeFiles
LEFT OUTER JOIN Episodes
ON EpisodeFiles.EpisodeFileId = Episodes.EpisodeFileId
WHERE Episodes.EpisodeFileId IS NULL)");
if (updated > 0)
{
Logger.Debug("Removed {0} orphan file(s) from database.", updated);
}
}
public virtual string GetNewFilename(IList<Episode> episodes, Series series, Quality quality, bool proper, EpisodeFile episodeFile)
{
if (_configService.SortingUseSceneName)
{
Logger.Trace("Attempting to use scene name");
if (String.IsNullOrWhiteSpace(episodeFile.SceneName))
{
var name = Path.GetFileNameWithoutExtension(episodeFile.Path);
Logger.Trace("Unable to use scene name, because it is null, sticking with current name: {0}", name);
return name;
}
return episodeFile.SceneName;
}
var sortedEpisodes = episodes.OrderBy(e => e.EpisodeNumber);
var separatorStyle = EpisodeSortingHelper.GetSeparatorStyle(_configService.SortingSeparatorStyle);
var numberStyle = EpisodeSortingHelper.GetNumberStyle(_configService.SortingNumberStyle);
var episodeNames = new List<String>();
episodeNames.Add(Parser.CleanupEpisodeTitle(sortedEpisodes.First().Title));
string result = String.Empty;
if (_configService.SortingIncludeSeriesName)
{
result += series.Title + separatorStyle.Pattern;
}
if (series.SeriesType == SeriesType.Standard)
{
result += numberStyle.Pattern.Replace("%0e",
String.Format("{0:00}", sortedEpisodes.First().EpisodeNumber));
if(episodes.Count > 1)
{
var multiEpisodeStyle =
EpisodeSortingHelper.GetMultiEpisodeStyle(_configService.SortingMultiEpisodeStyle);
foreach(var episode in sortedEpisodes.Skip(1))
{
if(multiEpisodeStyle.Name == "Duplicate")
{
result += separatorStyle.Pattern + numberStyle.Pattern;
}
else
{
result += multiEpisodeStyle.Pattern;
}
result = result.Replace("%0e", String.Format("{0:00}", episode.EpisodeNumber));
episodeNames.Add(Parser.CleanupEpisodeTitle(episode.Title));
}
}
result = result
.Replace("%s", String.Format("{0}", episodes.First().SeasonNumber))
.Replace("%0s", String.Format("{0:00}", episodes.First().SeasonNumber))
.Replace("%x", numberStyle.EpisodeSeparator)
.Replace("%p", separatorStyle.Pattern);
}
else
{
if(episodes.First().AirDate.HasValue)
result += episodes.First().AirDate.Value.ToString("yyyy-MM-dd");
else
result += "Unknown";
}
if (_configService.SortingIncludeEpisodeTitle)
{
if (episodeNames.Distinct().Count() == 1)
result += separatorStyle.Pattern + episodeNames.First();
else
result += separatorStyle.Pattern + String.Join(" + ", episodeNames.Distinct());
}
if (_configService.SortingAppendQuality)
{
result += String.Format(" [{0}]", quality);
if (proper)
result += " [Proper]";
}
if (_configService.SortingReplaceSpaces)
result = result.Replace(' ', '.');
Logger.Trace("New File Name is: [{0}]", result.Trim());
return CleanFilename(result.Trim());
}
public virtual void ChangeQuality(int episodeFileId, Quality quality)
{
_database.Execute("UPDATE EpisodeFiles SET Quality = @quality WHERE EpisodeFileId = @episodeFileId", new { episodeFileId, quality });
}
public virtual void ChangeQuality(int seriesId, int seasonNumber, Quality quality)
{
_database.Execute("UPDATE EpisodeFiles SET Quality = @quality WHERE SeriesId = @seriesId AND SeasonNumber = @seasonNumber", new { seriesId, seasonNumber, quality });
}
public static string CleanFilename(string name)
{
string result = name;
string[] badCharacters = { "\\", "/", "<", ">", "?", "*", ":", "|", "\"" };
string[] goodCharacters = { "+", "+", "{", "}", "!", "@", "-", "#", "`" };
for (int i = 0; i < badCharacters.Length; i++)
result = result.Replace(badCharacters[i], goodCharacters[i]);
return result.Trim();
}
}
}

@ -2,6 +2,7 @@
using NLog; using NLog;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;

@ -7,6 +7,7 @@ using System.Xml.Linq;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
@ -115,11 +116,11 @@ namespace NzbDrone.Core.Providers.Metadata
public override void CreateForEpisodeFile(EpisodeFile episodeFile, TvdbSeries tvDbSeries) public override void CreateForEpisodeFile(EpisodeFile episodeFile, TvdbSeries tvDbSeries)
{ {
//Create filename.tbn and filename.nfo //Create filename.tbn and filename.nfo
var episodes = _episodeService.GetEpisodesByFileId(episodeFile.EpisodeFileId); var episodes = _episodeService.GetEpisodesByFileId(episodeFile.Id);
if (!episodes.Any()) if (!episodes.Any())
{ {
_logger.Debug("No episodes where found for this episode file: {0}", episodeFile.EpisodeFileId); _logger.Debug("No episodes where found for this episode file: {0}", episodeFile.Id);
return; return;
} }
@ -137,7 +138,7 @@ namespace NzbDrone.Core.Providers.Metadata
{ {
if (!_diskProvider.FileExists(episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn"))) if (!_diskProvider.FileExists(episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn")))
{ {
_logger.Debug("Downloading episode thumbnail for: {0}", episodeFile.EpisodeFileId); _logger.Debug("Downloading episode thumbnail for: {0}", episodeFile.Id);
_bannerProvider.Download(episodeFileThumbnail.BannerPath, _bannerProvider.Download(episodeFileThumbnail.BannerPath,
episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn")); episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn"));
} }
@ -145,7 +146,7 @@ namespace NzbDrone.Core.Providers.Metadata
_logger.Debug("Generating filename.nfo for: {0}", episodeFile.EpisodeFileId); _logger.Debug("Generating filename.nfo for: {0}", episodeFile.Id);
var xmlResult = String.Empty; var xmlResult = String.Empty;
foreach (var episode in episodes) foreach (var episode in episodes)

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using NLog; using NLog;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Providers.Metadata; using NzbDrone.Core.Providers.Metadata;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
@ -135,7 +136,7 @@ namespace NzbDrone.Core.Providers
{ {
foreach (var provider in _metadataProviders.Where(i => GetSettings(i.GetType()).Enable)) foreach (var provider in _metadataProviders.Where(i => GetSettings(i.GetType()).Enable))
{ {
Logger.Trace("Creating {0} metadata for {1}", provider.Name, episodeFile.EpisodeFileId); Logger.Trace("Creating {0} metadata for {1}", provider.Name, episodeFile.Id);
provider.CreateForEpisodeFile(episodeFile, tvDbSeries); provider.CreateForEpisodeFile(episodeFile, tvDbSeries);
} }
} }

@ -5,6 +5,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Diagnostics; using System.Diagnostics;
using NLog; using NLog;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
@ -13,14 +14,14 @@ namespace NzbDrone.Core.Providers
{ {
public class MisnamedProvider public class MisnamedProvider
{ {
private readonly MediaFileProvider _mediaFileProvider; private readonly IMediaFileService _mediaFileService;
private readonly IEpisodeService _episodeService; private readonly IEpisodeService _episodeService;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public MisnamedProvider(MediaFileProvider mediaFileProvider, IEpisodeService episodeService) public MisnamedProvider(IMediaFileService mediaFileService, IEpisodeService episodeService)
{ {
_mediaFileProvider = mediaFileProvider; _mediaFileService = mediaFileService;
_episodeService = episodeService; _episodeService = episodeService;
} }
@ -36,7 +37,7 @@ namespace NzbDrone.Core.Providers
var misnamedFilesSelect = episodesWithFiles.AsParallel().Where( var misnamedFilesSelect = episodesWithFiles.AsParallel().Where(
w => w =>
w.First().EpisodeFile.Path != w.First().EpisodeFile.Path !=
_mediaFileProvider.GetNewFilename(w.Select(e => e).ToList(), w.First().Series, _mediaFileService.GetNewFilename(w.Select(e => e).ToList(), w.First().Series,
w.First().EpisodeFile.Quality, w.First().EpisodeFile.Proper, w.First().EpisodeFile)).Skip(Math.Max(pageSize * (pageNumber - 1), 0)).Take(pageSize); w.First().EpisodeFile.Quality, w.First().EpisodeFile.Proper, w.First().EpisodeFile)).Skip(Math.Max(pageSize * (pageNumber - 1), 0)).Take(pageSize);
//Process the episodes //Process the episodes
@ -44,7 +45,7 @@ namespace NzbDrone.Core.Providers
{ {
var episodes = f.Select(e => e).ToList(); var episodes = f.Select(e => e).ToList();
var firstEpisode = episodes[0]; var firstEpisode = episodes[0];
var properName = _mediaFileProvider.GetNewFilename(episodes, var properName = _mediaFileService.GetNewFilename(episodes,
firstEpisode.Series, firstEpisode.Series,
firstEpisode.EpisodeFile.Quality, firstEpisode.EpisodeFile.Proper, firstEpisode.EpisodeFile); firstEpisode.EpisodeFile.Quality, firstEpisode.EpisodeFile.Proper, firstEpisode.EpisodeFile);

@ -1,6 +1,7 @@
using System.Linq; using System.Linq;
using System; using System;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using Sqo.Attributes; using Sqo.Attributes;
@ -40,7 +41,7 @@ namespace NzbDrone.Core.Tv
get get
{ {
if (!HasFile) return 0; if (!HasFile) return 0;
return EpisodeFile.EpisodeFileId; return EpisodeFile.Id;
} }
} }

@ -283,8 +283,7 @@ namespace NzbDrone.Core.Tv
public virtual void SetEpisodeIgnore(int episodeId, bool isIgnored) public virtual void SetEpisodeIgnore(int episodeId, bool isIgnored)
{ {
var episode = _episodeRepository.Get(episodeId); var episode = _episodeRepository.Get(episodeId);
episode.Ignored = isIgnored; _episodeRepository.SetIgnoreFlat(episode, isIgnored);
_episodeRepository.Update(episode);
logger.Info("Ignore flag for Episode:{0} was set to {1}", episodeId, isIgnored); logger.Info("Ignore flag for Episode:{0} was set to {1}", episodeId, isIgnored);
} }

@ -9,7 +9,6 @@ using NzbDrone.Core.Configuration;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv.Events; using NzbDrone.Core.Tv.Events;

Loading…
Cancel
Save