Streams published flat as <user>/<Title>__<ts>.mp4 so each recording is its own Jellyfin episode; plugin 0.1.3 parses the title from the name
Jellyfin merges several videos in one non-season folder into a single episode with versions, which collapsed a night of helmet cams into one entry. Recording still lands in <Title>/.live/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<RootNamespace>Jellyfin.Plugin.Vanguard</RootNamespace>
|
||||
<AssemblyVersion>0.1.2.0</AssemblyVersion>
|
||||
<FileVersion>0.1.2.0</FileVersion>
|
||||
<AssemblyVersion>0.1.3.0</AssemblyVersion>
|
||||
<FileVersion>0.1.3.0</FileVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<GenerateDocumentationFile>false</GenerateDocumentationFile>
|
||||
|
||||
@@ -26,6 +26,8 @@ public sealed class LibraryPaths
|
||||
var rel = full[(root.Length + 1)..].Split(Path.DirectorySeparatorChar, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (rel.Length < 2) return null;
|
||||
var stem = Path.GetFileNameWithoutExtension(rel[^1]);
|
||||
return rel.Length >= 3 ? new Parts(rel[0], rel[^2], stem) : new Parts(rel[0], null, stem);
|
||||
if (rel.Length >= 3) return new Parts(rel[0], rel[^2], stem); // legacy: <user>/<Title>/<ts>.mp4
|
||||
var sep = stem.IndexOf("__", StringComparison.Ordinal); // flat: <user>/<Title>__<ts>.mp4
|
||||
return sep > 0 ? new Parts(rel[0], stem[..sep], stem[(sep + 2)..]) : new Parts(rel[0], null, stem);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user