Added the ability to mark episodes of a Podcast as watched/played.
This commit is contained in:
@@ -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)?;
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
|
||||
Reference in New Issue
Block a user