kde-extraapps/juk/dbuscollectionproxy.cpp
2014-11-28 15:08:46 +00:00

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: