move time back into MpdTag
git-svn-id: https://svn.musicpd.org/mpd/trunk@250 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
31d44ea775
commit
1157b5d332
|
@ -803,7 +803,7 @@ int directoryPrintSongInfo(FILE * fp, Song * song, void * data) {
|
|||
int sumSongTime(FILE * fp, Song * song, void * data) {
|
||||
unsigned long * time = (unsigned long *)data;
|
||||
|
||||
if(song->time>=0) *time+=song->time;
|
||||
if(song->tag && song->tag->time>=0) *time+=song->tag->time;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -108,9 +108,9 @@ int playerInit() {
|
|||
sigaction(SIGTERM,&sa,NULL);
|
||||
|
||||
close(listenSocket);
|
||||
finishPlaylist();
|
||||
freeAllInterfaces();
|
||||
closeMp3Directory();
|
||||
finishPlaylist();
|
||||
closeTables();
|
||||
finishPaths();
|
||||
finishPermissions();
|
||||
|
|
43
src/song.c
43
src/song.c
|
@ -48,7 +48,6 @@ Song * newNullSong() {
|
|||
|
||||
song->tag = NULL;
|
||||
song->utf8file = NULL;
|
||||
song->time = -1;
|
||||
|
||||
return song;
|
||||
}
|
||||
|
@ -61,34 +60,26 @@ Song * newSong(char * utf8file) {
|
|||
if(0);
|
||||
#ifdef HAVE_OGG
|
||||
else if(isOgg(utf8file,&(song->mtime))) {
|
||||
song->time = getOggTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = oggTagDup(utf8file);
|
||||
song->tag = oggTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_FLAC
|
||||
else if((isFlac(utf8file,&(song->mtime)))) {
|
||||
song->time = getFlacTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = flacTagDup(utf8file);
|
||||
song->tag = flacTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_MAD
|
||||
else if(isMp3(utf8file,&(song->mtime))) {
|
||||
song->time = getMp3TotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = mp3TagDup(utf8file);
|
||||
song->tag = mp3TagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_AUDIOFILE
|
||||
else if(isWave(utf8file,&(song->mtime))) {
|
||||
song->time = getAudiofileTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = audiofileTagDup(utf8file);
|
||||
song->tag = audiofileTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(song->time<0) {
|
||||
if(!song->tag || song->tag->time<0) {
|
||||
freeSong(song);
|
||||
song = NULL;
|
||||
}
|
||||
|
@ -130,8 +121,6 @@ void freeSongList(SongList * list) {
|
|||
int printSongInfo(FILE * fp, Song * song) {
|
||||
myfprintf(fp,"%s%s\n",SONG_FILE,song->utf8file);
|
||||
|
||||
if(song->time>=0) myfprintf(fp,"%s%i\n",SONG_TIME,song->time);
|
||||
|
||||
if(song->tag) printMpdTag(fp,song->tag);
|
||||
|
||||
return 0;
|
||||
|
@ -203,7 +192,8 @@ void readSongInfoIntoList(FILE * fp, SongList * list) {
|
|||
song->tag->title = strdup(&(buffer[strlen(SONG_TITLE)]));
|
||||
}
|
||||
else if(0==strncmp(SONG_TIME,buffer,strlen(SONG_TIME))) {
|
||||
song->time = atoi(&(buffer[strlen(SONG_TIME)]));
|
||||
if(!song->tag) song->tag = newMpdTag();
|
||||
song->tag->time = atoi(&(buffer[strlen(SONG_TIME)]));
|
||||
}
|
||||
else if(0==strncmp(SONG_MTIME,buffer,strlen(SONG_MTIME))) {
|
||||
song->mtime = atoi(&(buffer[strlen(SONG_TITLE)]));
|
||||
|
@ -227,40 +217,31 @@ int updateSongInfo(Song * song) {
|
|||
removeASongFromTables(song);
|
||||
if(song->tag) freeMpdTag(song->tag);
|
||||
|
||||
song->time = -1;
|
||||
song->tag = NULL;
|
||||
|
||||
if(0);
|
||||
#ifdef HAVE_OGG
|
||||
else if(isOgg(utf8file,&(song->mtime))) {
|
||||
song->time = getOggTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = oggTagDup(utf8file);
|
||||
song->tag = oggTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_FLAC
|
||||
else if((isFlac(utf8file,&(song->mtime)))) {
|
||||
song->time = getFlacTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = flacTagDup(utf8file);
|
||||
song->tag = flacTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_MAD
|
||||
else if(isMp3(utf8file,&(song->mtime))) {
|
||||
song->time = getMp3TotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = mp3TagDup(utf8file);
|
||||
song->tag = mp3TagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_AUDIOFILE
|
||||
else if(isWave(utf8file,&(song->mtime))) {
|
||||
song->time = getAudiofileTotalTime(
|
||||
rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
if(song->time>=0) song->tag = audiofileTagDup(utf8file);
|
||||
song->tag = audiofileTagDup(utf8file);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(song->time<0) return -1;
|
||||
if(!song->tag || song->tag->time<0) return -1;
|
||||
else addSongToTables(song);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -32,7 +32,6 @@ typedef struct _Song {
|
|||
char * utf8file;
|
||||
MpdTag * tag;
|
||||
time_t mtime;
|
||||
int time;
|
||||
} Song;
|
||||
|
||||
typedef List SongList;
|
||||
|
|
33
src/tag.c
33
src/tag.c
|
@ -20,6 +20,8 @@
|
|||
#include "path.h"
|
||||
#include "myfprintf.h"
|
||||
#include "sig_handlers.h"
|
||||
#include "mp3_decode.h"
|
||||
#include "audiofile_decode.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
@ -48,6 +50,7 @@ void printMpdTag(FILE * fp, MpdTag * tag) {
|
|||
if(tag->album) myfprintf(fp,"Album: %s\n",tag->album);
|
||||
if(tag->track) myfprintf(fp,"Track: %s\n",tag->track);
|
||||
if(tag->title) myfprintf(fp,"Title: %s\n",tag->title);
|
||||
if(tag->time>=0) myfprintf(fp,"Time: %i\n",tag->time);
|
||||
}
|
||||
|
||||
#ifdef HAVE_ID3TAG
|
||||
|
@ -135,6 +138,12 @@ MpdTag * id3Dup(char * utf8filename) {
|
|||
#ifdef HAVE_AUDIOFILE
|
||||
MpdTag * audiofileTagDup(char * utf8file) {
|
||||
MpdTag * ret = NULL;
|
||||
int time = getAudiofileTotalTime(rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
|
||||
if (time>=0) {
|
||||
if(!ret) ret = newMpdTag();
|
||||
ret->time = time;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -143,9 +152,17 @@ MpdTag * audiofileTagDup(char * utf8file) {
|
|||
#ifdef HAVE_MAD
|
||||
MpdTag * mp3TagDup(char * utf8file) {
|
||||
MpdTag * ret = NULL;
|
||||
int time;
|
||||
|
||||
ret = id3Dup(utf8file);
|
||||
|
||||
time = getMp3TotalTime(rmp2amp(utf8ToFsCharset(utf8file)));
|
||||
|
||||
if(time>=0) {
|
||||
if(!ret) ret = newMpdTag();
|
||||
ret->time = time;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
@ -171,6 +188,7 @@ MpdTag * oggTagDup(char * utf8file) {
|
|||
}
|
||||
|
||||
ret = newMpdTag();
|
||||
ret->time = (int)(ov_time_total(&vf,-1)+0.5);
|
||||
|
||||
comments = ov_comment(&vf,-1)->user_comments;
|
||||
|
||||
|
@ -297,6 +315,10 @@ MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) {
|
|||
}
|
||||
else if(block->type == FLAC__METADATA_TYPE_STREAMINFO) {
|
||||
if(!ret) ret = newMpdTag();
|
||||
ret->time = ((float)block->data.stream_info.
|
||||
total_samples) /
|
||||
block->data.stream_info.sample_rate +
|
||||
0.5;
|
||||
}
|
||||
FLAC__metadata_object_delete(block);
|
||||
} while(FLAC__metadata_simple_iterator_next(it));
|
||||
|
@ -311,9 +333,14 @@ MpdTag * flacTagDup(char * utf8file) {
|
|||
int foundVorbisComment = 0;
|
||||
|
||||
ret = flacMetadataDup(utf8file,&foundVorbisComment);
|
||||
if(!ret) return NULL;
|
||||
if(!foundVorbisComment) {
|
||||
if(ret) freeMpdTag(ret);
|
||||
ret = id3Dup(utf8file);
|
||||
MpdTag * temp = id3Dup(utf8file);
|
||||
if(temp) {
|
||||
temp->time = ret->time;
|
||||
freeMpdTag(ret);
|
||||
ret = temp;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -326,6 +353,7 @@ MpdTag * newMpdTag() {
|
|||
ret->artist = NULL;
|
||||
ret->title = NULL;
|
||||
ret->track = NULL;
|
||||
ret->time = -1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -346,6 +374,7 @@ MpdTag * mpdTagDup(MpdTag * tag) {
|
|||
ret->album = strdup(tag->album);
|
||||
ret->title = strdup(tag->title);
|
||||
ret->track = strdup(tag->track);
|
||||
ret->time = tag->time;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue