diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playback.c | 8 | ||||
-rw-r--r-- | apps/playlist.c | 25 | ||||
-rw-r--r-- | apps/playlist.h | 2 | ||||
-rw-r--r-- | apps/wps.c | 16 |
4 files changed, 35 insertions, 16 deletions
diff --git a/apps/playback.c b/apps/playback.c index 92ef340734..7565cbcdf5 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -1320,9 +1320,12 @@ void audio_thread(void) | |||
1320 | ci.seek_time = 0; | 1320 | ci.seek_time = 0; |
1321 | pcm_crossfade_init(); | 1321 | pcm_crossfade_init(); |
1322 | audio_play_start((int)ev.data); | 1322 | audio_play_start((int)ev.data); |
1323 | playlist_update_resume_info(audio_current_track()); | ||
1323 | break ; | 1324 | break ; |
1324 | 1325 | ||
1325 | case AUDIO_STOP: | 1326 | case AUDIO_STOP: |
1327 | if (playing) | ||
1328 | playlist_update_resume_info(audio_current_track()); | ||
1326 | audio_stop_playback(); | 1329 | audio_stop_playback(); |
1327 | break ; | 1330 | break ; |
1328 | 1331 | ||
@@ -1342,6 +1345,7 @@ void audio_thread(void) | |||
1342 | case AUDIO_TRACK_CHANGED: | 1345 | case AUDIO_TRACK_CHANGED: |
1343 | if (track_changed_callback) | 1346 | if (track_changed_callback) |
1344 | track_changed_callback(cur_ti); | 1347 | track_changed_callback(cur_ti); |
1348 | playlist_update_resume_info(audio_current_track()); | ||
1345 | break ; | 1349 | break ; |
1346 | 1350 | ||
1347 | case AUDIO_CODEC_DONE: | 1351 | case AUDIO_CODEC_DONE: |
@@ -1357,6 +1361,10 @@ void audio_thread(void) | |||
1357 | usb_wait_for_disconnect(&audio_queue); | 1361 | usb_wait_for_disconnect(&audio_queue); |
1358 | break ; | 1362 | break ; |
1359 | #endif | 1363 | #endif |
1364 | case SYS_TIMEOUT: | ||
1365 | if (playing) | ||
1366 | playlist_update_resume_info(audio_current_track()); | ||
1367 | break; | ||
1360 | } | 1368 | } |
1361 | } | 1369 | } |
1362 | } | 1370 | } |
diff --git a/apps/playlist.c b/apps/playlist.c index 304a511c37..91ca1f640a 100644 --- a/apps/playlist.c +++ b/apps/playlist.c | |||
@@ -2010,6 +2010,31 @@ int playlist_get_resume_info(int *resume_index) | |||
2010 | return 0; | 2010 | return 0; |
2011 | } | 2011 | } |
2012 | 2012 | ||
2013 | /* Update resume info for current playing song. Returns -1 on error. */ | ||
2014 | int playlist_update_resume_info(const struct mp3entry* id3) | ||
2015 | { | ||
2016 | struct playlist_info* playlist = ¤t_playlist; | ||
2017 | |||
2018 | if (id3) | ||
2019 | { | ||
2020 | if (global_settings.resume_index != playlist->index || | ||
2021 | global_settings.resume_offset != id3->offset) | ||
2022 | { | ||
2023 | global_settings.resume_index = playlist->index; | ||
2024 | global_settings.resume_offset = id3->offset; | ||
2025 | settings_save(); | ||
2026 | } | ||
2027 | } | ||
2028 | else | ||
2029 | { | ||
2030 | global_settings.resume_index = -1; | ||
2031 | global_settings.resume_offset = -1; | ||
2032 | settings_save(); | ||
2033 | } | ||
2034 | |||
2035 | return 0; | ||
2036 | } | ||
2037 | |||
2013 | /* Returns index of current playing track for display purposes. This value | 2038 | /* Returns index of current playing track for display purposes. This value |
2014 | should not be used for resume purposes as it doesn't represent the actual | 2039 | should not be used for resume purposes as it doesn't represent the actual |
2015 | index into the playlist */ | 2040 | index into the playlist */ |
diff --git a/apps/playlist.h b/apps/playlist.h index 5346cc8663..eee8bf5945 100644 --- a/apps/playlist.h +++ b/apps/playlist.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <stdbool.h> | 23 | #include <stdbool.h> |
24 | #include "file.h" | 24 | #include "file.h" |
25 | #include "kernel.h" | 25 | #include "kernel.h" |
26 | #include "id3.h" | ||
26 | 27 | ||
27 | /* playlist data */ | 28 | /* playlist data */ |
28 | 29 | ||
@@ -79,6 +80,7 @@ bool playlist_check(int steps); | |||
79 | char *playlist_peek(int steps); | 80 | char *playlist_peek(int steps); |
80 | int playlist_next(int steps); | 81 | int playlist_next(int steps); |
81 | int playlist_get_resume_info(int *resume_index); | 82 | int playlist_get_resume_info(int *resume_index); |
83 | int playlist_update_resume_info(const struct mp3entry* id3); | ||
82 | int playlist_get_display_index(void); | 84 | int playlist_get_display_index(void); |
83 | int playlist_amount(void); | 85 | int playlist_amount(void); |
84 | 86 | ||
diff --git a/apps/wps.c b/apps/wps.c index e6d7036d6f..70af303bf0 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -250,22 +250,6 @@ static bool update(void) | |||
250 | 250 | ||
251 | status_draw(false); | 251 | status_draw(false); |
252 | 252 | ||
253 | /* save resume data */ | ||
254 | if ( id3 && | ||
255 | (global_settings.resume_offset != id3->offset || track_changed)) { | ||
256 | |||
257 | if (!playlist_get_resume_info(&global_settings.resume_index)) | ||
258 | { | ||
259 | global_settings.resume_offset = id3->offset; | ||
260 | settings_save(); | ||
261 | } | ||
262 | } | ||
263 | else if ( !id3 && track_changed ) { | ||
264 | global_settings.resume_index = -1; | ||
265 | global_settings.resume_offset = -1; | ||
266 | settings_save(); | ||
267 | } | ||
268 | |||
269 | return retcode; | 253 | return retcode; |
270 | } | 254 | } |
271 | 255 | ||