Refactored empty view logic.
This commit is contained in:
parent
fe571df1d5
commit
f2476cde65
@ -183,10 +183,13 @@ mod tests {
|
||||
use hammond_data::{DL_DIR, HAMMOND_CACHE};
|
||||
use hammond_data::models::NewPodcast;
|
||||
|
||||
use std::fs;
|
||||
|
||||
#[test]
|
||||
fn test_get_dl_folder() {
|
||||
let foo_ = format!("{}/{}", DL_DIR.to_str().unwrap(), "foo");
|
||||
assert_eq!(get_download_folder("foo").unwrap(), foo_);
|
||||
let _ = fs::remove_dir_all(foo_);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@ -37,14 +37,8 @@ pub fn get_headerbar(db: &Database, stack: >k::Stack) -> gtk::HeaderBar {
|
||||
// TODO: make it a back arrow button, that will hide when appropriate,
|
||||
// and add a StackSwitcher when more views are added.
|
||||
home_button.connect_clicked(clone!(db, stack => move |_| {
|
||||
let vis = stack.get_visible_child_name().unwrap();
|
||||
if vis == "fb_parent" {
|
||||
// More conviniet way to reload podcasts_flowbox while trying out stuff.
|
||||
// Ideally, the functionality should be removed from final design.
|
||||
update_podcasts_view(&db, &stack);
|
||||
} else {
|
||||
stack.set_visible_child_name("fb_parent");
|
||||
}
|
||||
stack.set_visible_child_name("fb_parent");
|
||||
update_podcasts_view(&db, &stack);
|
||||
}));
|
||||
|
||||
// FIXME: There appears to be a memmory leak here.
|
||||
|
||||
@ -8,16 +8,19 @@ use hammond_data::index_feed::Database;
|
||||
|
||||
use widgets::podcast::*;
|
||||
|
||||
fn show_empty_view(stack: >k::Stack) {
|
||||
fn setup_empty_view(stack: >k::Stack) {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gtk/hammond/gtk/empty_view.ui");
|
||||
let view: gtk::Box = builder.get_object("empty_view").unwrap();
|
||||
stack.add_named(&view, "empty");
|
||||
}
|
||||
|
||||
fn show_empty_view(stack: >k::Stack) {
|
||||
stack.set_visible_child_name("empty");
|
||||
|
||||
info!("Empty view.");
|
||||
}
|
||||
|
||||
fn populate_flowbox(db: &Database, stack: >k::Stack, flowbox: >k::FlowBox) {
|
||||
fn populate_flowbox(db: &Database, flowbox: >k::FlowBox) {
|
||||
let podcasts = {
|
||||
let db = db.lock().unwrap();
|
||||
dbqueries::get_podcasts(&db)
|
||||
@ -28,10 +31,8 @@ fn populate_flowbox(db: &Database, stack: >k::Stack, flowbox: >k::FlowBox) {
|
||||
let f = create_flowbox_child(db, parent);
|
||||
flowbox.add(&f);
|
||||
});
|
||||
} else {
|
||||
show_empty_view(stack);
|
||||
flowbox.show_all();
|
||||
}
|
||||
flowbox.show_all();
|
||||
}
|
||||
|
||||
fn create_flowbox_child(db: &Database, pd: &Podcast) -> gtk::FlowBoxChild {
|
||||
@ -93,39 +94,47 @@ fn on_flowbox_child_activate(db: &Database, stack: >k::Stack, parent: &Podcast
|
||||
old.destroy();
|
||||
}
|
||||
|
||||
fn setup_podcasts_flowbox(db: &Database, stack: >k::Stack) {
|
||||
fn setup_podcasts_flowbox(db: &Database, stack: >k::Stack) -> gtk::FlowBox {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gtk/hammond/gtk/podcasts_view.ui");
|
||||
let fb_parent: gtk::Box = builder.get_object("fb_parent").unwrap();
|
||||
|
||||
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
|
||||
init_flowbox(db, stack, &flowbox);
|
||||
|
||||
stack.add_named(&fb_parent, "fb_parent");
|
||||
stack.set_visible_child(&fb_parent);
|
||||
|
||||
if flowbox.get_children().is_empty() {
|
||||
show_empty_view(stack);
|
||||
} else {
|
||||
stack.set_visible_child(&fb_parent);
|
||||
};
|
||||
|
||||
flowbox
|
||||
}
|
||||
|
||||
pub fn setup_stack(db: &Database) -> gtk::Stack {
|
||||
let stack = gtk::Stack::new();
|
||||
stack.set_transition_type(gtk::StackTransitionType::SlideLeftRight);
|
||||
setup_empty_view(&stack);
|
||||
setup_podcast_widget(&stack);
|
||||
setup_podcasts_flowbox(db, &stack);
|
||||
stack
|
||||
}
|
||||
|
||||
pub fn update_podcasts_view(db: &Database, stack: >k::Stack) {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gtk/hammond/gtk/podcasts_view.ui");
|
||||
let fb_parent: gtk::Box = builder.get_object("fb_parent").unwrap();
|
||||
|
||||
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
|
||||
init_flowbox(db, stack, &flowbox);
|
||||
|
||||
let old = stack.get_child_by_name("fb_parent").unwrap();
|
||||
let vis = stack.get_visible_child_name().unwrap();
|
||||
|
||||
let old = stack.get_child_by_name("fb_parent").unwrap();
|
||||
stack.remove(&old);
|
||||
stack.add_named(&fb_parent, "fb_parent");
|
||||
// preserve the visible widget
|
||||
stack.set_visible_child_name(&vis);
|
||||
|
||||
let flowbox = setup_podcasts_flowbox(db, stack);
|
||||
|
||||
if vis == "empty" && !flowbox.get_children().is_empty() {
|
||||
stack.set_visible_child_name("fb_parent");
|
||||
} else if vis == "fb_parent" && flowbox.get_children().is_empty() {
|
||||
stack.set_visible_child_name("empty");
|
||||
} else {
|
||||
// preserve the visible widget
|
||||
stack.set_visible_child_name(&vis);
|
||||
};
|
||||
|
||||
// aggresive memory cleanup
|
||||
// probably not needed
|
||||
@ -144,5 +153,5 @@ fn init_flowbox(db: &Database, stack: >k::Stack, flowbox: >k::FlowBox) {
|
||||
on_flowbox_child_activate(&db, &stack, &parent);
|
||||
}));
|
||||
// Populate the flowbox with the Podcasts.
|
||||
populate_flowbox(db, stack, flowbox);
|
||||
populate_flowbox(db, flowbox);
|
||||
}
|
||||
|
||||
@ -75,8 +75,8 @@ fn on_unsub_button_clicked(
|
||||
}
|
||||
};
|
||||
}
|
||||
stack.set_visible_child_name("fb_parent");
|
||||
update_podcasts_view(db, stack);
|
||||
stack.set_visible_child_name("fb_parent")
|
||||
}
|
||||
|
||||
fn on_played_button_clicked(db: &Database, stack: >k::Stack, pd: &Podcast) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user