feat: remove individual watch-later videos
This commit is contained in:
@@ -73,6 +73,7 @@ These are the default bindings. Overrides in `[keys]` replace an action's bindin
|
||||
| `w` | Save the selected video to watch later (also works in previews) |
|
||||
| `W` | Browse watch later for the current category, or the combined collection elsewhere |
|
||||
| `f` | In watch later, cycle All → Unwatched → Watched |
|
||||
| `X` (Shift-X) | Remove only the selected watch-later video (also works in previews) |
|
||||
| `D` | In watch later, confirm removal of all videos matching the current list/filter |
|
||||
| `v` | Save the selected video to saved videos (also works in previews) |
|
||||
| `V` | Browse saved videos for the current category, or the combined collection elsewhere |
|
||||
@@ -185,6 +186,8 @@ Terebi reports acknowledged playback positions. A video becomes watched when an
|
||||
|
||||
### Removal
|
||||
|
||||
`X` (Shift-X) immediately removes **only the selected video** from watch later, including from Search, category views, or previews. Other videos, saved-video membership, and watched status remain unchanged. Configure this action with `video.watch_later.remove`; it is separate from the bulk action `view.watch_later.remove`.
|
||||
|
||||
`D` snapshots all videos matching the current list and filter, then shows their count, category, and filter. **`y` confirms; `n` or Esc cancels.** Enter does not confirm. Removal deletes those videos from the shared collection, so they disappear from every matching category; watched status is untouched. An empty filtered list has nothing to remove.
|
||||
|
||||
### Storage
|
||||
|
||||
+7
-2
@@ -109,6 +109,7 @@ actions! {
|
||||
WatchLaterBrowse, "view.watch_later.browse", "Browse this category's watch later, or the combined collection elsewhere", &[Context::Normal], ["W"];
|
||||
WatchLaterFilter, "view.watch_later.filter", "Cycle watch-later filter: all, unwatched, watched", &[Context::Normal], ["f"];
|
||||
WatchLaterRemove, "view.watch_later.remove", "Confirm removal of the current filtered watch-later subset", &[Context::Normal], ["D"];
|
||||
WatchLaterRemoveSelected, "video.watch_later.remove", "Remove only the selected watch-later video (also in previews)", VIEW, ["X"];
|
||||
SavedVideoSave, "video.saved.save", "Save the selected video (also in previews)", VIEW, ["v"];
|
||||
SavedVideoBrowse, "view.saved.browse", "Browse this category's saved videos, or the combined collection elsewhere", &[Context::Normal], ["V"];
|
||||
SavedVideoRemove, "video.saved.remove", "Remove the selected saved video (also in previews)", VIEW, ["x"];
|
||||
@@ -474,6 +475,10 @@ impl Bindings {
|
||||
"Browse category watch later; combined elsewhere",
|
||||
),
|
||||
(&[WatchLaterFilter], "Cycle all / unwatched / watched"),
|
||||
(
|
||||
&[WatchLaterRemoveSelected],
|
||||
"Remove the selected video (also in previews)",
|
||||
),
|
||||
(
|
||||
&[WatchLaterRemove],
|
||||
"Confirm removal of filtered subset (combined: all matches)",
|
||||
@@ -1023,7 +1028,7 @@ mod tests {
|
||||
Some(Action::InfoDescription),
|
||||
);
|
||||
let bindings = configured(
|
||||
"[keys.video.watch_later]\nsave = 'alt+w'\n[keys.view.watch_later]\nbrowse = 'shift+x'\nfilter = 'ctrl+f'\nremove = []\n",
|
||||
"[keys.video.watch_later]\nsave = 'alt+w'\nremove = []\n[keys.view.watch_later]\nbrowse = 'shift+x'\nfilter = 'ctrl+f'\nremove = []\n",
|
||||
)
|
||||
.unwrap();
|
||||
for context in ALL {
|
||||
@@ -1083,7 +1088,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
let bindings = configured(
|
||||
"[keys.video.saved]\nsave = 'alt+v'\nremove = []\n[keys.view.saved]\nbrowse = 'shift+x'\n",
|
||||
"[keys.video.watch_later]\nremove = []\n[keys.video.saved]\nsave = 'alt+v'\nremove = []\n[keys.view.saved]\nbrowse = 'shift+x'\n",
|
||||
)
|
||||
.unwrap();
|
||||
for context in ALL {
|
||||
|
||||
+100
-13
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user