private void RenameFiles(List <EpisodeFile> episodeFiles, Series series) { var renamed = new List <EpisodeFile>(); foreach (var episodeFile in episodeFiles) { var episodeFilePath = Path.Combine(series.Path, episodeFile.RelativePath); try { _logger.Debug("Renaming episode file: {0}", episodeFile); _episodeFileMover.MoveEpisodeFile(episodeFile, series); _mediaFileService.Update(episodeFile); renamed.Add(episodeFile); _logger.Debug("Renamed episode file: {0}", episodeFile); } catch (SameFilenameException ex) { _logger.Debug("File not renamed, source and destination are the same: {0}", ex.Filename); } catch (Exception ex) { _logger.ErrorException("Failed to rename file: " + episodeFilePath, ex); } } if (renamed.Any()) { _eventAggregator.PublishEvent(new SeriesRenamedEvent(series)); } }
public EpisodeFileMoveResult UpgradeEpisodeFile(EpisodeFile episodeFile, LocalEpisode localEpisode) { var moveFileResult = new EpisodeFileMoveResult(); var existingFiles = localEpisode.Episodes .Where(e => e.EpisodeFileId > 0) .Select(e => e.EpisodeFile.Value) .GroupBy(e => e.Id); foreach (var existingFile in existingFiles) { var file = existingFile.First(); if (_diskProvider.FileExists(file.Path)) { _logger.Debug("Removing existing episode file: {0}", file); _recycleBinProvider.DeleteFile(file.Path); } moveFileResult.OldFiles.Add(file); _mediaFileService.Delete(file, true); } moveFileResult.EpisodeFile = _episodeFileMover.MoveEpisodeFile(episodeFile, localEpisode); return(moveFileResult); }
public EpisodeFileMoveResult UpgradeEpisodeFile(EpisodeFile episodeFile, LocalEpisode localEpisode, bool copyOnly = false) { var moveFileResult = new EpisodeFileMoveResult(); var existingFiles = localEpisode.Episodes .Where(e => e.EpisodeFileId > 0) .Select(e => e.EpisodeFile.Value) .GroupBy(e => e.Id); foreach (var existingFile in existingFiles) { var file = existingFile.First(); var episodeFilePath = Path.Combine(localEpisode.Series.Path, file.RelativePath); if (_diskProvider.FileExists(episodeFilePath)) { _logger.Debug("Removing existing episode file: {0}", file); _recycleBinProvider.DeleteFile(episodeFilePath); } moveFileResult.OldFiles.Add(file); _mediaFileService.Delete(file, DeleteMediaFileReason.Upgrade); } if (copyOnly) { moveFileResult.EpisodeFile = _episodeFileMover.CopyEpisodeFile(episodeFile, localEpisode); } else { moveFileResult.EpisodeFile = _episodeFileMover.MoveEpisodeFile(episodeFile, localEpisode); } return(moveFileResult); }
private List <RenamedEpisodeFile> RenameFiles(List <EpisodeFile> episodeFiles, Series series) { var renamed = new List <RenamedEpisodeFile>(); foreach (var episodeFile in episodeFiles) { var previousRelativePath = episodeFile.RelativePath; var previousPath = Path.Combine(series.Path, episodeFile.RelativePath); try { _logger.Debug("Renaming episode file: {0}", episodeFile); _episodeFileMover.MoveEpisodeFile(episodeFile, series); _mediaFileService.Update(episodeFile); renamed.Add(new RenamedEpisodeFile { EpisodeFile = episodeFile, PreviousRelativePath = previousRelativePath, PreviousPath = previousPath }); _logger.Debug("Renamed episode file: {0}", episodeFile); _eventAggregator.PublishEvent(new EpisodeFileRenamedEvent(series, episodeFile, previousPath)); } catch (SameFilenameException ex) { _logger.Debug("File not renamed, source and destination are the same: {0}", ex.Filename); } catch (Exception ex) { _logger.Error(ex, "Failed to rename file {0}", previousPath); } } if (renamed.Any()) { _diskProvider.RemoveEmptySubfolders(series.Path); _eventAggregator.PublishEvent(new SeriesRenamedEvent(series, renamed)); } return(renamed); }
public EpisodeFileMoveResult UpgradeEpisodeFile(EpisodeFile episodeFile, LocalEpisode localEpisode, bool copyOnly = false) { var moveFileResult = new EpisodeFileMoveResult(); var existingFiles = localEpisode.Episodes .Where(e => e.EpisodeFileId > 0) .Select(e => e.EpisodeFile.Value) .Where(e => e != null) .GroupBy(e => e.Id) .ToList(); var rootFolder = _diskProvider.GetParentFolder(localEpisode.Series.Path); // If there are existing episode files and the root folder is missing, throw, so the old file isn't left behind during the import process. if (existingFiles.Any() && !_diskProvider.FolderExists(rootFolder)) { throw new RootFolderNotFoundException($"Root folder '{rootFolder}' was not found."); } foreach (var existingFile in existingFiles) { var file = existingFile.First(); var episodeFilePath = Path.Combine(localEpisode.Series.Path, file.RelativePath); var subfolder = rootFolder.GetRelativePath(_diskProvider.GetParentFolder(episodeFilePath)); if (_diskProvider.FileExists(episodeFilePath)) { _logger.Debug("Removing existing episode file: {0}", file); _recycleBinProvider.DeleteFile(episodeFilePath, subfolder); } moveFileResult.OldFiles.Add(file); _mediaFileService.Delete(file, DeleteMediaFileReason.Upgrade); } if (copyOnly) { moveFileResult.EpisodeFile = _episodeFileMover.CopyEpisodeFile(episodeFile, localEpisode); } else { moveFileResult.EpisodeFile = _episodeFileMover.MoveEpisodeFile(episodeFile, localEpisode); } return(moveFileResult); }
public string UpgradeEpisodeFile(EpisodeFile episodeFile, LocalEpisode localEpisode) { var existingFiles = localEpisode.Episodes .Where(e => e.EpisodeFileId > 0) .Select(e => e.EpisodeFile.Value) .GroupBy(e => e.Id); foreach (var existingFile in existingFiles) { var file = existingFile.First(); if (_diskProvider.FileExists(file.Path)) { _logger.Trace("Removing existing episode file: {0}", file); _recycleBinProvider.DeleteFile(file.Path); } _mediaFileService.Delete(file, true); } _logger.Trace("Moving episode file: {0}", episodeFile); return(_episodeFileMover.MoveEpisodeFile(episodeFile, localEpisode)); }