You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/juk/mediafiles.cpp

159 lines
4.8 KiB

/***************************************************************************
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 <kfiledialog.h>
#include <kdebug.h>
#include <klocale.h>
#include <kio/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::null, TQString::null, 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 = KIO::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;
}