diff --git a/hammond-data/src/dbqueries.rs b/hammond-data/src/dbqueries.rs index bf89235..10df983 100644 --- a/hammond-data/src/dbqueries.rs +++ b/hammond-data/src/dbqueries.rs @@ -257,6 +257,33 @@ pub fn delete_podcast_episodes(con: &SqliteConnection, parent_id: i32) -> QueryR diesel::delete(episode.filter(podcast_id.eq(parent_id))).execute(&*con) } +pub fn podcast_exists(source_id_: i32) -> Result { + use schema::podcast::dsl::*; + use diesel::select; + use diesel::dsl::exists; + + let db = connection(); + let con = db.get()?; + + select(exists(podcast.filter(source_id.eq(source_id_)))) + .get_result(&*con) + .map_err(From::from) +} + +#[cfg_attr(rustfmt, rustfmt_skip)] +pub fn episode_exists(title_: &str, podcast_id_: i32) -> Result { + use schema::episode::dsl::*; + use diesel::select; + use diesel::dsl::exists; + + let db = connection(); + let con = db.get()?; + + select(exists(episode.filter(podcast_id.eq(podcast_id_)).filter(title.eq(title_)))) + .get_result(&*con) + .map_err(From::from) +} + pub fn update_none_to_played_now(parent: &Podcast) -> Result { use schema::episode::dsl::*; diff --git a/hammond-data/src/errors.rs b/hammond-data/src/errors.rs index 7f8f88a..3beb3f2 100644 --- a/hammond-data/src/errors.rs +++ b/hammond-data/src/errors.rs @@ -1,4 +1,4 @@ -use diesel::result; +use diesel; use diesel_migrations::RunMigrationsError; use rss; use reqwest; @@ -11,7 +11,7 @@ use std::io; error_chain! { foreign_links { R2D2Error(r2d2::Error); - DieselResultError(result::Error); + DieselResultError(diesel::result::Error); DieselMigrationError(RunMigrationsError); RSSError(rss::Error); ReqError(reqwest::Error); diff --git a/hammond-data/src/feed.rs b/hammond-data/src/feed.rs index 0c19012..591f811 100644 --- a/hammond-data/src/feed.rs +++ b/hammond-data/src/feed.rs @@ -93,13 +93,9 @@ impl Feed { // This could also retrurn a FutureResult>, Error> Instead #[allow(dead_code)] - fn parse_channel_items_future( - &self, - pd: &Podcast, - ) -> Box>> { - let items = self.channel.items(); - - let episodes: Vec<_> = items + fn parse_episodes_future(&self, pd: &Podcast) -> Box>> { + let episodes = self.channel + .items() .par_iter() .map(|item| result(parser::new_episode(item, pd.id()))) .collect();