1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-10-31 07:52:37 +01:00
Sonarr/NzbDrone.Core/Providers/MediaFileProvider.cs

149 lines
4.6 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ninject;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model.Notification;
2011-04-04 05:50:12 +02:00
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using PetaPoco;
namespace NzbDrone.Core.Providers
{
public class MediaFileProvider
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
2011-04-10 04:44:01 +02:00
private readonly EpisodeProvider _episodeProvider;
private readonly ConfigProvider _configProvider;
private readonly IDatabase _database;
[Inject]
2011-06-20 05:04:08 +02:00
public MediaFileProvider(EpisodeProvider episodeProvider, ConfigProvider configProvider, IDatabase database)
{
_episodeProvider = episodeProvider;
_configProvider = configProvider;
_database = database;
}
2011-05-18 07:32:23 +02:00
public MediaFileProvider() { }
2011-05-18 07:32:23 +02:00
public virtual void Update(EpisodeFile episodeFile)
{
_database.Update(episodeFile);
2011-06-20 03:59:31 +02:00
}
2011-05-18 07:32:23 +02:00
public virtual EpisodeFile GetEpisodeFile(int episodeFileId)
{
return _database.Single<EpisodeFile>(episodeFileId);
}
2011-05-18 07:32:23 +02:00
public virtual List<EpisodeFile> GetEpisodeFiles()
{
return _database.Fetch<EpisodeFile>();
}
2011-06-19 22:43:33 +02:00
public virtual IList<EpisodeFile> GetSeriesFiles(int seriesId)
{
return _database.Fetch<EpisodeFile>("WHERE seriesId= @0", seriesId);
}
public virtual Tuple<int, int> GetEpisodeFilesCount(int seriesId)
{
var allEpisodes = _episodeProvider.GetEpisodeBySeries(seriesId).ToList();
var episodeTotal = allEpisodes.Where(e => !e.Ignored && e.AirDate <= DateTime.Today && e.AirDate.Year > 1900).ToList();
var avilableEpisodes = episodeTotal.Where(e => e.EpisodeFileId > 0).ToList();
return new Tuple<int, int>(avilableEpisodes.Count, episodeTotal.Count);
}
2011-06-20 05:04:08 +02:00
public virtual FileInfo CalculateFilePath(Series series, int seasonNumber, string fileName, string extention)
{
2011-06-20 05:04:08 +02:00
var path = series.Path;
if (series.SeasonFolder)
{
2011-06-20 05:04:08 +02:00
path = Path.Combine(path, "Season " + seasonNumber);
}
2011-06-20 05:04:08 +02:00
path = Path.Combine(path, fileName + extention);
2011-06-20 05:04:08 +02:00
return new FileInfo(path);
}
2011-06-20 05:04:08 +02:00
2011-06-20 04:33:43 +02:00
public virtual string GetNewFilename(IList<Episode> episodes, string seriesTitle, QualityTypes quality)
{
var separatorStyle = EpisodeSortingHelper.GetSeparatorStyle(_configProvider.SeparatorStyle);
var numberStyle = EpisodeSortingHelper.GetNumberStyle(_configProvider.NumberStyle);
2011-06-20 03:59:31 +02:00
var episodeNames = episodes[0].Title;
2011-06-20 03:59:31 +02:00
var result = String.Empty;
2011-06-20 03:59:31 +02:00
if (_configProvider.SeriesName)
{
2011-06-20 04:33:43 +02:00
result += seriesTitle + separatorStyle.Pattern;
}
2011-06-20 03:59:31 +02:00
result += numberStyle.Pattern.Replace("%0e", String.Format("{0:00}", episodes[0].EpisodeNumber));
2011-06-20 03:59:31 +02:00
if (episodes.Count > 1)
{
2011-06-20 03:59:31 +02:00
var multiEpisodeStyle = EpisodeSortingHelper.GetMultiEpisodeStyle(_configProvider.MultiEpisodeStyle);
2011-06-20 03:59:31 +02:00
foreach (var episode in episodes.OrderBy(e => e.EpisodeNumber).Skip(1))
{
2011-06-20 03:59:31 +02:00
if (multiEpisodeStyle.Name == "Duplicate")
{
result += separatorStyle.Pattern + numberStyle.Pattern;
}
else
{
result += multiEpisodeStyle.Pattern;
}
2011-06-20 03:59:31 +02:00
result = result.Replace("%0e", String.Format("{0:00}", episode.EpisodeNumber));
episodeNames += String.Format(" + {0}", episode.Title);
}
}
2011-06-20 03:59:31 +02:00
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);
2011-06-20 03:59:31 +02:00
if (_configProvider.EpisodeName)
{
episodeNames = episodeNames.TrimEnd(' ', '+');
2011-06-20 03:59:31 +02:00
result += separatorStyle.Pattern + episodeNames;
}
2011-06-20 03:59:31 +02:00
if (_configProvider.AppendQuality)
result += String.Format(" [{0}]", quality);
2011-06-20 03:59:31 +02:00
if (_configProvider.ReplaceSpaces)
result = result.Replace(' ', '.');
2011-06-20 03:59:31 +02:00
Logger.Debug("New File Name is: {0}", result.Trim());
return result.Trim();
}
}
2011-04-10 04:44:01 +02:00
}