1 /***************************************************************************
2 copyright : (C) 2005, 2006 by Martin Aumueller
3 email : aumuell@reserv.at
4 ***************************************************************************/
6 /***************************************************************************
7 * This library is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU Lesser General Public License version *
9 * 2.1 as published by the Free Software Foundation. *
11 * This library is distributed in the hope that it will be useful, but *
12 * WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14 * Lesser General Public License for more details. *
16 * You should have received a copy of the GNU Lesser General Public *
17 * License along with this library; if not, write to the Free Software *
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
20 ***************************************************************************/
22 #include "config-amarok.h"
27 #ifdef KMIMETYPE_RESOLVER
28 #include <kmimetype.h>
35 #include "mp4/taglib_mp4filetyperesolver.h"
36 #include "mp4/mp4file.h"
38 #include "m4a/taglib_mp4filetyperesolver.h"
39 #include "m4a/mp4file.h"
42 #include "trueaudio/taglib_trueaudiofiletyperesolver.h"
43 #include "trueaudio/ttafile.h"
44 #include "wavpack/taglib_wavpackfiletyperesolver.h"
45 #include "wavpack/wvfile.h"
46 #include "speex/taglib_speexfiletyperesolver.h"
47 #include "speex/speexfile.h"
48 #include "wma/taglib_wmafiletyperesolver.h"
49 #include "wma/wmafile.h"
50 #include "rmff/taglib_realmediafiletyperesolver.h"
51 #include "rmff/taglib_realmediafile.h"
52 #include "audible/taglib_audiblefiletyperesolver.h"
53 #include "audible/taglib_audiblefile.h"
54 #include "wav/wavfiletyperesolver.h"
55 #include "wav/wavfile.h"
56 #include "aac/aacfiletyperesolver.h"
60 #include <oggflacfile.h>
61 #include <vorbisfile.h>
66 #ifdef KMIMETYPE_RESOLVER
67 class MimeTypeFileTypeResolver
: public TagLib::FileRef::FileTypeResolver
69 TagLib::File
*createFile(const char *fileName
,
70 bool readAudioProperties
,
71 TagLib::AudioProperties::ReadStyle audioPropertiesStyle
) const;
74 TagLib::File
*MimeTypeFileTypeResolver::createFile(const char *fileName
,
76 TagLib::AudioProperties::ReadStyle propertiesStyle
) const
78 QString fn
= QFile::decodeName( fileName
);
79 KMimeType::Ptr mimetype
= KMimeType::findByPath( fn
);
81 if( mimetype
->is( "audio/aac" )
82 || mimetype
->is( "audio/mpeg" )
83 || mimetype
->is( "audio/x-mpegurl" )
84 || mimetype
->is( "audio/mpeg" ))
86 return new TagLib::MPEG::File(fileName
, readProperties
, propertiesStyle
);
88 else if( mimetype
->is( "audio/mp4" ) || mimetype
->is( "video/mp4" ) )
90 return new TagLib::MP4::File(fileName
, readProperties
, propertiesStyle
);
92 else if( mimetype
->is( "audio/x-ms-wma" )
93 || mimetype
->is( "video/x-ms-asf" )
94 || mimetype
->is( "video/x-msvideo" )
95 || mimetype
->is( "video/x-ms-wmv" ) )
97 return new TagLib::WMA::File(fileName
, readProperties
, propertiesStyle
);
99 else if( mimetype
->is( "audio/vnd.rn-realaudio" )
100 || mimetype
->is( "audio/x-pn-realaudioplugin" )
101 || mimetype
->is( "audio/vnd.rn-realvideo" ) )
103 return new TagLib::RealMedia::File(fileName
, readProperties
, propertiesStyle
);
105 else if( mimetype
->is( "audio/x-vorbis+ogg" ) )
107 return new TagLib::Ogg::Vorbis::File(fileName
, readProperties
, propertiesStyle
);
109 else if( mimetype
->is( "audio/x-flac+ogg" ) )
111 return new TagLib::Ogg::FLAC::File(fileName
, readProperties
, propertiesStyle
);
113 else if( mimetype
->is( "audio/x-flac" ) )
115 return new TagLib::FLAC::File(fileName
, readProperties
, propertiesStyle
);
117 else if( mimetype
->is( "audio/x-musepack" ) )
119 return new TagLib::MPC::File(fileName
, readProperties
, propertiesStyle
);
122 debug() << "kmimetype filetype guessing failed for" << fileName
;
128 AMAROK_TAGLIB_EXPORT
void registerTaglibPlugins()
130 #ifdef KMIMETYPE_RESOLVER
131 TagLib::FileRef::addFileTypeResolver(new MimeTypeFileTypeResolver
);
133 TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver
);
134 TagLib::FileRef::addFileTypeResolver(new WMAFileTypeResolver
);
135 TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver
);
136 TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver
);
137 TagLib::FileRef::addFileTypeResolver(new AACFileTypeResolver
);
138 TagLib::FileRef::addFileTypeResolver(new WavPackFileTypeResolver
);
139 TagLib::FileRef::addFileTypeResolver(new SpeexFileTypeResolver
);
140 TagLib::FileRef::addFileTypeResolver(new TTAFileTypeResolver
);
141 TagLib::FileRef::addFileTypeResolver(new WavFileTypeResolver
);