mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-24 02:42:52 +00:00
158 lines
4.1 KiB
C++
158 lines
4.1 KiB
C++
/**
|
|
* Copyright (C) 2009 Michael Pyne <mpyne@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.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "dbuscollectionproxy.h"
|
|
|
|
#include <QtCore/QStringList>
|
|
#include <QtCore/QFile>
|
|
#include <QtGui/QPixmap>
|
|
#include <QtDBus/QDBusConnection>
|
|
|
|
#include <KTemporaryFile>
|
|
#include <kdebug.h>
|
|
|
|
#include "collectionadaptor.h"
|
|
#include "playlistcollection.h"
|
|
#include "covermanager.h"
|
|
#include "collectionlist.h"
|
|
#include "coverinfo.h"
|
|
#include "filehandle.h"
|
|
|
|
DBusCollectionProxy::DBusCollectionProxy (QObject *parent, PlaylistCollection *collection) :
|
|
QObject(parent), m_collection(collection)
|
|
{
|
|
setObjectName( QLatin1String("DBusCollectionProxy" ));
|
|
|
|
new CollectionAdaptor(this);
|
|
QDBusConnection::sessionBus().registerObject("/Collection",this);
|
|
}
|
|
|
|
DBusCollectionProxy::~DBusCollectionProxy()
|
|
{
|
|
// Clean's the way to be
|
|
if(!m_lastCover.isEmpty())
|
|
QFile::remove(m_lastCover);
|
|
}
|
|
|
|
void DBusCollectionProxy::openFile(const QString &file)
|
|
{
|
|
m_collection->open(QStringList(file));
|
|
}
|
|
|
|
void DBusCollectionProxy::openFile(const QStringList &files)
|
|
{
|
|
m_collection->open(files);
|
|
}
|
|
|
|
void DBusCollectionProxy::openFile(const QString &playlist, const QString &file)
|
|
{
|
|
m_collection->open(playlist, QStringList(file));
|
|
}
|
|
|
|
void DBusCollectionProxy::openFile(const QString &playlist, const QStringList &files)
|
|
{
|
|
m_collection->open(playlist, files);
|
|
}
|
|
|
|
QString DBusCollectionProxy::visiblePlaylist()
|
|
{
|
|
return m_collection->playlist();
|
|
}
|
|
|
|
QString DBusCollectionProxy::playingPlaylist()
|
|
{
|
|
return m_collection->playingPlaylist();
|
|
}
|
|
|
|
QStringList DBusCollectionProxy::playlists()
|
|
{
|
|
return m_collection->playlists();
|
|
}
|
|
|
|
QStringList DBusCollectionProxy::playlistTracks(const QString &playlist)
|
|
{
|
|
return m_collection->playlistTracks(playlist);
|
|
}
|
|
|
|
QString DBusCollectionProxy::trackProperty(const QString &file, const QString &property)
|
|
{
|
|
return m_collection->trackProperty(file, property);
|
|
}
|
|
|
|
void DBusCollectionProxy::createPlaylist(const QString &name)
|
|
{
|
|
m_collection->createPlaylist(name);
|
|
}
|
|
|
|
void DBusCollectionProxy::setPlaylist(const QString &name)
|
|
{
|
|
m_collection->setPlaylist(name);
|
|
}
|
|
|
|
void DBusCollectionProxy::remove()
|
|
{
|
|
m_collection->remove();
|
|
}
|
|
|
|
void DBusCollectionProxy::removeTrack(const QString &playlist, const QStringList &files)
|
|
{
|
|
m_collection->removeTrack(playlist, files);
|
|
}
|
|
|
|
QString DBusCollectionProxy::trackCover(const QString &track)
|
|
{
|
|
coverKey id = CoverManager::idForTrack(track);
|
|
if(id != CoverManager::NoMatch) {
|
|
CoverDataPtr coverData = CoverManager::coverInfo(id);
|
|
return coverData->path;
|
|
}
|
|
|
|
// No cover, let's see if one is embedded.
|
|
CollectionListItem *collectionItem = CollectionList::instance()->lookup(track);
|
|
|
|
if(!collectionItem)
|
|
return QString();
|
|
|
|
CoverInfo *coverInfo = collectionItem->file().coverInfo();
|
|
if(!coverInfo)
|
|
return QString();
|
|
|
|
QPixmap cover = coverInfo->pixmap(CoverInfo::FullSize);
|
|
if(cover.isNull())
|
|
return QString();
|
|
|
|
// We have a cover, extract it and save it to a temporary file.
|
|
KTemporaryFile tempFile;
|
|
|
|
tempFile.setSuffix(".png");
|
|
tempFile.setAutoRemove(false);
|
|
|
|
if(!tempFile.open()) {
|
|
kError() << "Unable to open temporary file for embedded cover art.";
|
|
return QString();
|
|
}
|
|
|
|
// Save last file name cover, remove it if it's there so that we don't fill
|
|
// the temp directory with pixmaps.
|
|
if(!m_lastCover.isEmpty())
|
|
QFile::remove(m_lastCover);
|
|
m_lastCover = tempFile.fileName();
|
|
|
|
cover.save(&tempFile, "PNG");
|
|
return tempFile.fileName();
|
|
}
|
|
|
|
// vim: set et sw=4 tw=0 sta:
|