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:
parent
30424cb3e9
commit
97fe75a0bf
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
16
src/tag.c
16
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;
|
||||
|
24
src/tag.h
24
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);
|
||||
|
Loading…
Reference in New Issue
Block a user