Fixed epoch implementation for episode.

This commit is contained in:
Jordan Petridis 2017-09-22 14:10:13 +03:00
parent cc353c120e
commit dad74dc706
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
7 changed files with 16 additions and 10 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
/target/ /target/
**/*.rs.bk **/*.rs.bk
Cargo.lock Cargo.lock
.vscode

View File

@ -12,7 +12,7 @@ CREATE TABLE `episode` (
`local_uri` TEXT, `local_uri` TEXT,
`description` TEXT, `description` TEXT,
`published_date` TEXT , `published_date` TEXT ,
`epoch` INTEGER, `epoch` INTEGER NOT NULL DEFAULT 0,
`length` INTEGER, `length` INTEGER,
`guid` TEXT, `guid` TEXT,
`podcast_id` INTEGER NOT NULL `podcast_id` INTEGER NOT NULL

View File

@ -1,4 +1,5 @@
use rss::{Channel, Item}; use rss::{Channel, Item};
use chrono::DateTime;
use models; use models;
use errors::*; use errors::*;
@ -46,12 +47,13 @@ pub fn parse_episode<'a>(item: &'a Item, parent_id: i32) -> Result<models::NewEp
let local_uri = None; let local_uri = None;
let pub_date = item.pub_date(); let pub_date = item.pub_date();
let date = DateTime::parse_from_rfc2822(&pub_date.unwrap())?;
// info!("{}", date);
// FIXME: parse pub_date to epoch later let epoch = date.timestamp() as i32;
let epoch = 0; // info!("{}", epoch);
// let length = Some(item.enclosure().unwrap().length().parse().unwrap()); let length = item.enclosure().map(|x| x.length().parse().unwrap_or_default());
let length = item.enclosure().map(|x| x.length().parse().unwrap());
let foo = models::NewEpisode { let foo = models::NewEpisode {
title, title,

View File

@ -87,7 +87,7 @@ fn index_episode(con: &SqliteConnection, item: &rss::Item, parent: &Podcast) ->
foo.set_published_date(ep.published_date); foo.set_published_date(ep.published_date);
foo.set_guid(ep.guid); foo.set_guid(ep.guid);
foo.set_length(ep.length); foo.set_length(ep.length);
foo.set_epoch(ep.length); foo.set_epoch(ep.epoch);
foo.save_changes::<Episode>(con)?; foo.save_changes::<Episode>(con)?;
} }
Err(_) => { Err(_) => {

View File

@ -22,6 +22,7 @@ extern crate diesel_codegen;
extern crate xdg; extern crate xdg;
extern crate reqwest; extern crate reqwest;
extern crate rss; extern crate rss;
extern crate chrono;
pub mod cli; pub mod cli;
pub mod schema; pub mod schema;
@ -35,6 +36,7 @@ pub mod errors {
use reqwest; use reqwest;
use std::io; use std::io;
use rss; use rss;
use chrono;
use diesel::migrations::RunMigrationsError; use diesel::migrations::RunMigrationsError;
use diesel::result; use diesel::result;
@ -46,6 +48,7 @@ pub mod errors {
MigrationError(RunMigrationsError); MigrationError(RunMigrationsError);
RSSError(rss::Error); RSSError(rss::Error);
DieselResultError(result::Error); DieselResultError(result::Error);
ChronoError(chrono::ParseError);
} }
} }
} }

View File

@ -19,7 +19,7 @@ pub struct Episode {
local_uri: Option<String>, local_uri: Option<String>,
description: Option<String>, description: Option<String>,
published_date: Option<String>, published_date: Option<String>,
epoch: Option<i32>, epoch: i32,
length: Option<i32>, length: Option<i32>,
guid: Option<String>, guid: Option<String>,
podcast_id: i32, podcast_id: i32,
@ -78,11 +78,11 @@ impl Episode {
self.guid = value.map(|x| x.to_string()); self.guid = value.map(|x| x.to_string());
} }
pub fn epoch(&self) -> Option<i32> { pub fn epoch(&self) -> i32 {
self.epoch self.epoch
} }
pub fn set_epoch(&mut self, value: Option<i32>) { pub fn set_epoch(&mut self, value: i32) {
self.epoch = value; self.epoch = value;
} }

View File

@ -6,7 +6,7 @@ table! {
local_uri -> Nullable<Text>, local_uri -> Nullable<Text>,
description -> Nullable<Text>, description -> Nullable<Text>,
published_date -> Nullable<Text>, published_date -> Nullable<Text>,
epoch -> Nullable<Integer>, epoch -> Integer,
length -> Nullable<Integer>, length -> Nullable<Integer>,
guid -> Nullable<Text>, guid -> Nullable<Text>,
podcast_id -> Integer, podcast_id -> Integer,