diff --git a/src/controller/controls/mod.rs b/src/controller/controls/mod.rs index 7469789..50c72a5 100644 --- a/src/controller/controls/mod.rs +++ b/src/controller/controls/mod.rs @@ -4,14 +4,17 @@ mod null; mod paddle; mod scroll; mod scroll_mt; +mod seek; mod volume; mod zoom; pub use self::media::*; pub use self::media_with_volume::*; +#[allow(unused_imports)] pub use self::null::*; pub use self::paddle::*; pub use self::scroll::*; pub use self::scroll_mt::*; +pub use self::seek::*; pub use self::volume::*; pub use self::zoom::*; diff --git a/src/controller/controls/seek.rs b/src/controller/controls/seek.rs new file mode 100644 index 0000000..01f43fe --- /dev/null +++ b/src/controller/controls/seek.rs @@ -0,0 +1,45 @@ +use crate::controller::{ControlMode, ControlModeMeta}; +use crate::dial_device::DialHaptics; +use crate::error::{Error, Result}; +use crate::fake_input; + +use evdev_rs::enums::EV_KEY; + +pub struct Seek {} + +impl Seek { + pub fn new() -> Seek { + Seek {} + } +} + +impl ControlMode for Seek { + fn meta(&self) -> ControlModeMeta { + ControlModeMeta { + name: "Seek", + icon: "applications-multimedia", + haptics: true, + steps: 36, + } + } + + fn on_btn_press(&mut self, _: &DialHaptics) -> Result<()> { + Ok(()) + } + + fn on_btn_release(&mut self, _: &DialHaptics) -> Result<()> { + fake_input::key_click(&[EV_KEY::KEY_PLAYPAUSE]).map_err(Error::Evdev)?; + Ok(()) + } + + fn on_dial(&mut self, _: &DialHaptics, delta: i32) -> Result<()> { + if delta > 0 { + eprintln!("fast forward"); + fake_input::key_click(&[EV_KEY::KEY_FASTFORWARD]).map_err(Error::Evdev)?; + } else { + eprintln!("rewind"); + fake_input::key_click(&[EV_KEY::KEY_REWIND]).map_err(Error::Evdev)?; + } + Ok(()) + } +} \ No newline at end of file diff --git a/src/fake_input.rs b/src/fake_input.rs index 2a8a1ac..23ed6f9 100644 --- a/src/fake_input.rs +++ b/src/fake_input.rs @@ -37,6 +37,8 @@ lazy_static::lazy_static! { device.enable(&EventCode::EV_KEY(EV_KEY::KEY_NEXTSONG))?; device.enable(&EventCode::EV_KEY(EV_KEY::KEY_PLAYPAUSE))?; device.enable(&EventCode::EV_KEY(EV_KEY::KEY_PREVIOUSSONG))?; + device.enable(&EventCode::EV_KEY(EV_KEY::KEY_FASTFORWARD))?; + device.enable(&EventCode::EV_KEY(EV_KEY::KEY_REWIND))?; device.enable(&EventCode::EV_KEY(EV_KEY::KEY_LEFT))?; device.enable(&EventCode::EV_KEY(EV_KEY::KEY_RIGHT))?; diff --git a/src/main.rs b/src/main.rs index ef0ef3d..4d744b4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,6 +89,7 @@ fn controller_main() -> Result<()> { Box::new(controller::controls::Media::new()), Box::new(controller::controls::MediaWithVolume::new()), Box::new(controller::controls::Paddle::new()), + Box::new(controller::controls::Seek::new()), ], );