typo + move media control in app
This commit is contained in:
68
app/src/controller/media.rs
Normal file
68
app/src/controller/media.rs
Normal file
@@ -0,0 +1,68 @@
|
||||
use std::{process::Command, time::Duration, thread};
|
||||
use lib::{MessageToClient, MessageFromClient, ClientMessage, ServerMessage};
|
||||
use log::info;
|
||||
|
||||
|
||||
fn get_np() -> anyhow::Result<String> {
|
||||
let output = Command::new("playerctl")
|
||||
.arg("metadata")
|
||||
.arg("-f")
|
||||
.arg("{{title}} - {{artist}}")
|
||||
.output()?
|
||||
.stdout;
|
||||
let title = String::from_utf8(output)?;
|
||||
Ok(title.trim().to_string())
|
||||
}
|
||||
|
||||
fn get_playing() -> anyhow::Result<bool> {
|
||||
let output = Command::new("playerctl").arg("status").output()?.stdout;
|
||||
|
||||
let res = String::from_utf8(output)?;
|
||||
Ok(res.contains("Playing"))
|
||||
}
|
||||
|
||||
|
||||
pub fn init(sender:MessageToClient,receiver:MessageFromClient){
|
||||
|
||||
let mut i = 0;
|
||||
loop {
|
||||
i += 1;
|
||||
if i == 35 {
|
||||
i = 0;
|
||||
sender
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender
|
||||
.send(ServerMessage::Playing(get_playing().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
if receiver.is_empty() {
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
continue;
|
||||
}
|
||||
let msg = receiver.recv().unwrap();
|
||||
info!("[Client] : {msg:?}");
|
||||
|
||||
match msg {
|
||||
ClientMessage::Next => {
|
||||
Command::new("playerctl").arg("next").spawn().unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
ClientMessage::PlayPause => {
|
||||
Command::new("playerctl").arg("play-pause").spawn().unwrap();
|
||||
}
|
||||
ClientMessage::Previous => {
|
||||
Command::new("playerctl").arg("previous").spawn().unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
1
app/src/controller/mod.rs
Normal file
1
app/src/controller/mod.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub mod media;
|
||||
@@ -1,71 +1,15 @@
|
||||
use std::{process::Command, thread, time::Duration};
|
||||
mod controller;
|
||||
|
||||
use lib::{tcp::start_server, ClientMessage, ServerMessage};
|
||||
use log::info;
|
||||
use lib::tcp::start_server;
|
||||
|
||||
fn main() {
|
||||
env_logger::init_from_env(
|
||||
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
|
||||
);
|
||||
|
||||
let (sender_s, receiver_c) = start_server().unwrap();
|
||||
let (sender, receiver) = start_server().unwrap();
|
||||
|
||||
let mut i = 0;
|
||||
loop {
|
||||
i += 1;
|
||||
if i == 35 {
|
||||
i = 0;
|
||||
sender_s
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender_s
|
||||
.send(ServerMessage::Playing(get_playing().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
if receiver_c.is_empty() {
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
continue;
|
||||
}
|
||||
let msg = receiver_c.recv().unwrap();
|
||||
info!("[Client] : {msg:?}");
|
||||
controller::media::init(sender, receiver);
|
||||
|
||||
match msg {
|
||||
ClientMessage::Next => {
|
||||
Command::new("playerctl").arg("next").spawn().unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender_s
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
ClientMessage::PlayPause => {
|
||||
Command::new("playerctl").arg("play-pause").spawn().unwrap();
|
||||
}
|
||||
ClientMessage::Previous => {
|
||||
Command::new("playerctl").arg("previous").spawn().unwrap();
|
||||
thread::sleep(Duration::from_millis(200));
|
||||
sender_s
|
||||
.send(ServerMessage::NowPlaying(get_np().unwrap()))
|
||||
.unwrap();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
fn get_np() -> anyhow::Result<String> {
|
||||
let output = Command::new("playerctl")
|
||||
.arg("metadata")
|
||||
.arg("-f")
|
||||
.arg("{{title}} - {{artist}}")
|
||||
.output()?
|
||||
.stdout;
|
||||
let title = String::from_utf8(output)?;
|
||||
Ok(title.trim().to_string())
|
||||
}
|
||||
|
||||
fn get_playing() -> anyhow::Result<bool> {
|
||||
let output = Command::new("playerctl").arg("status").output()?.stdout;
|
||||
|
||||
let res = String::from_utf8(output)?;
|
||||
Ok(res.contains("Playing"))
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ pub enum ServerMessage {
|
||||
pub type MessageToServer = Sender<ClientMessage>;
|
||||
pub type MessageFromServer = Receiver<ServerMessage>;
|
||||
pub type MessageToClient = Sender<ServerMessage>;
|
||||
pub type MessageFomClient = Receiver<ClientMessage>;
|
||||
pub type MessageFromClient = Receiver<ClientMessage>;
|
||||
|
||||
pub enum Origin {
|
||||
Server,
|
||||
|
||||
@@ -80,7 +80,7 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn start_server() -> Result<(MessageToClient, MessageFomClient)> {
|
||||
pub fn start_server() -> Result<(MessageToClient, MessageFromClient)> {
|
||||
let (message_to_server, message_from_client) = channel::bounded(4);
|
||||
let (message_to_client, message_from_server) = channel::bounded(4);
|
||||
|
||||
|
||||
@@ -4,6 +4,5 @@
|
||||
export global AppManager {
|
||||
in-out property <bool> keyboard-enabled: true;
|
||||
in-out property <bool> widgets-enabled: true;
|
||||
|
||||
in-out property <bool> debug: false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user