Remove old implementation.
This commit is contained in:
parent
b4b2f24c77
commit
326ee75cd8
38
hammond-gtk/src/app.rs
Normal file
38
hammond-gtk/src/app.rs
Normal file
@ -0,0 +1,38 @@
|
||||
use gtk::prelude::*;
|
||||
use gtk::{Window, WindowType};
|
||||
|
||||
use headerbar::Header;
|
||||
use content::Content;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct App<'a> {
|
||||
window: Window,
|
||||
header: Header,
|
||||
content: Content<'a>,
|
||||
}
|
||||
|
||||
impl <'a>App<'a> {
|
||||
pub fn new() -> App<'a> {
|
||||
let window = Window::new(WindowType::Toplevel);
|
||||
let content = Content::new();
|
||||
let header = Header::new(content.stack.clone());
|
||||
|
||||
window.set_default_size(1150, 650);
|
||||
window.connect_delete_event(|w, _| {
|
||||
w.destroy();
|
||||
Inhibit(false)
|
||||
});
|
||||
|
||||
window.set_titlebar(&header.container);
|
||||
window.add(&content.stack);
|
||||
|
||||
window.show_all();
|
||||
window.activate();
|
||||
|
||||
App {
|
||||
window,
|
||||
header,
|
||||
content,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,8 +4,7 @@ use gtk::prelude::*;
|
||||
|
||||
// use diesel::Identifiable;
|
||||
|
||||
// use hammond_data::dbqueries;
|
||||
// use hammond_data::Podcast;
|
||||
use hammond_data::Podcast;
|
||||
|
||||
use widgets::podcast::PodcastWidget;
|
||||
use views::podcasts::PopulatedView;
|
||||
@ -16,7 +15,7 @@ pub struct Content {
|
||||
pub stack: gtk::Stack,
|
||||
pub state: ContentState,
|
||||
widget: PodcastWidget,
|
||||
podcasts: PopulatedView,
|
||||
pub podcasts: PopulatedView,
|
||||
empty: EmptyView,
|
||||
}
|
||||
|
||||
|
||||
@ -75,49 +75,6 @@ impl Header {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_headerbar(stack: >k::Stack) -> gtk::HeaderBar {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui");
|
||||
|
||||
let header: gtk::HeaderBar = builder.get_object("headerbar1").unwrap();
|
||||
let home_button: gtk::Button = builder.get_object("homebutton").unwrap();
|
||||
let refresh_button: gtk::Button = builder.get_object("refbutton").unwrap();
|
||||
|
||||
let add_toggle_button: gtk::MenuButton = builder.get_object("add-toggle-button").unwrap();
|
||||
let add_popover: gtk::Popover = builder.get_object("add-popover").unwrap();
|
||||
let new_url: gtk::Entry = builder.get_object("new-url").unwrap();
|
||||
let add_button: gtk::Button = builder.get_object("add-button").unwrap();
|
||||
// TODO: check if url exists in the db and lock the button
|
||||
new_url.connect_changed(move |url| {
|
||||
println!("{:?}", url.get_text());
|
||||
});
|
||||
|
||||
add_button.connect_clicked(clone!(stack, add_popover, new_url => move |_| {
|
||||
on_add_bttn_clicked(&stack, &new_url);
|
||||
|
||||
// TODO: lock the button instead of hiding and add notification of feed added.
|
||||
// TODO: map the spinner
|
||||
add_popover.hide();
|
||||
}));
|
||||
add_toggle_button.set_popover(&add_popover);
|
||||
|
||||
// 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!(stack => move |_| {
|
||||
let vis = stack.get_visible_child_name().unwrap();
|
||||
stack.set_visible_child_name("fb_parent");
|
||||
if vis != "pdw" {
|
||||
update_podcasts_view(&stack);
|
||||
}
|
||||
}));
|
||||
|
||||
// FIXME: There appears to be a memmory leak here.
|
||||
refresh_button.connect_clicked(clone!(stack => move |_| {
|
||||
utils::refresh_feed(&stack, None, None);
|
||||
}));
|
||||
|
||||
header
|
||||
}
|
||||
|
||||
fn on_add_bttn_clicked(stack: >k::Stack, entry: >k::Entry) {
|
||||
let url = entry.get_text().unwrap_or_default();
|
||||
let url = url_cleaner(&url);
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
extern crate gdk;
|
||||
extern crate gdk_pixbuf;
|
||||
extern crate gio;
|
||||
@ -67,8 +65,8 @@ fn build_ui(app: >k::Application) {
|
||||
window.set_default_size(1150, 650);
|
||||
// Setup the Stack that will manage the switch between podcasts_view and podcast_widget.
|
||||
// let stack = podcasts::setup_stack();
|
||||
let content = content::Content::new();
|
||||
let stack = content.stack.clone();
|
||||
let ct = content::Content::new();
|
||||
let stack = ct.stack.clone();
|
||||
window.add(&stack);
|
||||
|
||||
window.connect_delete_event(|w, _| {
|
||||
@ -103,8 +101,6 @@ fn build_ui(app: >k::Application) {
|
||||
});
|
||||
|
||||
// Get the headerbar
|
||||
// let header = headerbar::get_headerbar(&stack);
|
||||
// window.set_titlebar(&header);
|
||||
let header = headerbar::Header::new_initialized(&stack);
|
||||
window.set_titlebar(&header.container);
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ use utils::get_pixbuf_from_path;
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct PopulatedView {
|
||||
pub container: gtk::Box,
|
||||
flowbox: gtk::FlowBox,
|
||||
pub flowbox: gtk::FlowBox,
|
||||
viewport: gtk::Viewport,
|
||||
}
|
||||
|
||||
@ -48,12 +48,6 @@ impl PopulatedView {
|
||||
}
|
||||
}
|
||||
|
||||
fn setup_empty_view(stack: >k::Stack) {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/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");
|
||||
|
||||
@ -118,11 +112,12 @@ fn configure_banner(pd: &Podcast, banner: >k::Image, banner_title: >k::Label
|
||||
|
||||
fn on_flowbox_child_activate(stack: >k::Stack, parent: &Podcast) {
|
||||
let old = stack.get_child_by_name("pdw").unwrap();
|
||||
let pdw = podcast_widget(stack, parent);
|
||||
let pdw = PodcastWidget::new();
|
||||
pdw.init(stack, parent);
|
||||
|
||||
stack.remove(&old);
|
||||
stack.add_named(&pdw, "pdw");
|
||||
stack.set_visible_child(&pdw);
|
||||
stack.add_named(&pdw.container, "pdw");
|
||||
stack.set_visible_child_name("pdw");
|
||||
|
||||
// aggresive memory cleanup
|
||||
// probably not needed
|
||||
@ -146,15 +141,6 @@ fn setup_podcasts_flowbox(stack: >k::Stack) -> gtk::FlowBox {
|
||||
flowbox
|
||||
}
|
||||
|
||||
pub fn setup_stack() -> 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(&stack);
|
||||
stack
|
||||
}
|
||||
|
||||
pub fn update_podcasts_view(stack: >k::Stack) {
|
||||
let vis = stack.get_visible_child_name().unwrap();
|
||||
let old = stack.get_child_by_name("fb_parent").unwrap();
|
||||
|
||||
@ -86,48 +86,6 @@ impl PodcastWidget {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn podcast_widget(stack: >k::Stack, pd: &Podcast) -> gtk::Box {
|
||||
// Adapted from gnome-music AlbumWidget
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/podcast_widget.ui");
|
||||
let pd_widget: gtk::Box = builder.get_object("podcast_widget").unwrap();
|
||||
|
||||
let cover: gtk::Image = builder.get_object("cover").unwrap();
|
||||
let title_label: gtk::Label = builder.get_object("title_label").unwrap();
|
||||
let desc_text_view: gtk::TextView = builder.get_object("desc_text_view").unwrap();
|
||||
let view: gtk::Viewport = builder.get_object("view").unwrap();
|
||||
let unsub_button: gtk::Button = builder.get_object("unsub_button").unwrap();
|
||||
let played_button: gtk::Button = builder.get_object("mark_all_played_button").unwrap();
|
||||
|
||||
// TODO: should spawn a thread to avoid locking the UI probably.
|
||||
unsub_button.connect_clicked(clone!(stack, pd => move |bttn| {
|
||||
on_unsub_button_clicked(&stack, &pd, bttn);
|
||||
}));
|
||||
|
||||
title_label.set_text(pd.title());
|
||||
let listbox = episodes_listbox(pd);
|
||||
if let Ok(l) = listbox {
|
||||
view.add(&l);
|
||||
}
|
||||
|
||||
{
|
||||
let buff = desc_text_view.get_buffer().unwrap();
|
||||
buff.set_text(pd.description());
|
||||
}
|
||||
|
||||
let img = get_pixbuf_from_path(pd);
|
||||
if let Some(i) = img {
|
||||
cover.set_from_pixbuf(&i);
|
||||
}
|
||||
|
||||
played_button.connect_clicked(clone!(stack, pd => move |_| {
|
||||
on_played_button_clicked(&stack, &pd);
|
||||
}));
|
||||
|
||||
show_played_button(pd, &played_button);
|
||||
|
||||
pd_widget
|
||||
}
|
||||
|
||||
// Note: Stack manipulation
|
||||
fn on_unsub_button_clicked(stack: >k::Stack, pd: &Podcast, unsub_button: >k::Button) {
|
||||
let res = dbqueries::remove_feed(pd);
|
||||
@ -155,32 +113,15 @@ fn on_played_button_clicked(stack: >k::Stack, pd: &Podcast) {
|
||||
update_podcast_widget(stack, pd);
|
||||
}
|
||||
|
||||
fn show_played_button(pd: &Podcast, played_button: >k::Button) {
|
||||
let new_episodes = dbqueries::get_pd_unplayed_episodes(pd);
|
||||
|
||||
if let Ok(n) = new_episodes {
|
||||
if !n.is_empty() {
|
||||
played_button.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Note: Stack manipulation
|
||||
pub fn setup_podcast_widget(stack: >k::Stack) {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/podcast_widget.ui");
|
||||
let pd_widget: gtk::Box = builder.get_object("podcast_widget").unwrap();
|
||||
|
||||
stack.add_named(&pd_widget, "pdw");
|
||||
}
|
||||
|
||||
// Note: Stack manipulation
|
||||
pub fn update_podcast_widget(stack: >k::Stack, pd: &Podcast) {
|
||||
let old = stack.get_child_by_name("pdw").unwrap();
|
||||
let pdw = podcast_widget(stack, pd);
|
||||
let pdw = PodcastWidget::new();
|
||||
pdw.init(stack, pd);
|
||||
let vis = stack.get_visible_child_name().unwrap();
|
||||
|
||||
stack.remove(&old);
|
||||
stack.add_named(&pdw, "pdw");
|
||||
stack.add_named(&pdw.container, "pdw");
|
||||
stack.set_visible_child_name(&vis);
|
||||
old.destroy();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user