From f75c6fbbb8be1a1bc8c6590a3f99f333f6ebe179 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Sun, 10 Feb 2019 21:00:12 +0100 Subject: [PATCH] wrap queue in arc> as it needs to mutable across threads --- src/main.rs | 5 ++--- src/ui/search.rs | 14 +++++++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index 43801a1..699c905 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,8 +21,7 @@ use std::io::prelude::*; use std::path::PathBuf; use std::process; use std::sync::Arc; -use std::rc::Rc; -use std::cell::RefCell; +use std::sync::Mutex; use cursive::views::*; use cursive::Cursive; @@ -79,7 +78,7 @@ fn main() { }; let cfg = config::load(path.to_str().unwrap()).expect("could not load configuration file"); - let queue = Rc::new(RefCell::new(queue::Queue::new())); + let queue = Arc::new(Mutex::new(queue::Queue::new())); let spotify = Arc::new(spotify::Spotify::new( cfg.username, diff --git a/src/ui/search.rs b/src/ui/search.rs index a5e1989..c8cec96 100644 --- a/src/ui/search.rs +++ b/src/ui/search.rs @@ -4,8 +4,7 @@ use cursive::traits::Identifiable; use cursive::views::*; use cursive::Cursive; use std::sync::Arc; -use std::rc::Rc; -use std::cell::RefCell; +use std::sync::Mutex; use librespot::core::spotify_id::SpotifyId; @@ -14,11 +13,11 @@ use queue::Queue; pub struct SearchView { pub view: Panel, - queue: Rc>, + queue: Arc>, } impl SearchView { - fn search_handler(s: &mut Cursive, input: &str, spotify: Arc, queue: Rc>) { + fn search_handler(s: &mut Cursive, input: &str, spotify: Arc, queue: Arc>) { let mut results: ViewRef = s.find_id("search_results").unwrap(); let tracks = spotify.search(input, 50, 0); @@ -37,10 +36,11 @@ impl SearchView { s.load(trackid); s.play(); }); - let p = queue.clone(); + let queue = queue.clone(); let button_queue = OnEventView::new(button) .on_event(' ', move |_cursive| { - p.borrow_mut().enqueue(track.clone()); + let mut queue = queue.lock().unwrap(); + queue.enqueue(track.clone()); debug!("Added to queue: {}", track.name); }); results.add_child("", button_queue); @@ -48,7 +48,7 @@ impl SearchView { } } - pub fn new(spotify: Arc, queue: Rc>) -> SearchView { + pub fn new(spotify: Arc, queue: Arc>) -> SearchView { let spotify_ref = spotify.clone(); let queue_ref = queue.clone(); let searchfield = EditView::new()