Relative path playlist patch by Mat Pritchard

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1342 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2002-07-05 12:48:17 +00:00
parent 75447f6d41
commit 6b91b7ea57
3 changed files with 24 additions and 19 deletions

View file

@ -33,14 +33,15 @@
playlist_info_t playlist;
char now_playing[256];
char now_playing[MAX_PATH+1];
char* playlist_next(int steps)
char* playlist_next(int steps, char *dirname)
{
int seek;
int max;
int fd;
int i;
char buf[MAX_PATH+1];
playlist.index = (playlist.index+steps) % playlist.amount;
seek = playlist.indices[playlist.index];
@ -48,36 +49,40 @@ char* playlist_next(int steps)
fd = open(playlist.filename, O_RDONLY);
if(-1 != fd) {
lseek(fd, seek, SEEK_SET);
max = read(fd, now_playing+1, sizeof(now_playing)-1);
max = read(fd, buf, sizeof(buf)-1);
close(fd);
/* Zero-terminate the file name */
seek=0;
while((now_playing[seek] != '\n') &&
(now_playing[seek] != '\r') &&
while((buf[seek] != '\n') &&
(buf[seek] != '\r') &&
(seek < max))
seek++;
/* Now work back killing white space */
while((now_playing[seek-1] == ' ') ||
(now_playing[seek-1] == '\t'))
while((buf[seek-1] == ' ') ||
(buf[seek-1] == '\t'))
seek--;
now_playing[seek]=0;
buf[seek]=0;
/* replace backslashes with forward slashes */
for ( i=1; i<seek; i++ )
if ( now_playing[i] == '\\' )
now_playing[i] = '/';
if ( buf[i] == '\\' )
buf[i] = '/';
if('/' == now_playing[1])
return &now_playing[1];
if('/' == buf[0]) {
strcpy(now_playing, &buf[0]);
return now_playing;
}
else {
/* handle dos style drive letter */
if ( ':' == now_playing[2] )
return &now_playing[3];
if ( ':' == buf[1] ) {
strcpy(now_playing, &buf[2]);
return now_playing;
}
else {
now_playing[0]='/';
snprintf(now_playing, MAX_PATH+1, "%s/%s", dirname, buf);
return now_playing;
}
}
@ -116,7 +121,7 @@ void play_list(char *dir, char *file)
lcd_puts(0,0,"Playing... ");
lcd_update();
/* also make the first song get playing */
mpeg_play(playlist_next(0));
mpeg_play(playlist_next(0, dir));
sleep(HZ);
}

View file

@ -38,7 +38,7 @@ extern playlist_info_t playlist;
extern bool playlist_shuffle;
void play_list(char *dir, char *file);
char* playlist_next(int steps);
char* playlist_next(int steps, char *dirname);
void randomise_playlist( playlist_info_t *playlist, unsigned int seed );
void empty_playlist( playlist_info_t *playlist );
void add_indices_to_playlist( playlist_info_t *playlist );

View file

@ -245,7 +245,7 @@ char* peek_next_track(int steps)
case 2:
/* playlist mode */
return playlist_next(steps);
return playlist_next(steps, currdir);
}
return NULL;