Add album art support for mpris plugin

Right now we only support album art if the player provides a local URL,
but some players provide a remote URL (spotify) I'll be adding support
for that in a later patch.

REVIEW: 128199
This commit is contained in:
Pinak Ahuja 2016-06-16 10:19:38 +02:00
parent 41e6016c11
commit e66096d05a
3 changed files with 32 additions and 2 deletions

View file

@ -10,7 +10,7 @@ cmake_minimum_required(VERSION 2.8.12)
find_package(ECM 0.0.9 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_SOURCE_DIR}/cmake)
find_package(Qt5 5.2 REQUIRED COMPONENTS Quick)
find_package(Qt5 5.2 REQUIRED COMPONENTS Quick Gui)
find_package(KF5 REQUIRED COMPONENTS I18n ConfigWidgets DBusAddons)
find_package(KF5DocTools)
find_package(Qca-qt5 2.1.0 REQUIRED)

View file

@ -16,4 +16,4 @@ qt5_add_dbus_interface(
kdeconnect_add_plugin(kdeconnect_mpriscontrol JSON kdeconnect_mpriscontrol.json SOURCES ${kdeconnect_mpriscontrol_SRCS})
target_link_libraries(kdeconnect_mpriscontrol Qt5::DBus kdeconnectcore)
target_link_libraries(kdeconnect_mpriscontrol Qt5::DBus kdeconnectcore Qt5::Gui)

View file

@ -28,6 +28,10 @@
#include <QDBusMessage>
#include <QDBusServiceWatcher>
#include <QImage>
#include <QBuffer>
#include <QByteArray>
#include <KPluginFactory>
#include <core/device.h>
@ -136,6 +140,32 @@ void MprisControlPlugin::propertiesChanged(const QString& propertyInterface, con
}
somethingToSend = true;
}
if (nowPlayingMap.contains("mpris:artUrl")) {
const QUrl artUrl(nowPlayingMap["mpris:artUrl"].toString());
/*
* We only handle images stored locally right now but it should be easy
* enough to download remote images and send them.
*/
const int artMaxWidth = 512;
const int artMaxHeight = 512;
if (artUrl.isLocalFile()) {
QImage artImage(artUrl.path());
// Scale the image to a sane size
artImage = artImage.scaled({artMaxWidth, artMaxHeight}, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QByteArray imageBufferArray;
QBuffer imageBuffer(&imageBufferArray);
imageBuffer.open(QIODevice::WriteOnly);
artImage.save(&imageBuffer, "PNG");
const QString base64Image = QString::fromLatin1(imageBufferArray.toBase64());
np.set("artImage", base64Image);
somethingToSend = true;
}
}
}
if (properties.contains("PlaybackStatus")) {