OK OK, neat trick, clone on &A/RC<T> gives back A/RC<T>.

This commit is contained in:
Jordan Petridis 2017-10-22 04:32:03 +03:00
parent 41a836dd7b
commit cbe50c9163
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
3 changed files with 10 additions and 10 deletions

View File

@ -10,7 +10,7 @@ use utils;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
pub fn get_headerbar(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack) -> gtk::HeaderBar { pub fn get_headerbar(db: Arc<Mutex<SqliteConnection>>, stack: &gtk::Stack) -> gtk::HeaderBar {
let builder = include_str!("../gtk/headerbar.ui"); let builder = include_str!("../gtk/headerbar.ui");
let builder = gtk::Builder::new_from_string(builder); let builder = gtk::Builder::new_from_string(builder);
@ -34,7 +34,7 @@ pub fn get_headerbar(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack) -> gtk
add_button.connect_clicked(move |_| { add_button.connect_clicked(move |_| {
let url = new_url.get_text().unwrap_or_default(); let url = new_url.get_text().unwrap_or_default();
on_add_bttn_clicked(db_clone.clone(), stack_clone.clone(), &url); on_add_bttn_clicked(db_clone.clone(), &stack_clone, &url);
// TODO: lock the button instead of hiding and add notification of feed added. // TODO: lock the button instead of hiding and add notification of feed added.
// TODO: map the spinner // TODO: map the spinner
@ -55,13 +55,13 @@ pub fn get_headerbar(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack) -> gtk
let db_clone = db.clone(); let db_clone = db.clone();
// FIXME: There appears to be a memmory leak here. // FIXME: There appears to be a memmory leak here.
refresh_button.connect_clicked(move |_| { refresh_button.connect_clicked(move |_| {
utils::refresh_db(db_clone.clone(), stack_clone.clone()); utils::refresh_db(db_clone.clone(), &stack_clone);
}); });
header header
} }
fn on_add_bttn_clicked(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack, url: &str) { fn on_add_bttn_clicked(db: Arc<Mutex<SqliteConnection>>, stack: &gtk::Stack, url: &str) {
let source = { let source = {
let tempdb = db.lock().unwrap(); let tempdb = db.lock().unwrap();
index_feed::insert_return_source(&tempdb, &url) index_feed::insert_return_source(&tempdb, &url)
@ -70,7 +70,7 @@ fn on_add_bttn_clicked(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack, url:
if let Ok(mut s) = source { if let Ok(mut s) = source {
// update the db // update the db
utils::refresh_feed(db.clone(), stack.clone(), &mut s); utils::refresh_feed(db.clone(), &stack, &mut s);
} else { } else {
error!("Expected Error, feed probably already exists."); error!("Expected Error, feed probably already exists.");
error!("Error: {:?}", source.unwrap_err()); error!("Error: {:?}", source.unwrap_err());

View File

@ -55,7 +55,7 @@ fn build_ui(app: &gtk::Application) {
}); });
// Get the headerbar // Get the headerbar
let header = headerbar::get_headerbar(db.clone(), stack.clone()); let header = headerbar::get_headerbar(db.clone(), &stack);
// TODO: add delay, cause else theres lock contention for the db obj. // TODO: add delay, cause else theres lock contention for the db obj.
// utils::refresh_db(db.clone(), stack.clone()); // utils::refresh_db(db.clone(), stack.clone());
window.set_titlebar(&header); window.set_titlebar(&header);

View File

@ -24,14 +24,14 @@ thread_local!(
gtk::Stack, gtk::Stack,
Receiver<bool>)>> = RefCell::new(None)); Receiver<bool>)>> = RefCell::new(None));
pub fn refresh_db(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack) { pub fn refresh_db(db: Arc<Mutex<SqliteConnection>>, stack: &gtk::Stack) {
// Create a async channel. // Create a async channel.
let (sender, receiver) = channel(); let (sender, receiver) = channel();
let db_clone = db.clone(); let db_clone = db.clone();
// Pass the desired arguments into the Local Thread Storage. // Pass the desired arguments into the Local Thread Storage.
GLOBAL.with(move |global| { GLOBAL.with(move |global| {
*global.borrow_mut() = Some((db_clone, stack, receiver)); *global.borrow_mut() = Some((db_clone, stack.clone(), receiver));
}); });
// The implementation of how this is done is probably terrible but it works!. // The implementation of how this is done is probably terrible but it works!.
@ -50,12 +50,12 @@ pub fn refresh_db(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack) {
}); });
} }
pub fn refresh_feed(db: Arc<Mutex<SqliteConnection>>, stack: gtk::Stack, source: &mut Source) { pub fn refresh_feed(db: Arc<Mutex<SqliteConnection>>, stack: &gtk::Stack, source: &mut Source) {
let (sender, receiver) = channel(); let (sender, receiver) = channel();
let db_clone = db.clone(); let db_clone = db.clone();
GLOBAL.with(move |global| { GLOBAL.with(move |global| {
*global.borrow_mut() = Some((db_clone, stack, receiver)); *global.borrow_mut() = Some((db_clone, stack.clone(), receiver));
}); });
let db_clone = db.clone(); let db_clone = db.clone();