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.
159 lines
4.8 KiB
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(), 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 = 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;
|
|
}
|