Commit Graph

192 Commits

Author SHA1 Message Date
V1ck3s
1bf3e17d78 docs: add external playlists feature documentation 2026-01-15 23:32:31 +01:00
V1ck3s
e8e385b770 fix: resolve circular dependency and fix failing tests 2026-01-15 23:32:31 +01:00
V1ck3s
ebe6e90f39 feat: playlist implementation 2026-01-15 23:32:31 +01:00
Branson
0f93862cc2 Fix syntax error 2026-01-13 17:10:29 -05:00
bransoned
ce9689daa2 Change repeated array allocation into predefined constant 2026-01-13 17:10:11 -05:00
V1ck3s
d31a380176 fix: add HTTP Range header forwarding for iOS clients 2026-01-13 17:09:56 -05:00
Branson
c4e62cdeab Fix syntax error 2026-01-13 16:56:51 -05:00
bransoned
183f59993f Change repeated array allocation into predefined constant 2026-01-13 21:39:42 +00:00
bransoned
8a66db915d Remove debug prints, fix Artist search, implement GetArtistAlbumsAsync 2026-01-12 16:10:02 -05:00
V1ck3s
2c5daeefed docs: add Narjo to iOS compatible clients section 2026-01-12 19:50:46 +01:00
V1ck3s
c8c4fd8322 fix: add HTTP Range header forwarding for iOS clients 2026-01-12 19:35:29 +01:00
V1ck3s
7a08f15523 fix: prevent duplicate downloads from concurrent stream requests 2026-01-12 18:43:47 +01:00
V1ck3s
1d4c46b4f3 fix: use album artist for folder organization in Album download mode 2026-01-12 18:43:47 +01:00
V1ck3s
62246cc48f fix: prevent duplicate downloads in album mode 2026-01-12 18:43:47 +01:00
bransoned
428b7f06c4 #31 (upstream) Add http context handling to tests 2026-01-12 01:30:18 +00:00
bransoned
ad4a3af41e #31 (upstream) Fix iOS client local streaming issues 2026-01-12 01:30:14 +00:00
bransoned
bdac8ac132 #31 (upstream) Add http context handling to tests 2026-01-11 19:03:56 -05:00
bransoned
7ed4212b53 Merge branch 'dev' of github.com:bransoned/octo-fiesta into dev 2026-01-11 18:48:25 -05:00
bransoned
12598d17e2 #31 (upstream) Fix iOS client local streaming issues 2026-01-11 18:47:13 -05:00
Branson
714e465996 Update Docker workflow for version tagging 2026-01-10 22:44:26 -05:00
bransoned
45363ebe3b Make prod default behavior 2026-01-10 21:16:07 -05:00
bransoned
74d02db58a Add SquidWTF functionality to subsonic music services 2026-01-10 21:04:05 -05:00
bransoned
81979713ef Update appsettings file and make SquidWTF default service 2026-01-10 21:03:07 -05:00
bransoned
d8d046f6ef Add basic settings file for constants 2026-01-10 21:00:28 -05:00
bransoned
e1db12a165 Add logic to allow for new SquidWTF service 2026-01-10 20:59:16 -05:00
bransoned
ab898ef611 Add startup validation for metadata/download services 2026-01-10 20:58:28 -05:00
bransoned
4a5f2591f7 Add mostly functional metadata service that queries SquidWTF Tidal proxy 2026-01-10 20:56:22 -05:00
bransoned
f3e3c0bfa1 Add download service module to allow for downloading from SquidWTF API 2026-01-10 20:55:37 -05:00
V1ck3s
61a21b0e0c refactor: centralize cache path logic and add TMPDIR documentation 2026-01-11 00:29:25 +01:00
V1ck3s
dbb1964f46 feat: add cache-only storage mode for streaming without library persistence 2026-01-11 00:29:25 +01:00
Vickes
318ce96cbc refactor: implement provider-based service architecture (#40)
Comprehensive refactoring to improve maintainability, reduce code duplication, and facilitate the addition of new music providers.

Key architectural improvements:
- Introduced BaseDownloadService template method pattern, eliminating ~80% code duplication between Deezer and Qobuz services
- Organized services by provider (Services/Deezer/, Services/Qobuz/, Services/Local/, Services/Subsonic/)
- Extracted SubsonicController logic into 4 specialized services, reducing controller size by 43% (1,174 → 666 lines)
- Reorganized Models into domain-driven subdirectories (Domain/, Settings/, Download/, Search/)
- Implemented Result<T> pattern and GlobalExceptionHandler for consistent error handling
- Created unified validation architecture with IStartupValidator interface

Testing & Quality:
- Increased test coverage from ~30 to 127 tests (+323%)
- Added comprehensive test suites for QobuzDownloadService and Subsonic services
- All tests passing, zero build errors

Impact:
- Net reduction of 343 lines while adding more functionality
- No breaking changes - Subsonic API surface unchanged
- Foundation ready for easy addition of new providers (Tidal, Spotify, etc.)
2026-01-08 23:57:09 +01:00
V1ck3s
1c56534e26 ci: split workflows into separate CI and Docker jobs
- Split ci.yml into two workflows for cleaner PR checks
- ci.yml: runs build-and-test on PRs and pushes (no Docker)
- docker.yml: runs build-and-test + Docker build/push on merges, tags, and manual triggers
- Eliminates 'docker: skipping' status on open PRs
2026-01-08 23:51:57 +01:00
V1ck3s
6344198572 docs: update README to reflect refactored service architecture 2026-01-08 23:31:33 +01:00
V1ck3s
5d93af6aa0 test: add comprehensive test suite for QobuzDownloadService
- Add 15 unit tests covering authentication, download logic, and configuration
- Test IsAvailableAsync with various credential combinations
- Test download flow for unsupported providers, existing files, and missing songs
- Test album background download functionality
- Test quality format configuration (FLAC, MP3, default)
- All tests passing (127 total tests)
2026-01-08 22:51:37 +01:00
V1ck3s
9245dac99e refactor: extract subsonic controller logic into specialized services
- Extract SubsonicRequestParser for HTTP parameter extraction
- Extract SubsonicResponseBuilder for XML/JSON response formatting
- Extract SubsonicModelMapper for search result parsing and merging
- Extract SubsonicProxyService for upstream Subsonic server communication
- Add comprehensive test coverage (45 tests) for all new services
- Reduce SubsonicController from 1174 to 666 lines (-43%)

All tests passing. Build succeeds with 0 errors.
2026-01-08 21:47:05 +01:00
V1ck3s
09ee618ac8 refactor: extract PathHelper to Services/Common for reusability
Moved PathHelper from DeezerDownloadService to Services/Common/ to:
- Remove awkward dependency of Qobuz on Deezer namespace
- Make path utilities reusable by all services
- Improve code organization and clarify dependencies

Updated imports in DeezerDownloadService, QobuzDownloadService,
BaseDownloadService, and DeezerDownloadServiceTests.
2026-01-08 20:00:05 +01:00
V1ck3s
ce779b3c8a refactor: reorganize Models into subdirectories by context
Split monolithic MusicModels.cs (177 lines) into separate files:
- Models/Settings/ (DeezerSettings, QobuzSettings, SubsonicSettings)
- Models/Domain/ (Song, Album, Artist)
- Models/Search/ (SearchResult)
- Models/Download/ (DownloadInfo, DownloadStatus)
- Models/Subsonic/ (ScanStatus)

Updated namespaces and imports across 22 files.
Improves navigation and separates models by business context.
2026-01-08 19:57:11 +01:00
V1ck3s
c38291efa3 refactor: extract BaseDownloadService to eliminate code duplication between providers 2026-01-08 19:39:06 +01:00
V1ck3s
43c9a2e808 refactor: add Result<T> pattern and global exception handler for consistent error handling 2026-01-08 19:31:05 +01:00
V1ck3s
cb37c7f69a refactor: implement unified startup validator architecture with IStartupValidator interface 2026-01-08 19:19:45 +01:00
V1ck3s
fe9cb9b758 refactor: organize services by provider and standardize settings pattern 2026-01-08 19:02:44 +01:00
V1ck3s
d0e64bac81 feat: add dev branch to CI/CD pipeline and semver tag support 2026-01-08 18:11:44 +01:00
V1ck3s
651b86694d docs: update README for multi-provider architecture 2026-01-08 00:13:01 +01:00
V1ck3s
275467c5bf feat: add pluggable music service architecture with Qobuz support 2026-01-07 23:55:59 +01:00
V1ck3s
9ec1bb77b5 fix: use AlbumArtist for download folder organization 2026-01-07 22:43:17 +01:00
V1ck3s
853340b0f5 docs: update client compatibility list in README 2026-01-07 13:41:02 +01:00
V1ck3s
5229e2ce54 docs: remove non-working iOS clients from README 2026-01-06 23:49:03 +01:00
V1ck3s
5d03f86872 feat: add download mode option (Track/Album) for Deezer downloads
Closes #10
2026-01-06 22:53:43 +01:00
V1ck3s
3fd98ea3de feat: add explicit content filter for Deezer tracks (#22) 2026-01-06 21:59:00 +01:00
V1ck3s
06f33b8e89 feat: add form-urlencoded body parsing for Feishin compatibility 2026-01-04 22:21:31 +01:00