From d2ba34af1c3edce985e44e7938984ff80e29775d Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Wed, 13 Jan 2021 20:16:44 +0100 Subject: [PATCH] Add done button to medium editor --- musicus/res/ui/medium_editor.ui | 32 +++++++++++++++++++++++++++++ musicus/src/import/medium_editor.rs | 26 +++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/musicus/res/ui/medium_editor.ui b/musicus/res/ui/medium_editor.ui index 615b733..5c78ba8 100644 --- a/musicus/res/ui/medium_editor.ui +++ b/musicus/res/ui/medium_editor.ui @@ -36,6 +36,38 @@ end + + + True + True + False + + + True + crossfade + + + True + True + + + + + True + object-select-symbolic + + + + + + + + end + 0 + + diff --git a/musicus/src/import/medium_editor.rs b/musicus/src/import/medium_editor.rs index 57cec91..de78a43 100644 --- a/musicus/src/import/medium_editor.rs +++ b/musicus/src/import/medium_editor.rs @@ -4,6 +4,7 @@ use crate::backend::Backend; use crate::widgets::{Navigator, NavigatorScreen}; use crate::widgets::new_list::List; use glib::clone; +use glib::prelude::*; use gtk::prelude::*; use gtk_macros::get_widget; use libhandy::prelude::*; @@ -15,6 +16,9 @@ pub struct MediumEditor { backend: Rc, source: Rc, widget: gtk::Box, + done_button: gtk::Button, + done_stack: gtk::Stack, + done: gtk::Image, track_set_list: List, track_sets: RefCell>, navigator: RefCell>>, @@ -30,6 +34,9 @@ impl MediumEditor { get_widget!(builder, gtk::Box, widget); get_widget!(builder, gtk::Button, back_button); get_widget!(builder, gtk::Button, add_button); + get_widget!(builder, gtk::Button, done_button); + get_widget!(builder, gtk::Stack, done_stack); + get_widget!(builder, gtk::Image, done); get_widget!(builder, gtk::Frame, frame); let list = List::new("No recordings added."); @@ -39,6 +46,9 @@ impl MediumEditor { backend, source: Rc::new(source), widget, + done_button, + done_stack, + done, track_set_list: list, track_sets: RefCell::new(Vec::new()), navigator: RefCell::new(None), @@ -99,6 +109,22 @@ impl MediumEditor { row.upcast() })); + // Start ripping the CD in the background. + let context = glib::MainContext::default(); + let clone = this.clone(); + context.spawn_local(async move { + match clone.source.rip().await { + Err(error) => { + // TODO: Present error. + println!("Failed to rip: {}", error); + }, + Ok(_) => { + clone.done_stack.set_visible_child(&clone.done); + clone.done_button.set_sensitive(true); + } + } + }); + this } }