some more work on collabsible albums. I think I will need to optimize the playlist...
[amarok.git] / src / metadata / tplugins.cpp
blob42facdca9e46d89e54b98c7964446d0f1cad138d
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. *
10 * *
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. *
15 * *
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, *
19 * MA 02110-1301 USA *
20 ***************************************************************************/
22 #include "config-amarok.h"
23 #include <debug.h>
25 #include <QFile>
27 #ifdef KMIMETYPE_RESOLVER
28 #include <kmimetype.h>
29 #endif
31 #include <fileref.h>
32 #include <tfile.h>
34 #ifdef HAVE_MP4V2
35 #include "mp4/taglib_mp4filetyperesolver.h"
36 #include "mp4/mp4file.h"
37 #else
38 #include "m4a/taglib_mp4filetyperesolver.h"
39 #include "m4a/mp4file.h"
40 #endif
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"
58 #include <mpegfile.h>
59 #include <oggfile.h>
60 #include <oggflacfile.h>
61 #include <vorbisfile.h>
62 #include <flacfile.h>
63 #include <mpcfile.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,
75 bool readProperties,
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;
124 return 0;
126 #endif
128 AMAROK_TAGLIB_EXPORT void registerTaglibPlugins()
130 #ifdef KMIMETYPE_RESOLVER
131 TagLib::FileRef::addFileTypeResolver(new MimeTypeFileTypeResolver);
132 #endif
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);