relative seke
This commit is contained in:
parent
c00653829a
commit
a3d3831834
2 changed files with 34 additions and 19 deletions
|
@ -89,7 +89,7 @@ mod imp {
|
||||||
value: f64,
|
value: f64,
|
||||||
_range: >k::Range,
|
_range: >k::Range,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
self.window().seek(value);
|
self.window().set_time_pos(value);
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,12 +185,7 @@ mod imp {
|
||||||
#[weak(rename_to = window)]
|
#[weak(rename_to = window)]
|
||||||
self.obj(),
|
self.obj(),
|
||||||
move |_, _, _| {
|
move |_, _, _| {
|
||||||
let new_position = window.time_pos() - 10.0;
|
window.seek(-10.0);
|
||||||
if new_position < 0.0 {
|
|
||||||
window.seek(0.0);
|
|
||||||
} else {
|
|
||||||
window.seek(new_position);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
.build();
|
.build();
|
||||||
|
@ -200,17 +195,7 @@ mod imp {
|
||||||
#[weak(rename_to = window)]
|
#[weak(rename_to = window)]
|
||||||
self.obj(),
|
self.obj(),
|
||||||
move |_, _, _| {
|
move |_, _, _| {
|
||||||
let new_position = window.time_pos() + 10.0;
|
window.seek(10.0);
|
||||||
if new_position > window.duration() {
|
|
||||||
// just seek to the next track
|
|
||||||
if window.playlist_pos() + 1 < window.playlist_count() {
|
|
||||||
window.playlist_next();
|
|
||||||
} else {
|
|
||||||
window.playlist_play_index(None);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
window.seek(new_position);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
.build();
|
.build();
|
||||||
|
@ -935,7 +920,7 @@ impl Window {
|
||||||
self.imp().mpv.command(["playlist-prev"]).unwrap();
|
self.imp().mpv.command(["playlist-prev"]).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn seek(&self, new_position: f64) {
|
pub fn set_time_pos(&self, new_position: f64) {
|
||||||
use imp::State;
|
use imp::State;
|
||||||
|
|
||||||
match self.imp().state.get() {
|
match self.imp().state.get() {
|
||||||
|
@ -956,6 +941,36 @@ impl Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn seek(&self, offset: f64) {
|
||||||
|
use imp::State;
|
||||||
|
|
||||||
|
match self.imp().state.get() {
|
||||||
|
State::Active | State::Seeking => {
|
||||||
|
self.imp()
|
||||||
|
.mpv
|
||||||
|
.command(["seek", &offset.to_string()])
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
State::FileLoading => {
|
||||||
|
let mut new_position = self.time_pos() + offset;
|
||||||
|
if new_position < 0.0 {
|
||||||
|
new_position = 0.0;
|
||||||
|
}
|
||||||
|
let duration = self.duration();
|
||||||
|
if new_position > duration {
|
||||||
|
new_position = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
event!(Level::INFO, "queuing seek to {new_position}");
|
||||||
|
self.imp().queued_seek.set(Some(new_position));
|
||||||
|
self.notify("time-pos");
|
||||||
|
}
|
||||||
|
|
||||||
|
other => panic!("can not seek when im state {other:?}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn playlist_move(&self, from: u32, to: u32) {
|
pub fn playlist_move(&self, from: u32, to: u32) {
|
||||||
// NOTE: for mpv, to refers to the "gap" right before i
|
// NOTE: for mpv, to refers to the "gap" right before i
|
||||||
// so playlist-move i 0 makes a track the first
|
// so playlist-move i 0 makes a track the first
|
||||||
|
|
Loading…
Reference in a new issue