diff --git a/src/NzbDrone.Api/Calendar/CalendarModule.cs b/src/NzbDrone.Api/Calendar/CalendarModule.cs index 484d3a52b..79fabf7ed 100644 --- a/src/NzbDrone.Api/Calendar/CalendarModule.cs +++ b/src/NzbDrone.Api/Calendar/CalendarModule.cs @@ -3,19 +3,12 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Api.Episodes; using NzbDrone.Api.Extensions; -using NzbDrone.Api.Mapping; -using NzbDrone.Core.Datastore.Events; -using NzbDrone.Core.Download; -using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Commands; -using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Calendar { - public class CalendarModule : NzbDroneRestModuleWithSignalR, - IHandle, - IHandle + public class CalendarModule : EpisodeModuleWithSignalR { private readonly IEpisodeService _episodeService; private readonly SeriesRepository _seriesRepository; @@ -23,18 +16,12 @@ namespace NzbDrone.Api.Calendar public CalendarModule(ICommandExecutor commandExecutor, IEpisodeService episodeService, SeriesRepository seriesRepository) - : base(commandExecutor, "calendar") + : base(episodeService, commandExecutor, "calendar") { _episodeService = episodeService; _seriesRepository = seriesRepository; GetResourceAll = GetCalendar; - GetResourceById = GetEpisode; - } - - private EpisodeResource GetEpisode(int id) - { - return _episodeService.GetEpisode(id).InjectTo(); } private List GetCalendar() @@ -53,24 +40,5 @@ namespace NzbDrone.Api.Calendar return resources.OrderBy(e => e.AirDateUtc).ToList(); } - - public void Handle(EpisodeGrabbedEvent message) - { - foreach (var episode in message.Episode.Episodes) - { - var resource = episode.InjectTo(); - resource.Grabbed = true; - - BroadcastResourceChange(ModelAction.Updated, resource); - } - } - - public void Handle(EpisodeDownloadedEvent message) - { - foreach (var episode in message.Episode.Episodes) - { - BroadcastResourceChange(ModelAction.Updated, episode.Id); - } - } } } diff --git a/src/NzbDrone.Api/Episodes/EpisodeModule.cs b/src/NzbDrone.Api/Episodes/EpisodeModule.cs index 4e24cb78f..e698ab242 100644 --- a/src/NzbDrone.Api/Episodes/EpisodeModule.cs +++ b/src/NzbDrone.Api/Episodes/EpisodeModule.cs @@ -1,24 +1,16 @@ using System.Collections.Generic; -using NzbDrone.Api.Mapping; using NzbDrone.Api.REST; -using NzbDrone.Core.Datastore.Events; -using NzbDrone.Core.Download; -using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Commands; -using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Episodes { - public class EpisodeModule : NzbDroneRestModuleWithSignalR, - IHandle, - IHandle - + public class EpisodeModule : EpisodeModuleWithSignalR { private readonly IEpisodeService _episodeService; public EpisodeModule(ICommandExecutor commandExecutor, IEpisodeService episodeService) - : base(commandExecutor) + : base(episodeService, commandExecutor) { _episodeService = episodeService; @@ -43,29 +35,5 @@ namespace NzbDrone.Api.Episodes { _episodeService.SetEpisodeMonitored(episodeResource.Id, episodeResource.Monitored); } - - private EpisodeResource GetEpisode(int id) - { - return _episodeService.GetEpisode(id).InjectTo(); - } - - public void Handle(EpisodeGrabbedEvent message) - { - foreach (var episode in message.Episode.Episodes) - { - var resource = episode.InjectTo(); - resource.Grabbed = true; - - BroadcastResourceChange(ModelAction.Updated, resource); - } - } - - public void Handle(EpisodeDownloadedEvent message) - { - foreach (var episode in message.Episode.Episodes) - { - BroadcastResourceChange(ModelAction.Updated, episode.Id); - } - } } } \ No newline at end of file diff --git a/src/NzbDrone.Api/Episodes/EpisodeModuleWithSignalR.cs b/src/NzbDrone.Api/Episodes/EpisodeModuleWithSignalR.cs new file mode 100644 index 000000000..7612a9601 --- /dev/null +++ b/src/NzbDrone.Api/Episodes/EpisodeModuleWithSignalR.cs @@ -0,0 +1,55 @@ +using NzbDrone.Api.Mapping; +using NzbDrone.Core.Datastore.Events; +using NzbDrone.Core.Download; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Api.Episodes +{ + public abstract class EpisodeModuleWithSignalR : NzbDroneRestModuleWithSignalR, + IHandle, + IHandle + { + private readonly IEpisodeService _episodeService; + + protected EpisodeModuleWithSignalR(IEpisodeService episodeService, ICommandExecutor commandExecutor) + : base(commandExecutor) + { + _episodeService = episodeService; + + GetResourceById = GetEpisode; + } + + protected EpisodeModuleWithSignalR(IEpisodeService episodeService, ICommandExecutor commandExecutor, string resource) + : base(commandExecutor, resource) + { + _episodeService = episodeService; + } + + protected EpisodeResource GetEpisode(int id) + { + return _episodeService.GetEpisode(id).InjectTo(); + } + + public void Handle(EpisodeGrabbedEvent message) + { + foreach (var episode in message.Episode.Episodes) + { + var resource = episode.InjectTo(); + resource.Grabbed = true; + + BroadcastResourceChange(ModelAction.Updated, resource); + } + } + + public void Handle(EpisodeDownloadedEvent message) + { + foreach (var episode in message.Episode.Episodes) + { + BroadcastResourceChange(ModelAction.Updated, episode.Id); + } + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs b/src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs index 1ac4ae86c..28cecd695 100644 --- a/src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs +++ b/src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs @@ -13,7 +13,10 @@ namespace NzbDrone.Api.Extensions.Pipelines private void Handle(NancyContext context) { - context.Response.Headers.Add("X-ApplicationVersion", BuildInfo.Version.ToString()); + if (!context.Response.Headers.ContainsKey("X-ApplicationVersion")) + { + context.Response.Headers.Add("X-ApplicationVersion", BuildInfo.Version.ToString()); + } } } } \ No newline at end of file diff --git a/src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs index bc7124a97..588775839 100644 --- a/src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs +++ b/src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs @@ -6,11 +6,11 @@ using NzbDrone.Common.EnvironmentInfo; namespace NzbDrone.Api.Frontend.Mappers { - public class LogFileMapper : StaticResourceMapperBase + public class UpdateLogFileMapper : StaticResourceMapperBase { private readonly IAppFolderInfo _appFolderInfo; - public LogFileMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, Logger logger) + public UpdateLogFileMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, Logger logger) : base(diskProvider, logger) { _appFolderInfo = appFolderInfo; @@ -21,12 +21,12 @@ namespace NzbDrone.Api.Frontend.Mappers var path = resourceUrl.Replace('/', Path.DirectorySeparatorChar); path = Path.GetFileName(path); - return Path.Combine(_appFolderInfo.GetLogFolder(), path); + return Path.Combine(_appFolderInfo.GetUpdateLogFolder(), path); } public override bool CanHandle(string resourceUrl) { - return resourceUrl.StartsWith("/logfile/") && resourceUrl.EndsWith(".txt"); + return resourceUrl.StartsWith("/updatelogfile/") && resourceUrl.EndsWith(".txt"); } } } \ No newline at end of file diff --git a/src/NzbDrone.Api/Frontend/Mappers/UpdateLogFileMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/UpdateLogFileMapper.cs new file mode 100644 index 000000000..bc7124a97 --- /dev/null +++ b/src/NzbDrone.Api/Frontend/Mappers/UpdateLogFileMapper.cs @@ -0,0 +1,32 @@ +using System.IO; +using NLog; +using NzbDrone.Common; +using NzbDrone.Common.Disk; +using NzbDrone.Common.EnvironmentInfo; + +namespace NzbDrone.Api.Frontend.Mappers +{ + public class LogFileMapper : StaticResourceMapperBase + { + private readonly IAppFolderInfo _appFolderInfo; + + public LogFileMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, Logger logger) + : base(diskProvider, logger) + { + _appFolderInfo = appFolderInfo; + } + + protected override string Map(string resourceUrl) + { + var path = resourceUrl.Replace('/', Path.DirectorySeparatorChar); + path = Path.GetFileName(path); + + return Path.Combine(_appFolderInfo.GetLogFolder(), path); + } + + public override bool CanHandle(string resourceUrl) + { + return resourceUrl.StartsWith("/logfile/") && resourceUrl.EndsWith(".txt"); + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Api/Logs/LogFileModule.cs b/src/NzbDrone.Api/Logs/LogFileModule.cs index b44e77b6d..aaa8797d3 100644 --- a/src/NzbDrone.Api/Logs/LogFileModule.cs +++ b/src/NzbDrone.Api/Logs/LogFileModule.cs @@ -1,63 +1,43 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using NzbDrone.Common; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; -using Nancy; -using Nancy.Responses; +using NzbDrone.Core.Configuration; namespace NzbDrone.Api.Logs { - public class LogFileModule : NzbDroneRestModule + public class LogFileModule : LogFileModuleBase { - private const string LOGFILE_ROUTE = @"/(?nzbdrone(?:\.\d+)?\.txt)"; - private readonly IAppFolderInfo _appFolderInfo; private readonly IDiskProvider _diskProvider; public LogFileModule(IAppFolderInfo appFolderInfo, - IDiskProvider diskProvider) - : base("log/file") + IDiskProvider diskProvider, + IConfigFileProvider configFileProvider) + : base(diskProvider, configFileProvider, "") { _appFolderInfo = appFolderInfo; _diskProvider = diskProvider; - GetResourceAll = GetLogFiles; - - Get[LOGFILE_ROUTE] = options => GetLogFile(options.filename); } - private List GetLogFiles() + protected override IEnumerable GetLogFiles() { - var result = new List(); - - var files = _diskProvider.GetFiles(_appFolderInfo.GetLogFolder(), SearchOption.TopDirectoryOnly); + return _diskProvider.GetFiles(_appFolderInfo.GetLogFolder(), SearchOption.TopDirectoryOnly); + } - for (int i = 0; i < files.Length; i++) + protected override string GetLogFilePath(string filename) + { + return Path.Combine(_appFolderInfo.GetLogFolder(), filename); + } + + protected override string DownloadUrlRoot + { + get { - var file = files[i]; - - result.Add(new LogFileResource - { - Id = i + 1, - Filename = Path.GetFileName(file), - LastWriteTime = _diskProvider.FileGetLastWriteUtc(file) - }); + return "logfile"; } - - return result.OrderByDescending(l => l.LastWriteTime).ToList(); } - private Response GetLogFile(string filename) - { - var filePath = Path.Combine(_appFolderInfo.GetLogFolder(), filename); - - if (!_diskProvider.FileExists(filePath)) - return new NotFoundResponse(); - - var data = _diskProvider.ReadAllText(filePath); - - return new TextResponse(data); - } } } \ No newline at end of file diff --git a/src/NzbDrone.Api/Logs/LogFileModuleBase.cs b/src/NzbDrone.Api/Logs/LogFileModuleBase.cs new file mode 100644 index 000000000..3f1a531d6 --- /dev/null +++ b/src/NzbDrone.Api/Logs/LogFileModuleBase.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using NzbDrone.Common.Disk; +using Nancy; +using Nancy.Responses; +using NzbDrone.Core.Configuration; + +namespace NzbDrone.Api.Logs +{ + public abstract class LogFileModuleBase : NzbDroneRestModule + { + protected const string LOGFILE_ROUTE = @"/(?[-.a-zA-Z0-9]+?\.txt)"; + + private readonly IDiskProvider _diskProvider; + private readonly IConfigFileProvider _configFileProvider; + + public LogFileModuleBase(IDiskProvider diskProvider, + IConfigFileProvider configFileProvider, + String route) + : base("log/file" + route) + { + _diskProvider = diskProvider; + _configFileProvider = configFileProvider; + GetResourceAll = GetLogFilesResponse; + + Get[LOGFILE_ROUTE] = options => GetLogFileResponse(options.filename); + } + + private List GetLogFilesResponse() + { + var result = new List(); + + var files = GetLogFiles().ToList(); + + for (int i = 0; i < files.Count; i++) + { + var file = files[i]; + var filename = Path.GetFileName(file); + + result.Add(new LogFileResource + { + Id = i + 1, + Filename = filename, + LastWriteTime = _diskProvider.FileGetLastWriteUtc(file), + ContentsUrl = String.Format("{0}/api/{1}/{2}", _configFileProvider.UrlBase, Resource, filename), + DownloadUrl = String.Format("{0}/{1}/{2}", _configFileProvider.UrlBase, DownloadUrlRoot, filename) + }); + } + + return result.OrderByDescending(l => l.LastWriteTime).ToList(); + } + + private Response GetLogFileResponse(String filename) + { + var filePath = GetLogFilePath(filename); + + if (!_diskProvider.FileExists(filePath)) + return new NotFoundResponse(); + + var data = _diskProvider.ReadAllText(filePath); + + return new TextResponse(data); + } + + protected abstract IEnumerable GetLogFiles(); + protected abstract String GetLogFilePath(String filename); + + protected abstract String DownloadUrlRoot { get; } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Api/Logs/LogFileResource.cs b/src/NzbDrone.Api/Logs/LogFileResource.cs index 9d2847e89..8109eeb07 100644 --- a/src/NzbDrone.Api/Logs/LogFileResource.cs +++ b/src/NzbDrone.Api/Logs/LogFileResource.cs @@ -7,5 +7,7 @@ namespace NzbDrone.Api.Logs { public String Filename { get; set; } public DateTime LastWriteTime { get; set; } + public String ContentsUrl { get; set; } + public String DownloadUrl { get; set; } } } diff --git a/src/NzbDrone.Api/Logs/UpdateLogFileModule.cs b/src/NzbDrone.Api/Logs/UpdateLogFileModule.cs new file mode 100644 index 000000000..3c91173ce --- /dev/null +++ b/src/NzbDrone.Api/Logs/UpdateLogFileModule.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using NzbDrone.Common; +using NzbDrone.Common.Disk; +using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Core.Configuration; + +namespace NzbDrone.Api.Logs +{ + public class UpdateLogFileModule : LogFileModuleBase + { + private readonly IAppFolderInfo _appFolderInfo; + private readonly IDiskProvider _diskProvider; + + public UpdateLogFileModule(IAppFolderInfo appFolderInfo, + IDiskProvider diskProvider, + IConfigFileProvider configFileProvider) + : base(diskProvider, configFileProvider, "/update") + { + _appFolderInfo = appFolderInfo; + _diskProvider = diskProvider; + } + + protected override IEnumerable GetLogFiles() + { + return _diskProvider.GetFiles(_appFolderInfo.GetUpdateLogFolder(), SearchOption.TopDirectoryOnly) + .Where(f => Regex.IsMatch(Path.GetFileName(f), LOGFILE_ROUTE.TrimStart('/'), RegexOptions.IgnoreCase)) + .ToList(); + } + + protected override String GetLogFilePath(String filename) + { + return Path.Combine(_appFolderInfo.GetUpdateLogFolder(), filename); + } + + protected override String DownloadUrlRoot + { + get + { + return "updatelogfile"; + } + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Api/NzbDrone.Api.csproj b/src/NzbDrone.Api/NzbDrone.Api.csproj index 0c23ee731..21a84886e 100644 --- a/src/NzbDrone.Api/NzbDrone.Api.csproj +++ b/src/NzbDrone.Api/NzbDrone.Api.csproj @@ -117,6 +117,7 @@ + @@ -129,6 +130,7 @@ + @@ -141,6 +143,8 @@ + + diff --git a/src/NzbDrone.Api/Wanted/CutoffModule.cs b/src/NzbDrone.Api/Wanted/CutoffModule.cs index ee0b9f219..da2e44ef7 100644 --- a/src/NzbDrone.Api/Wanted/CutoffModule.cs +++ b/src/NzbDrone.Api/Wanted/CutoffModule.cs @@ -2,17 +2,18 @@ using NzbDrone.Api.Episodes; using NzbDrone.Api.Extensions; using NzbDrone.Core.Datastore; +using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Wanted { - public class CutoffModule : NzbDroneRestModule + public class CutoffModule : EpisodeModuleWithSignalR { private readonly IEpisodeCutoffService _episodeCutoffService; - private readonly SeriesRepository _seriesRepository; + private readonly ISeriesRepository _seriesRepository; - public CutoffModule(IEpisodeCutoffService episodeCutoffService, SeriesRepository seriesRepository) - :base("wanted/cutoff") + public CutoffModule(IEpisodeService episodeService, IEpisodeCutoffService episodeCutoffService, ISeriesRepository seriesRepository, ICommandExecutor commandExecutor) + :base(episodeService, commandExecutor, "wanted/cutoff") { _episodeCutoffService = episodeCutoffService; _seriesRepository = seriesRepository; diff --git a/src/NzbDrone.Api/Wanted/MissingModule.cs b/src/NzbDrone.Api/Wanted/MissingModule.cs index dd4d97f69..14fef9104 100644 --- a/src/NzbDrone.Api/Wanted/MissingModule.cs +++ b/src/NzbDrone.Api/Wanted/MissingModule.cs @@ -2,17 +2,18 @@ using NzbDrone.Api.Episodes; using NzbDrone.Api.Extensions; using NzbDrone.Core.Datastore; +using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Wanted { - public class MissingModule : NzbDroneRestModule + public class MissingModule : EpisodeModuleWithSignalR { private readonly IEpisodeService _episodeService; - private readonly SeriesRepository _seriesRepository; + private readonly ISeriesRepository _seriesRepository; - public MissingModule(IEpisodeService episodeService, SeriesRepository seriesRepository) - :base("wanted/missing") + public MissingModule(IEpisodeService episodeService, ISeriesRepository seriesRepository, ICommandExecutor commandExecutor) + :base(episodeService, commandExecutor, "wanted/missing") { _episodeService = episodeService; _seriesRepository = seriesRepository; diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs index e99382894..6dd047f4c 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs @@ -42,9 +42,8 @@ namespace NzbDrone.Core.Download.Clients.Nzbget { var url = remoteEpisode.Release.DownloadUrl; var title = remoteEpisode.Release.Title + ".nzb"; - - string category = Settings.TvCategory; - int priority = remoteEpisode.IsRecentEpisode() ? Settings.RecentTvPriority : Settings.OlderTvPriority; + var category = Settings.TvCategory; + var priority = remoteEpisode.IsRecentEpisode() ? Settings.RecentTvPriority : Settings.OlderTvPriority; _logger.Info("Adding report [{0}] to the queue.", title); @@ -271,10 +270,9 @@ namespace NzbDrone.Core.Download.Clients.Nzbget _proxy.GetVersion(settings); var config = _proxy.GetConfig(settings); - var categories = GetCategories(config); - if (!categories.Any(v => v.Name == settings.TvCategory)) + if (!settings.TvCategory.IsNullOrWhiteSpace() && !categories.Any(v => v.Name == settings.TvCategory)) { throw new ApplicationException("Category does not exist"); } diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs index e14c15336..5c5a05e31 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs @@ -222,7 +222,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd { var categories = _proxy.GetCategories(settings); - if (!categories.Any(v => v == settings.TvCategory)) + if (!settings.TvCategory.IsNullOrWhiteSpace() && !categories.Any(v => v == settings.TvCategory)) { throw new ApplicationException("Category does not exist"); } diff --git a/src/NzbDrone.Core/Instrumentation/Commands/DeleteUpdateLogFilesCommand.cs b/src/NzbDrone.Core/Instrumentation/Commands/DeleteUpdateLogFilesCommand.cs new file mode 100644 index 000000000..a55e91502 --- /dev/null +++ b/src/NzbDrone.Core/Instrumentation/Commands/DeleteUpdateLogFilesCommand.cs @@ -0,0 +1,15 @@ +using NzbDrone.Core.Messaging.Commands; + +namespace NzbDrone.Core.Instrumentation.Commands +{ + public class DeleteUpdateLogFilesCommand : Command + { + public override bool SendUpdatesToClient + { + get + { + return true; + } + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs b/src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs index 25ae79cad..e2e31ca7b 100644 --- a/src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs +++ b/src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using NLog; using NzbDrone.Common; using NzbDrone.Common.Disk; @@ -12,7 +13,7 @@ namespace NzbDrone.Core.Instrumentation { } - public class DeleteLogFilesService : IDeleteLogFilesService, IExecute + public class DeleteLogFilesService : IDeleteLogFilesService, IExecute, IExecute { private readonly IDiskProvider _diskProvider; private readonly IAppFolderInfo _appFolderInfo; @@ -27,12 +28,14 @@ namespace NzbDrone.Core.Instrumentation public void Execute(DeleteLogFilesCommand message) { - var logFiles = _diskProvider.GetFiles(_appFolderInfo.GetLogFolder(), SearchOption.TopDirectoryOnly); + _logger.Debug("Deleting all files in: {0}", _appFolderInfo.GetLogFolder()); + _diskProvider.EmptyFolder(_appFolderInfo.GetLogFolder()); + } - foreach (var logFile in logFiles) - { - _diskProvider.DeleteFile(logFile); - } + public void Execute(DeleteUpdateLogFilesCommand message) + { + _logger.Debug("Deleting all files in: {0}", _appFolderInfo.GetUpdateLogFolder()); + _diskProvider.EmptyFolder(_appFolderInfo.GetUpdateLogFolder()); } } } diff --git a/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs b/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs index 060f3c3ba..6a81ee4c8 100644 --- a/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs @@ -73,8 +73,9 @@ namespace NzbDrone.Core.MediaFiles private IEnumerable GetPreviews(Series series, List episodes, List files) { - foreach (var file in files) + foreach (var f in files) { + var file = f; var episodesInFile = episodes.Where(e => e.EpisodeFileId == file.Id).ToList(); if (!episodesInFile.Any()) @@ -95,18 +96,13 @@ namespace NzbDrone.Core.MediaFiles SeasonNumber = seasonNumber, EpisodeNumbers = episodesInFile.Select(e => e.EpisodeNumber).ToList(), EpisodeFileId = file.Id, - ExistingPath = GetRelativePath(series.Path, file.Path), - NewPath = GetRelativePath(series.Path, newPath) + ExistingPath = series.Path.GetRelativePath(file.Path), + NewPath = series.Path.GetRelativePath(newPath) }; } } } - private string GetRelativePath(string seriesPath, string path) - { - return path.Substring(seriesPath.Length + 1); - } - private void RenameFiles(List episodeFiles, Series series) { var renamed = new List(); diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 8b70b8ca6..97f8093a6 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -334,6 +334,7 @@ + diff --git a/src/UI/AddSeries/AddSeriesLayout.js b/src/UI/AddSeries/AddSeriesLayout.js index e6e265abe..b51245d3a 100644 --- a/src/UI/AddSeries/AddSeriesLayout.js +++ b/src/UI/AddSeries/AddSeriesLayout.js @@ -55,7 +55,7 @@ define( _importSeries: function () { this.rootFolderLayout = new RootFolderLayout(); - this.rootFolderLayout.on('folderSelected', this._folderSelected, this); + this.listenTo(this.rootFolderLayout, 'folderSelected', this._folderSelected); AppLayout.modalRegion.show(this.rootFolderLayout); }, diff --git a/src/UI/AddSeries/SearchResultViewTemplate.html b/src/UI/AddSeries/SearchResultViewTemplate.html index d87a7e126..9fa74a539 100644 --- a/src/UI/AddSeries/SearchResultViewTemplate.html +++ b/src/UI/AddSeries/SearchResultViewTemplate.html @@ -10,9 +10,14 @@

{{titleWithYear}} - {{#unless_eq status compare="continuing"}} - Ended - {{/unless_eq}} + + + {{network}} + {{#unless_eq status compare="continuing"}} + Ended + {{/unless_eq}} + +

diff --git a/src/UI/AddSeries/addSeries.less b/src/UI/AddSeries/addSeries.less index 01a3b19fd..d0fdf3579 100644 --- a/src/UI/AddSeries/addSeries.less +++ b/src/UI/AddSeries/addSeries.less @@ -40,9 +40,13 @@ padding-bottom : 20px; .series-title { - .label { - margin-left: 15px; - vertical-align: middle; + .labels { + margin-left : 10px; + + .label { + font-size : 12px; + vertical-align : middle; + } } .year { diff --git a/src/UI/Calendar/CalendarFeedView.js b/src/UI/Calendar/CalendarFeedView.js index e69895af9..cf18cb711 100644 --- a/src/UI/Calendar/CalendarFeedView.js +++ b/src/UI/Calendar/CalendarFeedView.js @@ -14,7 +14,7 @@ define( }, templateHelpers: { - icalHttpUrl : window.location.protocol + '//' + window.location.host + StatusModel.get('urlBase') + '/feed/calendar/NzbDrone.ics', + icalHttpUrl : window.location.protocol + '//' + window.location.host + StatusModel.get('urlBase') + '/feed/calendar/NzbDrone.ics?apikey=' + window.NzbDrone.ApiKey, icalWebCalUrl : 'webcal://' + window.location.host + StatusModel.get('urlBase') + '/feed/calendar/NzbDrone.ics' }, diff --git a/src/UI/Calendar/CalendarFeedViewTemplate.html b/src/UI/Calendar/CalendarFeedViewTemplate.html index d920089b3..56ba9eb61 100644 --- a/src/UI/Calendar/CalendarFeedViewTemplate.html +++ b/src/UI/Calendar/CalendarFeedViewTemplate.html @@ -6,21 +6,26 @@