Song server: central song library with on-demand downloads
- VocaluxeSongServer: ASP.NET Core server that scans an UltraStar library and serves the song list (ETag), single files (Range) and zip bundles; optional API key; Dockerfile and Gitea workflow for git.disi.dev/projects/vocaluxe-song-server - Game: config section SongServer (Url, ApiKey). At song loading, the song text files are mirrored into a local cache that is loaded like a song folder; without connection the last library is used - VocaluxeLib: CSongFiles hook for all song file access; media are downloaded on demand (covers in the background, preview audio, everything before singing with progress in the sing screen) - Tests for scanner, API and downloads (incl. resume); AGENTS.md for the fork Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cf2fa796e2
commit
efcc63a640
29 files changed
+1753
-20
No files matched your search
@@ -194,7 +194,7 @@ namespace VocaluxeLib.Songs
|
||||
break;
|
||||
case "MP3":
|
||||
case "AUDIO":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.Audio = value;
|
||||
headerFlags |= EHeaderFlags.MP3;
|
||||
@@ -207,7 +207,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
break;
|
||||
case "INSTRUMENTAL":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.Instrumental = value;
|
||||
headerFlags |= EHeaderFlags.Instrumental;
|
||||
@@ -221,7 +221,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
break;
|
||||
case "VOCALS":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.Vocals = value;
|
||||
headerFlags |= EHeaderFlags.Vocals;
|
||||
@@ -298,7 +298,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
break;
|
||||
case "COVER":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.Cover = value;
|
||||
}
|
||||
@@ -309,7 +309,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
break;
|
||||
case "BACKGROUND":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.BackgroundFileNames.Add(value);
|
||||
}
|
||||
@@ -321,7 +321,7 @@ namespace VocaluxeLib.Songs
|
||||
|
||||
break;
|
||||
case "VIDEO":
|
||||
if (File.Exists(Path.Combine(_Song.Folder, value)))
|
||||
if (CSongFiles.Exists(Path.Combine(_Song.Folder, value)))
|
||||
{
|
||||
_Song.Video = value;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user