Update play count
When a track finishes, I tell the library to update playcount. Then, the library triggers a callback to the playqueue deck telling it to update. This patch also finds and prints the track that causes a gstreamer error. Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
parent
30c0d97d56
commit
03b44b9e16
|
@ -20,6 +20,7 @@ struct Callbacks {
|
|||
void (*on_library_update)(unsigned int, library :: Library *);
|
||||
void (*on_library_track_add)(unsigned int);
|
||||
void (*on_library_track_del)(unsigned int);
|
||||
void (*on_library_track_updated)(unsigned int);
|
||||
|
||||
/* Playqueue callbacks */
|
||||
void (*on_queue_track_add)(Playqueue *, unsigned int);
|
||||
|
|
|
@ -125,6 +125,7 @@ namespace library
|
|||
void lookup(unsigned int, library :: Song *);
|
||||
Library *lookup_path(unsigned int);
|
||||
void import();
|
||||
void track_played(unsigned int);
|
||||
#ifdef CONFIG_TEST
|
||||
void print_db(DB_Type);
|
||||
void reset();
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
unsigned int add_front(unsigned int);
|
||||
void del(unsigned int);
|
||||
void del_track(unsigned int);
|
||||
void track_updated(unsigned int);
|
||||
unsigned int size();
|
||||
|
||||
void add_sort(sort_t, bool ascending = true);
|
||||
|
|
|
@ -24,8 +24,11 @@ static void parse_error(GstMessage *error)
|
|||
{
|
||||
GError *err;
|
||||
gchar *debug;
|
||||
library :: Song song;
|
||||
|
||||
library :: lookup(cur_trackid, &song);
|
||||
gst_message_parse_error(error, &err, &debug);
|
||||
g_print("Error playing file: %s\n", song.track->primary_key.c_str());
|
||||
g_print("Error: %s\n", err->message);
|
||||
g_error_free(err);
|
||||
g_free(debug);
|
||||
|
@ -50,9 +53,11 @@ static gboolean on_message(GstBus *bus, GstMessage *message, gpointer data)
|
|||
case GST_MESSAGE_ERROR:
|
||||
parse_error(message);
|
||||
audio :: next();
|
||||
audio :: play();
|
||||
break;
|
||||
case GST_MESSAGE_EOS:
|
||||
handle_pause_count();
|
||||
library :: track_played(cur_trackid);
|
||||
audio :: next();
|
||||
audio :: seek_to(0);
|
||||
default:
|
||||
|
|
|
@ -13,20 +13,21 @@ static void no_op(library :: Song &) {}
|
|||
|
||||
|
||||
static struct Callbacks callbacks = {
|
||||
.on_play = no_op,
|
||||
.on_pause = no_op,
|
||||
.on_track_loaded = no_op,
|
||||
.on_pause_count_changed = no_op,
|
||||
.on_play = no_op,
|
||||
.on_pause = no_op,
|
||||
.on_track_loaded = no_op,
|
||||
.on_pause_count_changed = no_op,
|
||||
|
||||
.on_library_add = no_op,
|
||||
.on_library_update = no_op,
|
||||
.on_library_track_add = no_op,
|
||||
.on_library_track_del = no_op,
|
||||
.on_library_add = no_op,
|
||||
.on_library_update = no_op,
|
||||
.on_library_track_add = no_op,
|
||||
.on_library_track_del = no_op,
|
||||
.on_library_track_updated = no_op,
|
||||
|
||||
.on_queue_track_add = no_op,
|
||||
.on_queue_track_del = no_op,
|
||||
.on_queue_track_changed = no_op,
|
||||
.on_queue_changed = no_op,
|
||||
.on_queue_track_add = no_op,
|
||||
.on_queue_track_del = no_op,
|
||||
.on_queue_track_changed = no_op,
|
||||
.on_queue_changed = no_op,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -23,6 +23,11 @@ static void del_library_track(unsigned int id)
|
|||
library_playqueue.del_track(id);
|
||||
}
|
||||
|
||||
static void change_library_track(unsigned int id)
|
||||
{
|
||||
library_playqueue.track_updated(id);
|
||||
}
|
||||
|
||||
void deck :: init()
|
||||
{
|
||||
library_playqueue.set_flag(PQ_REPEAT);
|
||||
|
@ -34,6 +39,7 @@ void deck :: init()
|
|||
|
||||
get_callbacks()->on_library_track_add = add_library_track;
|
||||
get_callbacks()->on_library_track_del = del_library_track;
|
||||
get_callbacks()->on_library_track_updated = change_library_track;
|
||||
get_callbacks()->on_queue_changed = write;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
|
||||
#include <glib.h>
|
||||
#include <sstream>
|
||||
#include <time.h>
|
||||
|
||||
static Database<library :: Album> album_db("album.db");
|
||||
static Database<library :: AGInfo> artist_db("artist.db");
|
||||
static Database<library :: AGInfo> genre_db("genre.db");
|
||||
static Database<library :: Track> track_db("track.db");
|
||||
|
||||
static Database<library :: Library> library_db("library.db");
|
||||
|
||||
struct ImportData {
|
||||
|
@ -589,6 +589,20 @@ void library :: import()
|
|||
} while (true);
|
||||
}
|
||||
|
||||
void library :: track_played(unsigned int id)
|
||||
{
|
||||
time_t the_time = time(NULL);
|
||||
struct tm *now = localtime(&the_time);
|
||||
|
||||
track_db[id].play_count++;
|
||||
track_db[id].last_day = now->tm_mday;
|
||||
track_db[id].last_month = now->tm_mon + 1;
|
||||
track_db[id].last_year = now->tm_year + 1900;
|
||||
|
||||
track_db.save();
|
||||
get_callbacks()->on_library_track_updated(id);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TEST
|
||||
void library :: print_db(DB_Type type)
|
||||
{
|
||||
|
|
|
@ -259,6 +259,14 @@ void Playqueue :: del_track(unsigned int track_id)
|
|||
}
|
||||
}
|
||||
|
||||
void Playqueue :: track_updated(unsigned int track_id)
|
||||
{
|
||||
for (unsigned int i = 0; i < tracks.size(); i++) {
|
||||
if (tracks[i] == track_id)
|
||||
get_callbacks()->on_queue_track_changed(this, i);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int Playqueue :: size()
|
||||
{
|
||||
return tracks.size();
|
||||
|
|
Loading…
Reference in New Issue