2 Commits

Author SHA1 Message Date
Martin
86d8e2a05b 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>
2026-10-05 18:19:24 -04:00
gitea-actions
c013416473 chore: update manifest.json for v1.0.0.13 2026-10-05 22:11:03 +00:00
4 changed files with 40 additions and 9 deletions

View File

@@ -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>

View File

@@ -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);
}
}
}
}
}

View File

@@ -1,5 +1,5 @@
---
version: 1.0.0.13
version: 1.0.0.14
name: CinemaTrailers4Jellyfins
guid: b581493e-1046-40ed-b6dc-cb8027624984
description: >
@@ -12,12 +12,9 @@ category: General
owner: 514mart
targetAbi: 10.11.0.0
changelog:
- yt-dlp now prefers H.264 + AAC (plays or hardware-transcodes on every
client; VP9/AV1 often needed a CPU transcode) and uses Jellyfin's own
ffmpeg for the merge
- 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
- When yt-dlp fails part-way, its partial download files (.part, .ytdl,
separate video/audio) are now deleted instead of being left in the
trailer folder
dotnetProjects:
- name: Jellyfin.Plugin.CinemaTrailers4Jellyfins

View File

@@ -8,6 +8,14 @@
"owner": "514mart",
"imageUrl": "https://www.git.quarantinedstudio.com/mvezina/CinemaTrailers4Jellyfins/raw/branch/main/Jellyfin.Plugin.CinemaTrailers4Jellyfins/Images/logo.svg",
"versions": [
{
"checksum": "f1fe201e7b0238fa432ae7fb5dbb1844",
"changelog": "- yt-dlp now prefers H.264 + AAC (plays or hardware-transcodes on every client; VP9/AV1 often needed a CPU transcode) and uses Jellyfin's own ffmpeg for the merge\n- If yt-dlp fails, the built-in downloader is tried instead\n- Fix a possible hang. yt-dlp's output is now read while it runs, so a full output buffer can no longer block it\n",
"targetAbi": "10.11.0.0",
"sourceUrl": "https://www.git.quarantinedstudio.com/mvezina/CinemaTrailers4Jellyfins/releases/download/v1.0.0.13/cinematrailers4jellyfins_1.0.0.13.zip",
"timestamp": "2026-10-05T22:11:03Z",
"version": "1.0.0.13"
},
{
"checksum": "d7a565b0e4d47effb9db40fb44847920",
"changelog": "- Anime trailers now only play before anime. Western animation (Pixar, Disney, ...) is no longer blocked and follows the normal genre filter again. A trailer counts as anime when TMDB tags it \"anime\" or \"based on manga\", or it is animation in Japanese, Chinese or Korean; it is marked with a ct4j-anime tag in its NFO at download time. Your anime is recognised by the \"Anime\" genre or the same TMDB keywords\n",