Initial split of podcastsview.

This commit is contained in:
Jordan Petridis 2017-10-18 20:52:24 +03:00
parent c3d7a11975
commit 0ed6fee39f
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
3 changed files with 65 additions and 50 deletions

View File

@ -37,7 +37,7 @@ pub fn get_headerbar(
let url = new_url.get_text().unwrap();
let _ = index_feed::insert_return_source(&tempdb, &url);
drop(tempdb);
println!("{:?} feed added", url);
info!("{:?} feed added", url);
// update the db
utils::refresh_db(db_clone.clone());

View File

@ -15,28 +15,25 @@ extern crate open;
use log::LogLevel;
use hammond_data::index_feed;
use hammond_downloader::downloader;
use std::sync::{Arc, Mutex};
use gtk::prelude::*;
use gio::ApplicationExt;
use gdk_pixbuf::Pixbuf;
pub mod views;
pub mod widgets;
pub mod headerbar;
pub mod utils;
use widgets::podcast::{create_flowbox_child, podcast_liststore, podcast_widget};
use widgets::podcast::*;
use views::podcasts_view::populate_podcasts_flowbox;
/*
THIS IS STILL A PROTOTYPE.
THE CODE IS TERIBLE, SPAGHETTI AND HAS UNWRAPS EVERYWHERE.
THE CODE IS TERIBLE AND USES UNWRAPS EVERYWHERE.
*/
// I am sorry about the spaghetti code.
// Gonna clean it up when the GUI is a bit usuable.
fn build_ui() {
let glade_src = include_str!("../gtk/foo.ui");
let builder = gtk::Builder::new_from_string(glade_src);
@ -67,49 +64,7 @@ fn build_ui() {
let header = headerbar::get_headerbar(db.clone(), stack.clone(), grid.clone());
window.set_titlebar(&header);
let tempdb = db.lock().unwrap();
let pd_model = podcast_liststore(&tempdb);
drop(tempdb);
// Get a ListStore iterator at the first element.
let iter = pd_model.get_iter_first().unwrap();
// Iterate the podcast view.
loop {
let title = pd_model.get_value(&iter, 1).get::<String>().unwrap();
let description = pd_model.get_value(&iter, 2).get::<String>().unwrap();
let image_uri = pd_model.get_value(&iter, 4).get::<String>();
let imgpath = downloader::cache_image(&title, image_uri.as_ref().map(|s| s.as_str()));
let pixbuf = if let Some(i) = imgpath {
Pixbuf::new_from_file_at_scale(&i, 200, 200, true).ok()
} else {
None
};
let f = create_flowbox_child(&title, pixbuf.clone());
let stack_clone = stack.clone();
let db_clone = db.clone();
f.connect_activate(move |_| {
let pdw = stack_clone.get_child_by_name("pdw").unwrap();
stack_clone.remove(&pdw);
let pdw = podcast_widget(
db_clone.clone(),
Some(title.as_str()),
Some(description.as_str()),
pixbuf.clone(),
);
stack_clone.add_named(&pdw, "pdw");
stack_clone.set_visible_child(&pdw);
println!("Hello World!, child activated");
});
flowbox.add(&f);
if !pd_model.iter_next(&iter) {
break;
}
}
populate_podcasts_flowbox(db.clone(), stack.clone(), flowbox.clone());
window.show_all();
gtk::main();

View File

@ -1 +1,61 @@
use gtk;
use gtk::prelude::*;
use gdk_pixbuf::Pixbuf;
use hammond_downloader::downloader;
use diesel::prelude::*;
use std::sync::{Arc, Mutex};
use widgets::podcast::*;
pub fn populate_podcasts_flowbox(
db: Arc<Mutex<SqliteConnection>>,
stack: gtk::Stack,
flowbox: gtk::FlowBox,
) {
let tempdb = db.lock().unwrap();
let pd_model = podcast_liststore(&tempdb);
drop(tempdb);
// Get a ListStore iterator at the first element.
let iter = pd_model.get_iter_first().unwrap();
loop {
let title = pd_model.get_value(&iter, 1).get::<String>().unwrap();
let description = pd_model.get_value(&iter, 2).get::<String>().unwrap();
let image_uri = pd_model.get_value(&iter, 4).get::<String>();
let imgpath = downloader::cache_image(&title, image_uri.as_ref().map(|s| s.as_str()));
let pixbuf = if let Some(i) = imgpath {
Pixbuf::new_from_file_at_scale(&i, 200, 200, true).ok()
} else {
None
};
let f = create_flowbox_child(&title, pixbuf.clone());
let stack_clone = stack.clone();
let db_clone = db.clone();
f.connect_activate(move |_| {
let pdw = stack_clone.get_child_by_name("pdw").unwrap();
stack_clone.remove(&pdw);
let pdw = podcast_widget(
db_clone.clone(),
Some(title.as_str()),
Some(description.as_str()),
pixbuf.clone(),
);
stack_clone.add_named(&pdw, "pdw");
stack_clone.set_visible_child(&pdw);
println!("Hello World!, child activated");
});
flowbox.add(&f);
if !pd_model.iter_next(&iter) {
break;
}
}
}