mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 11:47:25 +01:00
Reset query after library changes
This commit is contained in:
parent
d7401195b3
commit
510061b3b0
2 changed files with 67 additions and 3 deletions
|
|
@ -102,6 +102,11 @@ mod imp {
|
||||||
obj.query(&entry.query());
|
obj.query(&entry.query());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let obj = self.obj().to_owned();
|
||||||
|
self.library.get().unwrap().connect_changed(move |_| {
|
||||||
|
obj.imp().search_entry.reset();
|
||||||
|
});
|
||||||
|
|
||||||
self.player
|
self.player
|
||||||
.get()
|
.get()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,11 @@ use crate::{
|
||||||
program::Program,
|
program::Program,
|
||||||
};
|
};
|
||||||
|
|
||||||
use adw::gtk::{glib, glib::Properties, prelude::*, subclass::prelude::*};
|
use adw::{
|
||||||
|
glib::{self, subclass::Signal, Properties},
|
||||||
|
prelude::*,
|
||||||
|
subclass::prelude::*,
|
||||||
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use chrono::prelude::*;
|
use chrono::prelude::*;
|
||||||
use diesel::{
|
use diesel::{
|
||||||
|
|
@ -13,6 +17,7 @@ use diesel::{
|
||||||
sql_types::BigInt,
|
sql_types::BigInt,
|
||||||
QueryDsl, SqliteConnection,
|
QueryDsl, SqliteConnection,
|
||||||
};
|
};
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
cell::{OnceCell, RefCell},
|
cell::{OnceCell, RefCell},
|
||||||
|
|
@ -43,6 +48,13 @@ mod imp {
|
||||||
|
|
||||||
#[glib::derived_properties]
|
#[glib::derived_properties]
|
||||||
impl ObjectImpl for MusicusLibrary {
|
impl ObjectImpl for MusicusLibrary {
|
||||||
|
fn signals() -> &'static [Signal] {
|
||||||
|
static SIGNALS: Lazy<Vec<Signal>> =
|
||||||
|
Lazy::new(|| vec![Signal::builder("changed").build()]);
|
||||||
|
|
||||||
|
SIGNALS.as_ref()
|
||||||
|
}
|
||||||
|
|
||||||
fn constructed(&self) {
|
fn constructed(&self) {
|
||||||
self.parent_constructed();
|
self.parent_constructed();
|
||||||
|
|
||||||
|
|
@ -745,6 +757,8 @@ impl MusicusLibrary {
|
||||||
.values(&person)
|
.values(&person)
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(person)
|
Ok(person)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -763,6 +777,8 @@ impl MusicusLibrary {
|
||||||
))
|
))
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -785,6 +801,8 @@ impl MusicusLibrary {
|
||||||
.values(&instrument)
|
.values(&instrument)
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(instrument)
|
Ok(instrument)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -803,6 +821,8 @@ impl MusicusLibrary {
|
||||||
))
|
))
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -824,6 +844,8 @@ impl MusicusLibrary {
|
||||||
.values(&role)
|
.values(&role)
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(role)
|
Ok(role)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -842,6 +864,8 @@ impl MusicusLibrary {
|
||||||
))
|
))
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -855,7 +879,12 @@ impl MusicusLibrary {
|
||||||
let mut binding = self.imp().connection.borrow_mut();
|
let mut binding = self.imp().connection.borrow_mut();
|
||||||
let connection = &mut *binding.as_mut().unwrap();
|
let connection = &mut *binding.as_mut().unwrap();
|
||||||
|
|
||||||
self.create_work_priv(connection, name, parts, persons, instruments, None, None)
|
let work =
|
||||||
|
self.create_work_priv(connection, name, parts, persons, instruments, None, None)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
|
Ok(work)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_work_priv(
|
fn create_work_priv(
|
||||||
|
|
@ -948,7 +977,11 @@ impl MusicusLibrary {
|
||||||
instruments,
|
instruments,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
)
|
)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_work_priv(
|
fn update_work_priv(
|
||||||
|
|
@ -1074,6 +1107,8 @@ impl MusicusLibrary {
|
||||||
|
|
||||||
let ensemble = Ensemble::from_table(ensemble_data, connection)?;
|
let ensemble = Ensemble::from_table(ensemble_data, connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(ensemble)
|
Ok(ensemble)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1094,6 +1129,8 @@ impl MusicusLibrary {
|
||||||
|
|
||||||
// TODO: Support updating persons.
|
// TODO: Support updating persons.
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1153,6 +1190,8 @@ impl MusicusLibrary {
|
||||||
|
|
||||||
let recording = Recording::from_table(recording_data, connection)?;
|
let recording = Recording::from_table(recording_data, connection)?;
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(recording)
|
Ok(recording)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1214,8 +1253,28 @@ impl MusicusLibrary {
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.changed();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> glib::SignalHandlerId {
|
||||||
|
self.connect_local("changed", true, move |values| {
|
||||||
|
let obj = values[0].get::<Self>().unwrap();
|
||||||
|
f(&obj);
|
||||||
|
None
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn changed(&self) {
|
||||||
|
let obj = self.clone();
|
||||||
|
// Note: This is a dirty hack to let the calling function return before
|
||||||
|
// signal handlers are called. This is neccessary because RefCells
|
||||||
|
// may still be borrowed otherwise.
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
|
obj.emit_by_name::<()>("changed", &[]);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default, Debug)]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue