mirror of
https://github.com/ivabus/lonelyradio
synced 2024-11-22 08:05:10 +03:00
Add untested MPRIS functionality
Signed-off-by: Ivan Bushchik <ivabus@ivabus.dev>
This commit is contained in:
parent
c24d6d0175
commit
16d7c91a85
3 changed files with 76 additions and 2 deletions
|
@ -4,7 +4,6 @@ members = [
|
||||||
"monoclient",
|
"monoclient",
|
||||||
"monolib",
|
"monolib",
|
||||||
"monoloader",
|
"monoloader",
|
||||||
"platform/gtk",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
|
|
|
@ -8,3 +8,5 @@ license = "MIT"
|
||||||
monolib = { path = "../monolib" }
|
monolib = { path = "../monolib" }
|
||||||
clap = { version = "4.4.18", features = ["derive"] }
|
clap = { version = "4.4.18", features = ["derive"] }
|
||||||
crossterm = "0.27.0"
|
crossterm = "0.27.0"
|
||||||
|
mpris-server = "0.8.0"
|
||||||
|
async-std = {version = "1.12.0", features = ["attributes", "unstable"]}
|
||||||
|
|
|
@ -20,7 +20,79 @@ struct Args {
|
||||||
xor_key_file: Option<PathBuf>,
|
xor_key_file: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
#[cfg(target_os = "linux")]
|
||||||
|
async fn mpris() {
|
||||||
|
use mpris_server::{Metadata, Time, Volume};
|
||||||
|
|
||||||
|
let player = mpris_server::Player::builder("org.mpris.MediaPlayer2.monoclient")
|
||||||
|
.identity("monoclient")
|
||||||
|
.can_pause(true)
|
||||||
|
.build()
|
||||||
|
.await;
|
||||||
|
let player = match player {
|
||||||
|
Ok(p) => p,
|
||||||
|
Err(_) => {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
player.connect_play_pause(|x| {
|
||||||
|
monolib::toggle();
|
||||||
|
async_std::task::block_on(x.set_playback_status(
|
||||||
|
if monolib::get_state() == monolib::State::Playing {
|
||||||
|
mpris_server::PlaybackStatus::Playing
|
||||||
|
} else {
|
||||||
|
mpris_server::PlaybackStatus::Paused
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.unwrap();
|
||||||
|
});
|
||||||
|
player.connect_set_volume(|_, v: Volume| monolib::set_volume(((v * 255.0) % 256.0) as u8));
|
||||||
|
let mut md = monolib::get_metadata().unwrap();
|
||||||
|
let mut vol = monolib::get_volume();
|
||||||
|
player
|
||||||
|
.set_metadata(
|
||||||
|
Metadata::builder()
|
||||||
|
.artist(vec![&md.artist])
|
||||||
|
.album(&md.album)
|
||||||
|
.title(&md.title)
|
||||||
|
.length(Time::from_secs(md.track_length_secs as i64))
|
||||||
|
.build(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
async_std::task::spawn_local(player.run());
|
||||||
|
player.set_can_play(false).await.unwrap();
|
||||||
|
player.set_playback_status(mpris_server::PlaybackStatus::Playing).await.unwrap();
|
||||||
|
loop {
|
||||||
|
let nmd = monolib::get_metadata().unwrap();
|
||||||
|
let nvol = monolib::get_volume();
|
||||||
|
if nmd != md {
|
||||||
|
md = nmd;
|
||||||
|
player
|
||||||
|
.set_metadata(
|
||||||
|
Metadata::builder()
|
||||||
|
.artist(vec![&md.artist])
|
||||||
|
.album(&md.album)
|
||||||
|
.title(&md.title)
|
||||||
|
.length(Time::from_secs(md.track_length_secs as i64))
|
||||||
|
.build(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
if nvol != vol {
|
||||||
|
vol = nvol;
|
||||||
|
player.set_volume(vol as f64 / 255.0).await.unwrap();
|
||||||
|
}
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs(1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "linux"))]
|
||||||
|
async fn mpris() {}
|
||||||
|
|
||||||
|
#[async_std::main]
|
||||||
|
async fn main() {
|
||||||
let mut args = Args::parse();
|
let mut args = Args::parse();
|
||||||
args.no_backspace |= !std::io::stdout().is_terminal();
|
args.no_backspace |= !std::io::stdout().is_terminal();
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
|
@ -31,6 +103,7 @@ fn main() {
|
||||||
});
|
});
|
||||||
while monolib::get_metadata().is_none() {}
|
while monolib::get_metadata().is_none() {}
|
||||||
let mut md = monolib::get_metadata().unwrap();
|
let mut md = monolib::get_metadata().unwrap();
|
||||||
|
async_std::task::spawn_local(mpris());
|
||||||
let mut track_start = Instant::now();
|
let mut track_start = Instant::now();
|
||||||
let mut seconds_past = 0;
|
let mut seconds_past = 0;
|
||||||
crossterm::execute!(
|
crossterm::execute!(
|
||||||
|
|
Loading…
Reference in a new issue