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:
@ -15,7 +15,8 @@ typedef int (* InputPlugin_streamDecodeFunc) (OutputBuffer *, DecoderControl *,
|
|||||||
|
|
||||||
typedef int (* InputPlugin_fileDecodeFunc) (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 {
|
typedef struct _InputPlugin {
|
||||||
char * name;
|
char * name;
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include "../outputBuffer.h"
|
#include "../outputBuffer.h"
|
||||||
#include "../replayGain.h"
|
#include "../replayGain.h"
|
||||||
#include "../audio.h"
|
#include "../audio.h"
|
||||||
#include "../path.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -438,7 +437,7 @@ FLAC__StreamDecoderWriteStatus flacWrite(const FLAC__SeekableStreamDecoder *dec,
|
|||||||
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
|
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) {
|
MpdTag * flacMetadataDup(char * file, int * vorbisCommentFound) {
|
||||||
MpdTag * ret = NULL;
|
MpdTag * ret = NULL;
|
||||||
FLAC__Metadata_SimpleIterator * it;
|
FLAC__Metadata_SimpleIterator * it;
|
||||||
FLAC__StreamMetadata * block = NULL;
|
FLAC__StreamMetadata * block = NULL;
|
||||||
@ -448,7 +447,7 @@ MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) {
|
|||||||
*vorbisCommentFound = 0;
|
*vorbisCommentFound = 0;
|
||||||
|
|
||||||
it = FLAC__metadata_simple_iterator_new();
|
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);
|
FLAC__metadata_simple_iterator_delete(it);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -530,14 +529,14 @@ MpdTag * flacMetadataDup(char * utf8file, int * vorbisCommentFound) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MpdTag * flacTagDup(char * utf8file) {
|
MpdTag * flacTagDup(char * file) {
|
||||||
MpdTag * ret = NULL;
|
MpdTag * ret = NULL;
|
||||||
int foundVorbisComment = 0;
|
int foundVorbisComment = 0;
|
||||||
|
|
||||||
ret = flacMetadataDup(utf8file,&foundVorbisComment);
|
ret = flacMetadataDup(file, &foundVorbisComment);
|
||||||
if(!ret) return NULL;
|
if(!ret) return NULL;
|
||||||
if(!foundVorbisComment) {
|
if(!foundVorbisComment) {
|
||||||
MpdTag * temp = id3Dup(utf8file);
|
MpdTag * temp = id3Dup(file);
|
||||||
if(temp) {
|
if(temp) {
|
||||||
temp->time = ret->time;
|
temp->time = ret->time;
|
||||||
freeMpdTag(ret);
|
freeMpdTag(ret);
|
||||||
@ -545,8 +544,6 @@ MpdTag * flacTagDup(char * utf8file) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ret) validateUtf8Tag(ret);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include "../log.h"
|
#include "../log.h"
|
||||||
#include "../utils.h"
|
#include "../utils.h"
|
||||||
#include "../tag.h"
|
#include "../tag.h"
|
||||||
#include "../path.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -613,21 +612,19 @@ int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MpdTag * mp3_tagDup(char * utf8file) {
|
MpdTag * mp3_tagDup(char * file) {
|
||||||
MpdTag * ret = NULL;
|
MpdTag * ret = NULL;
|
||||||
int time;
|
int time;
|
||||||
|
|
||||||
ret = id3Dup(utf8file);
|
ret = id3Dup(file);
|
||||||
|
|
||||||
time = getMp3TotalTime(rmp2amp(utf8ToFsCharset(utf8file)));
|
time = getMp3TotalTime(file);
|
||||||
|
|
||||||
if(time>=0) {
|
if(time>=0) {
|
||||||
if(!ret) ret = newMpdTag();
|
if(!ret) ret = newMpdTag();
|
||||||
ret->time = time;
|
ret->time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ret) validateUtf8Tag(ret);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,9 @@ long ogg_tell_cb(void * vdata) {
|
|||||||
char * ogg_parseComment(char * comment, char * needle) {
|
char * ogg_parseComment(char * comment, char * needle) {
|
||||||
int len = strlen(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;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -274,16 +276,14 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MpdTag * oggTagDup(char * utf8file) {
|
MpdTag * oggTagDup(char * file) {
|
||||||
MpdTag * ret = NULL;
|
MpdTag * ret = NULL;
|
||||||
FILE * fp;
|
FILE * fp;
|
||||||
OggVorbis_File vf;
|
OggVorbis_File vf;
|
||||||
char ** comments;
|
char ** comments;
|
||||||
char * temp;
|
char * temp;
|
||||||
char * s1;
|
|
||||||
char * s2;
|
|
||||||
|
|
||||||
fp = fopen(rmp2amp(utf8ToFsCharset(utf8file)),"r");
|
fp = fopen(file,"r");
|
||||||
if(!fp) return NULL;
|
if(!fp) return NULL;
|
||||||
if(ov_open(fp,&vf,NULL,0)<0) {
|
if(ov_open(fp,&vf,NULL,0)<0) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@ -296,33 +296,28 @@ MpdTag * oggTagDup(char * utf8file) {
|
|||||||
comments = ov_comment(&vf,-1)->user_comments;
|
comments = ov_comment(&vf,-1)->user_comments;
|
||||||
|
|
||||||
while(*comments) {
|
while(*comments) {
|
||||||
temp = strdup(*comments);
|
if((temp = ogg_parseComment(*comments,"artist"))) {
|
||||||
++comments;
|
|
||||||
if(!(s1 = strtok(temp,"="))) continue;
|
|
||||||
s2 = strtok(NULL,"");
|
|
||||||
if(!s1 || !s2);
|
|
||||||
else if(0==strcasecmp(s1,"artist")) {
|
|
||||||
if(!ret->artist) {
|
if(!ret->artist) {
|
||||||
stripReturnChar(s2);
|
ret->artist = strdup(temp);
|
||||||
ret->artist = strdup(s2);
|
stripReturnChar(ret->artist);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(0==strcasecmp(s1,"title")) {
|
else if((temp = ogg_parseComment(*comments,"title"))) {
|
||||||
if(!ret->title) {
|
if(!ret->title) {
|
||||||
stripReturnChar(s2);
|
ret->title = strdup(temp);
|
||||||
ret->title = strdup(s2);
|
stripReturnChar(ret->title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(0==strcasecmp(s1,"album")) {
|
else if((temp = ogg_parseComment(*comments,"album"))) {
|
||||||
if(!ret->album) {
|
if(!ret->album) {
|
||||||
stripReturnChar(s2);
|
ret->album = strdup(temp);
|
||||||
ret->album = strdup(s2);
|
stripReturnChar(ret->album);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(0==strcasecmp(s1,"tracknumber")) {
|
else if((temp = ogg_parseComment(*comments,"tracknumber"))) {
|
||||||
if(!ret->track) {
|
if(!ret->track) {
|
||||||
stripReturnChar(s2);
|
ret->track = strdup(temp);
|
||||||
ret->track = strdup(s2);
|
stripReturnChar(ret->track);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(temp);
|
free(temp);
|
||||||
@ -330,8 +325,6 @@ MpdTag * oggTagDup(char * utf8file) {
|
|||||||
|
|
||||||
ov_clear(&vf);
|
ov_clear(&vf);
|
||||||
|
|
||||||
if(ret) validateUtf8Tag(ret);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,9 @@ Song * newSong(char * utf8url, SONG_TYPE type) {
|
|||||||
if(song->type == SONG_TYPE_FILE) {
|
if(song->type == SONG_TYPE_FILE) {
|
||||||
InputPlugin * plugin;
|
InputPlugin * plugin;
|
||||||
if((plugin = isMusic(utf8url,&(song->mtime)))) {
|
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) {
|
if(!song->tag || song->tag->time<0) {
|
||||||
freeSong(song);
|
freeSong(song);
|
||||||
@ -267,7 +269,9 @@ int updateSongInfo(Song * song) {
|
|||||||
song->tag = NULL;
|
song->tag = NULL;
|
||||||
|
|
||||||
if((plugin = isMusic(utf8url,&(song->mtime)))) {
|
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;
|
if(!song->tag || song->tag->time<0) return -1;
|
||||||
else addSongToTables(song);
|
else addSongToTables(song);
|
||||||
|
16
src/tag.c
16
src/tag.c
@ -101,22 +101,22 @@ char * getID3Info(struct id3_tag * tag, char * id) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MpdTag * id3Dup(char * utf8filename) {
|
MpdTag * id3Dup(char * file) {
|
||||||
MpdTag * ret = NULL;
|
MpdTag * ret = NULL;
|
||||||
#ifdef HAVE_ID3TAG
|
#ifdef HAVE_ID3TAG
|
||||||
struct id3_file * file;
|
struct id3_file * id3_file;
|
||||||
struct id3_tag * tag;
|
struct id3_tag * tag;
|
||||||
char * str;
|
char * str;
|
||||||
|
|
||||||
file = id3_file_open(rmp2amp(utf8ToFsCharset(utf8filename)),
|
id3_file = id3_file_open(file, ID3_FILE_MODE_READONLY);
|
||||||
ID3_FILE_MODE_READONLY);
|
|
||||||
if(!file) {
|
if(!id3_file) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = id3_file_tag(file);
|
tag = id3_file_tag(id3_file);
|
||||||
if(!tag) {
|
if(!tag) {
|
||||||
id3_file_close(file);
|
id3_file_close(id3_file);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ MpdTag * id3Dup(char * utf8filename) {
|
|||||||
ret->track = str;
|
ret->track = str;
|
||||||
}
|
}
|
||||||
|
|
||||||
id3_file_close(file);
|
id3_file_close(id3_file);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
|
24
src/tag.h
24
src/tag.h
@ -31,34 +31,12 @@ typedef struct _MpdTag {
|
|||||||
int time;
|
int time;
|
||||||
} MpdTag;
|
} MpdTag;
|
||||||
|
|
||||||
MpdTag * id3Dup(char * utf8filename);
|
MpdTag * id3Dup(char * file);
|
||||||
|
|
||||||
MpdTag * newMpdTag();
|
MpdTag * newMpdTag();
|
||||||
|
|
||||||
void freeMpdTag(MpdTag * tag);
|
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);
|
void printMpdTag(FILE * fp, MpdTag * tag);
|
||||||
|
|
||||||
MpdTag * mpdTagDup(MpdTag * tag);
|
MpdTag * mpdTagDup(MpdTag * tag);
|
||||||
|
Reference in New Issue
Block a user