refactor: extract psysonic-integration crate (M5/7)

Moves all outbound external-service bridges out of the top crate into a
new psysonic-integration crate.

  crates/psysonic-integration/
    src/discord.rs                     Rich Presence + iTunes artwork
    src/navidrome/{client,covers,...}  Native REST API admin (5 modules)
    src/remote.rs                      radio-browser, last.fm, ICY meta,
                                       generic CORS proxy (fetch_url_bytes
                                       / fetch_json_url / resolve_stream_url)
    src/bandsintown.rs                 events for an artist
    src/lib.rs                         module declarations + macro re-exports

Top crate keeps `crate::discord` working via
`pub use psysonic_integration::discord;`.

invoke_handler! in lib.rs uses full deepest paths
(`psysonic_integration::navidrome::users::nd_list_users`, etc.) so
Tauri's `__cmd__*` magic macros resolve at the right module — same
pattern audio + syncfs already use.

Cross-crate refs migrated:
  crate::subsonic_wire_user_agent → psysonic_core::user_agent::*
  pub(crate) → pub                  (cross-crate visibility)

Behaviour preserving. Cargo check + clippy --workspace clean.
This commit is contained in:
Psychotoxical
2026-05-09 13:51:28 +02:00
parent 9417d522f3
commit 98d8ea6353
17 changed files with 145 additions and 117 deletions
+32 -31
View File
@@ -2,9 +2,10 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
pub mod cli;
mod discord;
mod lib_commands;
pub use psysonic_integration::discord;
pub use psysonic_core::logging;
pub use psysonic_core::{app_eprintln, app_deprintln};
pub use psysonic_core::user_agent::{
@@ -391,35 +392,35 @@ pub fn run() {
audio::device_commands::audio_default_output_device_name,
audio::device_commands::audio_set_device,
audio::commands::audio_chain_preload,
discord::discord_update_presence,
discord::discord_clear_presence,
lastfm_request,
upload_playlist_cover,
upload_radio_cover,
upload_artist_image,
delete_radio_cover,
navidrome_login,
nd_list_users,
nd_create_user,
nd_update_user,
nd_delete_user,
nd_list_libraries,
nd_list_songs,
nd_list_artists_by_role,
nd_list_albums_by_artist_role,
nd_set_user_libraries,
nd_list_playlists,
nd_create_playlist,
nd_update_playlist,
nd_get_playlist,
nd_delete_playlist,
nd_get_song_path,
search_radio_browser,
get_top_radio_stations,
fetch_url_bytes,
fetch_json_url,
fetch_icy_metadata,
resolve_stream_url,
psysonic_integration::discord::discord_update_presence,
psysonic_integration::discord::discord_clear_presence,
psysonic_integration::remote::lastfm_request,
psysonic_integration::navidrome::covers::upload_playlist_cover,
psysonic_integration::navidrome::covers::upload_radio_cover,
psysonic_integration::navidrome::covers::upload_artist_image,
psysonic_integration::navidrome::covers::delete_radio_cover,
psysonic_integration::navidrome::users::navidrome_login,
psysonic_integration::navidrome::users::nd_list_users,
psysonic_integration::navidrome::users::nd_create_user,
psysonic_integration::navidrome::users::nd_update_user,
psysonic_integration::navidrome::users::nd_delete_user,
psysonic_integration::navidrome::queries::nd_list_libraries,
psysonic_integration::navidrome::queries::nd_list_songs,
psysonic_integration::navidrome::queries::nd_list_artists_by_role,
psysonic_integration::navidrome::queries::nd_list_albums_by_artist_role,
psysonic_integration::navidrome::queries::nd_set_user_libraries,
psysonic_integration::navidrome::playlists::nd_list_playlists,
psysonic_integration::navidrome::playlists::nd_create_playlist,
psysonic_integration::navidrome::playlists::nd_update_playlist,
psysonic_integration::navidrome::playlists::nd_get_playlist,
psysonic_integration::navidrome::playlists::nd_delete_playlist,
psysonic_integration::navidrome::queries::nd_get_song_path,
psysonic_integration::remote::search_radio_browser,
psysonic_integration::remote::get_top_radio_stations,
psysonic_integration::remote::fetch_url_bytes,
psysonic_integration::remote::fetch_json_url,
psysonic_integration::remote::fetch_icy_metadata,
psysonic_integration::remote::resolve_stream_url,
analysis_get_waveform,
analysis_get_waveform_for_track,
analysis_get_loudness_for_track,
@@ -457,7 +458,7 @@ pub fn run() {
psysonic_syncfs::cache::downloads::open_folder,
psysonic_syncfs::cache::downloads::get_embedded_lyrics,
psysonic_syncfs::cache::downloads::fetch_netease_lyrics,
fetch_bandsintown_events,
psysonic_integration::bandsintown::fetch_bandsintown_events,
#[cfg(target_os = "windows")]
taskbar_win::update_taskbar_icon,
])