2011-04-04 03:50:12 +00:00
|
|
|
|
using System;
|
2012-02-05 06:34:36 +00:00
|
|
|
|
using System.Linq;
|
2011-04-04 03:50:12 +00:00
|
|
|
|
using System.Collections.Generic;
|
2013-03-01 07:03:41 +00:00
|
|
|
|
using NzbDrone.Core.MediaFiles;
|
2013-03-06 21:20:33 +00:00
|
|
|
|
using NzbDrone.Core.Organizer;
|
2013-02-24 19:18:48 +00:00
|
|
|
|
using NzbDrone.Core.Providers;
|
2013-02-19 06:01:03 +00:00
|
|
|
|
using NzbDrone.Core.Tv;
|
2011-05-20 05:52:05 +00:00
|
|
|
|
using NzbDrone.Core.Repository;
|
2010-10-21 01:49:23 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Model
|
|
|
|
|
{
|
2011-03-18 15:39:19 +00:00
|
|
|
|
public class EpisodeParseResult
|
2010-10-21 01:49:23 +00:00
|
|
|
|
{
|
2012-01-20 05:37:08 +00:00
|
|
|
|
public string SeriesTitle { get; set; }
|
2012-12-20 06:49:13 +00:00
|
|
|
|
|
2012-01-20 05:37:08 +00:00
|
|
|
|
public string CleanTitle
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return Parser.NormalizeTitle(SeriesTitle);
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-23 06:56:17 +00:00
|
|
|
|
|
2011-06-22 01:12:20 +00:00
|
|
|
|
public string EpisodeTitle { get; set; }
|
2011-04-23 20:53:13 +00:00
|
|
|
|
|
2012-01-20 05:37:08 +00:00
|
|
|
|
public int SeasonNumber { get; set; }
|
2011-05-20 04:59:35 +00:00
|
|
|
|
|
2012-01-20 05:37:08 +00:00
|
|
|
|
public List<int> EpisodeNumbers { get; set; }
|
2010-10-30 02:46:32 +00:00
|
|
|
|
|
2012-01-20 05:37:08 +00:00
|
|
|
|
public DateTime? AirDate { get; set; }
|
2011-06-22 01:12:20 +00:00
|
|
|
|
|
2012-10-13 21:15:21 +00:00
|
|
|
|
public QualityModel Quality { get; set; }
|
2011-04-04 04:20:01 +00:00
|
|
|
|
|
2011-05-09 06:16:26 +00:00
|
|
|
|
public LanguageType Language { get; set; }
|
|
|
|
|
|
2011-05-20 04:59:35 +00:00
|
|
|
|
public string NzbUrl { get; set; }
|
|
|
|
|
|
2012-05-02 15:37:09 +00:00
|
|
|
|
public string NzbInfoUrl { get; set; }
|
|
|
|
|
|
2012-01-20 06:35:10 +00:00
|
|
|
|
public string OriginalString { get; set; }
|
2011-05-24 04:12:54 +00:00
|
|
|
|
|
2011-05-20 05:52:05 +00:00
|
|
|
|
public Series Series { get; set; }
|
|
|
|
|
|
2011-05-24 04:12:54 +00:00
|
|
|
|
public String Indexer { get; set; }
|
|
|
|
|
|
2011-08-27 05:37:20 +00:00
|
|
|
|
public bool FullSeason { get; set; }
|
|
|
|
|
|
2011-09-14 02:25:33 +00:00
|
|
|
|
public long Size { get; set; }
|
|
|
|
|
|
2012-02-17 09:32:33 +00:00
|
|
|
|
public int Age { get; set; }
|
|
|
|
|
|
2012-08-06 06:33:07 +00:00
|
|
|
|
public string ReleaseGroup { get; set; }
|
|
|
|
|
|
2012-10-17 07:39:06 +00:00
|
|
|
|
public bool SceneSource { get; set; }
|
|
|
|
|
|
2013-02-24 19:18:48 +00:00
|
|
|
|
public IList<Episode> Episodes { get; set; }
|
2012-10-17 07:39:06 +00:00
|
|
|
|
|
2010-10-30 02:46:32 +00:00
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2012-02-22 04:43:19 +00:00
|
|
|
|
string episodeString = "[Unknown Episode]";
|
2012-01-31 06:55:57 +00:00
|
|
|
|
|
2012-02-22 04:43:19 +00:00
|
|
|
|
if (AirDate != null && EpisodeNumbers == null)
|
|
|
|
|
{
|
|
|
|
|
episodeString = string.Format("{0}", AirDate.Value.ToString("yyyy-MM-dd"));
|
|
|
|
|
}
|
|
|
|
|
else if (FullSeason)
|
|
|
|
|
{
|
|
|
|
|
episodeString = string.Format("Season {0:00}", SeasonNumber);
|
|
|
|
|
}
|
|
|
|
|
else if (EpisodeNumbers != null && EpisodeNumbers.Any())
|
|
|
|
|
{
|
2013-02-24 19:18:48 +00:00
|
|
|
|
episodeString = string.Format("S{0:00}E{1}", SeasonNumber, String.Join("-", EpisodeNumbers.Select(c => c.ToString("00"))));
|
2012-02-22 04:43:19 +00:00
|
|
|
|
}
|
2011-04-20 02:59:28 +00:00
|
|
|
|
|
2012-02-22 04:43:19 +00:00
|
|
|
|
return string.Format("{0} - {1} {2}", SeriesTitle, episodeString, Quality);
|
2013-02-24 19:18:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string GetDownloadTitle()
|
|
|
|
|
{
|
2013-03-06 21:20:33 +00:00
|
|
|
|
var seriesTitle = FileNameBuilder.CleanFilename(Series.Title);
|
2013-02-24 19:18:48 +00:00
|
|
|
|
|
|
|
|
|
//Handle Full Naming
|
|
|
|
|
if (FullSeason)
|
|
|
|
|
{
|
|
|
|
|
var seasonResult = String.Format("{0} - Season {1} [{2}]", seriesTitle,
|
|
|
|
|
SeasonNumber, Quality.Quality);
|
|
|
|
|
|
|
|
|
|
if (Quality.Proper)
|
|
|
|
|
seasonResult += " [Proper]";
|
|
|
|
|
|
|
|
|
|
return seasonResult;
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-04 05:53:02 +00:00
|
|
|
|
if (Series.SeriesTypes == SeriesTypes.Daily)
|
2013-02-24 19:18:48 +00:00
|
|
|
|
{
|
|
|
|
|
var dailyResult = String.Format("{0} - {1:yyyy-MM-dd} - {2} [{3}]", seriesTitle,
|
|
|
|
|
AirDate, Episodes.First().Title, Quality.Quality);
|
|
|
|
|
|
|
|
|
|
if (Quality.Proper)
|
|
|
|
|
dailyResult += " [Proper]";
|
|
|
|
|
|
|
|
|
|
return dailyResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Show Name - 1x01-1x02 - Episode Name
|
|
|
|
|
//Show Name - 1x01 - Episode Name
|
|
|
|
|
var episodeString = new List<String>();
|
|
|
|
|
var episodeNames = new List<String>();
|
|
|
|
|
|
|
|
|
|
foreach (var episode in Episodes)
|
|
|
|
|
{
|
|
|
|
|
episodeString.Add(String.Format("{0}x{1:00}", episode.SeasonNumber, episode.EpisodeNumber));
|
|
|
|
|
episodeNames.Add(Parser.CleanupEpisodeTitle(episode.Title));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var epNumberString = String.Join("-", episodeString);
|
|
|
|
|
string episodeName;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (episodeNames.Distinct().Count() == 1)
|
|
|
|
|
episodeName = episodeNames.First();
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
episodeName = String.Join(" + ", episodeNames.Distinct());
|
|
|
|
|
|
|
|
|
|
var result = String.Format("{0} - {1} - {2} [{3}]", seriesTitle, epNumberString, episodeName, Quality.Quality);
|
|
|
|
|
|
|
|
|
|
if (Quality.Proper)
|
|
|
|
|
{
|
|
|
|
|
result += " [Proper]";
|
|
|
|
|
}
|
2011-04-20 02:59:28 +00:00
|
|
|
|
|
2013-02-24 19:18:48 +00:00
|
|
|
|
return result;
|
2010-10-30 02:46:32 +00:00
|
|
|
|
}
|
2010-10-21 01:49:23 +00:00
|
|
|
|
}
|
|
|
|
|
}
|