Fix - Subtitles not moved from temp folder if only subtitles were downloaded https://github.com/Crunchy-DL/Crunchy-Downloader/issues/90

This commit is contained in:
Elwador 2024-08-21 03:19:04 +02:00
parent 39c24be100
commit d665bffe5a
4 changed files with 32 additions and 23 deletions

View File

@ -223,7 +223,7 @@ public class CrunchyrollManager{
QueueManager.Instance.Queue.Refresh(); QueueManager.Instance.Queue.Refresh();
var fileNameAndPath = CrunOptions.DownloadToTempFolder ? Path.Combine(res.TempFolderPath, res.FileName) : Path.Combine(res.FolderPath, res.FileName); var fileNameAndPath = CrunOptions.DownloadToTempFolder ? Path.Combine(res.TempFolderPath ?? string.Empty, res.FileName ?? string.Empty) : Path.Combine(res.FolderPath ?? string.Empty, res.FileName ?? string.Empty);
if (CrunOptions is{ DlVideoOnce: false, KeepDubsSeperate: true }){ if (CrunOptions is{ DlVideoOnce: false, KeepDubsSeperate: true }){
var groupByDub = Helpers.GroupByLanguageWithSubtitles(res.Data); var groupByDub = Helpers.GroupByLanguageWithSubtitles(res.Data);
var mergers = new List<Merger>(); var mergers = new List<Merger>();
@ -255,7 +255,9 @@ public class CrunchyrollManager{
foreach (var merger in mergers){ foreach (var merger in mergers){
merger.CleanUp(); merger.CleanUp();
await MoveFromTempFolder(merger, data, res.TempFolderPath, res.Data.Where(e => e.Type == DownloadMediaType.Subtitle)); if (CrunOptions.DownloadToTempFolder){
await MoveFromTempFolder(merger, data, res.TempFolderPath, res.Data.Where(e => e.Type == DownloadMediaType.Subtitle));
}
} }
} else{ } else{
var result = await MuxStreams(res.Data, var result = await MuxStreams(res.Data,
@ -280,7 +282,9 @@ public class CrunchyrollManager{
if (result is{ merger: not null, isMuxed: true }){ if (result is{ merger: not null, isMuxed: true }){
result.merger.CleanUp(); result.merger.CleanUp();
}
if (CrunOptions.DownloadToTempFolder){
await MoveFromTempFolder(result.merger, data, res.TempFolderPath, res.Data.Where(e => e.Type == DownloadMediaType.Subtitle)); await MoveFromTempFolder(result.merger, data, res.TempFolderPath, res.Data.Where(e => e.Type == DownloadMediaType.Subtitle));
} }
} }
@ -315,7 +319,7 @@ public class CrunchyrollManager{
#region Temp Files Move #region Temp Files Move
private async Task MoveFromTempFolder(Merger merger, CrunchyEpMeta data, string tempFolderPath, IEnumerable<DownloadedMedia> subtitles){ private async Task MoveFromTempFolder(Merger? merger, CrunchyEpMeta data, string tempFolderPath, IEnumerable<DownloadedMedia> subtitles){
if (!CrunOptions.DownloadToTempFolder) return; if (!CrunOptions.DownloadToTempFolder) return;
data.DownloadProgress = new DownloadProgress{ data.DownloadProgress = new DownloadProgress{
@ -335,19 +339,17 @@ public class CrunchyrollManager{
} }
// Move the main output file // Move the main output file
await MoveFile(merger.options.Output, tempFolderPath, data.DownloadPath); await MoveFile(merger?.options.Output ?? string.Empty, tempFolderPath, data.DownloadPath ?? CfgManager.PathVIDEOS_DIR);
// Move the subtitle files // Move the subtitle files
if (CrunOptions.SkipSubsMux){ foreach (var downloadedMedia in subtitles){
foreach (var downloadedMedia in subtitles){ await MoveFile(downloadedMedia.Path ?? string.Empty, tempFolderPath, data.DownloadPath ?? CfgManager.PathVIDEOS_DIR);
await MoveFile(downloadedMedia.Path ?? string.Empty, tempFolderPath, data.DownloadPath);
}
} }
} }
private async Task MoveFile(string sourcePath, string tempFolderPath, string downloadPath){ private async Task MoveFile(string sourcePath, string tempFolderPath, string downloadPath){
if (string.IsNullOrEmpty(sourcePath) || !File.Exists(sourcePath)){ if (string.IsNullOrEmpty(sourcePath) || !File.Exists(sourcePath)){
Console.Error.WriteLine("Source file does not exist or path is invalid."); // Console.Error.WriteLine("Source file does not exist or path is invalid.");
return; return;
} }
@ -364,7 +366,7 @@ public class CrunchyrollManager{
? CrunOptions.DownloadDirPath ? CrunOptions.DownloadDirPath
: CfgManager.PathVIDEOS_DIR; : CfgManager.PathVIDEOS_DIR;
var destinationPath = Path.Combine(destinationFolder, fileName); var destinationPath = Path.Combine(destinationFolder ?? string.Empty, fileName ?? string.Empty);
string destinationDirectory = Path.GetDirectoryName(destinationPath); string destinationDirectory = Path.GetDirectoryName(destinationPath);
if (string.IsNullOrEmpty(destinationDirectory)){ if (string.IsNullOrEmpty(destinationDirectory)){
@ -1137,6 +1139,7 @@ public class CrunchyrollManager{
Console.WriteLine($"An error occurred: {ex.Message}"); Console.WriteLine($"An error occurred: {ex.Message}");
} }
dlFailed = true;
return new DownloadResponse{ return new DownloadResponse{
Data = files, Data = files,
Error = dlFailed, Error = dlFailed,
@ -1202,6 +1205,7 @@ public class CrunchyrollManager{
Console.WriteLine($"An error occurred: {ex.Message}"); Console.WriteLine($"An error occurred: {ex.Message}");
} }
dlFailed = true;
return new DownloadResponse{ return new DownloadResponse{
Data = files, Data = files,
Error = dlFailed, Error = dlFailed,
@ -1393,6 +1397,9 @@ public class CrunchyrollManager{
!string.IsNullOrEmpty(options.DownloadDirPath) ? options.DownloadDirPath : CfgManager.PathVIDEOS_DIR; !string.IsNullOrEmpty(options.DownloadDirPath) ? options.DownloadDirPath : CfgManager.PathVIDEOS_DIR;
} }
if (string.IsNullOrEmpty(data.DownloadPath)){
data.DownloadPath = fileDir;
}
return new DownloadResponse{ return new DownloadResponse{
Data = files, Data = files,

View File

@ -17,7 +17,7 @@ using YamlDotNet.Serialization.NamingConventions;
namespace CRD.Utils; namespace CRD.Utils;
public class CfgManager{ public class CfgManager{
private static string WorkingDirectory = Directory.GetCurrentDirectory(); private static string WorkingDirectory = AppContext.BaseDirectory;
public static readonly string PathCrToken = Path.Combine(WorkingDirectory, "config", "cr_token.yml"); public static readonly string PathCrToken = Path.Combine(WorkingDirectory, "config", "cr_token.yml");
public static readonly string PathCrDownloadOptions = Path.Combine(WorkingDirectory, "config", "settings.yml"); public static readonly string PathCrDownloadOptions = Path.Combine(WorkingDirectory, "config", "settings.yml");

View File

@ -66,10 +66,10 @@ public struct Episode{
public struct DownloadResponse{ public struct DownloadResponse{
public List<DownloadedMedia> Data{ get; set; } public List<DownloadedMedia> Data{ get; set; }
public string FileName{ get; set; } public string? FileName{ get; set; }
public string FolderPath{ get; set; } public string? FolderPath{ get; set; }
public string TempFolderPath{ get; set; } public string? TempFolderPath{ get; set; }
public string VideoTitle{ get; set; } public string VideoTitle{ get; set; }
public bool Error{ get; set; } public bool Error{ get; set; }

View File

@ -7,6 +7,7 @@ using Avalonia.Interactivity;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Platform; using Avalonia.Platform;
using CRD.Downloader.Crunchyroll;
using CRD.Utils; using CRD.Utils;
using CRD.Utils.Files; using CRD.Utils.Files;
using CRD.Utils.Structs; using CRD.Utils.Structs;
@ -195,7 +196,6 @@ public partial class MainWindow : AppWindow{
var screens = Screens.All; var screens = Screens.All;
if (settings.ScreenIndex >= 0 && settings.ScreenIndex < screens.Count){ if (settings.ScreenIndex >= 0 && settings.ScreenIndex < screens.Count){
var screen = screens[settings.ScreenIndex]; var screen = screens[settings.ScreenIndex];
var screenBounds = screen.Bounds;
// Restore the position first // Restore the position first
Position = new PixelPoint(settings.PosX, settings.PosY + TitleBarHeightAdjustment); Position = new PixelPoint(settings.PosX, settings.PosY + TitleBarHeightAdjustment);
@ -209,7 +209,7 @@ public partial class MainWindow : AppWindow{
_restorePosition = new PixelPoint(settings.PosX, settings.PosY + TitleBarHeightAdjustment); _restorePosition = new PixelPoint(settings.PosX, settings.PosY + TitleBarHeightAdjustment);
// Ensure the window is on the correct screen before maximizing // Ensure the window is on the correct screen before maximizing
Position = new PixelPoint(settings.PosX, settings.PosY+ TitleBarHeightAdjustment); Position = new PixelPoint(settings.PosX, settings.PosY + TitleBarHeightAdjustment);
} }
if (settings.IsMaximized){ if (settings.IsMaximized){
@ -232,15 +232,17 @@ public partial class MainWindow : AppWindow{
} }
var settings = new WindowSettings{ var settings = new WindowSettings{
Width = this.WindowState == WindowState.Maximized ? _restoreSize.Width : Width, Width = WindowState == WindowState.Maximized ? _restoreSize.Width : Width,
Height = this.WindowState == WindowState.Maximized ? _restoreSize.Height : Height, Height = WindowState == WindowState.Maximized ? _restoreSize.Height : Height,
ScreenIndex = screenIndex, ScreenIndex = screenIndex,
PosX = this.WindowState == WindowState.Maximized ? _restorePosition.X : Position.X, PosX = WindowState == WindowState.Maximized ? _restorePosition.X : Position.X,
PosY = this.WindowState == WindowState.Maximized ? _restorePosition.Y : Position.Y, PosY = WindowState == WindowState.Maximized ? _restorePosition.Y : Position.Y,
IsMaximized = this.WindowState == WindowState.Maximized IsMaximized = WindowState == WindowState.Maximized
}; };
File.WriteAllText(CfgManager.PathWindowSettings, JsonConvert.SerializeObject(settings, Formatting.Indented)); File.WriteAllText(CfgManager.PathWindowSettings, JsonConvert.SerializeObject(settings, Formatting.Indented));
FileNameManager.DeleteEmptyFolders(!string.IsNullOrEmpty(CrunchyrollManager.Instance.CrunOptions.DownloadTempDirPath) ? CrunchyrollManager.Instance.CrunOptions.DownloadTempDirPath : CfgManager.PathTEMP_DIR);
} }
private void OnWindowStateChanged(object sender, AvaloniaPropertyChangedEventArgs e){ private void OnWindowStateChanged(object sender, AvaloniaPropertyChangedEventArgs e){