diff --git a/hammond-data/benches/bench.rs b/hammond-data/benches/bench.rs index 5516cbf..b11f8e5 100644 --- a/hammond-data/benches/bench.rs +++ b/hammond-data/benches/bench.rs @@ -12,7 +12,7 @@ use rayon::prelude::*; use test::Bencher; -use hammond_data::models::NewSource; +use hammond_data::Source; use hammond_data::feed::{index, Feed}; use std::io::BufReader; @@ -36,7 +36,7 @@ fn index_urls() { URLS.par_iter() .map(|&(buff, url)| { // Create and insert a Source into db - let s = NewSource::new_with_uri(url).into_source().unwrap(); + let s = Source::from_url(url).unwrap(); // parse it into a channel let chan = rss::Channel::read_from(BufReader::new(buff)).unwrap(); Feed::from_channel_source(chan, s) diff --git a/hammond-data/src/dbqueries.rs b/hammond-data/src/dbqueries.rs index c231e07..f1be976 100644 --- a/hammond-data/src/dbqueries.rs +++ b/hammond-data/src/dbqueries.rs @@ -1,4 +1,3 @@ - use diesel::prelude::*; use diesel; use models::{Episode, NewEpisode, NewPodcast, NewSource, Podcast, Source}; diff --git a/hammond-data/src/feed.rs b/hammond-data/src/feed.rs index 00f480a..234dd4d 100644 --- a/hammond-data/src/feed.rs +++ b/hammond-data/src/feed.rs @@ -33,7 +33,7 @@ impl Feed { Ok(()) } - fn index_channel(&self) -> Result { + pub fn index_channel(&self) -> Result { let pd = parser::new_podcast(&self.channel, *self.source.id()); // Convert NewPodcast to Podcast pd.into_podcast() diff --git a/hammond-data/src/lib.rs b/hammond-data/src/lib.rs index c170b77..5df27cc 100644 --- a/hammond-data/src/lib.rs +++ b/hammond-data/src/lib.rs @@ -27,9 +27,9 @@ extern crate xdg; pub mod dbqueries; pub mod utils; -pub mod models; pub mod feed; pub mod errors; +mod models; mod parser; mod schema; @@ -41,6 +41,8 @@ use std::path::PathBuf; use std::sync::{Arc, Mutex}; // use std::time::Duration; +pub use models::{Episode, Podcast, Source}; + // type Pool = r2d2::Pool>; type Database = Arc>; diff --git a/hammond-data/src/models/insertables.rs b/hammond-data/src/models/insertables.rs index ccd7748..8213471 100644 --- a/hammond-data/src/models/insertables.rs +++ b/hammond-data/src/models/insertables.rs @@ -40,7 +40,7 @@ impl<'a> NewSource<'a> { #[derive(Insertable)] #[table_name = "episode"] -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] pub struct NewEpisode<'a> { pub title: Option<&'a str>, pub uri: Option, diff --git a/hammond-data/src/models/queryables.rs b/hammond-data/src/models/queryables.rs index 838817b..260f9fb 100644 --- a/hammond-data/src/models/queryables.rs +++ b/hammond-data/src/models/queryables.rs @@ -1,4 +1,3 @@ - use reqwest; use diesel::SaveChangesDsl; use diesel::result::QueryResult; @@ -9,7 +8,7 @@ use schema::{episode, podcast, source}; use feed::Feed; use errors::*; -use models::insertables::NewPodcast; +use models::insertables::NewSource; use connection; use std::io::Read; @@ -153,23 +152,6 @@ pub struct Podcast { source_id: i32, } -/// This is meant only to be used to make unit tests easier. -impl From for Podcast { - fn from(pd: NewPodcast) -> Podcast { - Podcast { - id: 0, - title: pd.title, - link: pd.link, - description: pd.description, - image_uri: pd.image_uri, - source_id: pd.source_id, - always_dl: false, - archive: false, - favorite: false, - } - } -} - impl Podcast { pub fn source_id(&self) -> i32 { self.source_id @@ -336,4 +318,8 @@ impl<'a> Source { Ok(Feed::from_channel_source(chan, self)) } + + pub fn from_url(uri: &str) -> QueryResult { + NewSource::new_with_uri(uri).into_source() + } } diff --git a/hammond-downloader/src/downloader.rs b/hammond-downloader/src/downloader.rs index e85e440..4028671 100644 --- a/hammond-downloader/src/downloader.rs +++ b/hammond-downloader/src/downloader.rs @@ -10,7 +10,7 @@ use std::io::{BufWriter, Read, Write}; use std::path::Path; use errors::*; -use hammond_data::models::{Episode, Podcast}; +use hammond_data::{Episode, Podcast}; use hammond_data::{DL_DIR, HAMMOND_CACHE}; // TODO: Replace path that are of type &str with std::path. @@ -193,7 +193,7 @@ pub fn cache_image(pd: &Podcast) -> Option { mod tests { use super::*; use hammond_data::{DL_DIR, HAMMOND_CACHE}; - use hammond_data::models::NewPodcast; + use hammond_data::Source; use std::fs; @@ -206,14 +206,13 @@ mod tests { #[test] fn test_cache_image() { - let pd = NewPodcast { - title: "New Rustacean".to_string(), - description: "".to_string(), - link: "".to_string(), - image_uri: Some("http://newrustacean.com/podcast.png".to_string()), - source_id: 0, - }; - let pd = Podcast::from(pd); + let pd = Source::from_url("http://www.newrustacean.com/feed.xml") + .unwrap() + .refresh() + .unwrap() + .index_channel() + .unwrap(); + let img_path = cache_image(&pd); let foo_ = format!( "{}{}/cover.png", diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index aeffea5..ac6c736 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -1,7 +1,7 @@ use gtk; use gtk::prelude::*; -use hammond_data::models::NewSource; +use hammond_data::Source; use hammond_data::utils::url_cleaner; use podcasts_view::update_podcasts_view; @@ -54,10 +54,10 @@ pub fn get_headerbar(stack: >k::Stack) -> gtk::HeaderBar { } fn on_add_bttn_clicked(stack: >k::Stack, url: &str) { - let source = NewSource::new_with_uri(url).into_source(); - info!("{:?} feed added", url); + let source = Source::from_url(url); if let Ok(s) = source { + info!("{:?} feed added", url); // update the db utils::refresh_feed(stack, Some(vec![s]), None); } else { diff --git a/hammond-gtk/src/utils.rs b/hammond-gtk/src/utils.rs index b00bfd1..8fc5268 100644 --- a/hammond-gtk/src/utils.rs +++ b/hammond-gtk/src/utils.rs @@ -2,7 +2,7 @@ use glib; use gtk; use hammond_data::feed; -use hammond_data::models::Source; +use hammond_data::Source; use std::{thread, time}; use std::cell::RefCell; diff --git a/hammond-gtk/src/views/podcasts_view.rs b/hammond-gtk/src/views/podcasts_view.rs index eaf3d1c..c3be6b0 100644 --- a/hammond-gtk/src/views/podcasts_view.rs +++ b/hammond-gtk/src/views/podcasts_view.rs @@ -4,7 +4,7 @@ use gdk_pixbuf::Pixbuf; use diesel::associations::Identifiable; use hammond_data::dbqueries; -use hammond_data::models::Podcast; +use hammond_data::Podcast; use widgets::podcast::*; diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index 8cff449..e8b349d 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -1,6 +1,6 @@ use open; use hammond_data::dbqueries; -use hammond_data::models::{Episode, Podcast}; +use hammond_data::{Episode, Podcast}; use hammond_downloader::downloader; use hammond_data::utils::*; use hammond_data::errors::*; diff --git a/hammond-gtk/src/widgets/podcast.rs b/hammond-gtk/src/widgets/podcast.rs index 296a49b..3bdb995 100644 --- a/hammond-gtk/src/widgets/podcast.rs +++ b/hammond-gtk/src/widgets/podcast.rs @@ -5,7 +5,7 @@ use gdk_pixbuf::Pixbuf; use std::fs; use hammond_data::dbqueries; -use hammond_data::models::Podcast; +use hammond_data::Podcast; use hammond_downloader::downloader; use widgets::episode::episodes_listbox; @@ -118,19 +118,17 @@ pub fn update_podcast_widget(stack: >k::Stack, pd: &Podcast) { #[cfg(test)] mod tests { - use hammond_data::models::NewPodcast; + use hammond_data::Source; use super::*; #[test] fn test_get_pixbuf_from_path() { - let pd = NewPodcast { - title: "New Rustacean".to_string(), - description: "".to_string(), - link: "".to_string(), - image_uri: Some("http://newrustacean.com/podcast.png".to_string()), - source_id: 0, - }; - let pd = Podcast::from(pd); + let pd = Source::from_url("http://www.newrustacean.com/feed.xml") + .unwrap() + .refresh() + .unwrap() + .index_channel() + .unwrap(); let pxbuf = get_pixbuf_from_path(&pd); assert!(pxbuf.is_some());