From 2960b72967b4c0e7ba8a01303d825bea8a841129 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Tue, 1 Apr 2014 21:00:30 -0400 Subject: [PATCH] audio: Save and load current trackid Signed-off-by: Anna Schumaker --- gui/main.cpp | 1 + include/audio.h | 1 + lib/audio.cpp | 24 +++++++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gui/main.cpp b/gui/main.cpp index ac881e1b..7f25a63f 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -34,6 +34,7 @@ Gtk::Window *ocarina_init(int *argc, char ***argv) share_file("ocarina6.glade"); post_init_tabs(); + audio::load_state(); return window; } diff --git a/include/audio.h b/include/audio.h index de0fafa8..427d39e7 100644 --- a/include/audio.h +++ b/include/audio.h @@ -16,6 +16,7 @@ namespace audio { void init(int *, char ***); + void load_state(); void quit(); void play(); diff --git a/lib/audio.cpp b/lib/audio.cpp index 546f453d..e0658ce3 100644 --- a/lib/audio.cpp +++ b/lib/audio.cpp @@ -20,6 +20,7 @@ static unsigned int o_pause_count = 0; static bool o_should_pause = false; static Playqueue o_recently_played(PQ_ENABLED); +static File f_cur_track("cur_track", FILE_TYPE_DATA); static void parse_error(GstMessage *error) { @@ -83,6 +84,13 @@ static bool change_state(GstState state) } } +static void save_state() +{ + f_cur_track.open(OPEN_WRITE); + f_cur_track << cur_trackid << std::endl; + f_cur_track.close(); +} + static bool load_song(library :: Song &song) { GstState state; @@ -121,6 +129,17 @@ void audio :: init(int *argc, char ***argv) gst_bus_add_watch(bus, on_message, NULL); } +void audio :: load_state() +{ + unsigned int id; + if (f_cur_track.exists()) { + f_cur_track.open(OPEN_READ); + f_cur_track >> id; + f_cur_track.close(); + audio :: load_trackid(id); + } +} + void audio :: quit() { change_state(GST_STATE_NULL); @@ -182,6 +201,7 @@ void audio :: next() track_loaded = true; cur_trackid = id; + save_state(); o_recently_played.del_track(id); o_recently_played.add_front(id); o_recently_played.set_cur(0); @@ -199,13 +219,14 @@ void audio :: previous() library :: lookup(id, &song); load_song(song); cur_trackid = id; + save_state(); } void audio :: load_trackid(unsigned int track_id) { library :: Song song; - if (track_id == cur_trackid) + if ((track_id == cur_trackid) && (track_loaded == true)) return; track_loaded = false; @@ -214,6 +235,7 @@ void audio :: load_trackid(unsigned int track_id) track_loaded = true; cur_trackid = track_id; + save_state(); o_recently_played.del_track(track_id); o_recently_played.add_front(track_id); o_recently_played.set_cur(0);