diff options
-rw-r--r-- | qmafwwatchlet/metawatch-digital.qml | 2 | ||||
-rw-r--r-- | qmafwwatchlet/qmafwwatchletplayer.cpp | 76 | ||||
-rw-r--r-- | qmafwwatchlet/qmafwwatchletplayer.h | 11 |
3 files changed, 67 insertions, 22 deletions
diff --git a/qmafwwatchlet/metawatch-digital.qml b/qmafwwatchlet/metawatch-digital.qml index 0ec07cd..22c7833 100644 --- a/qmafwwatchlet/metawatch-digital.qml +++ b/qmafwwatchlet/metawatch-digital.qml @@ -10,7 +10,7 @@ Rectangle { anchors.fill: parent fillMode: Image.PreserveAspectFit smooth: true - source: player.imageUrl + source: player.mediaArt } Rectangle { diff --git a/qmafwwatchlet/qmafwwatchletplayer.cpp b/qmafwwatchlet/qmafwwatchletplayer.cpp index 018795a..d4f9686 100644 --- a/qmafwwatchlet/qmafwwatchletplayer.cpp +++ b/qmafwwatchlet/qmafwwatchletplayer.cpp @@ -18,7 +18,9 @@ QMafwWatchletPlayer::QMafwWatchletPlayer(QMafwWatchlet* watchlet) : _state(MafwRenderer::Stopped), _title(tr("No media")), _album(), - _imageUrl() + _artist(), + _rendererArt(), + _mediaArt() { Q_ASSERT(watchlet); } @@ -38,9 +40,9 @@ QString QMafwWatchletPlayer::artist() const return _artist; } -QUrl QMafwWatchletPlayer::imageUrl() const +QUrl QMafwWatchletPlayer::mediaArt() const { - return _imageUrl; + return _mediaArt; } void QMafwWatchletPlayer::activate() @@ -120,10 +122,15 @@ void QMafwWatchletPlayer::setRenderer(MafwRenderer * renderer) _renderer = renderer; reconnect(); if (!_renderer && _active) { - _imageUrl.clear(); _title = tr("No media"); - emit imageUrlChanged(); emit titleChanged(); + _album.clear(); + emit albumChanged(); + _artist.clear(); + emit artistChanged(); + _rendererArt.clear(); + _mediaArt.clear(); + emit mediaArtChanged(); } } @@ -167,7 +174,7 @@ QString QMafwWatchletPlayer::mediaArtPath() const QByteArray first_hash = QCryptographicHash::hash(artist.toUtf8(), QCryptographicHash::Md5).toHex(); QByteArray second_hash = QCryptographicHash::hash(album.toUtf8(), QCryptographicHash::Md5).toHex(); QString file = QString("album-%1-%2.jpeg").arg(first_hash.constData()).arg(second_hash.constData()); - qDebug() << "testing" << file; + qDebug() << "checking for albumart in" << file; if (dir.exists(file)) { return dir.absoluteFilePath(file); } @@ -175,7 +182,7 @@ QString QMafwWatchletPlayer::mediaArtPath() const artist = " "; first_hash = QCryptographicHash::hash(artist.toUtf8(), QCryptographicHash::Md5).toHex(); file = QString("album-%1-%2.jpeg").arg(first_hash.constData()).arg(second_hash.constData()); - qDebug() << "testing" << file; + qDebug() << "checking for albumart in" << file; if (dir.exists(file)) { return dir.absoluteFilePath(file); } @@ -183,24 +190,57 @@ QString QMafwWatchletPlayer::mediaArtPath() const return QString(); } +void QMafwWatchletPlayer::updateMediaArt() +{ + QUrl newArt; + + if (!_rendererArt.isEmpty()) { + newArt = QUrl::fromLocalFile(_rendererArt); + } else { + QString path = mediaArtPath(); + if (!path.isEmpty()) { + newArt = QUrl::fromLocalFile(path); + } + } + + if (newArt != _mediaArt) { + _mediaArt = newArt; + emit mediaArtChanged(); + } +} + void QMafwWatchletPlayer::handleChangedMetadata(const QString &s, const QList<QVariant> &l) { - if (l.isEmpty()) return; if (s == MAFW_METADATA_KEY_TITLE) { - _title = l[0].toString(); + if (!l.isEmpty()) { + _title = l[0].toString(); + } else { + _title.clear(); + } emit titleChanged(); } else if (s == MAFW_METADATA_KEY_ALBUM) { - _album = l[0].toString(); + if (!l.isEmpty()) { + _album = l[0].toString(); + } else { + _album.clear(); + } emit albumChanged(); - _imageUrl = QUrl::fromLocalFile(mediaArtPath()); - qDebug() << "got image url (album)" << _album << _imageUrl; - emit imageUrlChanged(); + updateMediaArt(); } else if (s == MAFW_METADATA_KEY_ARTIST) { - _artist = l[0].toString(); + if (!l.isEmpty()) { + _artist = l[0].toString(); + } else { + _artist.clear(); + } emit artistChanged(); - _imageUrl = QUrl::fromLocalFile(mediaArtPath()); - qDebug() << "got image url (artist)" << _album << _imageUrl; - emit imageUrlChanged(); + updateMediaArt(); + } else if (s == MAFW_METADATA_KEY_RENDERER_ART_URI) { + if (!l.isEmpty()) { + _rendererArt = l[0].toString(); + } else { + _rendererArt.clear(); + } + updateMediaArt(); } } @@ -214,6 +254,8 @@ void QMafwWatchletPlayer::handleMediaInfo(const MafwMediaInfo &info) const QMap<QString, QList<QVariant> > & data = info.metaData(); handleChangedMetadata(MAFW_METADATA_KEY_TITLE, data[MAFW_METADATA_KEY_TITLE]); handleChangedMetadata(MAFW_METADATA_KEY_ALBUM, data[MAFW_METADATA_KEY_ALBUM]); + handleChangedMetadata(MAFW_METADATA_KEY_ARTIST, data[MAFW_METADATA_KEY_ARTIST]); + handleChangedMetadata(MAFW_METADATA_KEY_RENDERER_ART_URI, data[MAFW_METADATA_KEY_RENDERER_ART_URI]); } void QMafwWatchletPlayer::doVolumeUp(const QString& name, const QVariant& value) diff --git a/qmafwwatchlet/qmafwwatchletplayer.h b/qmafwwatchlet/qmafwwatchletplayer.h index d85f38c..4a587a6 100644 --- a/qmafwwatchlet/qmafwwatchletplayer.h +++ b/qmafwwatchlet/qmafwwatchletplayer.h @@ -7,6 +7,7 @@ #include <MafwRenderer.h> #include <MafwMediaInfo.h> +#include <MafwContent.h> namespace sowatch { @@ -19,7 +20,7 @@ class QMafwWatchletPlayer : public QObject Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(QString album READ album NOTIFY albumChanged) Q_PROPERTY(QString artist READ artist NOTIFY artistChanged) - Q_PROPERTY(QUrl imageUrl READ imageUrl NOTIFY imageUrlChanged) + Q_PROPERTY(QUrl mediaArt READ mediaArt NOTIFY mediaArtChanged) public: explicit QMafwWatchletPlayer(QMafwWatchlet* watchlet); @@ -27,13 +28,13 @@ public: QString title() const; QString album() const; QString artist() const; - QUrl imageUrl() const; + QUrl mediaArt() const; signals: void titleChanged(); void albumChanged(); void artistChanged(); - void imageUrlChanged(); + void mediaArtChanged(); public slots: void activate(); @@ -56,13 +57,15 @@ private: QString _title; QString _album; QString _artist; - QUrl _imageUrl; + QString _rendererArt; + QUrl _mediaArt; void setRenderer(MafwRenderer*); void reconnect(); static QString stripAlbumArtComponent(const QString& component); QString mediaArtPath() const; + void updateMediaArt(); private slots: void handleChangedMetadata(const QString& s, const QList<QVariant>& l); |