mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-12 08:07:10 -07:00
Added misnamed provider, PLINQ speeds it up, but still to slow for use, paging helps, but isn't consistent.
A bunch of files changed removing System.Linq, thanks Resharper :(
This commit is contained in:
parent
780abad3f7
commit
0b586de226
54 changed files with 572 additions and 43 deletions
|
@ -1231,5 +1231,83 @@ namespace NzbDrone.Core.Test
|
||||||
|
|
||||||
mocker.VerifyAllMocks();
|
mocker.VerifyAllMocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void EpisodesWithFiles_success()
|
||||||
|
{
|
||||||
|
var db = MockLib.GetEmptyDatabase();
|
||||||
|
var mocker = new AutoMoqer();
|
||||||
|
mocker.SetConstant(db);
|
||||||
|
|
||||||
|
var series = Builder<Series>.CreateNew()
|
||||||
|
.With(s => s.SeriesId = 10)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodeFile = Builder<EpisodeFile>.CreateNew()
|
||||||
|
.With(c => c.EpisodeFileId = 1)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(2)
|
||||||
|
.WhereAll()
|
||||||
|
.Have(c => c.SeriesId = 10)
|
||||||
|
.Have(c => c.SeasonNumber = 1)
|
||||||
|
.Have(c => c.AirDate = DateTime.Today.AddDays(-4))
|
||||||
|
.Have(c => c.Ignored = true)
|
||||||
|
.Have(c => c.EpisodeFile = episodeFile)
|
||||||
|
.Have(c => c.EpisodeFileId = episodeFile.EpisodeFileId)
|
||||||
|
.Build().ToList();
|
||||||
|
|
||||||
|
db.Insert(series);
|
||||||
|
db.Insert(episodeFile);
|
||||||
|
db.InsertMany(episodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var withFiles = mocker.Resolve<EpisodeProvider>().EpisodesWithFiles();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
withFiles.Should().HaveCount(2);
|
||||||
|
withFiles.Where(e => e.EpisodeFileId == 0).Should().HaveCount(0);
|
||||||
|
withFiles.Where(e => e.EpisodeFile == null).Should().HaveCount(0);
|
||||||
|
|
||||||
|
foreach (var withFile in withFiles)
|
||||||
|
{
|
||||||
|
withFile.EpisodeFile.Should().NotBeNull();
|
||||||
|
withFile.SeriesTitle.Should().NotBeNullOrEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
mocker.VerifyAllMocks();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void EpisodesWithFiles_no_files()
|
||||||
|
{
|
||||||
|
var db = MockLib.GetEmptyDatabase();
|
||||||
|
var mocker = new AutoMoqer();
|
||||||
|
mocker.SetConstant(db);
|
||||||
|
|
||||||
|
var series = Builder<Series>.CreateNew()
|
||||||
|
.With(s => s.SeriesId = 10)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(2)
|
||||||
|
.WhereAll()
|
||||||
|
.Have(c => c.SeriesId = 10)
|
||||||
|
.Have(c => c.SeasonNumber = 1)
|
||||||
|
.Have(c => c.AirDate = DateTime.Today.AddDays(-4))
|
||||||
|
.Have(c => c.Ignored = true)
|
||||||
|
.Have(c => c.EpisodeFileId = 0)
|
||||||
|
.Build().ToList();
|
||||||
|
|
||||||
|
db.Insert(series);
|
||||||
|
db.InsertMany(episodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var withFiles = mocker.Resolve<EpisodeProvider>().EpisodesWithFiles();
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
withFiles.Should().HaveCount(0);
|
||||||
|
|
||||||
|
mocker.VerifyAllMocks();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
using Moq;
|
using Moq;
|
||||||
using NzbDrone.Core.Datastore;
|
using NzbDrone.Core.Datastore;
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using AutoMoq;
|
using AutoMoq;
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
|
|
250
NzbDrone.Core.Test/MisnamedProviderTest.cs
Normal file
250
NzbDrone.Core.Test/MisnamedProviderTest.cs
Normal file
|
@ -0,0 +1,250 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using AutoMoq;
|
||||||
|
using FizzWare.NBuilder;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Model.Notification;
|
||||||
|
using NzbDrone.Core.Providers;
|
||||||
|
using NzbDrone.Core.Providers.Jobs;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class MisnamedProviderTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void no_misnamed_files()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 1)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title1.avi")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 2)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title2.avi")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 1)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[0])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle1")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 2)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[1])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle2")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(c => c.EpisodesWithFiles()).Returns(episodes);
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> {episodes[0]}, "SeriesTitle1", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title1");
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> {episodes[1]}, "SeriesTitle2", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title2");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var totalItems = 0;
|
||||||
|
var misnamedEpisodes = mocker.Resolve<MisnamedProvider>().MisnamedFiles(1, 10, out totalItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
misnamedEpisodes.Should().HaveCount(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void all_misnamed_files()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 1)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title1.avi")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 2)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title2.avi")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 1)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[0])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle1")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 2)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[1])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle2")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(c => c.EpisodesWithFiles()).Returns(episodes);
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, "SeriesTitle1", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("New Title 1");
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, "SeriesTitle2", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("New Title 2");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var totalItems = 0;
|
||||||
|
var misnamedEpisodes = mocker.Resolve<MisnamedProvider>().MisnamedFiles(1, 10, out totalItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
misnamedEpisodes.Should().HaveCount(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void one_misnamed_file()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 1)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title1.avi")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 2)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title2.avi")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 1)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[0])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle1")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 2)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[1])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle2")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(c => c.EpisodesWithFiles()).Returns(episodes);
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0] }, "SeriesTitle1", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("New Title 1");
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[1] }, "SeriesTitle2", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title2");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var totalItems = 0;
|
||||||
|
var misnamedEpisodes = mocker.Resolve<MisnamedProvider>().MisnamedFiles(1, 10, out totalItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
misnamedEpisodes.Should().HaveCount(1);
|
||||||
|
misnamedEpisodes[0].CurrentName.Should().Be("Title1");
|
||||||
|
misnamedEpisodes[0].ProperName.Should().Be("New Title 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void misnamed_multi_episode_file()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 1)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title1.avi")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 2)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title2.avi")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(3)
|
||||||
|
.WhereTheFirst(2)
|
||||||
|
.Has(e => e.EpisodeFileId = 1)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[0])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle1")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 2)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[1])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle2")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(c => c.EpisodesWithFiles()).Returns(episodes);
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, "SeriesTitle1", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("New Title 1");
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, "SeriesTitle2", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title2");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var totalItems = 0;
|
||||||
|
var misnamedEpisodes = mocker.Resolve<MisnamedProvider>().MisnamedFiles(1, 10, out totalItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
misnamedEpisodes.Should().HaveCount(1);
|
||||||
|
misnamedEpisodes[0].CurrentName.Should().Be("Title1");
|
||||||
|
misnamedEpisodes[0].ProperName.Should().Be("New Title 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void no_misnamed_multi_episode_file()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(2)
|
||||||
|
.WhereTheFirst(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 1)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title1.avi")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(f => f.EpisodeFileId = 2)
|
||||||
|
.Has(f => f.Path = @"C:\Test\Title2.avi")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var episodes = Builder<Episode>.CreateListOfSize(3)
|
||||||
|
.WhereTheFirst(2)
|
||||||
|
.Has(e => e.EpisodeFileId = 1)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[0])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle1")
|
||||||
|
.AndTheNext(1)
|
||||||
|
.Has(e => e.EpisodeFileId = 2)
|
||||||
|
.Has(e => e.EpisodeFile = episodeFiles[1])
|
||||||
|
.Has(e => e.SeriesTitle = "SeriesTitle2")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(c => c.EpisodesWithFiles()).Returns(episodes);
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[0], episodes[1] }, "SeriesTitle1", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title1");
|
||||||
|
|
||||||
|
mocker.GetMock<MediaFileProvider>()
|
||||||
|
.Setup(c => c.GetNewFilename(new List<Episode> { episodes[2] }, "SeriesTitle2", It.IsAny<QualityTypes>()))
|
||||||
|
.Returns("Title2");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var totalItems = 0;
|
||||||
|
var misnamedEpisodes = mocker.Resolve<MisnamedProvider>().MisnamedFiles(1, 10, out totalItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
misnamedEpisodes.Should().HaveCount(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -89,6 +89,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="BacklogSearchJobTest.cs" />
|
<Compile Include="BacklogSearchJobTest.cs" />
|
||||||
|
<Compile Include="MisnamedProviderTest.cs" />
|
||||||
<Compile Include="SeasonSearchJobTest.cs" />
|
<Compile Include="SeasonSearchJobTest.cs" />
|
||||||
<Compile Include="SearchProviderTest_PartialSeason.cs" />
|
<Compile Include="SearchProviderTest_PartialSeason.cs" />
|
||||||
<Compile Include="SearchJobTest.cs" />
|
<Compile Include="SearchJobTest.cs" />
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// ReSharper disable RedundantUsingDirective
|
// ReSharper disable RedundantUsingDirective
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using AutoMoq;
|
using AutoMoq;
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using AutoMoq;
|
using AutoMoq;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using AutoMoq;
|
using AutoMoq;
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
using System.Data.SqlServerCe;
|
using System.Data.SqlServerCe;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MvcMiniProfiler.Data;
|
using MvcMiniProfiler.Data;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core
|
namespace NzbDrone.Core
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model
|
namespace NzbDrone.Core.Model
|
||||||
|
|
15
NzbDrone.Core/Model/MisnamedEpisodeModel.cs
Normal file
15
NzbDrone.Core/Model/MisnamedEpisodeModel.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Model
|
||||||
|
{
|
||||||
|
public class MisnamedEpisodeModel
|
||||||
|
{
|
||||||
|
public int EpisodeFileId { get; set; }
|
||||||
|
public int SeriesId { get; set; }
|
||||||
|
public string SeriesTitle { get; set; }
|
||||||
|
public string CurrentName { get; set; }
|
||||||
|
public string ProperName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model
|
namespace NzbDrone.Core.Model
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Search
|
namespace NzbDrone.Core.Model.Search
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Search
|
namespace NzbDrone.Core.Model.Search
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Model.Xbmc
|
namespace NzbDrone.Core.Model.Xbmc
|
||||||
|
|
|
@ -182,6 +182,7 @@
|
||||||
<Compile Include="Fluent.cs" />
|
<Compile Include="Fluent.cs" />
|
||||||
<Compile Include="Helpers\EpisodeSortingHelper.cs" />
|
<Compile Include="Helpers\EpisodeSortingHelper.cs" />
|
||||||
<Compile Include="Helpers\FileSizeFormatHelpercs.cs" />
|
<Compile Include="Helpers\FileSizeFormatHelpercs.cs" />
|
||||||
|
<Compile Include="Helpers\LinqPageExtension.cs" />
|
||||||
<Compile Include="Instrumentation\LogProvider.cs" />
|
<Compile Include="Instrumentation\LogProvider.cs" />
|
||||||
<Compile Include="Instrumentation\DatabaseTarget.cs" />
|
<Compile Include="Instrumentation\DatabaseTarget.cs" />
|
||||||
<Compile Include="Instrumentation\ExceptioneerTarget.cs" />
|
<Compile Include="Instrumentation\ExceptioneerTarget.cs" />
|
||||||
|
@ -191,6 +192,7 @@
|
||||||
<Compile Include="Model\ExternalNotificationType.cs" />
|
<Compile Include="Model\ExternalNotificationType.cs" />
|
||||||
<Compile Include="Model\JobQueueItem.cs" />
|
<Compile Include="Model\JobQueueItem.cs" />
|
||||||
<Compile Include="Model\LanguageType.cs" />
|
<Compile Include="Model\LanguageType.cs" />
|
||||||
|
<Compile Include="Model\MisnamedEpisodeModel.cs" />
|
||||||
<Compile Include="Model\Quality.cs" />
|
<Compile Include="Model\Quality.cs" />
|
||||||
<Compile Include="Model\SabnzbdCategoryModel.cs" />
|
<Compile Include="Model\SabnzbdCategoryModel.cs" />
|
||||||
<Compile Include="Model\SabnzbdInfoModel.cs" />
|
<Compile Include="Model\SabnzbdInfoModel.cs" />
|
||||||
|
@ -206,6 +208,7 @@
|
||||||
<Compile Include="Providers\Jobs\SeriesSearchJob.cs" />
|
<Compile Include="Providers\Jobs\SeriesSearchJob.cs" />
|
||||||
<Compile Include="Providers\Jobs\RenameSeasonJob.cs" />
|
<Compile Include="Providers\Jobs\RenameSeasonJob.cs" />
|
||||||
<Compile Include="Providers\Jobs\SeasonSearchJob.cs" />
|
<Compile Include="Providers\Jobs\SeasonSearchJob.cs" />
|
||||||
|
<Compile Include="Providers\MisnamedProvider.cs" />
|
||||||
<Compile Include="Providers\SearchProvider.cs" />
|
<Compile Include="Providers\SearchProvider.cs" />
|
||||||
<Compile Include="Providers\Xbmc\ResourceManager.cs" />
|
<Compile Include="Providers\Xbmc\ResourceManager.cs" />
|
||||||
<Compile Include="Model\Xbmc\TvShowResult.cs" />
|
<Compile Include="Model\Xbmc\TvShowResult.cs" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Providers.Core
|
namespace NzbDrone.Core.Providers.Core
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
|
@ -175,6 +175,15 @@ namespace NzbDrone.Core.Providers
|
||||||
return AttachSeries(_database.Fetch<Episode>("WHERE EpisodeFileId = @0", episodeFileId));
|
return AttachSeries(_database.Fetch<Episode>("WHERE EpisodeFileId = @0", episodeFileId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual IList<Episode> EpisodesWithFiles()
|
||||||
|
{
|
||||||
|
var episodes = _database.Fetch<Episode, EpisodeFile>(@"SELECT Episodes.*, Series.Title as SeriesTitle, EpisodeFiles.* FROM Episodes
|
||||||
|
INNER JOIN Series ON Episodes.SeriesId = Series.SeriesId
|
||||||
|
INNER JOIN EpisodeFiles ON Episodes.EpisodeFileId = EpisodeFiles.EpisodeFileId");
|
||||||
|
|
||||||
|
return episodes;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void RefreshEpisodeInfo(Series series)
|
public virtual void RefreshEpisodeInfo(Series series)
|
||||||
{
|
{
|
||||||
Logger.Info("Starting episode info refresh for series: {0}", series.Title.WithDefault(series.SeriesId));
|
Logger.Info("Starting episode info refresh for series: {0}", series.Title.WithDefault(series.SeriesId));
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.ServiceModel.Syndication;
|
using System.ServiceModel.Syndication;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using NLog;
|
using NLog;
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using NzbDrone.Core.Model;
|
using NzbDrone.Core.Model;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Core.Model;
|
using NzbDrone.Core.Model;
|
||||||
using NzbDrone.Core.Model.Notification;
|
using NzbDrone.Core.Model.Notification;
|
||||||
|
|
70
NzbDrone.Core/Providers/MisnamedProvider.cs
Normal file
70
NzbDrone.Core/Providers/MisnamedProvider.cs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Core.Model;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Providers
|
||||||
|
{
|
||||||
|
public class MisnamedProvider
|
||||||
|
{
|
||||||
|
private readonly MediaFileProvider _mediaFileProvider;
|
||||||
|
private readonly EpisodeProvider _episodeProvider;
|
||||||
|
|
||||||
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public MisnamedProvider(MediaFileProvider mediaFileProvider, EpisodeProvider episodeProvider)
|
||||||
|
{
|
||||||
|
_mediaFileProvider = mediaFileProvider;
|
||||||
|
_episodeProvider = episodeProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual List<MisnamedEpisodeModel> MisnamedFiles(int pageNumber, int pageSize, out int totalItems)
|
||||||
|
{
|
||||||
|
var misnamedFiles = new List<MisnamedEpisodeModel>();
|
||||||
|
|
||||||
|
var episodesWithFiles = _episodeProvider.EpisodesWithFiles().GroupBy(e => e.EpisodeFileId).ToList();
|
||||||
|
totalItems = episodesWithFiles.Count();
|
||||||
|
|
||||||
|
var stopwatch = new Stopwatch();
|
||||||
|
stopwatch.Start();
|
||||||
|
|
||||||
|
var misnamedFilesSelect = episodesWithFiles.AsParallel().Where(
|
||||||
|
w =>
|
||||||
|
w.First().EpisodeFile.Path !=
|
||||||
|
_mediaFileProvider.GetNewFilename(w.Select(e => e).ToList(), w.First().SeriesTitle,
|
||||||
|
w.First().EpisodeFile.Quality)).Skip(Math.Max(pageSize * (pageNumber - 1), 0)).Take(pageSize);
|
||||||
|
|
||||||
|
//Process the episodes
|
||||||
|
misnamedFilesSelect.AsParallel().ForAll(f =>
|
||||||
|
{
|
||||||
|
var episodes = f.Select(e => e).ToList();
|
||||||
|
var firstEpisode = episodes[0];
|
||||||
|
var properName = _mediaFileProvider.GetNewFilename(episodes,
|
||||||
|
firstEpisode.SeriesTitle,
|
||||||
|
firstEpisode.EpisodeFile.Quality);
|
||||||
|
|
||||||
|
var currentName = Path.GetFileNameWithoutExtension(firstEpisode.EpisodeFile.Path);
|
||||||
|
|
||||||
|
if (properName != currentName)
|
||||||
|
{
|
||||||
|
misnamedFiles.Add(new MisnamedEpisodeModel
|
||||||
|
{
|
||||||
|
CurrentName = currentName,
|
||||||
|
EpisodeFileId = firstEpisode.EpisodeFileId,
|
||||||
|
ProperName = properName,
|
||||||
|
SeriesId = firstEpisode.SeriesId,
|
||||||
|
SeriesTitle = firstEpisode.SeriesTitle
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
stopwatch.Stop();
|
||||||
|
return misnamedFiles.OrderBy(e => e.SeriesTitle).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using NzbDrone.Core.Providers.Core;
|
using NzbDrone.Core.Providers.Core;
|
||||||
|
|
|
@ -59,6 +59,9 @@ namespace NzbDrone.Core.Repository
|
||||||
[ResultColumn]
|
[ResultColumn]
|
||||||
public EpisodeFile EpisodeFile { get; set; }
|
public EpisodeFile EpisodeFile { get; set; }
|
||||||
|
|
||||||
|
[ResultColumn]
|
||||||
|
public string SeriesTitle { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
string seriesTitle = Series == null ? "[NULL]" : Series.Title;
|
string seriesTitle = Series == null ? "[NULL]" : Series.Title;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
using PetaPoco;
|
using PetaPoco;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Repository.Quality
|
namespace NzbDrone.Core.Repository.Quality
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Web.Mvc;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Web.Mvc;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Core.Helpers;
|
using NzbDrone.Core.Helpers;
|
||||||
using NzbDrone.Core.Providers;
|
using NzbDrone.Core.Providers;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using NzbDrone.Core.Model;
|
using NzbDrone.Core.Model;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Helpers;
|
using System.Web.Helpers;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
||||||
|
|
36
NzbDrone.Web/Controllers/MisnamedController.cs
Normal file
36
NzbDrone.Web/Controllers/MisnamedController.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using NzbDrone.Core.Providers;
|
||||||
|
using NzbDrone.Web.Models;
|
||||||
|
using Telerik.Web.Mvc;
|
||||||
|
|
||||||
|
namespace NzbDrone.Web.Controllers
|
||||||
|
{
|
||||||
|
public class MisnamedController : Controller
|
||||||
|
{
|
||||||
|
private readonly MisnamedProvider _misnamedProvider;
|
||||||
|
|
||||||
|
public MisnamedController(MisnamedProvider misnamedProvider)
|
||||||
|
{
|
||||||
|
_misnamedProvider = misnamedProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActionResult Index()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[GridAction(EnableCustomBinding = true)]
|
||||||
|
public ActionResult _AjaxBinding(GridCommand gridCommand)
|
||||||
|
{
|
||||||
|
var totalItems = 0;
|
||||||
|
|
||||||
|
var misnamed = _misnamedProvider.MisnamedFiles(gridCommand.Page, gridCommand.PageSize, out totalItems);
|
||||||
|
|
||||||
|
return View(new GridModel{ Data = misnamed, Total = totalItems });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using NzbDrone.Core.Helpers;
|
using NzbDrone.Core.Helpers;
|
||||||
using NzbDrone.Core.Model;
|
using NzbDrone.Core.Model;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using NzbDrone.Core.Repository.Quality;
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using NzbDrone.Core.Repository;
|
using NzbDrone.Core.Repository;
|
||||||
|
|
||||||
|
|
|
@ -154,6 +154,7 @@
|
||||||
<Compile Include="Controllers\HistoryController.cs" />
|
<Compile Include="Controllers\HistoryController.cs" />
|
||||||
<Compile Include="Controllers\LogController.cs" />
|
<Compile Include="Controllers\LogController.cs" />
|
||||||
<Compile Include="Controllers\AddSeriesController.cs" />
|
<Compile Include="Controllers\AddSeriesController.cs" />
|
||||||
|
<Compile Include="Controllers\MisnamedController.cs" />
|
||||||
<Compile Include="Controllers\MissingController.cs" />
|
<Compile Include="Controllers\MissingController.cs" />
|
||||||
<Compile Include="Controllers\NotificationController.cs" />
|
<Compile Include="Controllers\NotificationController.cs" />
|
||||||
<Compile Include="Controllers\SeriesController.cs" />
|
<Compile Include="Controllers\SeriesController.cs" />
|
||||||
|
@ -351,6 +352,9 @@
|
||||||
<Content Include="Views\Settings\Test.cshtml" />
|
<Content Include="Views\Settings\Test.cshtml" />
|
||||||
<Content Include="Views\Settings\TestPartial.cshtml" />
|
<Content Include="Views\Settings\TestPartial.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Views\Misnamed\Index.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
|
97
NzbDrone.Web/Views/Misnamed/Index.cshtml
Normal file
97
NzbDrone.Web/Views/Misnamed/Index.cshtml
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
@using NzbDrone.Core.Model
|
||||||
|
@section TitleContent{
|
||||||
|
Misnamed
|
||||||
|
}
|
||||||
|
@section ActionMenu{
|
||||||
|
<ul class="sub-menu">
|
||||||
|
<li>@Ajax.ActionLink("Trim History", "Trim", "History", new AjaxOptions{ OnSuccess = "reloadHistoryGrid" })</li>
|
||||||
|
<li>@Ajax.ActionLink("Purge History", "Purge", "History", new AjaxOptions { OnSuccess = "reloadHistoryGrid"})</li>
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.searchImage
|
||||||
|
{
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
padding: 1px;
|
||||||
|
margin: 2px;
|
||||||
|
@*border-width: 1px;
|
||||||
|
border-style: dashed;
|
||||||
|
border-color: lightgray;*@
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchImage:hover
|
||||||
|
{
|
||||||
|
background-color: #065EFE;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
@section MainContent{
|
||||||
|
<div class="grid-container">
|
||||||
|
@{Html.Telerik().Grid<MisnamedEpisodeModel>().Name("misnamed")
|
||||||
|
.TableHtmlAttributes(new { @class = "Grid" })
|
||||||
|
.Columns(columns =>
|
||||||
|
{
|
||||||
|
columns.Bound(c => c.SeriesTitle)
|
||||||
|
.ClientTemplate("<a href=" +
|
||||||
|
Url.Action("Details", "Series", new { seriesId = "<#= SeriesId #>" }) +
|
||||||
|
"><#= SeriesTitle #></a>")
|
||||||
|
.Title("Series Title");
|
||||||
|
columns.Bound(c => c.CurrentName).Title("Current Name");
|
||||||
|
columns.Bound(c => c.ProperName).Title("Proper Name");
|
||||||
|
columns.Bound(c => c.EpisodeFileId)
|
||||||
|
.Title("Actions")
|
||||||
|
.Width("40");
|
||||||
|
})
|
||||||
|
.DataBinding(data => data.Ajax().Select("_AjaxBinding", "Misnamed"))
|
||||||
|
.Pageable(
|
||||||
|
c =>
|
||||||
|
c.PageSize(20).Position(GridPagerPosition.Bottom).Style(GridPagerStyles.NextPrevious))
|
||||||
|
.EnableCustomBinding(true)
|
||||||
|
.ClientEvents(clientEvents =>
|
||||||
|
{
|
||||||
|
clientEvents.OnDataBound("grid_dataBound");
|
||||||
|
})
|
||||||
|
.Render();}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
deleteHistoryRowUrl = '../History/Delete';
|
||||||
|
redownloadUrl = '../History/Redownload';
|
||||||
|
|
||||||
|
function reloadHistoryGrid() {
|
||||||
|
var grid = $('#history').data('tGrid');
|
||||||
|
grid.rebind();
|
||||||
|
grid.sort("Date-desc");
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteHistoryRow(historyId) {
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: deleteHistoryRowUrl,
|
||||||
|
data: jQuery.param({ historyId: historyId }),
|
||||||
|
success: function () {
|
||||||
|
reloadHistoryGrid();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function redownload(historyId, episodeId) {
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: redownloadUrl,
|
||||||
|
data: jQuery.param({ historyId: historyId, episodeId: episodeId }),
|
||||||
|
success: function () {
|
||||||
|
reloadHistoryGrid();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function grid_dataBound(e) {
|
||||||
|
var id = $(this).attr('id');
|
||||||
|
var lastButton = $('#' + id + ' .t-arrow-last');
|
||||||
|
lastButton.hide();
|
||||||
|
}
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue