mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 19:57:25 +01:00
database: Introduce single PersonOrEnsemble enum
This commit is contained in:
parent
15e5849730
commit
cec955eb9f
5 changed files with 118 additions and 143 deletions
|
|
@ -5,7 +5,8 @@ use adw::prelude::*;
|
|||
use gettextrs::gettext;
|
||||
use glib::clone;
|
||||
use gtk::prelude::*;
|
||||
use musicus_backend::db::{Ensemble, Instrument, Performance, Person};
|
||||
use log::error;
|
||||
use musicus_backend::db::{Ensemble, Instrument, Performance, Person, PersonOrEnsemble};
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
||||
|
|
@ -85,8 +86,14 @@ impl Screen<Option<Performance>, Performance> for PerformanceEditor {
|
|||
|
||||
this.editor.set_save_cb(clone!(@weak this => move || {
|
||||
let performance = Performance {
|
||||
person: this.person.borrow().clone(),
|
||||
ensemble: this.ensemble.borrow().clone(),
|
||||
performer: if let Some(person) = this.person.borrow().clone() {
|
||||
PersonOrEnsemble::Person(person)
|
||||
} else if let Some(ensemble) = this.ensemble.borrow().clone() {
|
||||
PersonOrEnsemble::Ensemble(ensemble)
|
||||
} else {
|
||||
error!("Tried to save performance without performer");
|
||||
return;
|
||||
},
|
||||
role: this.role.borrow().clone(),
|
||||
};
|
||||
|
||||
|
|
@ -133,13 +140,16 @@ impl Screen<Option<Performance>, Performance> for PerformanceEditor {
|
|||
// Initialize
|
||||
|
||||
if let Some(performance) = performance {
|
||||
if let Some(person) = performance.person {
|
||||
this.show_person(Some(&person));
|
||||
this.person.replace(Some(person));
|
||||
} else if let Some(ensemble) = performance.ensemble {
|
||||
this.show_ensemble(Some(&ensemble));
|
||||
this.ensemble.replace(Some(ensemble));
|
||||
}
|
||||
match performance.performer {
|
||||
PersonOrEnsemble::Person(person) => {
|
||||
this.show_person(Some(&person));
|
||||
this.person.replace(Some(person));
|
||||
}
|
||||
PersonOrEnsemble::Ensemble(ensemble) => {
|
||||
this.show_ensemble(Some(&ensemble));
|
||||
this.ensemble.replace(Some(ensemble));
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(role) = performance.role {
|
||||
this.show_role(Some(&role));
|
||||
|
|
|
|||
|
|
@ -9,27 +9,10 @@ use gettextrs::gettext;
|
|||
use glib::clone;
|
||||
use gtk::prelude::*;
|
||||
use gtk_macros::get_widget;
|
||||
use musicus_backend::db::{Ensemble, Person};
|
||||
use musicus_backend::db::PersonOrEnsemble;
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
||||
/// Either a person or an ensemble to be shown in the list.
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum PersonOrEnsemble {
|
||||
Person(Person),
|
||||
Ensemble(Ensemble),
|
||||
}
|
||||
|
||||
impl PersonOrEnsemble {
|
||||
/// Get a short textual representation of the item.
|
||||
pub fn get_title(&self) -> String {
|
||||
match self {
|
||||
PersonOrEnsemble::Person(person) => person.name_lf(),
|
||||
PersonOrEnsemble::Ensemble(ensemble) => ensemble.name.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The main screen of the app, once it's set up and finished loading. The screen assumes that the
|
||||
/// music library and the player are available and initialized.
|
||||
pub struct MainScreen {
|
||||
|
|
|
|||
|
|
@ -5,26 +5,9 @@ use adw::prelude::*;
|
|||
use gettextrs::gettext;
|
||||
use glib::clone;
|
||||
use gtk::prelude::*;
|
||||
use musicus_backend::db::{Ensemble, Medium, Person};
|
||||
use musicus_backend::db::{Medium, PersonOrEnsemble};
|
||||
use std::rc::Rc;
|
||||
|
||||
/// Either a person or an ensemble to be shown in the list.
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum PersonOrEnsemble {
|
||||
Person(Person),
|
||||
Ensemble(Ensemble),
|
||||
}
|
||||
|
||||
impl PersonOrEnsemble {
|
||||
/// Get a short textual representation of the item.
|
||||
pub fn get_title(&self) -> String {
|
||||
match self {
|
||||
PersonOrEnsemble::Person(person) => person.name_lf(),
|
||||
PersonOrEnsemble::Ensemble(ensemble) => ensemble.name.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A screen for selecting a medium.
|
||||
pub struct MediumSelector {
|
||||
handle: NavigationHandle<Medium>,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue