Compare commits

...

45 Commits

Author SHA1 Message Date
d43494dc42 Merge branch 'main' into beta
Some checks failed
Docker Build & Push / build-and-test (push) Has been cancelled
Docker Build & Push / docker (push) Has been cancelled
2026-01-30 14:11:59 -05:00
70a56e758a fix: enable deduplication for cache mode
- Cache mode now registers downloaded songs in mappings
- Prevents duplicate downloads in cache mode
- Fixes wasted API calls and duplicate cache files
- Both cache and download modes benefit from deduplication
2026-01-30 14:11:18 -05:00
13205087ff fix: prevent duplicate downloads by registering before releasing lock
- Race condition fixed where multiple threads could download same song
- RegisterDownloadedSongAsync now called before lock release
- Second thread finds registered mapping and skips download
- Eliminates duplicate files with (1), (2) suffixes
2026-01-30 13:38:11 -05:00
3c4e368912 fix: add base64 encoded SquidWTF endpoints with automatic fallback
- Decode 6 endpoints at startup (triton, wolf, hund, maus, vogel, katze)
- Automatic fallback when endpoint fails
- All services cycle through endpoints on failure
- URLs stored as base64, decoded once in Program.cs
- Fixes search/download issues
2026-01-30 13:24:10 -05:00
018c1d5d93 Merge branch 'main' into beta 2026-01-30 12:40:39 -05:00
6d38dd2615 Add automatic endpoint fallback to all SquidWTF metadata search methods 2026-01-30 12:40:36 -05:00
a2917f14fa Merge branch 'main' into beta 2026-01-30 12:38:51 -05:00
8ee3ce96d3 Standardize all SquidWTF API URL formats to prevent double slashes 2026-01-30 12:38:30 -05:00
46a9f945e6 Merge branch 'main' into beta 2026-01-30 12:37:03 -05:00
5e90cd8ea8 Fix double slash bug in SquidWTF API URLs 2026-01-30 12:36:35 -05:00
a540f1f766 Merge branch 'main' into beta 2026-01-30 12:26:42 -05:00
0cfefd667f Update startup validator to use base64 encoded endpoint 2026-01-30 12:26:28 -05:00
93b55599ee Merge branch 'main' into beta 2026-01-30 12:25:21 -05:00
2a66eba58d Fix remaining BaseUrl references 2026-01-30 12:24:53 -05:00
b9acc502af Merge branch 'main' into beta 2026-01-30 12:13:09 -05:00
aae7dfe59e Add backup API endpoints with automatic fallback 2026-01-30 12:12:41 -05:00
4472f71265 Merge branch 'main' into beta 2026-01-30 12:01:05 -05:00
fa176bad0f Consolidate Quick Start and add Contributing section 2026-01-30 12:00:38 -05:00
b3fe044405 Merge branch 'main' into beta 2026-01-30 11:54:46 -05:00
5a0ae860e3 Add build status badges to README 2026-01-30 11:54:15 -05:00
a307ef8975 Merge branch 'main' into beta 2026-01-30 11:48:23 -05:00
4d21291598 Update docker-compose to use GHCR image by default 2026-01-30 11:47:46 -05:00
7c19f199f1 Merge branch 'main' into beta 2026-01-30 11:39:00 -05:00
629bf38ea7 Update CI/CD: deploy only on main and beta branches 2026-01-30 11:38:28 -05:00
e23e22a736 Fix nullable reference warnings 2026-01-30 11:36:59 -05:00
ba0fe35e72 Merge branch 'main' into dev 2026-01-30 11:32:42 -05:00
6e9fe0e69e Upgrade to .NET 10.0 2026-01-30 11:31:45 -05:00
cba955c427 Fix JellyfinProxyServiceTests for RedisCacheService parameter 2026-01-30 11:27:14 -05:00
192173ea64 Merge branch 'main' into dev 2026-01-30 11:23:41 -05:00
c33180abd7 Fix: Parse LRC format into individual lines for Feishin compatibility
Feishin expects lyrics as an array of {Start, Text} objects with timestamps
in ticks, not as a single LRC-formatted text block
2026-01-30 03:00:55 -05:00
680454e76e Clarify lyrics preference: synced lyrics preferred over plain
Already working correctly, just made the code clearer with explicit variable
2026-01-30 02:28:05 -05:00
34bfc20d28 Change Redis cache logging from Debug to Info level
Makes cache hits/misses visible in production logs without needing Debug level
2026-01-30 02:20:11 -05:00
489159b424 Add debug logging for Redis cache hits/misses
Now logs when cache entries are retrieved (HIT/MISS) and when they're stored
2026-01-30 02:17:45 -05:00
2bb754b245 Fix: Pass through full query string for browse requests
Recently added, recently played, and frequently played sections use
different query parameters (SortBy, SortOrder, Filters, etc) that we
weren't forwarding. Now we pass the complete query string to Jellyfin.
2026-01-30 02:15:48 -05:00
8d8c0892a2 Fix: Handle decimal duration values from LRCLIB API
LRCLIB returns duration as a decimal/float, not int. Convert to int using Math.Round.
2026-01-30 02:13:10 -05:00
e12851e9ca Fix: Handle nullable Duration in lyrics endpoint 2026-01-30 02:10:25 -05:00
f8969bea8d Add LRCLIB lyrics integration for Jellyfin
- Create LrclibService to fetch lyrics from lrclib.net API
- Add LyricsInfo model for lyrics data
- Add /Audio/{itemId}/Lyrics and /Items/{itemId}/Lyrics endpoints
- Support both local and external songs
- Cache lyrics for 30 days in Redis
- Return lyrics in Jellyfin format with synced/plain lyrics
2026-01-30 02:09:27 -05:00
ceaa17f018 Fix: Register SquidWTFSettings configuration in Program.cs
The SquidWTF quality setting from .env was not being loaded because
SquidWTFSettings wasn't registered with the DI container.
2026-01-30 00:50:34 -05:00
9aa7ceb138 Remove unused _preferredQuality field from SquidWTFDownloadService
The quality setting is already being used correctly via _squidwtfSettings.Quality
2026-01-30 00:49:41 -05:00
72b1ebc2eb Fix: Wrap playback request bodies in required field names for Jellyfin
Jellyfin expects playback endpoints to have bodies wrapped:
- /Sessions/Playing -> {"playbackStartInfo": {...}}
- /Sessions/Playing/Progress -> {"playbackProgressInfo": {...}}
- /Sessions/Playing/Stopped -> {"playbackStopInfo": {...}}

This fixes the 'field is required' validation errors.
2026-01-30 00:48:38 -05:00
48a0351862 Improve POST body debugging for playback endpoints
- Better logging to show what client sends vs what we forward
- Log all headers when body is empty to help diagnose issues
2026-01-30 00:45:16 -05:00
4b95f9910c Fix: Ensure POST requests always send body content to Jellyfin
- Always send body content for POST requests, even if empty (send '{}')
- Update TODO.md to mark tasks 2 and 3 as done
- Improve logging for POST body debugging
2026-01-30 00:44:39 -05:00
80424a867d Fix: Update last access time for cached files to enable proper cleanup 2026-01-30 00:41:17 -05:00
4afd769602 Fix: Proxy Artists/{id}/Similar to correct Jellyfin endpoint 2026-01-30 00:29:56 -05:00
b47a5f9063 Add ' - SW' suffix to external albums and artists
Makes it easy to distinguish external content from local Jellyfin library
2026-01-30 00:21:37 -05:00

Diff Content Not Available