diff --git a/Cargo.lock b/Cargo.lock index 33262a1..191e793 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1280,7 +1280,7 @@ dependencies = [ [[package]] name = "flex" -version = "0.18.0" +version = "0.19.0" dependencies = [ "anyhow", "chrono", @@ -1304,7 +1304,7 @@ dependencies = [ [[package]] name = "flex-anilist" -version = "0.18.0" +version = "0.19.0" dependencies = [ "flex-plugin", "ureq", @@ -1312,7 +1312,7 @@ dependencies = [ [[package]] name = "flex-core" -version = "0.18.0" +version = "0.19.0" dependencies = [ "anyhow", "directories", @@ -1337,7 +1337,7 @@ dependencies = [ [[package]] name = "flex-lotus-lamp" -version = "0.18.0" +version = "0.19.0" dependencies = [ "flex-plugin", "lotus-lamp", @@ -1346,7 +1346,7 @@ dependencies = [ [[package]] name = "flex-plugin" -version = "0.18.0" +version = "0.19.0" dependencies = [ "serde", "serde_json", @@ -1354,7 +1354,7 @@ dependencies = [ [[package]] name = "flex-trakt" -version = "0.18.0" +version = "0.19.0" dependencies = [ "flex-plugin", "ureq", @@ -1362,7 +1362,7 @@ dependencies = [ [[package]] name = "flex-web" -version = "0.18.0" +version = "0.19.0" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 2b6d4f3..87cbd6a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ default-members = ["crates/*"] [workspace.package] edition = "2024" -version = "0.18.0" +version = "0.19.0" license = "MIT" [profile.release] diff --git a/README.md b/README.md index 6543737..0511c2d 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,11 @@ date, since YouTube changes things a lot and a newer yt-dlp is usually the fix. Add channels under Channels by pasting a link or an @handle, or import your existing subscriptions from Google Takeout (`subscriptions.csv`), FreeTube, NewPipe or an OPML -file. New videos are picked up from each channel's feed every half an hour, so there's no -API key to set up. Search works too, either on the YouTube page or from the main search +file. New videos are picked up from each channel's feed every half an hour (or press +Refresh), so there's no API key to set up. The Showing button switches between all your +channels, just the focused ones, and *for you*: suggestions made from the related videos +of what you've played lately and your subscriptions' new videos, leaving out anything +you've watched. Search works too, either on the YouTube page or from the main search (pick the YouTube scope at the top of the results). History lists the videos you've played, most recent first. diff --git a/crates/flex-app/Cargo.toml b/crates/flex-app/Cargo.toml index 48512e6..311c843 100644 --- a/crates/flex-app/Cargo.toml +++ b/crates/flex-app/Cargo.toml @@ -9,9 +9,9 @@ anyhow = "1.0.104" chrono = { version = "0.4.45", default-features = false, features = ["clock"] } eframe = { version = "0.36", default-features = false, features = ["glow", "default_fonts"] } env_logger = "0.11.11" -flex-core = { version = "0.18.0", path = "../flex-core" } -flex-plugin = { version = "0.18.0", path = "../flex-plugin" } -flex-web = { version = "0.18.0", path = "../flex-web" } +flex-core = { version = "0.19.0", path = "../flex-core" } +flex-plugin = { version = "0.19.0", path = "../flex-plugin" } +flex-web = { version = "0.19.0", path = "../flex-web" } image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] } libloading = "0.9" log = "0.4.34" diff --git a/crates/flex-app/src/screens/search.rs b/crates/flex-app/src/screens/search.rs index 3f269b2..384fe96 100644 --- a/crates/flex-app/src/screens/search.rs +++ b/crates/flex-app/src/screens/search.rs @@ -87,7 +87,7 @@ impl SearchView { fn open(&self, sh: &mut Shared, i: usize) -> Nav { match &self.results[i].target { - Target::Show { library_id, show_id } => Nav::push(TitlePage::new(*library_id, *show_id)), + Target::Show { library_id, show_id, .. } => Nav::push(TitlePage::new(*library_id, *show_id)), Target::Episode { library_id, file_id } => Nav::push(EpisodePage::new(*library_id, *file_id)), Target::Folder { library_id, rel } => open_folder(sh, *library_id, rel), Target::File { library_id, file_id } => open_file(sh, *library_id, *file_id), @@ -129,7 +129,7 @@ impl Screen for SearchView { if press.is(Action::Menu) { let Some(item) = self.results.get(self.list.selected) else { return Nav::None }; let target = match &item.target { - Target::Show { library_id, show_id } => return Nav::push(super::shows::ShowOptions::new(*library_id, *show_id)), + Target::Show { library_id, show_id, .. } => return Nav::push(super::shows::ShowOptions::new(*library_id, *show_id)), Target::Folder { library_id, rel } => options::Target::Folder { library_id: *library_id, rel: rel.clone() }, Target::File { library_id, file_id } | Target::Episode { library_id, file_id } => { options::Target::File { library_id: *library_id, file_id: *file_id } @@ -193,8 +193,13 @@ impl Screen for SearchView { .iter() .map(|item| { let icon = match item.target { - Target::Show { .. } | Target::Folder { .. } | Target::Album { .. } | Target::Artist { .. } => Icon::Folder, - Target::Episode { .. } | Target::File { .. } | Target::Track { .. } => Icon::Video, + Target::Show { series: true, .. } => Icon::Tv, + Target::Show { series: false, .. } => Icon::Film, + Target::Folder { .. } => Icon::Folder, + Target::Album { .. } => Icon::Album, + Target::Artist { .. } => Icon::Person, + Target::Track { .. } => Icon::Note, + Target::Episode { .. } | Target::File { .. } => Icon::Video, }; Row::new(icon, item.title.as_str()).detail(item.context.as_str()) }) diff --git a/crates/flex-app/src/screens/youtube.rs b/crates/flex-app/src/screens/youtube.rs index e7ff625..600bccb 100644 --- a/crates/flex-app/src/screens/youtube.rs +++ b/crates/flex-app/src/screens/youtube.rs @@ -227,17 +227,30 @@ fn video_input(input: GridInput, items: &[VideoItem]) -> Option