fix: delete yt-dlp partial files when it fails (v1.0.0.14)
All checks were successful
Publish Release / release (push) Successful in 11s
All checks were successful
Publish Release / release (push) Successful in 11s
yt-dlp removes its separate video/audio files after a successful merge, but a failed run (e.g. HTTP 403 mid-download) left "<name>.f137.mp4.part" etc. in the trailer folder, even when the built-in fallback then succeeded. Always remove files sharing the output's "<name>." prefix after yt-dlp runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<RootNamespace>Jellyfin.Plugin.CinemaTrailers4Jellyfins</RootNamespace>
|
||||
<AssemblyVersion>1.0.0.13</AssemblyVersion>
|
||||
<FileVersion>1.0.0.13</FileVersion>
|
||||
<AssemblyVersion>1.0.0.14</AssemblyVersion>
|
||||
<FileVersion>1.0.0.14</FileVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateDocumentationFile>false</GenerateDocumentationFile>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
|
||||
@@ -282,6 +282,32 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services
|
||||
_logger.LogError(ex, "|CinemaTrailers4Jellyfins| yt-dlp download failed for {Key}", key);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
DeleteYtDlpLeftovers(outputPath);
|
||||
}
|
||||
}
|
||||
|
||||
// yt-dlp names its separate/partial downloads "<output name>.f137.mp4.part", ".f140.m4a",
|
||||
// ".ytdl", ... It removes them after a successful merge, but not when it fails. Everything
|
||||
// sharing the output's "<name>." prefix (other than the output itself) is one of those.
|
||||
private void DeleteYtDlpLeftovers(string outputPath)
|
||||
{
|
||||
var folder = Path.GetDirectoryName(outputPath);
|
||||
if (folder == null || !Directory.Exists(folder))
|
||||
return;
|
||||
|
||||
var outputName = Path.GetFileName(outputPath);
|
||||
var prefix = Path.GetFileNameWithoutExtension(outputPath) + ".";
|
||||
foreach (var file in Directory.EnumerateFiles(folder))
|
||||
{
|
||||
var name = Path.GetFileName(file);
|
||||
if (name.StartsWith(prefix, StringComparison.Ordinal)
|
||||
&& !string.Equals(name, outputName, StringComparison.Ordinal))
|
||||
{
|
||||
TryDeleteFile(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user