mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 11:47:25 +01:00
backend: New library update mechanism
This commit is contained in:
parent
274ba719a3
commit
3e2f73fc56
2 changed files with 17 additions and 3 deletions
|
|
@ -55,6 +55,12 @@ pub struct Backend {
|
|||
/// is guaranteed to be Some, when the state is set to BackendState::Ready.
|
||||
music_library_path: RefCell<Option<PathBuf>>,
|
||||
|
||||
/// The receiver to which library update notifications are sent.
|
||||
library_updated_receiver: RefCell<mpsc::Receiver<()>>,
|
||||
|
||||
/// The sender for sending library update notifications.
|
||||
library_updated_sender: RefCell<mpsc::Sender<()>>,
|
||||
|
||||
/// The database. This can be assumed to exist, when the state is set to BackendState::Ready.
|
||||
database: RefCell<Option<Rc<DbThread>>>,
|
||||
|
||||
|
|
@ -71,12 +77,15 @@ impl Backend {
|
|||
/// and call init() afterwards.
|
||||
pub fn new() -> Self {
|
||||
let (state_sender, state_stream) = mpsc::channel(1024);
|
||||
let (library_updated_sender, library_updated_receiver) = mpsc::channel(1024);
|
||||
|
||||
Backend {
|
||||
state_stream: RefCell::new(state_stream),
|
||||
state_sender: RefCell::new(state_sender),
|
||||
settings: gio::Settings::new("de.johrpan.musicus"),
|
||||
music_library_path: RefCell::new(None),
|
||||
library_updated_sender: RefCell::new(library_updated_sender),
|
||||
library_updated_receiver: RefCell::new(library_updated_receiver),
|
||||
database: RefCell::new(None),
|
||||
player: RefCell::new(None),
|
||||
client: Client::new(),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
use crate::{Backend, BackendState, Player, Result};
|
||||
use musicus_database::DbThread;
|
||||
use futures::prelude::*;
|
||||
use gio::prelude::*;
|
||||
use log::warn;
|
||||
use musicus_database::DbThread;
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
|
||||
|
|
@ -72,10 +73,14 @@ impl Backend {
|
|||
self.player.borrow().clone()
|
||||
}
|
||||
|
||||
/// Wait for the next library update.
|
||||
pub async fn library_update(&self) {
|
||||
self.library_updated_receiver.borrow_mut().next().await;
|
||||
}
|
||||
|
||||
/// Notify the frontend that the library was changed.
|
||||
pub fn library_changed(&self) {
|
||||
self.set_state(BackendState::Loading);
|
||||
self.set_state(BackendState::Ready);
|
||||
self.library_updated_sender.borrow_mut().try_send(()).unwrap();
|
||||
}
|
||||
|
||||
/// Get an interface to the player and panic if there is none.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue