summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/inputPlugin.h3
-rw-r--r--src/inputPlugins/flac_plugin.c13
-rw-r--r--src/inputPlugins/mp3_plugin.c9
-rw-r--r--src/inputPlugins/ogg_plugin.c43
-rw-r--r--src/song.c8
-rw-r--r--src/tag.c16
-rw-r--r--src/tag.h24
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);
diff --git a/src/tag.c b/src/tag.c
index 493b1a19d..101c004b3 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -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;
diff --git a/src/tag.h b/src/tag.h
index 89e60adfe..e9ef6a22c 100644
--- a/src/tag.h
+++ b/src/tag.h
@@ -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);