Replace dedicated MagpieClient with methods on ClientMessenger
This commit is contained in:
parent
d020caa477
commit
a809af7c64
|
@ -1,44 +0,0 @@
|
|||
// Copyright (c) 2022 Marceline Cramer
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
use serde::Serialize;
|
||||
|
||||
use std::os::unix::net::UnixStream;
|
||||
use std::path::Path;
|
||||
|
||||
use crate::protocol::{ClientMessenger, MagpieServerMsg, PanelId, SendMessage, MAGPIE_SOCK};
|
||||
|
||||
/// A client to a Magpie server.
|
||||
pub struct MagpieClient {
|
||||
pub messenger: ClientMessenger<UnixStream>,
|
||||
}
|
||||
|
||||
impl MagpieClient {
|
||||
pub fn new() -> std::io::Result<Self> {
|
||||
let sock_dir = std::env::var("XDG_RUNTIME_DIR").expect("XDG_RUNTIME_DIR not set");
|
||||
let sock_dir = Path::new(&sock_dir);
|
||||
let sock_path = sock_dir.join(MAGPIE_SOCK);
|
||||
let socket = UnixStream::connect(sock_path)?;
|
||||
Ok(Self {
|
||||
messenger: ClientMessenger::new(socket),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn send(&mut self, msg: &MagpieServerMsg) {
|
||||
if let Err(err) = self.messenger.send(msg) {
|
||||
eprintln!("Message send error: {:?}", err);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn send_json_message<T: Serialize>(&mut self, id: PanelId, msg: &T) {
|
||||
let msg = serde_json::to_string(msg).unwrap();
|
||||
eprintln!("Sending message: {}", msg);
|
||||
|
||||
let msg = SendMessage {
|
||||
id,
|
||||
msg: msg.into_bytes(),
|
||||
};
|
||||
|
||||
self.send(&MagpieServerMsg::SendMessage(msg));
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) 2022 Marceline Cramer
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
pub mod client;
|
||||
pub mod protocol;
|
||||
|
||||
#[cfg(feature = "service")]
|
||||
|
|
|
@ -60,6 +60,18 @@ pub enum MagpieClientMsg {
|
|||
/// A [Messenger] specialized for Magpie clients.
|
||||
pub type ClientMessenger<T> = Messenger<T, MagpieClientMsg, MagpieServerMsg>;
|
||||
|
||||
impl<T: Read + Write> ClientMessenger<T> {
|
||||
pub fn send_panel_json<O: Serialize>(&mut self, id: PanelId, msg: &O) {
|
||||
let msg = serde_json::to_string(msg).unwrap();
|
||||
eprintln!("Sending message: {:?}", msg);
|
||||
|
||||
let _ = self.send(&MagpieServerMsg::SendMessage(SendMessage {
|
||||
id,
|
||||
msg: msg.into_bytes(),
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/// A [Messenger] specialized for Magpie servers.
|
||||
pub type ServerMessenger<T> = Messenger<T, MagpieServerMsg, MagpieClientMsg>;
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
// Copyright (c) 2022 Marceline Cramer
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
use canary_music_player::*;
|
||||
use canary_magpie::client::MagpieClient;
|
||||
use canary_magpie::protocol::{CreatePanel, MagpieServerMsg};
|
||||
use std::{os::unix::net::UnixStream, path::Path};
|
||||
|
||||
use canary_magpie::protocol::{ClientMessenger, CreatePanel, MagpieServerMsg, MAGPIE_SOCK};
|
||||
use canary_music_player::*;
|
||||
use mpris::PlayerFinder;
|
||||
|
||||
pub type MagpieClient<'a> = ClientMessenger<&'a UnixStream>;
|
||||
|
||||
pub struct MetadataTracker {
|
||||
pub album: AlbumInfo,
|
||||
pub track: TrackInfo,
|
||||
|
@ -42,9 +44,9 @@ impl From<&mpris::Metadata> for MetadataTracker {
|
|||
impl MetadataTracker {
|
||||
pub fn new(magpie: &mut MagpieClient, metadata: &mpris::Metadata) -> Self {
|
||||
let new: Self = metadata.into();
|
||||
magpie.send_json_message(0, &InMsg::AlbumChanged(new.album.clone()));
|
||||
magpie.send_json_message(0, &InMsg::TrackChanged(new.track.clone()));
|
||||
magpie.send_json_message(
|
||||
magpie.send_panel_json(0, &InMsg::AlbumChanged(new.album.clone()));
|
||||
magpie.send_panel_json(0, &InMsg::TrackChanged(new.track.clone()));
|
||||
magpie.send_panel_json(
|
||||
0,
|
||||
&InMsg::ProgressChanged(ProgressChanged {
|
||||
position: 0.0,
|
||||
|
@ -58,12 +60,12 @@ impl MetadataTracker {
|
|||
let new: Self = metadata.into();
|
||||
|
||||
if self.album != new.album {
|
||||
messenger.send_json_message(0, &InMsg::AlbumChanged(new.album.clone()));
|
||||
messenger.send_panel_json(0, &InMsg::AlbumChanged(new.album.clone()));
|
||||
}
|
||||
|
||||
if self.track != new.track {
|
||||
messenger.send_json_message(0, &InMsg::TrackChanged(new.track.clone()));
|
||||
messenger.send_json_message(
|
||||
messenger.send_panel_json(0, &InMsg::TrackChanged(new.track.clone()));
|
||||
messenger.send_panel_json(
|
||||
0,
|
||||
&InMsg::ProgressChanged(ProgressChanged {
|
||||
position: 0.0,
|
||||
|
@ -85,12 +87,21 @@ fn main() {
|
|||
|
||||
let player_finder = PlayerFinder::new().expect("Could not connect to D-Bus");
|
||||
|
||||
let mut magpie = MagpieClient::new().unwrap();
|
||||
let sock_dir = std::env::var("XDG_RUNTIME_DIR").expect("XDG_RUNTIME_DIR not set");
|
||||
let sock_dir = Path::new(&sock_dir);
|
||||
let sock_path = sock_dir.join(MAGPIE_SOCK);
|
||||
let socket = UnixStream::connect(sock_path).unwrap();
|
||||
let mut magpie = MagpieClient::new(&socket);
|
||||
let protocol = "tebibyte-media.desktop.music-player-controller".to_string();
|
||||
let script = std::path::PathBuf::from(&module_path);
|
||||
let msg = CreatePanel { id: 0, protocol, script };
|
||||
let msg = CreatePanel {
|
||||
id: 0,
|
||||
protocol,
|
||||
script,
|
||||
};
|
||||
|
||||
let msg = MagpieServerMsg::CreatePanel(msg);
|
||||
magpie.messenger.send(&msg).unwrap();
|
||||
magpie.send(&msg).unwrap();
|
||||
|
||||
let mut first_loop = true;
|
||||
let mut connected = false;
|
||||
|
@ -106,7 +117,7 @@ fn main() {
|
|||
if connected {
|
||||
println!("Disconnected from MPRIS");
|
||||
let msg = InMsg::Disconnected;
|
||||
magpie.send_json_message(0, &msg);
|
||||
magpie.send_panel_json(0, &msg);
|
||||
connected = false;
|
||||
}
|
||||
|
||||
|
@ -126,7 +137,7 @@ fn main() {
|
|||
player.bus_name()
|
||||
);
|
||||
connected = true;
|
||||
magpie.send_json_message(0, &InMsg::Connected);
|
||||
magpie.send_panel_json(0, &InMsg::Connected);
|
||||
|
||||
let metadata = player.get_metadata().unwrap();
|
||||
let mut metadata_tracker = MetadataTracker::new(&mut magpie, &metadata);
|
||||
|
@ -180,7 +191,7 @@ fn main() {
|
|||
};
|
||||
|
||||
if let Some(msg) = in_msg {
|
||||
magpie.send_json_message(0, &msg);
|
||||
magpie.send_panel_json(0, &msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue