diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/cuesheet.c | 51 | ||||
-rw-r--r-- | apps/cuesheet.h | 6 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 7 | ||||
-rw-r--r-- | apps/gui/wps.c | 1 | ||||
-rw-r--r-- | apps/mpeg.c | 1 | ||||
-rw-r--r-- | apps/playback.c | 2 |
6 files changed, 41 insertions, 27 deletions
diff --git a/apps/cuesheet.c b/apps/cuesheet.c index c75ea65334..cadb2ab8f6 100644 --- a/apps/cuesheet.c +++ b/apps/cuesheet.c | |||
@@ -346,29 +346,39 @@ bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_ | |||
346 | } | 346 | } |
347 | 347 | ||
348 | } | 348 | } |
349 | 349 | const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, | |
350 | void cue_spoof_id3(struct cuesheet *cue, struct mp3entry *id3) | 350 | int offset_tracks, char *buf, int buf_size) |
351 | { | 351 | { |
352 | struct cuesheet *cue = id3?id3->cuesheet:NULL; | ||
352 | if (!cue || !cue->curr_track) | 353 | if (!cue || !cue->curr_track) |
353 | return; | 354 | return NULL; |
354 | 355 | ||
355 | struct cue_track_info *track = cue->curr_track; | 356 | struct cue_track_info *track = cue->curr_track; |
356 | 357 | if (offset_tracks) | |
357 | id3->title = *track->title ? track->title : NULL; | 358 | { |
358 | id3->artist = *track->performer ? track->performer : NULL; | 359 | if (cue->curr_track_idx+offset_tracks < cue->track_count) |
359 | id3->composer = *track->songwriter ? track->songwriter : NULL; | 360 | track+=offset_tracks; |
360 | id3->album = *cue->title ? cue->title : NULL; | 361 | else |
361 | 362 | return NULL; | |
362 | /* if the album artist is the same as the track artist, we hide it. */ | 363 | } |
363 | if (strcmp(cue->performer, track->performer)) | 364 | switch (token->type) |
364 | id3->albumartist = *cue->performer ? cue->performer : NULL; | 365 | { |
365 | else | 366 | case WPS_TOKEN_METADATA_ARTIST: |
366 | id3->albumartist = NULL; | 367 | return *track->performer ? track->performer : NULL; |
367 | 368 | case WPS_TOKEN_METADATA_COMPOSER: | |
368 | int i = cue->curr_track_idx; | 369 | return *track->songwriter ? track->songwriter : NULL; |
369 | id3->tracknum = i+1; | 370 | case WPS_TOKEN_METADATA_ALBUM: |
370 | if (id3->track_string) | 371 | return *cue->title ? cue->title : NULL; |
371 | snprintf(id3->track_string, 10, "%d/%d", i+1, cue->track_count); | 372 | case WPS_TOKEN_METADATA_ALBUM_ARTIST: |
373 | return *cue->performer ? cue->performer : NULL; | ||
374 | case WPS_TOKEN_METADATA_TRACK_TITLE: | ||
375 | return *track->title ? track->title : NULL; | ||
376 | case WPS_TOKEN_METADATA_TRACK_NUMBER: | ||
377 | snprintf(buf, buf_size, "%d/%d", | ||
378 | cue->curr_track_idx+offset_tracks+1, cue->track_count); | ||
379 | return buf; | ||
380 | } | ||
381 | return NULL; | ||
372 | } | 382 | } |
373 | 383 | ||
374 | #ifdef HAVE_LCD_BITMAP | 384 | #ifdef HAVE_LCD_BITMAP |
@@ -402,7 +412,6 @@ bool cuesheet_subtrack_changed(struct mp3entry *id3) | |||
402 | && id3->elapsed >= (cue->curr_track+1)->offset))) | 412 | && id3->elapsed >= (cue->curr_track+1)->offset))) |
403 | { | 413 | { |
404 | cue_find_current_track(cue, id3->elapsed); | 414 | cue_find_current_track(cue, id3->elapsed); |
405 | cue_spoof_id3(cue, id3); | ||
406 | return true; | 415 | return true; |
407 | } | 416 | } |
408 | return false; | 417 | return false; |
diff --git a/apps/cuesheet.h b/apps/cuesheet.h index 8e9266416d..451fff5dbe 100644 --- a/apps/cuesheet.h +++ b/apps/cuesheet.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "screens.h" | 26 | #include "screens.h" |
27 | #include "file.h" | 27 | #include "file.h" |
28 | #include "metadata.h" | 28 | #include "metadata.h" |
29 | #include "skin_engine/skin_tokens.h" | ||
29 | 30 | ||
30 | #define MAX_NAME 80 /* Max length of information strings */ | 31 | #define MAX_NAME 80 /* Max length of information strings */ |
31 | #define MAX_TRACKS 99 /* Max number of tracks in a cuesheet */ | 32 | #define MAX_TRACKS 99 /* Max number of tracks in a cuesheet */ |
@@ -69,8 +70,9 @@ bool display_cuesheet_content(char* filename); | |||
69 | /* finds the index of the current track played within a cuesheet */ | 70 | /* finds the index of the current track played within a cuesheet */ |
70 | int cue_find_current_track(struct cuesheet *cue, unsigned long curpos); | 71 | int cue_find_current_track(struct cuesheet *cue, unsigned long curpos); |
71 | 72 | ||
72 | /* update the id3 info to that of the currently playing track in the cuesheet */ | 73 | /* Get the id3 fields from the cuesheet */ |
73 | void cue_spoof_id3(struct cuesheet *cue, struct mp3entry *id3); | 74 | const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, |
75 | int offset_tracks, char *buf, int buf_size); | ||
74 | 76 | ||
75 | /* skip to next track in the cuesheet towards "direction" (which is 1 or -1) */ | 77 | /* skip to next track in the cuesheet towards "direction" (which is 1 or -1) */ |
76 | bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_pos); | 78 | bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_pos); |
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 7997290119..39bf0d497e 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include "powermgmt.h" | 34 | #include "powermgmt.h" |
35 | #include "sound.h" | 35 | #include "sound.h" |
36 | #include "debug.h" | 36 | #include "debug.h" |
37 | #include "cuesheet.h" | ||
37 | #ifdef HAVE_LCD_CHARCELLS | 38 | #ifdef HAVE_LCD_CHARCELLS |
38 | #include "hwcompat.h" | 39 | #include "hwcompat.h" |
39 | #endif | 40 | #endif |
@@ -513,6 +514,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
513 | *intval = -1; | 514 | *intval = -1; |
514 | } | 515 | } |
515 | 516 | ||
517 | if (state->id3 && state->id3->cuesheet) | ||
518 | { | ||
519 | out_text = get_cuesheetid3_token(token, state->id3, token->next?1:0, buf, buf_size); | ||
520 | if (out_text) | ||
521 | return out_text; | ||
522 | } | ||
516 | out_text = get_id3_token(token, id3, buf, buf_size, limit, intval); | 523 | out_text = get_id3_token(token, id3, buf, buf_size, limit, intval); |
517 | if (out_text) | 524 | if (out_text) |
518 | return out_text; | 525 | return out_text; |
diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 090276d3fe..7b84782477 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c | |||
@@ -1230,7 +1230,6 @@ static void track_changed_callback(void *param) | |||
1230 | if (wps_state.id3->cuesheet) | 1230 | if (wps_state.id3->cuesheet) |
1231 | { | 1231 | { |
1232 | cue_find_current_track(wps_state.id3->cuesheet, wps_state.id3->elapsed); | 1232 | cue_find_current_track(wps_state.id3->cuesheet, wps_state.id3->elapsed); |
1233 | cue_spoof_id3(wps_state.id3->cuesheet, wps_state.id3); | ||
1234 | } | 1233 | } |
1235 | wps_sync_data.do_full_update = true; | 1234 | wps_sync_data.do_full_update = true; |
1236 | } | 1235 | } |
diff --git a/apps/mpeg.c b/apps/mpeg.c index c6090f863b..1ba491ce89 100644 --- a/apps/mpeg.c +++ b/apps/mpeg.c | |||
@@ -2079,7 +2079,6 @@ struct mp3entry* audio_current_track(void) | |||
2079 | parse_cuesheet(cuepath, curr_cuesheet)) | 2079 | parse_cuesheet(cuepath, curr_cuesheet)) |
2080 | { | 2080 | { |
2081 | id3->cuesheet = curr_cuesheet; | 2081 | id3->cuesheet = curr_cuesheet; |
2082 | cue_spoof_id3(curr_cuesheet, id3); | ||
2083 | } | 2082 | } |
2084 | } | 2083 | } |
2085 | return id3; | 2084 | return id3; |
diff --git a/apps/playback.c b/apps/playback.c index 0be45b035a..6be869f83a 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -524,7 +524,6 @@ struct mp3entry* audio_current_track(void) | |||
524 | { | 524 | { |
525 | bufread(tracks[cur_idx].cuesheet_hid, sizeof(struct cuesheet), curr_cue); | 525 | bufread(tracks[cur_idx].cuesheet_hid, sizeof(struct cuesheet), curr_cue); |
526 | thistrack_id3->cuesheet = curr_cue; | 526 | thistrack_id3->cuesheet = curr_cue; |
527 | cue_spoof_id3(thistrack_id3->cuesheet, thistrack_id3); | ||
528 | } | 527 | } |
529 | return thistrack_id3; | 528 | return thistrack_id3; |
530 | } | 529 | } |
@@ -538,7 +537,6 @@ struct mp3entry* audio_current_track(void) | |||
538 | { | 537 | { |
539 | bufread(tracks[cur_idx].cuesheet_hid, sizeof(struct cuesheet), curr_cue); | 538 | bufread(tracks[cur_idx].cuesheet_hid, sizeof(struct cuesheet), curr_cue); |
540 | othertrack_id3->cuesheet = curr_cue; | 539 | othertrack_id3->cuesheet = curr_cue; |
541 | cue_spoof_id3(othertrack_id3->cuesheet, othertrack_id3); | ||
542 | } | 540 | } |
543 | return othertrack_id3; | 541 | return othertrack_id3; |
544 | } | 542 | } |