feat: Add keybinds to minimal example
This commit is contained in:
@@ -10,7 +10,37 @@ pub fn main() -> iced::Result {
|
||||
)
|
||||
.with(tracing_subscriber::EnvFilter::from_default_env())
|
||||
.init();
|
||||
iced::application(State::new, update, view).run()
|
||||
iced::application(State::new, update, view)
|
||||
.subscription(keyboard_event)
|
||||
.run()
|
||||
}
|
||||
|
||||
fn keyboard_event(state: &State) -> iced::Subscription<Message> {
|
||||
use iced::keyboard::{Key, key::Named};
|
||||
iced::keyboard::listen().map(move |event| match event {
|
||||
iced::keyboard::Event::KeyPressed { key, .. } => {
|
||||
let key = key.as_ref();
|
||||
match key {
|
||||
Key::Named(Named::Escape) | Key::Character("q") => Message::Quit,
|
||||
Key::Named(Named::Space) => Message::Toggle,
|
||||
_ => Message::Load,
|
||||
}
|
||||
// if key == &space {
|
||||
// // Toggle play/pause
|
||||
// let is_playing = state
|
||||
// .video
|
||||
// .source()
|
||||
// .is_playing()
|
||||
// .expect("Failed to get playing state");
|
||||
// if is_playing {
|
||||
// Message::Pause
|
||||
// } else {
|
||||
// Message::Play
|
||||
// }
|
||||
// }
|
||||
}
|
||||
_ => Message::Load,
|
||||
})
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -22,6 +52,8 @@ impl State {
|
||||
pub fn new() -> Self {
|
||||
let video = VideoHandle::new("https://jellyfin.tsuba.darksailor.dev/Items/6010382cf25273e624d305907010d773/Download?api_key=036c140222464878862231ef66a2bc9c")
|
||||
.expect("Failed to create video handle");
|
||||
// let video = VideoHandle::new("file:///run/user/1000/gvfs/smb-share:server=tsuba.darksailor.dev,share=nas/Movies/Spider-Man - No Way Home (2021)/Spider-Man.No.Way.Home.2021.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HEVC.REMUX-FraMeSToR.mkv")
|
||||
// .expect("Failed to create video handle");
|
||||
Self { video }
|
||||
}
|
||||
}
|
||||
@@ -30,16 +62,18 @@ impl State {
|
||||
pub enum Message {
|
||||
Play,
|
||||
Pause,
|
||||
Loaded,
|
||||
Toggle,
|
||||
Load,
|
||||
Quit,
|
||||
}
|
||||
|
||||
pub fn update(state: &mut State, message: Message) -> iced::Task<Message> {
|
||||
match message {
|
||||
Message::Load => {
|
||||
// does stuff
|
||||
let src = state.video.source().clone();
|
||||
iced::Task::perform(src.wait(), |_| Message::Loaded)
|
||||
// let src = state.video.source().clone();
|
||||
// iced::Task::perform(src.wait(), |_| Message::Loaded)
|
||||
iced::Task::none()
|
||||
}
|
||||
Message::Play => {
|
||||
state.video.source().play().expect("Failed to play video");
|
||||
@@ -49,10 +83,14 @@ pub fn update(state: &mut State, message: Message) -> iced::Task<Message> {
|
||||
state.video.source().pause().expect("Failed to pause video");
|
||||
iced::Task::none()
|
||||
}
|
||||
Message::Loaded => {
|
||||
// Video loaded
|
||||
Message::Toggle => {
|
||||
state.video.source().toggle().expect("Failed to stop video");
|
||||
iced::Task::none()
|
||||
}
|
||||
Message::Quit => {
|
||||
state.video.source().stop().expect("Failed to stop video");
|
||||
std::process::exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user