// use std::{ // sync::{Arc, RwLock}, // error::Error, // }; // use discord_rpc_client::Client; // use listenbrainz::ListenBrainz; // use uuid::Uuid; // use crate::{ // config::config::Config, music_controller::controller::{Controller, QueueCmd, QueueResponse}, music_storage::library::{MusicLibrary, Song, Tag} // }; // use super::controller::DatabaseResponse; // impl Controller { // pub fn listenbrainz_authenticate(&mut self) -> Result> { // let config = &self.config.read().unwrap(); // let mut client = ListenBrainz::new(); // let lbz_token = match &config.connections.listenbrainz_token { // Some(token) => token, // None => todo!("No ListenBrainz token in config") // }; // if !client.is_authenticated() { // client.authenticate(lbz_token)?; // } // Ok(client) // } // pub fn lbz_scrobble(&self, client: ListenBrainz, uuid: Uuid) -> Result<(), Box> { // let config = &self.config.read().unwrap(); // &self.db_mail.send(super::controller::DatabaseCmd::QueryUuid(uuid)); // let res = &self.db_mail.recv()?; // let song = match res { // DatabaseResponse::Song(song) => song, // _ => todo!() // }; // let unknown = &"unknown".to_string(); // let artist = song.get_tag(&Tag::Artist).unwrap_or(unknown); // let track = song.get_tag(&Tag::Title).unwrap_or(unknown); // let release = song.get_tag(&Tag::Album).map(|rel| rel.as_str()); // client.listen(artist, track, release)?; // Ok(()) // } // pub fn lbz_now_playing(&self, client: ListenBrainz, uuid: Uuid) -> Result<(), Box> { // let config = &self.config.read().unwrap(); // &self.db_mail.send(super::controller::DatabaseCmd::QueryUuid(uuid)); // let res = &self.db_mail.recv()?; // let song = match res { // DatabaseResponse::Song(song) => song, // _ => todo!() // }; // let unknown = &"unknown".to_string(); // let artist = song.get_tag(&Tag::Artist).unwrap_or(unknown); // let track = song.get_tag(&Tag::Title).unwrap_or(unknown); // let release = song.get_tag(&Tag::Album).map(|rel| rel.as_str()); // client.listen(artist, track, release)?; // Ok(()) // } // pub fn discord_song_change(client: &mut Client,song: Song) { // client.set_activity(|a| { // a.state(format!("Listening to {}", song.get_tag(&Tag::Title).unwrap())) // .into() // }); // } // } // #[cfg(test)] // mod test_super { // use std::{thread::sleep, time::Duration}; // use super::*; // use crate::config::config::tests::read_config_lib; // #[test] // fn listenbrainz() { // let mut c = Controller::start(".\\test-config\\config_test.json").unwrap(); // let client = c.listenbrainz_authenticate().unwrap(); // c.q_new().unwrap(); // c.queue_mail[0].send(QueueCmd::SetVolume(0.04)).unwrap(); // let songs = c.lib_get_songs(); // c.q_enqueue(0, songs[1].location.to_owned()).unwrap(); // c.q_play(0).unwrap(); // sleep(Duration::from_secs(100)); // c.lbz_scrobble(client, songs[1].uuid).unwrap(); // } // }