diff options
-rw-r--r-- | src/inputPlugin.h | 3 | ||||
-rw-r--r-- | src/inputPlugins/flac_plugin.c | 13 | ||||
-rw-r--r-- | src/inputPlugins/mp3_plugin.c | 9 | ||||
-rw-r--r-- | src/inputPlugins/ogg_plugin.c | 43 | ||||
-rw-r--r-- | src/song.c | 8 | ||||
-rw-r--r-- | src/tag.c | 16 | ||||
-rw-r--r-- | src/tag.h | 24 |
7 files changed, 43 insertions, 73 deletions
diff --git a/src/inputPlugin.h b/src/inputPlugin.h index 9e1ff395d..fe59b722a 100644 --- a/src/inputPlugin.h +++ b/src/inputPlugin.h @@ -15,7 +15,8 @@ typedef int (* InputPlugin_streamDecodeFunc) (OutputBuffer *, DecoderControl *, typedef int (* InputPlugin_fileDecodeFunc) (OutputBuffer *, DecoderControl *); -typedef MpdTag * (* InputPlugin_tagDupFunc) (char * utf8file); +/* file should be the full path! */ +typedef MpdTag * (* InputPlugin_tagDupFunc) (char * file); typedef struct _InputPlugin { char * name; diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c index 23e2bcfea..a90270850 100644 --- a/src/inputPlugins/flac_plugin.c +++ b/src/inputPlugins/flac_plugin.c @@ -27,7 +27,6 @@ #include "../outputBuffer.h" #include "../replayGain.h" #include "../audio.h" -#include "../path.h" #include <stdio.h> #include <string.h> @@ -438,7 +437,7 @@ FLAC__StreamDecoderWriteStatus flacWrite(const FLAC__SeekableStreamDecoder *dec, return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } -MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) { +MpdTag * flacMetadataDup(char * file, int * vorbisCommentFound) { MpdTag * ret = NULL; FLAC__Metadata_SimpleIterator * it; FLAC__StreamMetadata * block = NULL; @@ -448,7 +447,7 @@ MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) { *vorbisCommentFound = 0; it = FLAC__metadata_simple_iterator_new(); - if(!FLAC__metadata_simple_iterator_init(it,rmp2amp(utf8ToFsCharset(utf8file)),1,0)) { + if(!FLAC__metadata_simple_iterator_init(it, file ,1,0)) { FLAC__metadata_simple_iterator_delete(it); return ret; } @@ -530,14 +529,14 @@ MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) { return ret; } -MpdTag * flacTagDup(char * utf8file) { +MpdTag * flacTagDup(char * file) { MpdTag * ret = NULL; int foundVorbisComment = 0; - ret = flacMetadataDup(utf8file,&foundVorbisComment); + ret = flacMetadataDup(file, &foundVorbisComment); if(!ret) return NULL; if(!foundVorbisComment) { - MpdTag * temp = id3Dup(utf8file); + MpdTag * temp = id3Dup(file); if(temp) { temp->time = ret->time; freeMpdTag(ret); @@ -545,8 +544,6 @@ MpdTag * flacTagDup(char * utf8file) { } } - if(ret) validateUtf8Tag(ret); - return ret; } diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c index 594f17876..de23b6c7b 100644 --- a/src/inputPlugins/mp3_plugin.c +++ b/src/inputPlugins/mp3_plugin.c @@ -36,7 +36,6 @@ #include "../log.h" #include "../utils.h" #include "../tag.h" -#include "../path.h" #include <stdio.h> #include <string.h> @@ -613,21 +612,19 @@ int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) { return 0; } -MpdTag * mp3_tagDup(char * utf8file) { +MpdTag * mp3_tagDup(char * file) { MpdTag * ret = NULL; int time; - ret = id3Dup(utf8file); + ret = id3Dup(file); - time = getMp3TotalTime(rmp2amp(utf8ToFsCharset(utf8file))); + time = getMp3TotalTime(file); if(time>=0) { if(!ret) ret = newMpdTag(); ret->time = time; } - if(ret) validateUtf8Tag(ret); - return ret; } diff --git a/src/inputPlugins/ogg_plugin.c b/src/inputPlugins/ogg_plugin.c index 4f44af4c2..4f49f286b 100644 --- a/src/inputPlugins/ogg_plugin.c +++ b/src/inputPlugins/ogg_plugin.c @@ -108,7 +108,9 @@ long ogg_tell_cb(void * vdata) { char * ogg_parseComment(char * comment, char * needle) { int len = strlen(needle); - if(strncasecmp(comment,needle,len)) return comment+len; + if(strncasecmp(comment, needle, len) == 0 && *(comment+len) == '=') { + return comment+len+1; + } return NULL; } @@ -274,16 +276,14 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) return 0; } -MpdTag * oggTagDup(char * utf8file) { +MpdTag * oggTagDup(char * file) { MpdTag * ret = NULL; FILE * fp; OggVorbis_File vf; char ** comments; char * temp; - char * s1; - char * s2; - fp = fopen(rmp2amp(utf8ToFsCharset(utf8file)),"r"); + fp = fopen(file,"r"); if(!fp) return NULL; if(ov_open(fp,&vf,NULL,0)<0) { fclose(fp); @@ -296,33 +296,28 @@ MpdTag * oggTagDup(char * utf8file) { comments = ov_comment(&vf,-1)->user_comments; while(*comments) { - temp = strdup(*comments); - ++comments; - if(!(s1 = strtok(temp,"="))) continue; - s2 = strtok(NULL,""); - if(!s1 || !s2); - else if(0==strcasecmp(s1,"artist")) { + if((temp = ogg_parseComment(*comments,"artist"))) { if(!ret->artist) { - stripReturnChar(s2); - ret->artist = strdup(s2); + ret->artist = strdup(temp); + stripReturnChar(ret->artist); } - } - else if(0==strcasecmp(s1,"title")) { + } + else if((temp = ogg_parseComment(*comments,"title"))) { if(!ret->title) { - stripReturnChar(s2); - ret->title = strdup(s2); + ret->title = strdup(temp); + stripReturnChar(ret->title); } } - else if(0==strcasecmp(s1,"album")) { + else if((temp = ogg_parseComment(*comments,"album"))) { if(!ret->album) { - stripReturnChar(s2); - ret->album = strdup(s2); + ret->album = strdup(temp); + stripReturnChar(ret->album); } } - else if(0==strcasecmp(s1,"tracknumber")) { + else if((temp = ogg_parseComment(*comments,"tracknumber"))) { if(!ret->track) { - stripReturnChar(s2); - ret->track = strdup(s2); + ret->track = strdup(temp); + stripReturnChar(ret->track); } } free(temp); @@ -330,8 +325,6 @@ MpdTag * oggTagDup(char * utf8file) { ov_clear(&vf); - if(ret) validateUtf8Tag(ret); - return ret; } diff --git a/src/song.c b/src/song.c index 9d2a09e54..c1f465177 100644 --- a/src/song.c +++ b/src/song.c @@ -59,7 +59,9 @@ Song * newSong(char * utf8url, SONG_TYPE type) { if(song->type == SONG_TYPE_FILE) { InputPlugin * plugin; if((plugin = isMusic(utf8url,&(song->mtime)))) { - song->tag = plugin->tagDupFunc(utf8url); + song->tag = plugin->tagDupFunc( + rmp2amp(utf8ToFsCharset(utf8url))); + if(song->tag) validateUtf8Tag(song->tag); } if(!song->tag || song->tag->time<0) { freeSong(song); @@ -267,7 +269,9 @@ int updateSongInfo(Song * song) { song->tag = NULL; if((plugin = isMusic(utf8url,&(song->mtime)))) { - song->tag = plugin->tagDupFunc(utf8url); + song->tag = plugin->tagDupFunc( + rmp2amp(utf8ToFsCharset(utf8url))); + if(song->tag) validateUtf8Tag(song->tag); } if(!song->tag || song->tag->time<0) return -1; else addSongToTables(song); @@ -101,22 +101,22 @@ char * getID3Info(struct id3_tag * tag, char * id) { } #endif -MpdTag * id3Dup(char * utf8filename) { +MpdTag * id3Dup(char * file) { MpdTag * ret = NULL; #ifdef HAVE_ID3TAG - struct id3_file * file; + struct id3_file * id3_file; struct id3_tag * tag; char * str; - file = id3_file_open(rmp2amp(utf8ToFsCharset(utf8filename)), - ID3_FILE_MODE_READONLY); - if(!file) { + id3_file = id3_file_open(file, ID3_FILE_MODE_READONLY); + + if(!id3_file) { return NULL; } - tag = id3_file_tag(file); + tag = id3_file_tag(id3_file); if(!tag) { - id3_file_close(file); + id3_file_close(id3_file); return NULL; } @@ -148,7 +148,7 @@ MpdTag * id3Dup(char * utf8filename) { ret->track = str; } - id3_file_close(file); + id3_file_close(id3_file); #endif return ret; @@ -31,34 +31,12 @@ typedef struct _MpdTag { int time; } MpdTag; -MpdTag * id3Dup(char * utf8filename); +MpdTag * id3Dup(char * file); MpdTag * newMpdTag(); void freeMpdTag(MpdTag * tag); -#ifdef HAVE_MAD -MpdTag * mp3TagDup(char * utf8file); -#endif - -#ifdef HAVE_FAAD -MpdTag * aacTagDup(char * utf8file); - -MpdTag * mp4TagDup(char * utf8file); -#endif - -#ifdef HAVE_OGG -MpdTag * oggTagDup(char * utf8file); -#endif - -#ifdef HAVE_FLAC -MpdTag * flacTagDup(char * utf8file); -#endif - -#ifdef HAVE_AUDIOFILE -MpdTag * audiofileTagDup(char * utf8file); -#endif - void printMpdTag(FILE * fp, MpdTag * tag); MpdTag * mpdTagDup(MpdTag * tag); |