Split indexing functions to higher order funcs.

This commit is contained in:
Jordan Petridis 2017-09-26 11:06:22 +03:00
parent 6c25bd7eaa
commit 580aeba095
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6

View File

@ -9,7 +9,7 @@ use schema;
use dbqueries; use dbqueries;
use feedparser; use feedparser;
use errors::*; use errors::*;
use models::{Episode, NewEpisode, NewSource, Podcast, Source}; use models::{Episode, NewEpisode, NewPodcast, NewSource, Podcast, Source};
pub fn foo() { pub fn foo() {
let inpt = vec![ let inpt = vec![
@ -21,7 +21,7 @@ pub fn foo() {
let db = ::establish_connection(); let db = ::establish_connection();
for feed in inpt.iter() { for feed in inpt.iter() {
match insert_source(&db, feed) { match insert_return_source(&db, feed) {
Ok(_) => {} Ok(_) => {}
Err(foo) => { Err(foo) => {
error!("Error: {}", foo); error!("Error: {}", foo);
@ -33,28 +33,17 @@ pub fn foo() {
index_loop(db).unwrap(); index_loop(db).unwrap();
} }
fn insert_source(con: &SqliteConnection, url: &str) -> Result<Source> { fn index_source(con: &SqliteConnection, foo: &NewSource) -> Result<()> {
let foo = NewSource::new_with_uri(url);
match dbqueries::load_source(con, foo.uri) { match dbqueries::load_source(con, foo.uri) {
Ok(_) => (), Ok(_) => Ok(()),
Err(_) => { Err(_) => {
diesel::insert(&foo) diesel::insert(foo).into(schema::source::table).execute(con)?;
.into(schema::source::table) Ok(())
.execute(con)?;
} }
} }
Ok(dbqueries::load_source(con, foo.uri)?)
} }
fn index_podcast( fn index_podcast(con: &SqliteConnection, pd: &NewPodcast) -> Result<()> {
con: &SqliteConnection,
channel: &rss::Channel,
parent: &Source,
) -> Result<Podcast> {
let pd = feedparser::parse_podcast(channel, parent.id())?;
match dbqueries::load_podcast(con, &pd.title) { match dbqueries::load_podcast(con, &pd.title) {
Ok(mut foo) => if foo.link() != pd.link || foo.description() != pd.description { Ok(mut foo) => if foo.link() != pd.link || foo.description() != pd.description {
foo.set_link(&pd.link); foo.set_link(&pd.link);
@ -63,18 +52,13 @@ fn index_podcast(
foo.save_changes::<Podcast>(con)?; foo.save_changes::<Podcast>(con)?;
}, },
Err(_) => { Err(_) => {
diesel::insert(&pd) diesel::insert(pd).into(schema::podcast::table).execute(con)?;
.into(schema::podcast::table)
.execute(con)?;
} }
} }
Ok(())
Ok(dbqueries::load_podcast(con, &pd.title)?)
} }
fn index_episode(con: &SqliteConnection, ep: &NewEpisode) -> Result<Episode> { fn index_episode(con: &SqliteConnection, ep: &NewEpisode) -> Result<()> {
// let ep = feedparser::parse_episode(item, parent.id())?;
match dbqueries::load_episode(con, &ep.uri.unwrap()) { match dbqueries::load_episode(con, &ep.uri.unwrap()) {
Ok(mut foo) => if foo.title() != ep.title || foo.published_date() != ep.published_date { Ok(mut foo) => if foo.title() != ep.title || foo.published_date() != ep.published_date {
foo.set_title(ep.title); foo.set_title(ep.title);
@ -89,6 +73,23 @@ fn index_episode(con: &SqliteConnection, ep: &NewEpisode) -> Result<Episode> {
diesel::insert(ep).into(schema::episode::table).execute(con)?; diesel::insert(ep).into(schema::episode::table).execute(con)?;
} }
} }
Ok(())
}
fn insert_return_source(con: &SqliteConnection, url: &str) -> Result<Source> {
let foo = NewSource::new_with_uri(url);
index_source(con, &foo)?;
Ok(dbqueries::load_source(con, foo.uri)?)
}
fn insert_return_podcast(con: &SqliteConnection, pd: &NewPodcast) -> Result<Podcast> {
index_podcast(con, pd)?;
Ok(dbqueries::load_podcast(con, &pd.title)?)
}
fn insert_return_episode(con: &SqliteConnection, ep: &NewEpisode) -> Result<Episode> {
index_episode(con, ep)?;
Ok(dbqueries::load_episode(con, &ep.uri.unwrap())?) Ok(dbqueries::load_episode(con, &ep.uri.unwrap())?)
} }
@ -104,9 +105,10 @@ pub fn index_loop(db: SqliteConnection) -> Result<()> {
let mut buf = String::new(); let mut buf = String::new();
req.read_to_string(&mut buf)?; req.read_to_string(&mut buf)?;
let chan = rss::Channel::from_str(&buf)?; let chan = rss::Channel::from_str(&buf)?;
let pd = feedparser::parse_podcast(&chan, source.id())?;
let fakedb = bar.lock().unwrap(); let fakedb = bar.lock().unwrap();
let pd = index_podcast(&fakedb, &chan, source)?; let pd = insert_return_podcast(&fakedb, &pd)?;
drop(fakedb); drop(fakedb);
let foo: Vec<_> = chan.items() let foo: Vec<_> = chan.items()
@ -115,7 +117,7 @@ pub fn index_loop(db: SqliteConnection) -> Result<()> {
.collect(); .collect();
// info!("{:#?}", pd); // info!("{:#?}", pd);
info!("{:#?}", foo); // info!("{:#?}", foo);
let _: Vec<_> = foo.par_iter() let _: Vec<_> = foo.par_iter()
.map(|x| { .map(|x| {
let dbmutex = bar.clone(); let dbmutex = bar.clone();