From ab5c65d64d02855807e62986868f71b60b499490 Mon Sep 17 00:00:00 2001
From: MrDulfin <mrdulfin@mrdulfin.com>
Date: Sun, 29 Sep 2024 23:19:03 -0400
Subject: [PATCH] added Controller Handle and Input structs

---
 src/music_controller/controller.rs | 43 +++++++++++++++++++++---------
 1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/music_controller/controller.rs b/src/music_controller/controller.rs
index 12ce0fa..cf5ce9a 100644
--- a/src/music_controller/controller.rs
+++ b/src/music_controller/controller.rs
@@ -108,16 +108,31 @@ pub enum QueueResponse {
     Item(QueueItem<QueueSong, QueueAlbum>),
 }
 
+
+pub struct ControllerInput<'a> {
+    player_mail: (
+        MailMan<PlayerCommand, PlayerResponse>,
+        MailMan<PlayerResponse, PlayerCommand>,
+    ),
+    lib_mail: MailMan<LibraryResponse, LibraryCommand>,
+    library: &'a mut MusicLibrary,
+    config: Arc<RwLock<Config>>,
+}
+
+pub struct ControllerHandle {
+    lib_mail: MailMan<LibraryCommand, LibraryResponse>,
+    player_mail: MailMan<PlayerCommand, PlayerResponse>,
+}
+
 #[allow(unused_variables)]
 impl<'c, P: Player + Send + Sync> Controller<'c, P> {
     pub async fn start(
-        player_mail: (
-            MailMan<PlayerCommand, PlayerResponse>,
-            MailMan<PlayerResponse, PlayerCommand>,
-        ),
-        lib_mail: MailMan<LibraryResponse, LibraryCommand>,
-        mut library: MusicLibrary,
-        config: Arc<RwLock<Config>>,
+        ControllerInput {
+            player_mail,
+            lib_mail,
+            library,
+            config
+        }: ControllerInput<'c>
     ) -> Result<(), Box<dyn Error>>
     where
         P: Player,
@@ -171,7 +186,7 @@ impl<'c, P: Player + Send + Sync> Controller<'c, P> {
                             .await;
                         scope
                             .spawn(async {
-                                Controller::<P>::inner_library_loop(inner_lib_mail.1, &mut library)
+                                Controller::<P>::inner_library_loop(inner_lib_mail.1, library)
                                     .await
                                     .unwrap()
                             })
@@ -420,7 +435,7 @@ mod test_super {
         let a = spawn(move || {
             futures::executor::block_on(async {
                 let config = Config::read_file(PathBuf::from(std::env!("CONFIG-PATH"))).unwrap();
-                let library = {
+                let mut library = {
                     MusicLibrary::init(
                         config.libraries.get_default().unwrap().path.clone(),
                         config.libraries.get_default().unwrap().uuid,
@@ -429,10 +444,12 @@ mod test_super {
                 };
 
                 Controller::<GStreamer>::start(
-                    player_mail,
-                    lib_mail.1,
-                    library,
-                    Arc::new(RwLock::new(config)),
+                    crate::music_controller::controller::ControllerInput {
+                        player_mail,
+                        lib_mail: lib_mail.1,
+                        library: &mut library,
+                        config: Arc::new(RwLock::new(config)),
+                    }
                 )
                 .await
                 .unwrap();