1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-16 11:37:58 +02:00

New: Release Group can now be used in rename patterns

This commit is contained in:
Mark McDowall 2013-12-08 22:25:11 -08:00
parent 9dcdd06b6c
commit f76c4700a6
17 changed files with 92 additions and 40 deletions

View File

@ -7,19 +7,6 @@ namespace NzbDrone.Core.Test.IndexerTests
{
public class BasicRssParserFixture : CoreTest<RssParserBase>
{
[TestCase("Castle.2009.S01E14.English.HDTV.XviD-LOL", "LOL")]
[TestCase("Castle 2009 S01E14 English HDTV XviD LOL", "LOL")]
[TestCase("Acropolis Now S05 EXTRAS DVDRip XviD RUNNER", "RUNNER")]
[TestCase("Punky.Brewster.S01.EXTRAS.DVDRip.XviD-RUNNER", "RUNNER")]
[TestCase("2020.NZ.2011.12.02.PDTV.XviD-C4TV", "C4TV")]
[TestCase("The.Office.S03E115.DVDRip.XviD-OSiTV", "OSiTV")]
public void parse_releaseGroup(string title, string expected)
{
RssParserBase.ParseReleaseGroup(title).Should().Be(expected);
}
[TestCase("5.64 GB", 6055903887)]
[TestCase("5.54 GiB", 5948529705)]
[TestCase("398.62 MiB", 417983365)]

View File

@ -47,7 +47,11 @@ public void Setup()
Series = series,
Episodes = new List<Episode> {episode},
Path = @"C:\Test\TV\30 Rock\30 Rock - S01E01 - Pilot.avi".AsOsAgnostic(),
Quality = new QualityModel(Quality.Bluray720p)
Quality = new QualityModel(Quality.Bluray720p),
ParsedEpisodeInfo = new ParsedEpisodeInfo
{
ReleaseGroup = "DRONE"
}
}));
}

View File

@ -49,7 +49,7 @@ public void Setup()
.With(e => e.EpisodeNumber = 7)
.Build();
_episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.HDTV720p) };
_episodeFile = new EpisodeFile { Quality = new QualityModel(Quality.HDTV720p), ReleaseGroup = "DRONE" };
}
private void GivenProper()
@ -344,5 +344,14 @@ public void should_not_clean_episode_title_if_there_is_only_one()
Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile)
.Should().Be(title);
}
[Test]
public void should_should_replace_release_group()
{
_namingConfig.StandardEpisodeFormat = "{Release Group}";
Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile)
.Should().Be(_episodeFile.ReleaseGroup);
}
}
}

View File

@ -452,5 +452,19 @@ public void should_not_parse_crap(string title)
Parser.Parser.ParseTitle(title).Should().BeNull();
ExceptionVerification.IgnoreWarns();
}
[TestCase("Castle.2009.S01E14.English.HDTV.XviD-LOL", "LOL")]
[TestCase("Castle 2009 S01E14 English HDTV XviD LOL", "LOL")]
[TestCase("Acropolis Now S05 EXTRAS DVDRip XviD RUNNER", "RUNNER")]
[TestCase("Punky.Brewster.S01.EXTRAS.DVDRip.XviD-RUNNER", "RUNNER")]
[TestCase("2020.NZ.2011.12.02.PDTV.XviD-C4TV", "C4TV")]
[TestCase("The.Office.S03E115.DVDRip.XviD-OSiTV", "OSiTV")]
[TestCase("The Office - S01E01 - Pilot [HTDV-480p]", "DRONE")]
[TestCase("The Office - S01E01 - Pilot [HTDV-720p]", "DRONE")]
[TestCase("The Office - S01E01 - Pilot [HTDV-1080p]", "DRONE")]
public void parse_releaseGroup(string title, string expected)
{
Parser.Parser.ParseReleaseGroup(title).Should().Be(expected);
}
}
}

View File

@ -0,0 +1,14 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(32)]
public class set_default_release_group : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.Sql("UPDATE EpisodeFiles SET ReleaseGroup = 'DRONE' WHERE ReleaseGroup IS NULL");
}
}
}

View File

@ -101,7 +101,7 @@ public void Handle(EpisodeGrabbedEvent message)
history.Data.Add("Indexer", message.Episode.Release.Indexer);
history.Data.Add("NzbInfoUrl", message.Episode.Release.InfoUrl);
history.Data.Add("ReleaseGroup", message.Episode.Release.ReleaseGroup);
history.Data.Add("ReleaseGroup", message.Episode.ParsedEpisodeInfo.ReleaseGroup);
history.Data.Add("Age", message.Episode.Release.Age.ToString());
if (!String.IsNullOrWhiteSpace(message.DownloadClientId))

View File

@ -70,7 +70,6 @@ private ReleaseInfo ParseFeedItem(XElement item, string url)
reportInfo.Title = title;
reportInfo.PublishDate = item.PublishDate();
reportInfo.ReleaseGroup = ParseReleaseGroup(title);
reportInfo.DownloadUrl = GetNzbUrl(item);
reportInfo.InfoUrl = GetNzbInfoUrl(item);
@ -114,25 +113,6 @@ protected virtual ReleaseInfo PostProcessor(XElement item, ReleaseInfo currentRe
return currentResult;
}
public static string ParseReleaseGroup(string title)
{
title = title.Trim();
var index = title.LastIndexOf('-');
if (index < 0)
index = title.LastIndexOf(' ');
if (index < 0)
return String.Empty;
var group = title.Substring(index + 1);
if (@group.Length == title.Length)
return String.Empty;
return @group.Trim('-', ' ', '[', ']');
}
private static readonly Regex ReportSizeRegex = new Regex(@"(?<value>\d+\.\d{1,2}|\d+\,\d+\.\d{1,2}|\d+)\W?(?<unit>GB|MB|GiB|MiB)",
RegexOptions.IgnoreCase | RegexOptions.Compiled);

