NewSource: Remove Insert implemantation and replace it with a insert_or_ignore method.
This commit is contained in:
parent
a4660a0700
commit
a3705d424b
@ -5,6 +5,7 @@ use hyper;
|
||||
use native_tls;
|
||||
use reqwest;
|
||||
use rss;
|
||||
use url;
|
||||
|
||||
use std::io;
|
||||
|
||||
@ -17,6 +18,7 @@ error_chain! {
|
||||
RSSError(rss::Error);
|
||||
ReqError(reqwest::Error);
|
||||
HyperError(hyper::Error);
|
||||
UrlError(url::ParseError);
|
||||
TLSError(native_tls::Error);
|
||||
IoError(io::Error);
|
||||
}
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
|
||||
use diesel;
|
||||
use diesel::prelude::*;
|
||||
use url::Url;
|
||||
|
||||
use database::connection;
|
||||
use dbqueries;
|
||||
// use models::{Insert, Update};
|
||||
use models::Insert;
|
||||
use models::Source;
|
||||
use schema::source;
|
||||
|
||||
@ -24,30 +24,30 @@ pub(crate) struct NewSource {
|
||||
http_etag: Option<String>,
|
||||
}
|
||||
|
||||
impl Insert for NewSource {
|
||||
fn insert(&self) -> Result<()> {
|
||||
use schema::source::dsl::*;
|
||||
let db = connection();
|
||||
let con = db.get()?;
|
||||
|
||||
// FIXME: Insert or ignore
|
||||
let _ = diesel::insert_into(source).values(self).execute(&con);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl NewSource {
|
||||
pub(crate) fn new(uri: &str) -> NewSource {
|
||||
pub(crate) fn new(uri: &Url) -> NewSource {
|
||||
NewSource {
|
||||
uri: uri.trim().to_string(),
|
||||
uri: uri.to_string(),
|
||||
last_modified: None,
|
||||
http_etag: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn insert_or_ignore(&self) -> Result<()> {
|
||||
use schema::source::dsl::*;
|
||||
let db = connection();
|
||||
let con = db.get()?;
|
||||
|
||||
diesel::insert_or_ignore_into(source)
|
||||
.values(self)
|
||||
.execute(&con)
|
||||
.map(|_| ())
|
||||
.map_err(From::from)
|
||||
}
|
||||
|
||||
// Look out for when tryinto lands into stable.
|
||||
pub(crate) fn into_source(self) -> Result<Source> {
|
||||
self.insert()?;
|
||||
self.insert_or_ignore()?;
|
||||
dbqueries::get_source_from_uri(&self.uri)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
use diesel::SaveChangesDsl;
|
||||
use rss::Channel;
|
||||
use url::Url;
|
||||
|
||||
use hyper;
|
||||
use hyper::{Client, Method, Request, Response, StatusCode, Uri};
|
||||
@ -146,7 +147,9 @@ impl Source {
|
||||
///
|
||||
/// This only indexes the `Source` struct, not the Podcast Feed.
|
||||
pub fn from_url(uri: &str) -> Result<Source> {
|
||||
NewSource::new(uri).into_source()
|
||||
let url = Url::parse(&uri)?;
|
||||
|
||||
NewSource::new(&url).into_source()
|
||||
}
|
||||
|
||||
/// `Feed` constructor.
|
||||
|
||||
@ -136,7 +136,7 @@ pub fn get_download_folder(pd_title: &str) -> Result<String> {
|
||||
|
||||
/// Removes all the entries associated with the given show from the database,
|
||||
/// and deletes all of the downloaded content.
|
||||
/// TODO: Write Tests
|
||||
// TODO: Write Tests
|
||||
pub fn delete_show(pd: &Podcast) -> Result<()> {
|
||||
dbqueries::remove_feed(pd)?;
|
||||
info!("{} was removed succesfully.", pd.title());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user