diff --git a/scripts/sao-ui/Cargo.toml b/scripts/sao-ui/Cargo.toml index 6c6862e..2a09cd0 100644 --- a/scripts/sao-ui/Cargo.toml +++ b/scripts/sao-ui/Cargo.toml @@ -10,6 +10,7 @@ crate-type = ["cdylib"] [dependencies] glam = "^0.21" keyframe = "1" +canary-music-player = { path = "../../apps/music-player" } canary-script = { path = "../../crates/script" } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/scripts/sao-ui/src/lib.rs b/scripts/sao-ui/src/lib.rs index 23d535b..b558d3f 100644 --- a/scripts/sao-ui/src/lib.rs +++ b/scripts/sao-ui/src/lib.rs @@ -6,17 +6,25 @@ static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; pub mod anim; pub mod main_menu; +pub mod music_player; pub mod widgets; use api::*; use canary_script::*; use main_menu::MainMenuPanel; +use music_player::MusicPlayerPanel; use widgets::Widget; export_abi!(bind_panel_impl); -fn bind_panel_impl(panel: Panel, _protocol: Message, msg: Message) -> Box { - MainMenuPanel::bind(panel, msg) +fn bind_panel_impl(panel: Panel, protocol: Message, msg: Message) -> Box { + let protocol = protocol.to_vec(); + let protocol = String::from_utf8(protocol).unwrap(); + + match protocol.as_str() { + "tebibyte-media.desktop.music-player-controller" => MusicPlayerPanel::bind(panel, msg), + _ => MainMenuPanel::bind(panel, msg), + } } pub const ICON_FONT: &str = "Iosevka Nerd Font"; diff --git a/scripts/sao-ui/src/music_player.rs b/scripts/sao-ui/src/music_player.rs new file mode 100644 index 0000000..9eab50e --- /dev/null +++ b/scripts/sao-ui/src/music_player.rs @@ -0,0 +1,362 @@ +use api::*; +use canary_script::*; + +use canary_music_player::{AlbumInfo, PlaybackStatus, ProgressChanged, TrackInfo}; + +use crate::widgets::prelude::*; +use button::{RoundButton, RoundButtonStyle}; +use dialog::{DialogBodyStyle, DialogFooterStyle}; +use shell::Offset; +use text::{HorizontalAlignment, Label, LabelText}; + +pub struct MusicPlayerPanel { + panel: Panel, + widget: Option, + disconnected: Offset