View File

@ -12,6 +12,7 @@ public class EpisodeFile : ModelBase
public long Size { get; set; }
public DateTime DateAdded { get; set; }
public string SceneName { get; set; }
public string ReleaseGroup { get; set; }
public QualityModel Quality { get; set; }
public LazyList<Episode> Episodes { get; set; }

View File

@ -68,6 +68,7 @@ public List<ImportDecision> Import(List<ImportDecision> decisions, bool newDownl
episodeFile.Quality = localEpisode.Quality;
episodeFile.SeasonNumber = localEpisode.SeasonNumber;
episodeFile.Episodes = localEpisode.Episodes;
episodeFile.ReleaseGroup = localEpisode.ParsedEpisodeInfo.ReleaseGroup;
if (newDownload)
{

View File

@ -187,6 +187,7 @@
<Compile Include="Datastore\Migration\029_add_formats_to_naming_config.cs" />
<Compile Include="Datastore\Migration\031_delete_old_naming_config_columns.cs" />
<Compile Include="Datastore\Migration\030_add_season_folder_format_to_naming_config.cs" />
<Compile Include="Datastore\Migration\032_set_default_release_group.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationExtension.cs" />

View File

@ -89,6 +89,8 @@ public string BuildFilename(IList<Episode> episodes, Series series, EpisodeFile
{"{Series Title}", series.Title}
};
tokenValues.Add("{Release Group}", episodeFile.ReleaseGroup);
if (series.SeriesType == SeriesTypes.Daily)
{
pattern = namingConfig.DailyEpisodeFormat;

View File

@ -65,19 +65,22 @@ public FilenameSampleService(IBuildFileNames buildFileNames)
_singleEpisodeFile = new EpisodeFile
{
Quality = new QualityModel(Quality.HDTV720p),
Path = @"C:\Test\Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv"
Path = @"C:\Test\Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv",
ReleaseGroup = "RlsGrp"
};
_multiEpisodeFile = new EpisodeFile
{
Quality = new QualityModel(Quality.HDTV720p),
Path = @"C:\Test\Series.Title.S01E01-E02.720p.HDTV.x264-EVOLVE.mkv"
Path = @"C:\Test\Series.Title.S01E01-E02.720p.HDTV.x264-EVOLVE.mkv",
ReleaseGroup = "RlsGrp"
};
_dailyEpisodeFile = new EpisodeFile
{
Quality = new QualityModel(Quality.HDTV720p),
Path = @"C:\Test\Series.Title.2013.10.30.HDTV.x264-EVOLVE.mkv"
Path = @"C:\Test\Series.Title.2013.10.30.HDTV.x264-EVOLVE.mkv",
ReleaseGroup = "RlsGrp"
};
}

View File

@ -15,6 +15,7 @@ public class ParsedEpisodeInfo
public String AirDate { get; set; }
public Language Language { get; set; }
public bool FullSeason { get; set; }
public string ReleaseGroup { get; set; }
public ParsedEpisodeInfo()
{

View File

@ -28,7 +28,6 @@ private set
}
}
public string ReleaseGroup { get; set; }
public int TvRageId { get; set; }
}
}

View File

@ -162,6 +162,9 @@ public static ParsedEpisodeInfo ParseTitle(string title)
result.Quality = QualityParser.ParseQuality(title);
Logger.Trace("Quality parsed: {0}", result.Quality);
result.ReleaseGroup = ParseReleaseGroup(title);
Logger.Trace("Release Group parsed: {0}", result.ReleaseGroup);
return result;
}
}
@ -214,6 +217,36 @@ public static string CleanupEpisodeTitle(string title)
return MultiPartCleanupRegex.Replace(title, string.Empty).Trim();
}
public static string ParseReleaseGroup(string title)
{
const string defaultReleaseGroup = "DRONE";
title = title.Trim();
var index = title.LastIndexOf('-');
if (index < 0)
index = title.LastIndexOf(' ');
if (index < 0)
return defaultReleaseGroup;
var group = title.Substring(index + 1);
if (group.Length == title.Length)
return String.Empty;
group = group.Trim('-', ' ', '[', ']');
if (group.ToLower() == "480p" ||
group.ToLower() == "720p" ||
group.ToLower() == "1080p")
{
return defaultReleaseGroup;
}
return group;
}
private static SeriesTitleInfo GetSeriesTitleInfo(string title)
{
var seriesTitleInfo = new SeriesTitleInfo();

View File

@ -41,6 +41,7 @@
{{> EpisodeNamingPartial}}
{{> EpisodeTitleNamingPartial}}
{{> QualityTitleNamingPartial}}
{{> ReleaseGroupNamingPartial}}
{{> SeparatorNamingPartial}}
</ul>
</div>
@ -69,6 +70,7 @@
{{> EpisodeNamingPartial}}
{{> EpisodeTitleNamingPartial}}
{{> QualityTitleNamingPartial}}
{{> ReleaseGroupNamingPartial}}
{{> SeparatorNamingPartial}}
</ul>
</div>

View File

@ -0,0 +1 @@
<li><a href="#" data-token="Release Group">Release Group</a></li>