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>
|
<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>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
11
build.yaml
11
build.yaml
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user