Added the ability to mark episodes of a Podcast as watched/played.

This commit is contained in:
Jordan Petridis
2017-10-30 13:02:35 +02:00
parent 9c032a7f17
commit ac80ab04d4
8 changed files with 242 additions and 132 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ pub fn delete_local_content(db: &Database, ep: &mut Episode) -> Result<()> {
Ok(())
}
pub fn set_watched(db: &Database, ep: &mut Episode) -> Result<()> {
pub fn set_watched_now(db: &Database, ep: &mut Episode) -> Result<()> {
let epoch = Utc::now().timestamp() as i32;
ep.set_watched(Some(epoch));
ep.save(db)?;
+26
View File
@@ -5,6 +5,7 @@ use diesel;
use models::{Episode, Podcast, Source};
use index_feed::Database;
use errors::*;
use chrono::prelude::*;
// TODO: Needs cleanup.
@@ -96,6 +97,19 @@ pub fn get_pd_episodes(con: &SqliteConnection, parent: &Podcast) -> QueryResult<
eps
}
pub fn get_pd_unplayed_episodes(
con: &SqliteConnection,
parent: &Podcast,
) -> QueryResult<Vec<Episode>> {
use schema::episode::dsl::*;
let eps = Episode::belonging_to(parent)
.filter(watched.is_null())
.order(epoch.desc())
.load::<Episode>(con);
eps
}
pub fn get_pd_episodes_limit(
con: &SqliteConnection,
parent: &Podcast,
@@ -165,3 +179,15 @@ pub fn delete_podcast_episodes(connection: &SqliteConnection, parent_id: i32) ->
diesel::delete(episode.filter(podcast_id.eq(parent_id))).execute(connection)?;
Ok(())
}
// TODO: make it transaction.
pub fn update_none_to_played_now(connection: &SqliteConnection, parent: &Podcast) -> Result<()> {
use schema::episode::dsl::*;
let epoch_now = Utc::now().timestamp() as i32;
diesel::update(Episode::belonging_to(parent).filter(watched.is_null()))
.set(watched.eq(Some(epoch_now)))
.execute(connection)?;
Ok(())
}
+9 -3
View File
@@ -23,7 +23,9 @@ fn index_source(con: &SqliteConnection, foo: &NewSource) -> Result<()> {
match dbqueries::load_source_from_uri(con, foo.uri) {
Ok(_) => Ok(()),
Err(_) => {
diesel::insert(foo).into(schema::source::table).execute(con)?;
diesel::insert(foo)
.into(schema::source::table)
.execute(con)?;
Ok(())
}
}
@@ -38,7 +40,9 @@ fn index_podcast(con: &SqliteConnection, pd: &NewPodcast) -> Result<()> {
foo.save_changes::<Podcast>(con)?;
},
Err(_) => {
diesel::insert(pd).into(schema::podcast::table).execute(con)?;
diesel::insert(pd)
.into(schema::podcast::table)
.execute(con)?;
}
}
Ok(())
@@ -58,7 +62,9 @@ fn index_episode(con: &SqliteConnection, ep: &NewEpisode) -> Result<()> {
foo.save_changes::<Episode>(con)?;
},
Err(_) => {
diesel::insert(ep).into(schema::episode::table).execute(con)?;
diesel::insert(ep)
.into(schema::episode::table)
.execute(con)?;
}
}
Ok(())