From 5a95db69fe2fd5386df5693137767ddd4a70d406 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Fri, 9 Oct 2020 23:27:01 +0200 Subject: [PATCH] Save recording from editor --- res/ui/recording_editor.ui | 2 +- src/backend.rs | 25 +++++++++++++++++++++++++ src/dialogs/recording_editor.rs | 15 +++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/res/ui/recording_editor.ui b/res/ui/recording_editor.ui index 63f7d03..3a64b40 100644 --- a/res/ui/recording_editor.ui +++ b/res/ui/recording_editor.ui @@ -54,7 +54,7 @@ - + True True diff --git a/src/backend.rs b/src/backend.rs index 2b14230..3835b31 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -16,6 +16,7 @@ enum BackendAction { GetEnsemble(i64, Sender>), DeleteEnsemble(i64, Sender>), GetEnsembles(Sender>), + UpdateRecording(RecordingInsertion, Sender>), } use BackendAction::*; @@ -119,6 +120,12 @@ impl Backend { .send(ensembles) .expect("Failed to send result from database thread!"); } + UpdateRecording(recording, sender) => { + db.update_recording(recording); + sender + .send(Ok(())) + .expect("Failed to send result from database thread!"); + } } } }); @@ -346,4 +353,22 @@ impl Backend { .send(GetEnsembles(sender)) .expect("Failed to send action to database thread!"); } + + pub fn update_recording) -> () + 'static>( + &self, + recording: RecordingInsertion, + callback: F, + ) { + let (sender, receiver) = + glib::MainContext::channel::>(glib::PRIORITY_DEFAULT); + + receiver.attach(None, move |result| { + callback(result); + glib::Continue(true) + }); + + self.action_sender + .send(UpdateRecording(recording, sender)) + .expect("Failed to send action to database thread!"); + } } diff --git a/src/dialogs/recording_editor.rs b/src/dialogs/recording_editor.rs index 5f0d045..6775225 100644 --- a/src/dialogs/recording_editor.rs +++ b/src/dialogs/recording_editor.rs @@ -19,6 +19,7 @@ where save_button: gtk::Button, work_label: gtk::Label, work: RefCell>, + comment_entry: gtk::Entry, performers: RefCell>, performer_list: gtk::ListBox, } @@ -41,6 +42,7 @@ where get_widget!(builder, gtk::Button, save_button); get_widget!(builder, gtk::Button, work_button); get_widget!(builder, gtk::Label, work_label); + get_widget!(builder, gtk::Entry, comment_entry); get_widget!(builder, gtk::ListBox, performer_list); get_widget!(builder, gtk::Button, add_performer_button); get_widget!(builder, gtk::Button, remove_performer_button); @@ -61,6 +63,7 @@ where save_button: save_button, work_label: work_label, work: RefCell::new(work), + comment_entry: comment_entry, performers: RefCell::new(performers), performer_list: performer_list, }); @@ -72,6 +75,18 @@ where result .save_button .connect_clicked(clone!(@strong result => move |_| { + let recording = RecordingDescription { + id: result.id, + work: result.work.borrow().clone().expect("Tried to create recording without work!"), + comment: result.comment_entry.get_text().to_string(), + performances: result.performers.borrow().to_vec(), + }; + + result.backend.update_recording(recording.clone().into(), clone!(@strong result => move |_| { + result.window.close(); + (result.callback)(recording.clone()); + })); + result.window.close(); }));