fix: delete yt-dlp partial files when it fails (v1.0.0.14)
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:
Martin
2026-10-05 18:19:24 -04:00
parent c013416473
commit 86d8e2a05b
3 changed files with 32 additions and 9 deletions

View File

@@ -3,8 +3,8 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<RootNamespace>Jellyfin.Plugin.CinemaTrailers4Jellyfins</RootNamespace> <RootNamespace>Jellyfin.Plugin.CinemaTrailers4Jellyfins</RootNamespace>
<AssemblyVersion>1.0.0.13</AssemblyVersion> <AssemblyVersion>1.0.0.14</AssemblyVersion>
<FileVersion>1.0.0.13</FileVersion> <FileVersion>1.0.0.14</FileVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<GenerateDocumentationFile>false</GenerateDocumentationFile> <GenerateDocumentationFile>false</GenerateDocumentationFile>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> <TreatWarningsAsErrors>false</TreatWarningsAsErrors>

View File

@@ -282,6 +282,32 @@ namespace Jellyfin.Plugin.CinemaTrailers4Jellyfins.Services
_logger.LogError(ex, "|CinemaTrailers4Jellyfins| yt-dlp download failed for {Key}", key); _logger.LogError(ex, "|CinemaTrailers4Jellyfins| yt-dlp download failed for {Key}", key);
return false; 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);
}
}
} }
} }
} }

View File

@@ -1,5 +1,5 @@
--- ---
version: 1.0.0.13 version: 1.0.0.14
name: CinemaTrailers4Jellyfins name: CinemaTrailers4Jellyfins
guid: b581493e-1046-40ed-b6dc-cb8027624984 guid: b581493e-1046-40ed-b6dc-cb8027624984
description: > description: >
@@ -12,12 +12,9 @@ category: General
owner: 514mart owner: 514mart
targetAbi: 10.11.0.0 targetAbi: 10.11.0.0
changelog: changelog:
- yt-dlp now prefers H.264 + AAC (plays or hardware-transcodes on every - When yt-dlp fails part-way, its partial download files (.part, .ytdl,
client; VP9/AV1 often needed a CPU transcode) and uses Jellyfin's own separate video/audio) are now deleted instead of being left in the
ffmpeg for the merge trailer folder
- If yt-dlp fails, the built-in downloader is tried instead
- Fix a possible hang. yt-dlp's output is now read while it runs, so a
full output buffer can no longer block it
dotnetProjects: dotnetProjects:
- name: Jellyfin.Plugin.CinemaTrailers4Jellyfins - name: Jellyfin.Plugin.CinemaTrailers4Jellyfins