v1.0.0-beta.1: initial beta release
Docker Build & Push / build-and-test (push) Has been cancelled
Docker Build & Push / docker (push) Has been cancelled

This commit is contained in:
2026-02-11 10:16:09 -05:00
parent 0a9e528418
commit 86290dff0d
4 changed files with 10 additions and 5 deletions
+7 -2
View File
@@ -28,8 +28,10 @@ public static class PathHelper
/// <param name="title">Track title (will be sanitized).</param>
/// <param name="trackNumber">Optional track number for prefix.</param>
/// <param name="extension">File extension (e.g., ".flac", ".mp3").</param>
/// <param name="provider">Optional provider name (e.g., "squidwtf", "deezer").</param>
/// <param name="externalId">Optional external ID from the provider.</param>
/// <returns>Full path for the track file.</returns>
public static string BuildTrackPath(string downloadPath, string artist, string album, string title, int? trackNumber, string extension)
public static string BuildTrackPath(string downloadPath, string artist, string album, string title, int? trackNumber, string extension, string? provider = null, string? externalId = null)
{
var safeArtist = SanitizeFolderName(artist);
var safeAlbum = SanitizeFolderName(album);
@@ -39,7 +41,10 @@ public static class PathHelper
var albumFolder = Path.Combine(artistFolder, safeAlbum);
var trackPrefix = trackNumber.HasValue ? $"{trackNumber:D2} - " : "";
var fileName = $"{trackPrefix}{safeTitle}{extension}";
var idSuffix = !string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(externalId)
? $" [{provider}-{externalId}]"
: "";
var fileName = $"{trackPrefix}{safeTitle}{idSuffix}{extension}";
return Path.Combine(albumFolder, fileName);
}
@@ -111,7 +111,7 @@ public class DeezerDownloadService : BaseDownloadService
var basePath = SubsonicSettings.StorageMode == StorageMode.Cache
? Path.Combine("downloads", "cache")
: Path.Combine("downloads", "permanent");
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension);
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension, "deezer", trackId);
// Create directories if they don't exist
var albumFolder = Path.GetDirectoryName(outputPath)!;
@@ -114,7 +114,7 @@ public class QobuzDownloadService : BaseDownloadService
var basePath = SubsonicSettings.StorageMode == StorageMode.Cache
? Path.Combine(DownloadPath, "cache")
: Path.Combine(DownloadPath, "permanent");
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension);
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension, "qobuz", trackId);
var albumFolder = Path.GetDirectoryName(outputPath)!;
EnsureDirectoryExists(albumFolder);
@@ -129,7 +129,7 @@ public class SquidWTFDownloadService : BaseDownloadService
var basePath = SubsonicSettings.StorageMode == StorageMode.Cache
? Path.Combine("downloads", "cache")
: Path.Combine("downloads", "permanent");
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension);
var outputPath = PathHelper.BuildTrackPath(basePath, artistForPath, song.Album, song.Title, song.Track, extension, "squidwtf", trackId);
// Create directories if they don't exist
var albumFolder = Path.GetDirectoryName(outputPath)!;