OK OK, neat trick, clone on &A/RC<T> gives back A/RC<T>.
This commit is contained in:
parent
41a836dd7b
commit
cbe50c9163
@ -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: >k::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: >k::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());
|
||||||
|
|||||||
@ -55,7 +55,7 @@ fn build_ui(app: >k::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);
|
||||||
|
|||||||
@ -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: >k::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: >k::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();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user