summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-06-06 06:28:40 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-06-06 06:28:40 +0000
commitb8d98fcc1991a60ec1cde475b68fcda67153528b (patch)
treea9e33268e8b289983ee753961894d0608351dc5f /apps
parentb807cb0808b2c045e0fdcd332c711a713eb25032 (diff)
downloadrockbox-b8d98fcc1991a60ec1cde475b68fcda67153528b.tar.gz
rockbox-b8d98fcc1991a60ec1cde475b68fcda67153528b.zip
Change cuesheet handling so the id3 info is not spoofed anymore. If something wants the subtracks info it is easy to get to. This makes next track display in the skins show the next subtrack if we are in a cuesheet
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26611 a1c6a512-1295-4272-9138-f99709370657
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 }