You've already forked Sonarr
							
							
				mirror of
				https://github.com/Sonarr/Sonarr.git
				synced 2025-10-31 00:07:55 +02:00 
			
		
		
		
	Prevent adding a root folder that is the same as drone factory
This commit is contained in:
		| @@ -1,8 +1,11 @@ | ||||
| using System; | ||||
| using System.Net; | ||||
| using FluentValidation; | ||||
| using NLog; | ||||
| using Nancy; | ||||
| using NzbDrone.Api.Extensions; | ||||
| using NzbDrone.Common.Exceptions; | ||||
| using HttpStatusCode = Nancy.HttpStatusCode; | ||||
|  | ||||
| namespace NzbDrone.Api.ErrorManagement | ||||
| { | ||||
| @@ -31,14 +34,11 @@ namespace NzbDrone.Api.ErrorManagement | ||||
|             { | ||||
|                 _logger.Warn("Invalid request {0}", validationException.Message); | ||||
|  | ||||
|  | ||||
|                 return validationException.Errors.AsResponse(HttpStatusCode.BadRequest); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             _logger.FatalException("Request Failed", exception); | ||||
|  | ||||
|  | ||||
|             return new ErrorModel() | ||||
|                 { | ||||
|                     Message = exception.Message, | ||||
|   | ||||
| @@ -12,12 +12,10 @@ namespace NzbDrone.Common.Exceptions | ||||
|  | ||||
|         } | ||||
|  | ||||
|  | ||||
|         protected NzbDroneException(string message) | ||||
|             : base(message) | ||||
|         { | ||||
|  | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -8,6 +8,11 @@ using NzbDrone.Core.Download.Clients.Sabnzbd; | ||||
|  | ||||
| namespace NzbDrone.Core.Configuration | ||||
| { | ||||
|     public enum ConfigKey | ||||
|     { | ||||
|         DownloadedEpisodesFolder | ||||
|     } | ||||
|  | ||||
|     public class ConfigService : IConfigService | ||||
|     { | ||||
|         private readonly IConfigRepository _repository; | ||||
| @@ -118,9 +123,9 @@ namespace NzbDrone.Core.Configuration | ||||
|  | ||||
|         public String DownloadedEpisodesFolder | ||||
|         { | ||||
|             get { return GetValue("DownloadedEpisodesFolder"); } | ||||
|             get { return GetValue(ConfigKey.DownloadedEpisodesFolder.ToString()); } | ||||
|  | ||||
|             set { SetValue("DownloadedEpisodesFolder", value); } | ||||
|             set { SetValue(ConfigKey.DownloadedEpisodesFolder.ToString(), value); } | ||||
|         } | ||||
|  | ||||
|         public bool UseSeasonFolder | ||||
| @@ -136,7 +141,6 @@ namespace NzbDrone.Core.Configuration | ||||
|             set { SetValue("SeasonFolderFormat", value); } | ||||
|         } | ||||
|  | ||||
|  | ||||
|         public bool AutoUnmonitorPreviouslyDownloadedEpisodes | ||||
|         { | ||||
|             get { return GetValueBoolean("AutoUnmonitorPreviouslyDownloadedEpisodes"); } | ||||
|   | ||||
| @@ -4,6 +4,7 @@ using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using NLog; | ||||
| using NzbDrone.Common; | ||||
| using NzbDrone.Core.Configuration; | ||||
| using NzbDrone.Core.Datastore; | ||||
| using NzbDrone.Core.Tv; | ||||
|  | ||||
| @@ -26,12 +27,17 @@ namespace NzbDrone.Core.RootFolders | ||||
|         private readonly IBasicRepository<RootFolder> _rootFolderRepository; | ||||
|         private readonly IDiskProvider _diskProvider; | ||||
|         private readonly ISeriesRepository _seriesRepository; | ||||
|         private readonly IConfigService _configService; | ||||
|  | ||||
|         public RootFolderService(IBasicRepository<RootFolder> rootFolderRepository, IDiskProvider diskProvider,ISeriesRepository seriesRepository) | ||||
|         public RootFolderService(IBasicRepository<RootFolder> rootFolderRepository, | ||||
|                                  IDiskProvider diskProvider, | ||||
|                                  ISeriesRepository seriesRepository, | ||||
|                                  IConfigService configService) | ||||
|         { | ||||
|             _rootFolderRepository = rootFolderRepository; | ||||
|             _diskProvider = diskProvider; | ||||
|             _seriesRepository = seriesRepository; | ||||
|             _configService = configService; | ||||
|         } | ||||
|  | ||||
|         public virtual List<RootFolder> All() | ||||
| @@ -66,7 +72,10 @@ namespace NzbDrone.Core.RootFolders | ||||
|                 throw new DirectoryNotFoundException("Can't add root directory that doesn't exist."); | ||||
|  | ||||
|             if (All().Exists(r => DiskProvider.PathEquals(r.Path, rootFolder.Path))) | ||||
|                 throw new InvalidOperationException("Root directory already exist."); | ||||
|                 throw new InvalidOperationException("Recent directory already exist."); | ||||
|  | ||||
|             if (DiskProvider.PathEquals(_configService.DownloadedEpisodesFolder, rootFolder.Path)) | ||||
|                 throw new InvalidOperationException("Drone Factory folder cannot be used."); | ||||
|  | ||||
|             _rootFolderRepository.Insert(rootFolder); | ||||
|  | ||||
|   | ||||
| @@ -10,11 +10,11 @@ namespace NzbDrone.Core.Tv | ||||
|     { | ||||
|         bool SeriesPathExists(string path); | ||||
|         List<Series> Search(string title); | ||||
|  | ||||
|         Series FindByTitle(string cleanTitle); | ||||
|         Series FindByTvdbId(int tvdbId); | ||||
|         void SetSeriesType(int seriesId, SeriesTypes seriesTypes); | ||||
|         Series FindBySlug(string slug); | ||||
|         List<String> GetSeriesPaths(); | ||||
|     } | ||||
|  | ||||
|     public class SeriesRepository : BasicRepository<Series>, ISeriesRepository | ||||
| @@ -53,5 +53,10 @@ namespace NzbDrone.Core.Tv | ||||
|         { | ||||
|             return Query.SingleOrDefault(c => c.TitleSlug == slug.ToLower()); | ||||
|         } | ||||
|  | ||||
|         public List<string> GetSeriesPaths() | ||||
|         { | ||||
|             return Query.Select(s => s.Path).ToList(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -27,6 +27,7 @@ namespace NzbDrone.Core.Tv | ||||
|         bool SeriesPathExists(string folder); | ||||
|         List<Series> GetSeriesInList(IEnumerable<int> seriesIds); | ||||
|         Series FindBySlug(string slug); | ||||
|         List<String> GetSeriesPaths(); | ||||
|     } | ||||
|  | ||||
|     public class SeriesService : ISeriesService | ||||
| @@ -112,6 +113,11 @@ namespace NzbDrone.Core.Tv | ||||
|             return series; | ||||
|         } | ||||
|  | ||||
|         public List<string> GetSeriesPaths() | ||||
|         { | ||||
|             return _seriesRepository.GetSeriesPaths(); | ||||
|         } | ||||
|  | ||||
|         public Series FindByTitle(string title) | ||||
|         { | ||||
|             var tvdbId = _sceneMappingService.GetTvDbId(title); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user