h-data: Move some functions from pipeline to feed module.
This commit is contained in:
parent
18820202d7
commit
771999c603
@ -8,8 +8,7 @@ use rss;
|
|||||||
use dbqueries;
|
use dbqueries;
|
||||||
use errors::DataError;
|
use errors::DataError;
|
||||||
use models::{Index, IndexState, Update};
|
use models::{Index, IndexState, Update};
|
||||||
use models::{NewPodcast, Podcast};
|
use models::{NewEpisode, NewEpisodeMinimal, NewPodcast, Podcast};
|
||||||
use pipeline::*;
|
|
||||||
|
|
||||||
/// Wrapper struct that hold a `Source` id and the `rss::Channel`
|
/// Wrapper struct that hold a `Source` id and the `rss::Channel`
|
||||||
/// that corresponds to the `Source.uri` field.
|
/// that corresponds to the `Source.uri` field.
|
||||||
@ -86,6 +85,31 @@ impl Feed {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn glue(item: &rss::Item, id: i32) -> Result<IndexState<NewEpisode>, DataError> {
|
||||||
|
NewEpisodeMinimal::new(item, id).and_then(move |ep| determine_ep_state(ep, item))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn determine_ep_state(
|
||||||
|
ep: NewEpisodeMinimal,
|
||||||
|
item: &rss::Item,
|
||||||
|
) -> Result<IndexState<NewEpisode>, DataError> {
|
||||||
|
// Check if feed exists
|
||||||
|
let exists = dbqueries::episode_exists(ep.title(), ep.podcast_id())?;
|
||||||
|
|
||||||
|
if !exists {
|
||||||
|
Ok(IndexState::Index(ep.into_new_episode(item)))
|
||||||
|
} else {
|
||||||
|
let old = dbqueries::get_episode_minimal_from_pk(ep.title(), ep.podcast_id())?;
|
||||||
|
let rowid = old.rowid();
|
||||||
|
|
||||||
|
if ep != old {
|
||||||
|
Ok(IndexState::Update((ep.into_new_episode(item), rowid)))
|
||||||
|
} else {
|
||||||
|
Ok(IndexState::NotChanged)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use rss::Channel;
|
use rss::Channel;
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
#![allow(unused_mut)]
|
|
||||||
|
|
||||||
use diesel;
|
use diesel;
|
||||||
use diesel::prelude::*;
|
use diesel::prelude::*;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
// FIXME:
|
// FIXME:
|
||||||
//! Docs.
|
//! Docs.
|
||||||
|
|
||||||
#![allow(unused)]
|
|
||||||
|
|
||||||
use futures::future::*;
|
use futures::future::*;
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use futures::stream::*;
|
use futures::stream::*;
|
||||||
@ -15,11 +13,8 @@ use tokio_core::reactor::Core;
|
|||||||
use num_cpus;
|
use num_cpus;
|
||||||
use rayon;
|
use rayon;
|
||||||
use rayon_futures::ScopeFutureExt;
|
use rayon_futures::ScopeFutureExt;
|
||||||
use rss;
|
|
||||||
|
|
||||||
use dbqueries;
|
|
||||||
use errors::DataError;
|
use errors::DataError;
|
||||||
use models::{IndexState, NewEpisode, NewEpisodeMinimal};
|
|
||||||
use Source;
|
use Source;
|
||||||
|
|
||||||
// use std::sync::{Arc, Mutex};
|
// use std::sync::{Arc, Mutex};
|
||||||
@ -88,35 +83,11 @@ where
|
|||||||
core.run(p).map(|_| ())
|
core.run(p).map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn determine_ep_state(
|
|
||||||
ep: NewEpisodeMinimal,
|
|
||||||
item: &rss::Item,
|
|
||||||
) -> Result<IndexState<NewEpisode>, DataError> {
|
|
||||||
// Check if feed exists
|
|
||||||
let exists = dbqueries::episode_exists(ep.title(), ep.podcast_id())?;
|
|
||||||
|
|
||||||
if !exists {
|
|
||||||
Ok(IndexState::Index(ep.into_new_episode(item)))
|
|
||||||
} else {
|
|
||||||
let old = dbqueries::get_episode_minimal_from_pk(ep.title(), ep.podcast_id())?;
|
|
||||||
let rowid = old.rowid();
|
|
||||||
|
|
||||||
if ep != old {
|
|
||||||
Ok(IndexState::Update((ep.into_new_episode(item), rowid)))
|
|
||||||
} else {
|
|
||||||
Ok(IndexState::NotChanged)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn glue(item: &rss::Item, id: i32) -> Result<IndexState<NewEpisode>, DataError> {
|
|
||||||
NewEpisodeMinimal::new(item, id).and_then(move |ep| determine_ep_state(ep, item))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use database::truncate_db;
|
use database::truncate_db;
|
||||||
|
use dbqueries;
|
||||||
use Source;
|
use Source;
|
||||||
|
|
||||||
// (path, url) tuples.
|
// (path, url) tuples.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user