From f83f894e4436612e9e358865abb36cf2a0478318 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sat, 25 Nov 2017 03:29:06 +0200 Subject: [PATCH] Replaced pool.get().unwrap() statements with get()?. --- hammond-data/src/database.rs | 7 +- hammond-data/src/dbqueries.rs | 120 +++++++++++++------------ hammond-data/src/feed.rs | 6 +- hammond-data/src/models/insertables.rs | 14 +-- hammond-data/src/models/queryables.rs | 23 +++-- hammond-downloader/src/errors.rs | 2 + 6 files changed, 87 insertions(+), 85 deletions(-) diff --git a/hammond-data/src/database.rs b/hammond-data/src/database.rs index b45b0fa..bc35400 100644 --- a/hammond-data/src/database.rs +++ b/hammond-data/src/database.rs @@ -49,13 +49,12 @@ fn init_pool(db_path: &str) -> Pool { .build(); let manager = ConnectionManager::::new(db_path); let pool = Arc::new(r2d2::Pool::new(config, manager).expect("Failed to create pool.")); - info!("Database pool initialized."); { - let db = Arc::clone(&pool).get().unwrap(); - run_migration_on(&*db).unwrap(); + let db = Arc::clone(&pool).get().expect("Failed to initialize pool."); + run_migration_on(&*db).expect("Failed to run migrations during init."); } - + info!("Database pool initialized."); pool } diff --git a/hammond-data/src/dbqueries.rs b/hammond-data/src/dbqueries.rs index 5cfa5ea..ca0586c 100644 --- a/hammond-data/src/dbqueries.rs +++ b/hammond-data/src/dbqueries.rs @@ -2,155 +2,156 @@ use diesel::prelude::*; use diesel; use models::{Episode, NewEpisode, NewPodcast, NewSource, Podcast, Source}; use chrono::prelude::*; +use errors::*; /// Random db querries helper functions. /// Probably needs cleanup. use database::connection; -pub fn get_sources() -> QueryResult> { +pub fn get_sources() -> Result> { use schema::source::dsl::*; let db = connection(); - let con = db.get().unwrap(); - source.load::(&*con) + let con = db.get()?; + Ok(source.load::(&*con)?) } -pub fn get_podcasts() -> QueryResult> { +pub fn get_podcasts() -> Result> { use schema::podcast::dsl::*; let db = connection(); - let con = db.get().unwrap(); - podcast.load::(&*con) + let con = db.get()?; + Ok(podcast.load::(&*con)?) } -pub fn get_episodes() -> QueryResult> { +pub fn get_episodes() -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); - episode.order(epoch.desc()).load::(&*con) + let con = db.get()?; + Ok(episode.order(epoch.desc()).load::(&*con)?) } -pub fn get_downloaded_episodes() -> QueryResult> { +pub fn get_downloaded_episodes() -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); - episode + let con = db.get()?; + Ok(episode .filter(local_uri.is_not_null()) - .load::(&*con) + .load::(&*con)?) } -pub fn get_played_episodes() -> QueryResult> { +pub fn get_played_episodes() -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); - episode.filter(played.is_not_null()).load::(&*con) + let con = db.get()?; + Ok(episode.filter(played.is_not_null()).load::(&*con)?) } -pub fn get_episode_from_id(ep_id: i32) -> QueryResult { +pub fn get_episode_from_id(ep_id: i32) -> Result { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); - episode.filter(id.eq(ep_id)).get_result::(&*con) + let con = db.get()?; + Ok(episode.filter(id.eq(ep_id)).get_result::(&*con)?) } -pub fn get_episode_local_uri_from_id(ep_id: i32) -> QueryResult> { +pub fn get_episode_local_uri_from_id(ep_id: i32) -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - episode + Ok(episode .filter(id.eq(ep_id)) .select(local_uri) - .get_result::>(&*con) + .get_result::>(&*con)?) } -pub fn get_episodes_with_limit(limit: u32) -> QueryResult> { +pub fn get_episodes_with_limit(limit: u32) -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - episode + Ok(episode .order(epoch.desc()) .limit(i64::from(limit)) - .load::(&*con) + .load::(&*con)?) } -pub fn get_podcast_from_id(pid: i32) -> QueryResult { +pub fn get_podcast_from_id(pid: i32) -> Result { use schema::podcast::dsl::*; let db = connection(); - let con = db.get().unwrap(); - podcast.filter(id.eq(pid)).get_result::(&*con) + let con = db.get()?; + Ok(podcast.filter(id.eq(pid)).get_result::(&*con)?) } -pub fn get_pd_episodes(parent: &Podcast) -> QueryResult> { +pub fn get_pd_episodes(parent: &Podcast) -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - Episode::belonging_to(parent) + Ok(Episode::belonging_to(parent) .order(epoch.desc()) - .load::(&*con) + .load::(&*con)?) } -pub fn get_pd_unplayed_episodes(parent: &Podcast) -> QueryResult> { +pub fn get_pd_unplayed_episodes(parent: &Podcast) -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - Episode::belonging_to(parent) + Ok(Episode::belonging_to(parent) .filter(played.is_null()) .order(epoch.desc()) - .load::(&*con) + .load::(&*con)?) } -pub fn get_pd_episodes_limit(parent: &Podcast, limit: u32) -> QueryResult> { +pub fn get_pd_episodes_limit(parent: &Podcast, limit: u32) -> Result> { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - Episode::belonging_to(parent) + Ok(Episode::belonging_to(parent) .order(epoch.desc()) .limit(i64::from(limit)) - .load::(&*con) + .load::(&*con)?) } -pub fn get_source_from_uri(uri_: &str) -> QueryResult { +pub fn get_source_from_uri(uri_: &str) -> Result { use schema::source::dsl::*; let db = connection(); - let con = db.get().unwrap(); - source.filter(uri.eq(uri_)).get_result::(&*con) + let con = db.get()?; + Ok(source.filter(uri.eq(uri_)).get_result::(&*con)?) } // pub fn get_podcast_from_title(title_: &str) -> QueryResult { // use schema::podcast::dsl::*; // let db = connection(); -// let con = db.get().unwrap(); +// let con = db.get()?; // podcast // .filter(title.eq(title_)) // .get_result::(&*con) // } -pub fn get_podcast_from_source_id(sid: i32) -> QueryResult { +pub fn get_podcast_from_source_id(sid: i32) -> Result { use schema::podcast::dsl::*; let db = connection(); - let con = db.get().unwrap(); - podcast + let con = db.get()?; + Ok(podcast .filter(source_id.eq(sid)) - .get_result::(&*con) + .get_result::(&*con)?) } pub fn get_episode_from_uri(con: &SqliteConnection, uri_: &str) -> QueryResult { @@ -159,11 +160,11 @@ pub fn get_episode_from_uri(con: &SqliteConnection, uri_: &str) -> QueryResult(&*con) } -pub fn remove_feed(pd: &Podcast) -> QueryResult<()> { +pub fn remove_feed(pd: &Podcast) -> Result<()> { let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; - con.transaction(|| -> QueryResult<()> { + con.transaction(|| -> Result<()> { delete_source(&con, pd.source_id())?; delete_podcast(&con, *pd.id())?; delete_podcast_episodes(&con, *pd.id())?; @@ -190,17 +191,18 @@ pub fn delete_podcast_episodes(con: &SqliteConnection, parent_id: i32) -> QueryR diesel::delete(episode.filter(podcast_id.eq(parent_id))).execute(&*con) } -pub fn update_none_to_played_now(parent: &Podcast) -> QueryResult { +pub fn update_none_to_played_now(parent: &Podcast) -> Result { use schema::episode::dsl::*; let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; let epoch_now = Utc::now().timestamp() as i32; - con.transaction(|| -> QueryResult { - diesel::update(Episode::belonging_to(parent).filter(played.is_null())) - .set(played.eq(Some(epoch_now))) - .execute(&*con) + con.transaction(|| -> Result { + Ok(diesel::update( + Episode::belonging_to(parent).filter(played.is_null()), + ).set(played.eq(Some(epoch_now))) + .execute(&*con)?) }) } diff --git a/hammond-data/src/feed.rs b/hammond-data/src/feed.rs index f99aa2d..3bf5aa7 100644 --- a/hammond-data/src/feed.rs +++ b/hammond-data/src/feed.rs @@ -44,7 +44,7 @@ impl Feed { fn index_channel_items(&self, pd: &Podcast) -> Result<()> { let episodes = self.parse_channel_items(pd); let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; let _ = con.transaction::<(), Error, _>(|| { episodes.into_iter().for_each(|x| { @@ -83,7 +83,7 @@ impl Feed { let eps = self.parse_channel_items(&pd); let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; // TODO: Make it parallel // This returns only the episodes in the xml feed. let episodes: Vec<_> = eps.into_iter() @@ -142,7 +142,7 @@ mod tests { use rss; use models::Source; - use database::{connection, truncate_db}; + use database::truncate_db; use std::fs; use std::io::BufReader; diff --git a/hammond-data/src/models/insertables.rs b/hammond-data/src/models/insertables.rs index a0d950d..82af121 100644 --- a/hammond-data/src/models/insertables.rs +++ b/hammond-data/src/models/insertables.rs @@ -27,19 +27,19 @@ impl NewSource { } } - fn index(&self) { + fn index(&self) -> Result<()> { let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; // Throw away the result like `insert or ignore` // Diesel deos not support `insert or ignore` yet. let _ = dbqueries::insert_new_source(&con, self); + Ok(()) } // Look out for when tryinto lands into stable. - pub fn into_source(self) -> QueryResult { - self.index(); - + pub fn into_source(self) -> Result { + self.index()?; dbqueries::get_source_from_uri(&self.uri) } } @@ -108,11 +108,11 @@ impl NewPodcast { Ok(dbqueries::get_podcast_from_source_id(self.source_id)?) } - pub fn index(&self) -> QueryResult<()> { + pub fn index(&self) -> Result<()> { let pd = dbqueries::get_podcast_from_source_id(self.source_id); let db = connection(); - let con = db.get().unwrap(); + let con = db.get()?; match pd { Ok(foo) => { if foo.source_id() != self.source_id { diff --git a/hammond-data/src/models/queryables.rs b/hammond-data/src/models/queryables.rs index 56b3b29..fd745c4 100644 --- a/hammond-data/src/models/queryables.rs +++ b/hammond-data/src/models/queryables.rs @@ -2,7 +2,6 @@ use chrono::prelude::*; use reqwest; use diesel::SaveChangesDsl; -use diesel::result::QueryResult; use reqwest::header::{ETag, LastModified}; use rss::Channel; @@ -133,18 +132,18 @@ impl Episode { self.podcast_id } - pub fn set_played_now(&mut self) -> QueryResult<()> { + pub fn set_played_now(&mut self) -> Result<()> { let epoch = Utc::now().timestamp() as i32; self.set_played(Some(epoch)); self.save()?; Ok(()) } - pub fn save(&self) -> QueryResult { + pub fn save(&self) -> Result { let db = connection(); - let tempdb = db.get().unwrap(); + let tempdb = db.get()?; - self.save_changes::(&*tempdb) + Ok(self.save_changes::(&*tempdb)?) } } @@ -222,11 +221,11 @@ impl Podcast { self.always_dl = b } - pub fn save(&self) -> QueryResult { + pub fn save(&self) -> Result { let db = connection(); - let tempdb = db.get().unwrap(); + let tempdb = db.get()?; - self.save_changes::(&*tempdb) + Ok(self.save_changes::(&*tempdb)?) } } @@ -283,11 +282,11 @@ impl<'a> Source { Ok(()) } - pub fn save(&self) -> QueryResult { + pub fn save(&self) -> Result { let db = connection(); - let tempdb = db.get().unwrap(); + let tempdb = db.get()?; - self.save_changes::(&*tempdb) + Ok(self.save_changes::(&*tempdb)?) } pub fn into_feed(mut self) -> Result { @@ -332,7 +331,7 @@ impl<'a> Source { Ok(Feed::from_channel_source(chan, self)) } - pub fn from_url(uri: &str) -> QueryResult { + pub fn from_url(uri: &str) -> Result { NewSource::new_with_uri(uri).into_source() } } diff --git a/hammond-downloader/src/errors.rs b/hammond-downloader/src/errors.rs index 0b23181..297d7eb 100644 --- a/hammond-downloader/src/errors.rs +++ b/hammond-downloader/src/errors.rs @@ -1,5 +1,6 @@ use diesel::result; use reqwest; +use hammond_data; use std::io; error_chain! { @@ -7,5 +8,6 @@ error_chain! { ReqError(reqwest::Error); IoError(io::Error); DieselResultError(result::Error); + DataError(hammond_data::errors::Error); } }