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` | Save the selected video to watch later (also works in previews) |
|
||||||
| `W` | Browse watch later for the current category, or the combined collection elsewhere |
|
| `W` | Browse watch later for the current category, or the combined collection elsewhere |
|
||||||
| `f` | In watch later, cycle All → Unwatched → Watched |
|
| `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 |
|
| `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` | Save the selected video to saved videos (also works in previews) |
|
||||||
| `V` | Browse saved videos for the current category, or the combined collection elsewhere |
|
| `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
|
### 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.
|
`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
|
### 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"];
|
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"];
|
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"];
|
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"];
|
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"];
|
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"];
|
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",
|
"Browse category watch later; combined elsewhere",
|
||||||
),
|
),
|
||||||
(&[WatchLaterFilter], "Cycle all / unwatched / watched"),
|
(&[WatchLaterFilter], "Cycle all / unwatched / watched"),
|
||||||
|
(
|
||||||
|
&[WatchLaterRemoveSelected],
|
||||||
|
"Remove the selected video (also in previews)",
|
||||||
|
),
|
||||||
(
|
(
|
||||||
&[WatchLaterRemove],
|
&[WatchLaterRemove],
|
||||||
"Confirm removal of filtered subset (combined: all matches)",
|
"Confirm removal of filtered subset (combined: all matches)",
|
||||||
@@ -1023,7 +1028,7 @@ mod tests {
|
|||||||
Some(Action::InfoDescription),
|
Some(Action::InfoDescription),
|
||||||
);
|
);
|
||||||
let bindings = configured(
|
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();
|
.unwrap();
|
||||||
for context in ALL {
|
for context in ALL {
|
||||||
@@ -1083,7 +1088,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let bindings = configured(
|
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();
|
.unwrap();
|
||||||
for context in ALL {
|
for context in ALL {
|
||||||
|
|||||||
+100
-13
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user