mirror of
https://github.com/Radarr/Radarr.git
synced 2024-10-03 22:57:18 +02:00
New: Add recycle bin path for deleted movies to webhook/custom script
(cherry picked from commit a71d40edba1388d67e4deefd8bfc354a7a83c6b1) Closes #9674
This commit is contained in:
parent
82fb355930
commit
99ab65f790
@ -176,7 +176,7 @@ public void should_return_docker_path_mapping_error_if_on_docker_and_root_missin
|
||||
public void should_return_ok_on_movie_imported_event()
|
||||
{
|
||||
GivenFolderExists(_downloadRootPath);
|
||||
var importEvent = new MovieFileImportedEvent(new LocalMovie(), new MovieFile(), new List<MovieFile>(), true, new DownloadClientItem());
|
||||
var importEvent = new MovieFileImportedEvent(new LocalMovie(), new MovieFile(), new List<DeletedMovieFile>(), true, new DownloadClientItem());
|
||||
|
||||
Subject.Check(importEvent).ShouldBeOk();
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ public void should_use_file_name_for_source_title_if_scene_name_is_null()
|
||||
DownloadId = "abcd"
|
||||
};
|
||||
|
||||
Subject.Handle(new MovieFileImportedEvent(localMovie, movieFile, new List<MovieFile>(), true, downloadClientItem));
|
||||
Subject.Handle(new MovieFileImportedEvent(localMovie, movieFile, new List<DeletedMovieFile>(), true, downloadClientItem));
|
||||
|
||||
Mocker.GetMock<IHistoryRepository>()
|
||||
.Verify(v => v.Insert(It.Is<MovieHistory>(h => h.SourceTitle == Path.GetFileNameWithoutExtension(localMovie.Path))));
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
@ -33,16 +33,16 @@ public void SetUp()
|
||||
RelativePath = "moviefile1.mkv"
|
||||
},
|
||||
|
||||
OldMovieFiles = new List<MovieFile>
|
||||
OldMovieFiles = new List<DeletedMovieFile>
|
||||
{
|
||||
new MovieFile
|
||||
new DeletedMovieFile(new MovieFile
|
||||
{
|
||||
RelativePath = "oldmoviefile1.mkv"
|
||||
},
|
||||
new MovieFile
|
||||
}, null),
|
||||
new DeletedMovieFile(new MovieFile
|
||||
{
|
||||
RelativePath = "oldmoviefile2.mkv"
|
||||
}
|
||||
}, null)
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -28,7 +28,7 @@ public void Setup()
|
||||
_downloadMessage = Builder<DownloadMessage>.CreateNew()
|
||||
.With(d => d.Movie = movie)
|
||||
.With(d => d.MovieFile = movieFile)
|
||||
.With(d => d.OldMovieFiles = new List<MovieFile>())
|
||||
.With(d => d.OldMovieFiles = new List<DeletedMovieFile>())
|
||||
.Build();
|
||||
|
||||
Subject.Definition = new NotificationDefinition();
|
||||
@ -40,9 +40,12 @@ public void Setup()
|
||||
|
||||
private void GivenOldFiles()
|
||||
{
|
||||
_downloadMessage.OldMovieFiles = Builder<MovieFile>.CreateListOfSize(1)
|
||||
.Build()
|
||||
.ToList();
|
||||
_downloadMessage.OldMovieFiles = Builder<DeletedMovieFile>
|
||||
.CreateListOfSize(1)
|
||||
.All()
|
||||
.WithFactory(() => new DeletedMovieFile(Builder<MovieFile>.CreateNew().Build(), null))
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
Subject.Definition.Settings = new XbmcSettings
|
||||
{
|
||||
|
14
src/NzbDrone.Core/MediaFiles/DeletedMovieFile.cs
Normal file
14
src/NzbDrone.Core/MediaFiles/DeletedMovieFile.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace NzbDrone.Core.MediaFiles
|
||||
{
|
||||
public class DeletedMovieFile
|
||||
{
|
||||
public string RecycleBinPath { get; set; }
|
||||
public MovieFile MovieFile { get; set; }
|
||||
|
||||
public DeletedMovieFile(MovieFile movieFile, string recycleBinPath)
|
||||
{
|
||||
MovieFile = movieFile;
|
||||
RecycleBinPath = recycleBinPath;
|
||||
}
|
||||
}
|
||||
}
|
@ -9,12 +9,12 @@ public class MovieFileImportedEvent : IEvent
|
||||
{
|
||||
public LocalMovie MovieInfo { get; private set; }
|
||||
public MovieFile ImportedMovie { get; private set; }
|
||||
public List<MovieFile> OldFiles { get; private set; }
|
||||
public List<DeletedMovieFile> OldFiles { get; private set; }
|
||||
public bool NewDownload { get; private set; }
|
||||
public DownloadClientItemClientInfo DownloadClientInfo { get; set; }
|
||||
public string DownloadId { get; private set; }
|
||||
|
||||
public MovieFileImportedEvent(LocalMovie movieInfo, MovieFile importedMovie, List<MovieFile> oldFiles, bool newDownload, DownloadClientItem downloadClientItem)
|
||||
public MovieFileImportedEvent(LocalMovie movieInfo, MovieFile importedMovie, List<DeletedMovieFile> oldFiles, bool newDownload, DownloadClientItem downloadClientItem)
|
||||
{
|
||||
MovieInfo = movieInfo;
|
||||
ImportedMovie = importedMovie;
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles
|
||||
{
|
||||
@ -6,10 +6,10 @@ public class MovieFileMoveResult
|
||||
{
|
||||
public MovieFileMoveResult()
|
||||
{
|
||||
OldFiles = new List<MovieFile>();
|
||||
OldFiles = new List<DeletedMovieFile>();
|
||||
}
|
||||
|
||||
public MovieFile MovieFile { get; set; }
|
||||
public List<MovieFile> OldFiles { get; set; }
|
||||
public List<DeletedMovieFile> OldFiles { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ public List<ImportResult> Import(List<ImportDecision> decisions, bool newDownloa
|
||||
foreach (var importDecision in qualifiedImports.OrderByDescending(e => e.LocalMovie.Size))
|
||||
{
|
||||
var localMovie = importDecision.LocalMovie;
|
||||
var oldFiles = new List<MovieFile>();
|
||||
var oldFiles = new List<DeletedMovieFile>();
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
public interface IRecycleBinProvider
|
||||
{
|
||||
void DeleteFolder(string path);
|
||||
void DeleteFile(string path, string subfolder = "");
|
||||
string DeleteFile(string path, string subfolder = "");
|
||||
void Empty();
|
||||
void Cleanup();
|
||||
}
|
||||
@ -66,7 +66,7 @@ public void DeleteFolder(string path)
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteFile(string path, string subfolder = "")
|
||||
public string DeleteFile(string path, string subfolder = "")
|
||||
{
|
||||
_logger.Debug("Attempting to send '{0}' to recycling bin", path);
|
||||
var recyclingBin = _configService.RecycleBin;
|
||||
@ -82,6 +82,8 @@ public void DeleteFile(string path, string subfolder = "")
|
||||
|
||||
_diskProvider.DeleteFile(path);
|
||||
_logger.Debug("File has been permanently deleted: {0}", path);
|
||||
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -128,6 +130,8 @@ public void DeleteFile(string path, string subfolder = "")
|
||||
SetLastWriteTime(destination, DateTime.UtcNow);
|
||||
|
||||
_logger.Debug("File has been moved to the recycling bin: {0}", destination);
|
||||
|
||||
return destination;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,9 +170,9 @@ public ScriptImportDecision TryImport(string sourcePath, string destinationFileP
|
||||
|
||||
if (oldFiles.Any())
|
||||
{
|
||||
environmentVariables.Add("Radarr_DeletedRelativePaths", string.Join("|", oldFiles.Select(e => e.RelativePath)));
|
||||
environmentVariables.Add("Radarr_DeletedPaths", string.Join("|", oldFiles.Select(e => Path.Combine(movie.Path, e.RelativePath))));
|
||||
environmentVariables.Add("Radarr_DeletedDateAdded", string.Join("|", oldFiles.Select(e => e.DateAdded)));
|
||||
environmentVariables.Add("Radarr_DeletedRelativePaths", string.Join("|", oldFiles.Select(e => e.MovieFile.RelativePath)));
|
||||
environmentVariables.Add("Radarr_DeletedPaths", string.Join("|", oldFiles.Select(e => Path.Combine(movie.Path, e.MovieFile.RelativePath))));
|
||||
environmentVariables.Add("Radarr_DeletedDateAdded", string.Join("|", oldFiles.Select(e => e.MovieFile.DateAdded)));
|
||||
}
|
||||
|
||||
_logger.Debug("Executing external script: {0}", _configService.ScriptImportPath);
|
||||
|
@ -55,14 +55,15 @@ public MovieFileMoveResult UpgradeMovieFile(MovieFile movieFile, LocalMovie loca
|
||||
{
|
||||
var movieFilePath = Path.Combine(localMovie.Movie.Path, existingFile.RelativePath);
|
||||
var subfolder = rootFolder.GetRelativePath(_diskProvider.GetParentFolder(movieFilePath));
|
||||
string recycleBinPath = null;
|
||||
|
||||
if (_diskProvider.FileExists(movieFilePath))
|
||||
{
|
||||
_logger.Debug("Removing existing movie file: {0}", existingFile);
|
||||
_recycleBinProvider.DeleteFile(movieFilePath, subfolder);
|
||||
recycleBinPath = _recycleBinProvider.DeleteFile(movieFilePath, subfolder);
|
||||
}
|
||||
|
||||
moveFileResult.OldFiles.Add(existingFile);
|
||||
moveFileResult.OldFiles.Add(new DeletedMovieFile(existingFile, recycleBinPath));
|
||||
_mediaFileService.Delete(existingFile, DeleteMediaFileReason.Upgrade);
|
||||
}
|
||||
|
||||
|
@ -143,9 +143,10 @@ public override void OnDownload(DownloadMessage message)
|
||||
|
||||
if (message.OldMovieFiles.Any())
|
||||
{
|
||||
environmentVariables.Add("Radarr_DeletedRelativePaths", string.Join("|", message.OldMovieFiles.Select(e => e.RelativePath)));
|
||||
environmentVariables.Add("Radarr_DeletedPaths", string.Join("|", message.OldMovieFiles.Select(e => Path.Combine(movie.Path, e.RelativePath))));
|
||||
environmentVariables.Add("Radarr_DeletedDateAdded", string.Join("|", message.OldMovieFiles.Select(e => e.DateAdded)));
|
||||
environmentVariables.Add("Radarr_DeletedRelativePaths", string.Join("|", message.OldMovieFiles.Select(e => e.MovieFile.RelativePath)));
|
||||
environmentVariables.Add("Radarr_DeletedPaths", string.Join("|", message.OldMovieFiles.Select(e => Path.Combine(movie.Path, e.MovieFile.RelativePath))));
|
||||
environmentVariables.Add("Radarr_DeletedDateAdded", string.Join("|", message.OldMovieFiles.Select(e => e.MovieFile.DateAdded)));
|
||||
environmentVariables.Add("Radarr_DeletedRecycleBinPaths", string.Join("|", message.OldMovieFiles.Select(e => e.RecycleBinPath ?? string.Empty)));
|
||||
}
|
||||
|
||||
ExecuteScript(environmentVariables);
|
||||
|
@ -12,7 +12,7 @@ public class DownloadMessage
|
||||
public Movie Movie { get; set; }
|
||||
public LocalMovie MovieInfo { get; set; }
|
||||
public MovieFile MovieFile { get; set; }
|
||||
public List<MovieFile> OldMovieFiles { get; set; }
|
||||
public List<DeletedMovieFile> OldMovieFiles { get; set; }
|
||||
public string SourcePath { get; set; }
|
||||
public DownloadClientItemClientInfo DownloadClientInfo { get; set; }
|
||||
public string DownloadId { get; set; }
|
||||
|
@ -29,7 +29,7 @@ public override void OnDownload(DownloadMessage message)
|
||||
{
|
||||
foreach (var oldFile in message.OldMovieFiles)
|
||||
{
|
||||
var fullPath = Path.Combine(message.Movie.Path, oldFile.RelativePath);
|
||||
var fullPath = Path.Combine(message.Movie.Path, oldFile.MovieFile.RelativePath);
|
||||
|
||||
_indexerProxy.DeleteFile(fullPath);
|
||||
}
|
||||
|
@ -66,9 +66,10 @@ protected WebhookImportPayload BuildOnDownloadPayload(DownloadMessage message)
|
||||
if (message.OldMovieFiles.Any())
|
||||
{
|
||||
payload.DeletedFiles = message.OldMovieFiles.ConvertAll(x =>
|
||||
new WebhookMovieFile(x)
|
||||
new WebhookMovieFile(x.MovieFile)
|
||||
{
|
||||
Path = Path.Combine(message.Movie.Path, x.RelativePath)
|
||||
Path = Path.Combine(message.Movie.Path, x.MovieFile.RelativePath),
|
||||
RecycleBinPath = x.RecycleBinPath
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -39,5 +39,6 @@ public WebhookMovieFile(MovieFile movieFile)
|
||||
public long Size { get; set; }
|
||||
public DateTime DateAdded { get; set; }
|
||||
public WebhookMovieFileMediaInfo MediaInfo { get; set; }
|
||||
public string RecycleBinPath { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ public LocalMovie()
|
||||
public DownloadClientItem DownloadItem { get; set; }
|
||||
public ParsedMovieInfo FolderMovieInfo { get; set; }
|
||||
public Movie Movie { get; set; }
|
||||
public List<MovieFile> OldFiles { get; set; }
|
||||
public List<DeletedMovieFile> OldFiles { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public List<Language> Languages { get; set; }
|
||||
public MediaInfoModel MediaInfo { get; set; }
|
||||
|
Loading…
Reference in New Issue
Block a user