From 2f281d7d112cdfbfc69b15473abeef32ef32e66e Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Tue, 23 Mar 2021 17:16:20 +0100 Subject: [PATCH] Search for matching mediums online or locally --- musicus/res/ui/import_screen.ui | 23 +++++++++++++++++------ musicus/src/import/import_screen.rs | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/musicus/res/ui/import_screen.ui b/musicus/res/ui/import_screen.ui index 8310f5b..1079912 100644 --- a/musicus/res/ui/import_screen.ui +++ b/musicus/res/ui/import_screen.ui @@ -32,14 +32,25 @@ 6 vertical - - start + 12 6 - Matching metadata - - - + + + true + start + Matching metadata + + + + + + + + Use the Musicus server + True + + diff --git a/musicus/src/import/import_screen.rs b/musicus/src/import/import_screen.rs index 66c61c0..1b7ae4a 100644 --- a/musicus/src/import/import_screen.rs +++ b/musicus/src/import/import_screen.rs @@ -7,6 +7,7 @@ use gtk::prelude::*; use gtk_macros::get_widget; use libadwaita::prelude::*; use log::debug; +use musicus_backend::Error; use musicus_backend::db::Medium; use musicus_backend::import::ImportSession; use std::rc::Rc; @@ -17,6 +18,7 @@ pub struct ImportScreen { handle: NavigationHandle<()>, session: Arc, widget: gtk::Box, + server_check_button: gtk::CheckButton, matching_stack: gtk::Stack, error_row: libadwaita::ActionRow, matching_list: gtk::ListBox, @@ -29,7 +31,13 @@ impl ImportScreen { let this = self; spawn!(@clone this, async move { - match this.handle.backend.db().get_mediums_by_source_id(this.session.source_id()).await { + let mediums: Result, Error> = if this.server_check_button.get_active() { + this.handle.backend.cl().get_mediums_by_discid(this.session.source_id()).await.map_err(|err| err.into()) + } else { + this.handle.backend.db().get_mediums_by_source_id(this.session.source_id()).await.map_err(|err| err.into()) + }; + + match mediums { Ok(mediums) => { if !mediums.is_empty() { this.show_matches(mediums); @@ -99,6 +107,7 @@ impl Screen, ()> for ImportScreen { get_widget!(builder, gtk::Stack, matching_stack); get_widget!(builder, gtk::Button, try_again_button); get_widget!(builder, libadwaita::ActionRow, error_row); + get_widget!(builder, gtk::CheckButton, server_check_button); get_widget!(builder, gtk::ListBox, matching_list); get_widget!(builder, gtk::Button, select_button); get_widget!(builder, gtk::Button, add_button); @@ -107,6 +116,7 @@ impl Screen, ()> for ImportScreen { handle, session, widget, + server_check_button, matching_stack, error_row, matching_list, @@ -118,6 +128,10 @@ impl Screen, ()> for ImportScreen { this.handle.pop(None); })); + this.server_check_button.connect_toggled(clone!(@weak this => move |_| { + this.load_matches(); + })); + try_again_button.connect_clicked(clone!(@weak this => move |_| { this.load_matches(); }));