little cleanup of plugin stuff

git-svn-id: https://svn.musicpd.org/mpd/trunk@1247 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-05-31 02:21:06 +00:00
parent 30424cb3e9
commit 97fe75a0bf
7 changed files with 43 additions and 73 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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);