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 } }