summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/cuesheet.c51
-rw-r--r--apps/cuesheet.h6
-rw-r--r--apps/gui/skin_engine/skin_tokens.c7
-rw-r--r--apps/gui/wps.c1
-rw-r--r--apps/mpeg.c1
-rw-r--r--apps/playback.c2
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 349const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3,
350void 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 */
70int cue_find_current_track(struct cuesheet *cue, unsigned long curpos); 71int 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 */
73void cue_spoof_id3(struct cuesheet *cue, struct mp3entry *id3); 74const 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) */
76bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_pos); 78bool 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 }