Removed the multiple declarations of the clone macro.

This commit is contained in:
Jordan Petridis
2017-11-03 17:42:48 +02:00
parent 9787ce7979
commit 72ac709cda
6 changed files with 28 additions and 106 deletions
+3 -24
View File
@@ -1,7 +1,7 @@
use open;
use hammond_data::dbqueries;
use hammond_data::models::Episode;
use hammond_data::models::{Episode, Podcast};
use hammond_downloader::downloader;
use hammond_data::index_feed::Database;
use hammond_data::dbcheckup::*;
@@ -19,26 +19,6 @@ use gtk;
use gtk::prelude::*;
use gtk::{ContainerExt, TextBufferExt};
// http://gtk-rs.org/tuto/closures
// FIXME: Atm this macro is copied into every module.
// Figure out how to propely define once and export it instead.
macro_rules! clone {
(@param _) => ( _ );
(@param $x:ident) => ( $x );
($($n:ident),+ => move || $body:expr) => (
{
$( let $n = $n.clone(); )+
move || $body
}
);
($($n:ident),+ => move |$($p:tt),+| $body:expr) => (
{
$( let $n = $n.clone(); )+
move |$(clone!(@param $p),)+| $body
}
);
}
thread_local!(
static GLOBAL: RefCell<Option<((
gtk::Button, gtk::Button, gtk::Button, Receiver<bool>,
@@ -218,15 +198,14 @@ fn receive() -> glib::Continue {
glib::Continue(false)
}
pub fn episodes_listbox(db: &Database, pd_title: &str) -> Result<gtk::ListBox> {
pub fn episodes_listbox(db: &Database, pd: &Podcast) -> Result<gtk::ListBox> {
let conn = db.lock().unwrap();
let pd = dbqueries::load_podcast_from_title(&conn, pd_title)?;
let mut episodes = dbqueries::get_pd_episodes(&conn, &pd)?;
drop(conn);
let list = gtk::ListBox::new();
episodes.iter_mut().for_each(|ep| {
let w = epidose_widget(db, ep, pd_title);
let w = epidose_widget(db, ep, pd.title());
list.add(&w)
});
+1 -19
View File
@@ -12,24 +12,6 @@ use hammond_data::dbqueries;
use widgets::episode::episodes_listbox;
use podcasts_view::update_podcasts_view;
// http://gtk-rs.org/tuto/closures
macro_rules! clone {
(@param _) => ( _ );
(@param $x:ident) => ( $x );
($($n:ident),+ => move || $body:expr) => (
{
$( let $n = $n.clone(); )+
move || $body
}
);
($($n:ident),+ => move |$($p:tt),+| $body:expr) => (
{
$( let $n = $n.clone(); )+
move |$(clone!(@param $p),)+| $body
}
);
}
fn podcast_widget(db: &Database, stack: &gtk::Stack, pd: &Podcast) -> gtk::Box {
// Adapted from gnome-music AlbumWidget
let pd_widget_source = include_str!("../../gtk/podcast_widget.ui");
@@ -52,7 +34,7 @@ fn podcast_widget(db: &Database, stack: &gtk::Stack, pd: &Podcast) -> gtk::Box {
}));
title_label.set_text(pd.title());
let listbox = episodes_listbox(db, pd.title());
let listbox = episodes_listbox(db, &pd);
if let Ok(l) = listbox {
view.add(&l);
}