mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using MediaBrowser.Common.Extensions;
 | 
						|
using MediaBrowser.Common.IO;
 | 
						|
using MediaBrowser.Common.ScheduledTasks;
 | 
						|
using MediaBrowser.Controller.Configuration;
 | 
						|
using MediaBrowser.Controller.FileOrganization;
 | 
						|
using MediaBrowser.Controller.Library;
 | 
						|
using MediaBrowser.Controller.Persistence;
 | 
						|
using MediaBrowser.Controller.Providers;
 | 
						|
using MediaBrowser.Model.FileOrganization;
 | 
						|
using MediaBrowser.Model.Logging;
 | 
						|
using MediaBrowser.Model.Querying;
 | 
						|
using System;
 | 
						|
using System.IO;
 | 
						|
using System.Threading;
 | 
						|
using System.Threading.Tasks;
 | 
						|
using CommonIO;
 | 
						|
 | 
						|
namespace MediaBrowser.Server.Implementations.FileOrganization
 | 
						|
{
 | 
						|
    public class FileOrganizationService : IFileOrganizationService
 | 
						|
    {
 | 
						|
        private readonly ITaskManager _taskManager;
 | 
						|
        private readonly IFileOrganizationRepository _repo;
 | 
						|
        private readonly ILogger _logger;
 | 
						|
        private readonly ILibraryMonitor _libraryMonitor;
 | 
						|
        private readonly ILibraryManager _libraryManager;
 | 
						|
        private readonly IServerConfigurationManager _config;
 | 
						|
        private readonly IFileSystem _fileSystem;
 | 
						|
        private readonly IProviderManager _providerManager;
 | 
						|
 | 
						|
        public FileOrganizationService(ITaskManager taskManager, IFileOrganizationRepository repo, ILogger logger, ILibraryMonitor libraryMonitor, ILibraryManager libraryManager, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager)
 | 
						|
        {
 | 
						|
            _taskManager = taskManager;
 | 
						|
            _repo = repo;
 | 
						|
            _logger = logger;
 | 
						|
            _libraryMonitor = libraryMonitor;
 | 
						|
            _libraryManager = libraryManager;
 | 
						|
            _config = config;
 | 
						|
            _fileSystem = fileSystem;
 | 
						|
            _providerManager = providerManager;
 | 
						|
        }
 | 
						|
 | 
						|
        public void BeginProcessNewFiles()
 | 
						|
        {
 | 
						|
            _taskManager.CancelIfRunningAndQueue<OrganizerScheduledTask>();
 | 
						|
        }
 | 
						|
 | 
						|
        public Task SaveResult(FileOrganizationResult result, CancellationToken cancellationToken)
 | 
						|
        {
 | 
						|
            if (result == null || string.IsNullOrEmpty(result.OriginalPath))
 | 
						|
            {
 | 
						|
                throw new ArgumentNullException("result");
 | 
						|
            }
 | 
						|
 | 
						|
            result.Id = result.OriginalPath.GetMD5().ToString("N");
 | 
						|
 | 
						|
            return _repo.SaveResult(result, cancellationToken);
 | 
						|
        }
 | 
						|
 | 
						|
        public QueryResult<FileOrganizationResult> GetResults(FileOrganizationResultQuery query)
 | 
						|
        {
 | 
						|
            return _repo.GetResults(query);
 | 
						|
        }
 | 
						|
 | 
						|
        public FileOrganizationResult GetResult(string id)
 | 
						|
        {
 | 
						|
            return _repo.GetResult(id);
 | 
						|
        }
 | 
						|
 | 
						|
        public FileOrganizationResult GetResultBySourcePath(string path)
 | 
						|
        {
 | 
						|
            if (string.IsNullOrEmpty(path))
 | 
						|
            {
 | 
						|
                throw new ArgumentNullException("path");
 | 
						|
            }
 | 
						|
            
 | 
						|
            var id = path.GetMD5().ToString("N");
 | 
						|
 | 
						|
            return GetResult(id);
 | 
						|
        }
 | 
						|
 | 
						|
        public Task DeleteOriginalFile(string resultId)
 | 
						|
        {
 | 
						|
            var result = _repo.GetResult(resultId);
 | 
						|
 | 
						|
            _logger.Info("Requested to delete {0}", result.OriginalPath);
 | 
						|
            try
 | 
						|
            {
 | 
						|
                _fileSystem.DeleteFile(result.OriginalPath);
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                _logger.ErrorException("Error deleting {0}", ex, result.OriginalPath);
 | 
						|
            }
 | 
						|
 | 
						|
            return _repo.Delete(resultId);
 | 
						|
        }
 | 
						|
 | 
						|
        private TvFileOrganizationOptions GetTvOptions()
 | 
						|
        {
 | 
						|
            return _config.GetAutoOrganizeOptions().TvOptions;
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task PerformOrganization(string resultId)
 | 
						|
        {
 | 
						|
            var result = _repo.GetResult(resultId);
 | 
						|
 | 
						|
            if (string.IsNullOrEmpty(result.TargetPath))
 | 
						|
            {
 | 
						|
                throw new ArgumentException("No target path available.");
 | 
						|
            }
 | 
						|
 | 
						|
            var organizer = new EpisodeFileOrganizer(this, _config, _fileSystem, _logger, _libraryManager,
 | 
						|
                _libraryMonitor, _providerManager);
 | 
						|
 | 
						|
            await organizer.OrganizeEpisodeFile(result.OriginalPath, GetTvOptions(), true, CancellationToken.None)
 | 
						|
                    .ConfigureAwait(false);
 | 
						|
        }
 | 
						|
 | 
						|
        public Task ClearLog()
 | 
						|
        {
 | 
						|
            return _repo.DeleteAll();
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task PerformEpisodeOrganization(EpisodeFileOrganizationRequest request)
 | 
						|
        {
 | 
						|
            var organizer = new EpisodeFileOrganizer(this, _config, _fileSystem, _logger, _libraryManager,
 | 
						|
                _libraryMonitor, _providerManager);
 | 
						|
 | 
						|
            await organizer.OrganizeWithCorrection(request, GetTvOptions(), CancellationToken.None).ConfigureAwait(false);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |