Project setup and basic event logging
This commit is contained in:
parent
f0d6b7e52f
commit
dfc4b30d4a
6 changed files with 89 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
/Cargo.lock
|
11
Cargo.toml
Normal file
11
Cargo.toml
Normal file
|
@ -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"
|
10
install_lib.sh
Executable file
10
install_lib.sh
Executable file
|
@ -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/"
|
2
rm_lib.sh
Executable file
2
rm_lib.sh
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
rm "$HOME/.config/mpv/scripts/libmpv_rpc.so" > /dev/null 2>&1
|
12
src/lib.rs
Normal file
12
src/lib.rs
Normal file
|
@ -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;
|
||||
}
|
52
src/mpv_event_handler.rs
Normal file
52
src/mpv_event_handler.rs
Normal file
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue