hammond_data: Remove Source dependancy from Feed struct.

This commit is contained in:
Jordan Petridis 2018-01-13 06:08:51 +02:00
parent 1dd25f91fd
commit ee9cede921
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
6 changed files with 18 additions and 18 deletions

View File

@ -1,4 +1,4 @@
//! Index and retrieve Feeds.
//! Index Feeds.
use rayon::prelude::*;
use diesel::prelude::*;
@ -20,20 +20,20 @@ use errors::*;
/// that corresponds to the `Source.uri` field.
pub struct Feed {
channel: rss::Channel,
source: Source,
source_id: i32,
}
impl Feed {
/// Constructor that consumes a `Source` and returns the corresponding `Feed` struct.
pub fn from_source(s: Source) -> Result<Feed> {
pub fn from_source(s: &mut Source) -> Result<Feed> {
s.into_feed(false)
}
/// Constructor that consumes a `Source` and a `rss::Channel` returns a `Feed` struct.
pub fn from_channel_source(chan: rss::Channel, s: Source) -> Feed {
pub fn from_channel_source(chan: rss::Channel, s: i32) -> Feed {
Feed {
channel: chan,
source: s,
source_id: s,
}
}
@ -68,7 +68,7 @@ impl Feed {
}
fn parse_channel(&self) -> NewPodcast {
parser::new_podcast(&self.channel, *self.source.id())
parser::new_podcast(&self.channel, self.source_id)
}
fn parse_channel_items(&self, pd: &Podcast) -> Vec<NewEpisode> {
@ -111,7 +111,7 @@ pub fn index(feed: &Feed) {
}
/// Consume a `Source` and return a `Feed`.
fn fetch(source: Source) -> Result<Feed> {
fn fetch(source: &mut Source) -> Result<Feed> {
Feed::from_source(source)
}
@ -119,8 +119,8 @@ fn fetch(source: Source) -> Result<Feed> {
pub fn index_loop<S: IntoParallelIterator<Item = Source>>(sources: S) {
sources
.into_par_iter()
.filter_map(|x| {
let foo = fetch(x);
.filter_map(|mut x| {
let foo = fetch(&mut x);
if let Err(err) = foo {
error!("Error: {}", err);
None
@ -203,7 +203,7 @@ mod tests {
let feed = fs::File::open(path).unwrap();
// parse it into a channel
let chan = rss::Channel::read_from(BufReader::new(feed)).unwrap();
Feed::from_channel_source(chan, s)
Feed::from_channel_source(chan, *s.id())
})
.collect();
@ -221,8 +221,8 @@ mod tests {
truncate_db().unwrap();
let url = "https://feeds.feedburner.com/InterceptedWithJeremyScahill";
let s1 = Source::from_url(url).unwrap();
let s2 = Source::from_url(url).unwrap();
let mut s1 = Source::from_url(url).unwrap();
let mut s2 = Source::from_url(url).unwrap();
assert_eq!(s1, s2);
assert_eq!(s1.id(), s2.id());

View File

@ -670,7 +670,7 @@ impl<'a> Source {
///
/// Consumes `self` and Returns the corresponding `Feed` Object.
// TODO: Refactor into TryInto once it lands on stable.
pub fn into_feed(mut self, ignore_etags: bool) -> Result<Feed> {
pub fn into_feed(&mut self, ignore_etags: bool) -> Result<Feed> {
use reqwest::header::{EntityTag, Headers, HttpDate, IfModifiedSince, IfNoneMatch};
use reqwest::StatusCode;
@ -725,7 +725,7 @@ impl<'a> Source {
req.read_to_string(&mut buf)?;
let chan = Channel::from_str(&buf)?;
Ok(Feed::from_channel_source(chan, self))
Ok(Feed::from_channel_source(chan, self.id))
}
/// Construct a new `Source` with the given `uri` and index it.

View File

@ -11,7 +11,6 @@ use hyper_tls::HttpsConnector;
use futures::{Future, Stream};
// use futures::future::join_all;
use tokio_core::reactor::Core;
// use std::io::{self, Write};
use std::str::FromStr;
@ -63,6 +62,7 @@ fn res_to_channel(res: hyper::Response) -> Box<Future<Item = rss::Channel, Error
mod tests {
use super::*;
// use futures::future::result;
use tokio_core::reactor::Core;
use database::truncate_db;
use Source;

View File

@ -229,7 +229,7 @@ mod tests {
let url = "http://www.newrustacean.com/feed.xml";
// Create and index a source
let source = Source::from_url(url).unwrap();
let mut source = Source::from_url(url).unwrap();
// Copy it's id
let sid = source.id().clone();

View File

@ -139,7 +139,7 @@ mod tests {
let url = "http://www.newrustacean.com/feed.xml";
// Create and index a source
let source = Source::from_url(url).unwrap();
let mut source = Source::from_url(url).unwrap();
// Copy it's id
let sid = source.id().clone();

View File

@ -81,7 +81,7 @@ mod tests {
let url = "http://www.newrustacean.com/feed.xml";
// Create and index a source
let source = Source::from_url(url).unwrap();
let mut source = Source::from_url(url).unwrap();
// Copy it's id
let sid = source.id().clone();