/*************************************************************************** begin : Fri Sep 13 2002 copyright : (C) 2002 - 2004 by Scott Wheeler email : wheeler@kde.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <tdefiledialog.h> #include <kdebug.h> #include <tdelocale.h> #include <tdeio/netaccess.h> #include "mediafiles.h" #include <taglib/tag.h> #if (TAGLIB_MAJOR_VERSION>1) || \ ((TAGLIB_MAJOR_VERSION==1) && (TAGLIB_MINOR_VERSION>=2)) #define TAGLIB_1_2 #endif #if (TAGLIB_MAJOR_VERSION>1) || \ ((TAGLIB_MAJOR_VERSION==1) && (TAGLIB_MINOR_VERSION>=3)) #define TAGLIB_1_3 #endif namespace MediaFiles { TQStringList mimeTypes(); static const char mp3Type[] = "audio/mpeg"; static const char oggType[] = "application/ogg"; static const char flacType[] = "audio/x-flac"; static const char mpcType[] = "audio/x-musepack"; static const char m3uType[] = "audio/mpegurl"; static const char vorbisType[] = "audio/x-vorbis"; static const char oggflacType[] = "audio/x-oggflac"; static const char playlistExtension[] = ".m3u"; } TQStringList MediaFiles::openDialog(TQWidget *parent) { KFileDialog dialog(TQString(), TQString(), parent, "filedialog", true); dialog.setOperationMode(KFileDialog::Opening); dialog.setCaption(i18n("Open")); dialog.setMode(KFile::Files | KFile::LocalOnly); // dialog.ops->clearHistory(); dialog.setMimeFilter(mimeTypes()); dialog.exec(); return convertURLsToLocal(dialog.selectedFiles()); } TQString MediaFiles::savePlaylistDialog(const TQString &playlistName, TQWidget *parent) { TQString fileName = KFileDialog::getSaveFileName(playlistName + playlistExtension, TQString("*").append(playlistExtension), parent, i18n("Playlists")); if(!fileName.isEmpty() && !fileName.endsWith(playlistExtension)) fileName.append(playlistExtension); return fileName; } bool MediaFiles::isMediaFile(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(mp3Type) || result->is(oggType) || result->is(flacType) #ifdef TAGLIB_1_3 || result->is(mpcType) #endif ; } bool MediaFiles::isPlaylistFile(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(m3uType); } bool MediaFiles::isMP3(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(mp3Type); } bool MediaFiles::isOgg(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(oggType); } bool MediaFiles::isFLAC(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(flacType); } bool MediaFiles::isMPC(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, true); return result->is(mpcType); } bool MediaFiles::isVorbis(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, false); return result->is(vorbisType); } bool MediaFiles::isOggFLAC(const TQString &fileName) { KMimeType::Ptr result = KMimeType::findByPath(fileName, 0, false); return result->is(oggflacType); } TQStringList MediaFiles::mimeTypes() { TQStringList l; l << mp3Type << oggType << flacType << m3uType << vorbisType #ifdef TAGLIB_1_2 << oggflacType #endif #ifdef TAGLIB_1_3 << mpcType #endif ; return l; } TQStringList MediaFiles::convertURLsToLocal(const TQStringList &urlList, TQWidget *w) { TQStringList result; KURL localUrl; for(TQStringList::ConstIterator it = urlList.constBegin(); it != urlList.constEnd(); ++it) { localUrl = TDEIO::NetAccess::mostLocalURL(KURL::fromPathOrURL(*it), w); if(!localUrl.isLocalFile()) kdDebug(65432) << localUrl << " is not a local file, skipping.\n"; else result.append(localUrl.path()); } return result; }