hammond_data::Feed: add parse_podcast_future method.

This commit is contained in:
Jordan Petridis 2018-01-16 13:44:33 +02:00
parent 7f78e87551
commit b3460b15a2
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
4 changed files with 25 additions and 4 deletions

View File

@ -2,6 +2,8 @@
use rayon::prelude::*;
use diesel::prelude::*;
use futures::prelude::*;
use futures::future::*;
use rayon::iter::IntoParallelIterator;
use rss;
@ -42,6 +44,17 @@ impl Feed {
self.index_channel_items(&pd)
}
/// Docs
// FIXME: docs
// FIXME: lifetime stuff
pub fn index_future(self) -> Box<Future<Item = (), Error = Error>> {
let indx = self.parse_podcast_futture()
.and_then(|pd| pd.into_podcast())
.and_then(move |pd| self.index_channel_items(&pd));
Box::new(indx)
}
// TODO: Refactor transcactions and find a way to do it in parallel.
fn index_channel_items(&self, pd: &Podcast) -> Result<()> {
let episodes = self.parse_channel_items(pd);
@ -64,6 +77,10 @@ impl Feed {
parser::new_podcast(&self.channel, self.source_id)
}
fn parse_podcast_futture(&self) -> Box<FutureResult<NewPodcast, Error>> {
Box::new(ok(self.parse_podcast()))
}
fn parse_channel_items(&self, pd: &Podcast) -> Vec<NewEpisode> {
let items = self.channel.items();
let new_episodes: Vec<_> = items

View File

@ -71,6 +71,7 @@ mod parser;
mod schema;
pub use models::queryables::{Episode, EpisodeWidgetQuery, Podcast, PodcastCoverQuery, Source};
// pub use feed::Feed;
/// [XDG Base Direcotory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) Paths.
#[allow(missing_debug_implementations)]

View File

@ -716,6 +716,7 @@ impl Source {
Ok(Feed::from_channel_source(chan, self.id))
}
// FIXME:
/// Docs
pub fn into_fututre_feed(
self,

View File

@ -1,14 +1,16 @@
// FIXME:
//! Docs.
use errors::Error;
use Source;
use tokio_core::reactor::Core;
use hyper::Client;
use hyper_tls::HttpsConnector;
use futures::prelude::*;
use futures::future::*;
use errors::Error;
use Source;
// use Feed;
// Weird magic from #rust irc channel
// kudos to remexre
fn collect_futures<F>(
@ -60,7 +62,7 @@ mod dirtyhack {
.into_iter()
// FIXME: Make proper indexing futures instead of wrapping up existing
// blocking functions
.map(|s| s.into_fututre_feed(&client, ignore_etags).map(|feed| feed.index()))
.map(|s| s.into_fututre_feed(&client, ignore_etags).map(|feed| feed.index_future()))
.collect();
let f = core.run(collect_futures(list))?;