4625 Commits

Author SHA1 Message Date
Deluan
dd94355c46 refactor: Discord RPC struct to encapsulate WebSocket logic
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
93e9f12685 feat: implement mock service instances for non-WASM builds using testify/mock
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
a427166084 fix: handle URL parsing errors and use atomic upsert in plugin repository
Added proper error handling for url.Parse calls in PublicURL and AbsoluteURL
functions. When parsing fails, PublicURL now falls back to AbsoluteURL, and
AbsoluteURL logs the error and returns an empty string, preventing malformed
URLs from being generated.

Replaced the non-atomic UPDATE-then-INSERT pattern in plugin repository Put
method with a single atomic INSERT ... ON CONFLICT statement. This eliminates
potential race conditions and improves consistency with the upsert pattern
already used in host_kvstore.go.
2026-01-12 08:16:07 -05:00
Deluan
ac3889cac9 docs: update README to include Rust PDK crate information for plugin developers
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
5c087a12af docs: clarify artwork URL generation capabilities in service descriptions
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
0ec82e83f6 docs: correct example link for library inspector in README
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
f8149c320f docs: update Go and Rust plugin developer sections for clarity
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
374dd2343d fix(plugins): update response types in testMetadataAgent methods to use pointers
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
89d9aa1434 feat(plugins): implement XTP JSONSchema validation for generated schemas
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
aa03d53524 test(plugins): add unit tests for rustOutputType and isPrimitiveRustType functions
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
169bbb9d0a fix(plugins): update IsAuthorized method to return boolean instead of response object
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
e750bf8232 fix(plugins): enhance type handling for Rust and XTP output in capability generation
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
867000b70a fix(plugins): update return types in metadata interfaces to use pointers
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
fc89abd0ea refactor(plugins): update plugin instance creation to accept context for cancellation support
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
6210af8d90 docs: update README to reflect changes in plugin import paths
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
f0c8e98c6d test(plugins): conditionally run goleak checks based on CI environment
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
37473a7096 fix(plugins): generate host wrappers
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
221ccdc18d docs: update plugin registration docs
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
633a26a273 refactor(plugins): update export wrappers to use //go:wasmexport for WebAssembly compatibility
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
06c2556a8f refactor(plugins): rename scheduler callback methods for consistency and clarity
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
53aa1a67ee refactor(plugins): update macro names for websocket and metadata registration to improve clarity and consistency
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
3bfce4cc9c refactor(plugins): update Discord Rich Presence and Library Inspector plugins to use nd-pdk for service calls and implement lifecycle management
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
2b2b673581 refactor(plugins): reorganize Rust output structure to follow standard conventions
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
e2d0c5626c feat: implement Rust PDK
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
c19ce124d5 refactor(plugins): consolidate PDK module path and update Go version to 1.25
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
034e8af90b build: mark .wasm files as intermediate for cleanup after building .ndp
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
3d14349b99 refactor(plugins): update request/response types to use private naming conventions
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
810ee687fa refactor(plugins): update function signatures to return values directly instead of response structs
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
312a31f688 refactor(plugins): update error handling for methods to return errors directly
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
723b19c8de refactor(plugins): reorganize and sort type definitions for consistency
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
25b5acad8a test: make all test plugins use the PDK
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
9ac0764cc2 refactor(plugins): update scrobbler interface to return errors directly instead of response structs
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:07 -05:00
Deluan
306b2fc525 refactor(plugins): streamline plugin function signatures and error handling
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
31842b2c3d refactor(plugins): consistent naming/types across PDK
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
d81e641cc6 feat(plugins): implementation of the Navidrome Plugin Development Kit with generated client wrappers and service interfaces - Phase 5
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
0fb497ed73 feat(plugins): implementation of the Navidrome Plugin Development Kit with generated client wrappers and service interfaces - Phase 4
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
b4b7b91cf7 feat(plugins): implementation of the Navidrome Plugin Development Kit with generated client wrappers and service interfaces - Phase 3
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
05455de90b feat(plugins): implementation of the Navidrome Plugin Development Kit with generated client wrappers and service interfaces - Phase 2 (2)
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
80e134420c feat(plugins): implementation of the Navidrome Plugin Development Kit with generated client wrappers and service interfaces - Phase 2
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
4e0cd7571b feat(plugins): add initial implementation of the Navidrome Plugin Development Kit code generator - Pahse 1
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
4f9d0a5016 feat(plugins): update client template file names for consistency
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
bbb1596b4b feat(plugins): generate Go client stubs for non-WASM platforms
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
1d18b3a092 feat(plugins): add Go client library with host function wrappers and documentation
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
b8ff660485 feat(plugins): enhance Rust code generation with typed struct support and improved type handling
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
d5458fb16d refactor: reduce cyclomatic complexity by refactoring main function
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
1b589f292f refactor(plugins): update JSON field names to camelCase for consistency
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
7afe906d11 feat(plugins): generate Rust lib.rs file to expose host function wrappers
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
de45079ff6 feat(plugins): add Rust host function library and example implementation of Discord Rich Presence plugin in Rust
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
dfaf22248a feat(plugins): update config handling in PluginShow to track last record state
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00
Deluan
cef1d339a3 feat(plugins): integrate event broker into plugin manager
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-12 08:16:06 -05:00