Save recording from editor

This commit is contained in:
Elias Projahn 2020-10-09 23:27:01 +02:00
parent bd3a61c4bf
commit 5a95db69fe
3 changed files with 41 additions and 1 deletions

View file

@ -16,6 +16,7 @@ enum BackendAction {
GetEnsemble(i64, Sender<Option<Ensemble>>),
DeleteEnsemble(i64, Sender<Result<(), String>>),
GetEnsembles(Sender<Vec<Ensemble>>),
UpdateRecording(RecordingInsertion, Sender<Result<(), String>>),
}
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<F: Fn(Result<(), String>) -> () + 'static>(
&self,
recording: RecordingInsertion,
callback: F,
) {
let (sender, receiver) =
glib::MainContext::channel::<Result<(), String>>(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!");
}
}

View file

@ -19,6 +19,7 @@ where
save_button: gtk::Button,
work_label: gtk::Label,
work: RefCell<Option<WorkDescription>>,
comment_entry: gtk::Entry,
performers: RefCell<Vec<PerformanceDescription>>,
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();
}));