diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4fffb2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..007acb4 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "mpv-rpc" +version = "0.1.0" +edition = "2021" + +[lib] +name = "mpv_rpc" +crate-type = ["cdylib"] + +[dependencies] +mpv-client = "0.4.0" diff --git a/install_lib.sh b/install_lib.sh new file mode 100755 index 0000000..f48d482 --- /dev/null +++ b/install_lib.sh @@ -0,0 +1,10 @@ +#!/bin/bash +TARGET=$1 + +if [[ -z "$TARGET" ]] +then + TARGET="debug" +fi + +echo "Copying library to mpv scripts directory..." +cp "target/$TARGET/libmpv_rpc.so" "$HOME/.config/mpv/scripts/" \ No newline at end of file diff --git a/rm_lib.sh b/rm_lib.sh new file mode 100755 index 0000000..b4ef392 --- /dev/null +++ b/rm_lib.sh @@ -0,0 +1,2 @@ +#!/bin/bash +rm "$HOME/.config/mpv/scripts/libmpv_rpc.so" > /dev/null 2>&1 \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..80c9f45 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,12 @@ +use mpv_client::mpv_handle; + +mod mpv_event_handler; + +#[no_mangle] +fn mpv_open_cplugin(handle: *mut mpv_handle) -> std::os::raw::c_int { + let client = mpv_event_handler::MpvHandler::from_ptr(handle); + while client.poll_events() { + + } + return 0; +} \ No newline at end of file diff --git a/src/mpv_event_handler.rs b/src/mpv_event_handler.rs new file mode 100644 index 0000000..fd27066 --- /dev/null +++ b/src/mpv_event_handler.rs @@ -0,0 +1,52 @@ +use mpv_client::{Handle, Event, Property, mpv_handle}; + +pub struct MpvHandler { + mpv: Handle +} + +impl MpvHandler { + pub fn new(mpv: Handle) -> Self { + Self { + mpv + } + } + + pub fn from_ptr(handle: *mut mpv_handle) -> Self { + MpvHandler::new(Handle::from_ptr(handle)) + } + + #[allow(dead_code)] + fn observe_property(&self, id: u64, name: &str, format: i32) -> Result<(), String>{ + match self.mpv.observe_property(id, name, format) { + Ok(_) => Ok(()), + Err(_) => Err(format!("Couldn't observe property: {name} (id: {id})")) + } + } + + #[allow(dead_code)] + fn on_property_change(&self, prop_id: u64, _prop: Property) { + println!("[RPC] Property changed: {prop_id}"); + match prop_id { + _ => () + } + } + + fn handle_event(&self, event: Event) { + println!("[RPC] Event: {event}"); + match event { + _ => () + } + } + + // TODO! + // Add logging + pub fn poll_events(&self) -> bool { + match self.mpv.wait_event(0.0) { + Event::None => (), + Event::Shutdown => return false, + Event::PropertyChange(prop_id, prop) => self.on_property_change(prop_id, prop), + event => self.handle_event(event) + } + true + } +} \ No newline at end of file