diff --git a/src/cli.rs b/src/cli.rs index 8782b12..c5bb401 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -21,7 +21,7 @@ pub fn run() -> Result<()> { ::init()?; let db = ::establish_connection(); - downloader::latest_dl(&db)?; + downloader::latest_dl(&db, 2)?; Ok(()) } diff --git a/src/dbqueries.rs b/src/dbqueries.rs index 2a5e893..db79f5b 100644 --- a/src/dbqueries.rs +++ b/src/dbqueries.rs @@ -37,7 +37,25 @@ pub fn get_podcast(con: &SqliteConnection, parent: &Source) -> QueryResult QueryResult> { - let eps = Episode::belonging_to(parent).load::(con); + use schema::episode::dsl::*; + + let eps = Episode::belonging_to(parent) + .order(epoch.desc()) + .load::(con); + eps +} + +pub fn get_pd_episodes_limit( + con: &SqliteConnection, + parent: &Podcast, + limit: u32, +) -> QueryResult> { + use schema::episode::dsl::*; + + let eps = Episode::belonging_to(parent) + .order(epoch.desc()) + .limit(limit as i64) + .load::(con); eps } diff --git a/src/downloader.rs b/src/downloader.rs index ef17725..98f3131 100644 --- a/src/downloader.rs +++ b/src/downloader.rs @@ -2,7 +2,7 @@ use reqwest; use hyper::header::*; use diesel::prelude::*; -use std::fs::{File, DirBuilder}; +use std::fs::{DirBuilder, File}; use std::io::{BufWriter, Read, Write}; use errors::*; @@ -48,12 +48,17 @@ pub fn download_to(target: &str, url: &str) -> Result<()> { } // Initial messy prototype, queries load alot of not needed stuff. -pub fn latest_dl(connection: &SqliteConnection) -> Result<()> { +pub fn latest_dl(connection: &SqliteConnection, limit: u32) -> Result<()> { let pds = dbqueries::get_podcasts(connection)?; - + pds.iter() .map(|x| -> Result<()> { - let eps = dbqueries::get_pd_episodes(connection, &x)?; + let eps; + if limit == 0 { + eps = dbqueries::get_pd_episodes(connection, &x)?; + } else { + eps = dbqueries::get_pd_episodes_limit(connection, &x, limit)?; + } // It might be better to make it a hash of the title let dl_fold = format!("{}/{}", ::DL_DIR.to_str().unwrap(), x.title());