diff --git a/src/dbqueries.rs b/src/dbqueries.rs index d54a9b8..ea0b59a 100644 --- a/src/dbqueries.rs +++ b/src/dbqueries.rs @@ -1,7 +1,13 @@ use diesel::prelude::*; -use schema::source::dsl::*; use models::{Podcast, Episode, Source}; +pub fn get_sources(con: &SqliteConnection) -> QueryResult> { + use schema::source::dsl::*; + + let s = source.load::(con); + s +} + pub fn get_podcasts(con: &SqliteConnection, parent: &Source) -> QueryResult> { let pds = Podcast::belonging_to(parent).load::(con); // debug!("Returned Podcasts:\n{:?}", pds); @@ -13,7 +19,23 @@ pub fn get_pd_episodes(con: &SqliteConnection, parent: &Podcast) -> QueryResult< eps } - pub fn get_sources(con: &SqliteConnection) -> QueryResult>{ - let s = source.load::(con); - s - } \ No newline at end of file +pub fn load_source(con: &SqliteConnection, uri_: &str) -> QueryResult { + use schema::source::dsl::*; + + let s = source.filter(uri.eq(uri_)).get_result::(con); + s +} + +pub fn load_podcast(con: &SqliteConnection, title_: &str) -> QueryResult { + use schema::podcast::dsl::*; + + let pd = podcast.filter(title.eq(title_)).get_result::(con); + pd +} + +pub fn load_episode(con: &SqliteConnection, uri_: &str) -> QueryResult { + use schema::episode::dsl::*; + + let ep = episode.filter(uri.eq(uri_)).get_result::(con); + ep +} \ No newline at end of file diff --git a/src/index_feed.rs b/src/index_feed.rs index f268669..3041d89 100644 --- a/src/index_feed.rs +++ b/src/index_feed.rs @@ -30,9 +30,17 @@ pub fn foo() { fn insert_source(connection: &SqliteConnection, url: &str) -> Result<()> { let foo = NewSource::new_with_uri(url); - diesel::insert_or_replace(&foo) - .into(schema::source::table) - .execute(connection)?; + match dbqueries::load_source(connection, foo.uri) { + Ok(mut bar) => { + bar.set_http_etag(foo.http_etag.map(|x| x.to_string())); + bar.set_last_modified(foo.last_modified.map(|x| x.to_string())); + } + Err(_) => { + diesel::insert(&foo).into(schema::source::table).execute( + connection, + )?; + } + } Ok(()) } diff --git a/src/models.rs b/src/models.rs index 32d950c..c9cd993 100644 --- a/src/models.rs +++ b/src/models.rs @@ -62,10 +62,18 @@ impl<'a> Source { self.last_modified } + pub fn set_last_modified(&mut self, value: Option) { + self.last_modified = value; + } + pub fn http_etag(self) -> Option { self.http_etag } + pub fn set_http_etag(&mut self, value: Option) { + self.http_etag = value; + } + /// Fetch the xml feed from the source url, update the etag headers, /// and parse the feed into an rss:Channel and return it. pub fn get_podcast_chan(&mut self, con: &SqliteConnection) -> Result {