mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 19:57:25 +01:00
Save recording from editor
This commit is contained in:
parent
bd3a61c4bf
commit
5a95db69fe
3 changed files with 41 additions and 1 deletions
|
|
@ -54,7 +54,7 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="comment_button">
|
||||
<object class="GtkEntry" id="comment_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
</object>
|
||||
|
|
|
|||
|
|
@ -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!");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue