OTHER: rename 'lib' directory to 'backend_xmmsclient++'
I plan to replace the boost based c++ bindings with native Qt based bindings in the long run The currently there is libxmms2qt, but tru stated working on bindings based on genipc
This commit is contained in:
parent
f524eb5d2d
commit
0e8e5c69a6
22 changed files with 5 additions and 5 deletions
|
@ -1,199 +0,0 @@
|
|||
/**
|
||||
* This file is a part of Esperanza, an XMMS2 Client.
|
||||
*
|
||||
* Copyright (C) 2005-2007 XMMS2 Team
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
#include "xclientcache.h"
|
||||
#include "xclient.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QIcon>
|
||||
#include <QPixmap>
|
||||
#include <QHash>
|
||||
#include <QList>
|
||||
#include <QVariant>
|
||||
#include <QPixmapCache>
|
||||
#include <QSettings>
|
||||
|
||||
XClientCache::XClientCache (XClient *client) : QObject (client)
|
||||
{
|
||||
QSettings s;
|
||||
connect (client, SIGNAL (gotConnection (XClient *)),
|
||||
this, SLOT (got_connection (XClient *)));
|
||||
QPixmapCache::setCacheLimit (s.value ("core/pixmapcache").toInt ());
|
||||
}
|
||||
|
||||
void
|
||||
XClientCache::got_connection (XClient *client)
|
||||
{
|
||||
m_client = client;
|
||||
client->playback ()->signalPlaytime () (
|
||||
Xmms::bind (&XClientCache::handle_playtime, this));
|
||||
client->playback ()->getPlaytime () (
|
||||
Xmms::bind (&XClientCache::handle_playtime, this));
|
||||
|
||||
client->medialib ()->broadcastEntryChanged () (
|
||||
Xmms::bind (&XClientCache::handle_mlib_entry_changed, this));
|
||||
|
||||
client->playback ()->broadcastCurrentID () (
|
||||
Xmms::bind (&XClientCache::handle_current_id_changed, this));
|
||||
client->playback ()->currentID () (
|
||||
Xmms::bind (&XClientCache::handle_current_id_changed, this));
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_medialib_info_error (const std::string &error, uint32_t id)
|
||||
{
|
||||
/* we probably couldn't find that entry, let's remove it */
|
||||
m_info.remove (id);
|
||||
emit entryRemoved (id);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_medialib_info (const Xmms::PropDict &info)
|
||||
{
|
||||
uint32_t id = info.get<int32_t> ("id");
|
||||
QHash<QString, QVariant> hash = XClient::convert_propdict (info);
|
||||
|
||||
m_info.insert (id, hash);
|
||||
emit entryChanged (id);
|
||||
|
||||
if (id == m_current_id) {
|
||||
emit activeEntryChanged (hash);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
XClientCache::extra_info_set (uint32_t id, const QString &name,
|
||||
const QVariant &value)
|
||||
{
|
||||
m_extra_info[id][name] = value;
|
||||
}
|
||||
|
||||
QVariant
|
||||
XClientCache::extra_info_get (uint32_t id, const QString &name)
|
||||
{
|
||||
return m_extra_info[id][name];
|
||||
}
|
||||
|
||||
void
|
||||
XClientCache::invalidate (uint32_t id)
|
||||
{
|
||||
m_info.remove (id);
|
||||
}
|
||||
|
||||
void
|
||||
XClientCache::invalidate_all ()
|
||||
{
|
||||
m_info.clear ();
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_bindata (const Xmms::bin &data, const QString &id)
|
||||
{
|
||||
QPixmap i;
|
||||
i.loadFromData (data.c_str (), data.size());
|
||||
|
||||
if (i.isNull ()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* conserve memory client side */
|
||||
if (i.width () < 300) {
|
||||
i = i.scaledToWidth (300, Qt::SmoothTransformation);
|
||||
}
|
||||
|
||||
QPixmapCache::insert (id, i);
|
||||
|
||||
QList<uint32_t> ids = m_icon_map[id];
|
||||
for (int i = 0; i < ids.size (); i++) {
|
||||
emit entryChanged (ids.at (i));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QIcon
|
||||
XClientCache::get_icon (uint32_t id)
|
||||
{
|
||||
return QIcon (get_pixmap (id));
|
||||
}
|
||||
|
||||
QPixmap
|
||||
XClientCache::get_pixmap (uint32_t id)
|
||||
{
|
||||
if (m_info[id].contains ("picture_front")) {
|
||||
QString hash = m_info[id]["picture_front"].toString ();
|
||||
QPixmap p;
|
||||
|
||||
if (!QPixmapCache::find (hash, p)) {
|
||||
m_client->bindata ()->retrieve (hash.toStdString ()) (
|
||||
boost::bind (&XClientCache::handle_bindata, this, _1, hash));
|
||||
QPixmapCache::insert (hash, QPixmap ());
|
||||
m_icon_map[hash].append (id);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
return QPixmap ();
|
||||
}
|
||||
|
||||
QHash<QString, QVariant>
|
||||
XClientCache::get_info (uint32_t id, bool fetchFromServer)
|
||||
{
|
||||
if ((!m_info.contains (id)) && fetchFromServer) {
|
||||
m_client->medialib ()->getInfo (id) (
|
||||
Xmms::bind (&XClientCache::handle_medialib_info, this),
|
||||
boost::bind (&XClientCache::handle_medialib_info_error,
|
||||
this, _1, id));
|
||||
m_info[id] = QHash<QString, QVariant> ();
|
||||
}
|
||||
|
||||
return m_info.value(id, QHash<QString, QVariant>());
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_mlib_entry_changed (const uint32_t &id)
|
||||
{
|
||||
m_client->medialib ()->getInfo (id) (Xmms::bind (&XClientCache::handle_medialib_info, this));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_current_id_changed (const uint32_t &id)
|
||||
{
|
||||
m_current_id = id;
|
||||
if (!m_info.contains (id)) {
|
||||
// get_info fetches the metadata from the server, and calls handle_medialib_info.
|
||||
// handle_medialib_info sends the activeEntryChanged Signal
|
||||
get_info (id);
|
||||
return true;
|
||||
}
|
||||
|
||||
emit activeEntryChanged (m_info[id]);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
XClientCache::handle_playtime (const unsigned int &tme)
|
||||
{
|
||||
emit playtime(tme);
|
||||
return true;
|
||||
}
|
||||
|
||||
#include "xclientcache.moc"
|
Loading…
Add table
Add a link
Reference in a new issue