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 native_tls;
|
||||||
use reqwest;
|
use reqwest;
|
||||||
use rss;
|
use rss;
|
||||||
|
use url;
|
||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
@ -17,6 +18,7 @@ error_chain! {
|
|||||||
RSSError(rss::Error);
|
RSSError(rss::Error);
|
||||||
ReqError(reqwest::Error);
|
ReqError(reqwest::Error);
|
||||||
HyperError(hyper::Error);
|
HyperError(hyper::Error);
|
||||||
|
UrlError(url::ParseError);
|
||||||
TLSError(native_tls::Error);
|
TLSError(native_tls::Error);
|
||||||
IoError(io::Error);
|
IoError(io::Error);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
use diesel;
|
use diesel;
|
||||||
use diesel::prelude::*;
|
use diesel::prelude::*;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
use database::connection;
|
use database::connection;
|
||||||
use dbqueries;
|
use dbqueries;
|
||||||
// use models::{Insert, Update};
|
// use models::{Insert, Update};
|
||||||
use models::Insert;
|
|
||||||
use models::Source;
|
use models::Source;
|
||||||
use schema::source;
|
use schema::source;
|
||||||
|
|
||||||
@ -24,30 +24,30 @@ pub(crate) struct NewSource {
|
|||||||
http_etag: Option<String>,
|
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 {
|
impl NewSource {
|
||||||
pub(crate) fn new(uri: &str) -> NewSource {
|
pub(crate) fn new(uri: &Url) -> NewSource {
|
||||||
NewSource {
|
NewSource {
|
||||||
uri: uri.trim().to_string(),
|
uri: uri.to_string(),
|
||||||
last_modified: None,
|
last_modified: None,
|
||||||
http_etag: 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.
|
// Look out for when tryinto lands into stable.
|
||||||
pub(crate) fn into_source(self) -> Result<Source> {
|
pub(crate) fn into_source(self) -> Result<Source> {
|
||||||
self.insert()?;
|
self.insert_or_ignore()?;
|
||||||
dbqueries::get_source_from_uri(&self.uri)
|
dbqueries::get_source_from_uri(&self.uri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use diesel::SaveChangesDsl;
|
use diesel::SaveChangesDsl;
|
||||||
use rss::Channel;
|
use rss::Channel;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
use hyper;
|
use hyper;
|
||||||
use hyper::{Client, Method, Request, Response, StatusCode, Uri};
|
use hyper::{Client, Method, Request, Response, StatusCode, Uri};
|
||||||
@ -146,7 +147,9 @@ impl Source {
|
|||||||
///
|
///
|
||||||
/// This only indexes the `Source` struct, not the Podcast Feed.
|
/// This only indexes the `Source` struct, not the Podcast Feed.
|
||||||
pub fn from_url(uri: &str) -> Result<Source> {
|
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.
|
/// `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,
|
/// Removes all the entries associated with the given show from the database,
|
||||||
/// and deletes all of the downloaded content.
|
/// and deletes all of the downloaded content.
|
||||||
/// TODO: Write Tests
|
// TODO: Write Tests
|
||||||
pub fn delete_show(pd: &Podcast) -> Result<()> {
|
pub fn delete_show(pd: &Podcast) -> Result<()> {
|
||||||
dbqueries::remove_feed(pd)?;
|
dbqueries::remove_feed(pd)?;
|
||||||
info!("{} was removed succesfully.", pd.title());
|
info!("{} was removed succesfully.", pd.title());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user