[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [plasma-mediacenter] /: Use Nepomuk directly instead of PA metadatamodels in Music. Fast :)
From: Shantanu Tushar <shaan7in () gmail ! com>
Date: 2012-07-15 13:40:07
Message-ID: 20120715134007.92823A6094 () git ! kde ! org
[Download RAW message or body]
Git commit def0aa2521ce3b9170907c5ec078b084375fccfb by Shantanu Tushar.
Committed on 15/07/2012 at 15:36.
Pushed by shantanu into branch 'master'.
Use Nepomuk directly instead of PA metadatamodels in Music. Fast :)
M +48 -99 browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
M +22 -38 browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
M +2 -1 browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml
M +30 -9 browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/MediaBrowser.qml
M +33 -25 browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.cpp
M +13 -10 browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.h
M +1 -0 libs/mediacenter/mediacenter.cpp
M +3 -1 libs/mediacenter/mediacenter.h
http://commits.kde.org/plasma-mediacenter/def0aa2521ce3b9170907c5ec078b084375fccfb
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp \
index 94001bd..5d93741 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
@@ -25,61 +25,34 @@
#include "metadatamusicmodel.h"
#include "nepomukmusicmodel.h"
-#include "categoriesmodel.h"
#include "nepomukmusicmodel.h"
#include <nepomuk/nmm.h>
+#include <nepomuk/nfo.h>
+#include <nepomuk/andterm.h>
+#include <nepomuk/comparisonterm.h>
+#include <nepomuk/resourcetypeterm.h>
+#include <nepomuk/resourceterm.h>
MEDIACENTER_EXPORT_BROWSINGBACKEND(MetadataMusicBackend)
MetadataMusicBackend::MetadataMusicBackend(QObject* parent, const QVariantList& \
args) : AbstractMetadataBackend(parent, args),
- m_categoriesModel(new CategoriesModel(this)),
m_nepomukModel(new NepomukMusicModel(this)),
m_metadataMusicModel(0),
- m_currentCategory(Category::AllMusic),
- m_level1Visible(true),
- m_level2Visible(false),
- m_level3Visible(false)
+ m_albumsModel(new NepomukMusicModel(this)),
+ m_artistsModel(new NepomukMusicModel(this)),
+ m_musicModel(new NepomukMusicModel(this))
{
+ m_albumsModel->setResourceType(Nepomuk::Vocabulary::NMM::musicAlbum(), \
"tools-media-optical-copy"); + \
m_artistsModel->setResourceType(Nepomuk::Vocabulary::NMM::performer(), \
"user-identity"); + \
m_musicModel->setResourceType(Nepomuk::Vocabulary::NFO::Audio(), "amarok"); + emit \
musicModelChanged(); }
MetadataMusicBackend::~MetadataMusicBackend()
{
}
-void MetadataMusicBackend::setCategory (int index)
-{
- m_currentCategory = m_categoriesModel->categoryTypeForIndex(index);
- switch (m_currentCategory) {
- case Category::AllMusic:
- showAllMusic();
- break;
- case Category::Artists:
- showArtists();
- break;
- case Category::Albums:
- showAlbums();
- break;
- }
-}
-
-void MetadataMusicBackend::setSubCategory (int index)
-{
- QString currentItemLabel = m_nepomukModel->data(m_nepomukModel->index(index, 0), \
Qt::DisplayRole).toString();
- switch (m_currentCategory) {
- case Category::AllMusic:
- break;
- case Category::Artists:
- m_artistName = currentItemLabel;
- showMusicForArtist();
- break;
- case Category::Albums:
- m_albumName = currentItemLabel;
- showMusicForAlbum();
- break;
- }
-}
-
void MetadataMusicBackend::init()
{
AbstractMetadataBackend::init();
@@ -88,96 +61,72 @@ void MetadataMusicBackend::init()
}
}
-void MetadataMusicBackend::showAllMusic()
-{
- m_metadataMusicModel->setAlbumName("");
- m_metadataMusicModel->setArtistName("");
- m_metadataMusicModel->updateModel();
-
- m_level2Visible = false;
- emit level2VisibleChanged();
- m_level3Visible = true;
- emit level3VisibleChanged();
-}
-
-void MetadataMusicBackend::showAlbums()
+QString MetadataMusicBackend::mediaBrowserOverride() const
{
- m_nepomukModel->setTerm(Nepomuk::Vocabulary::NMM::musicAlbum(), \
"tools-media-optical-copy");
-
- m_level2Visible = true;
- emit level2VisibleChanged();
- m_level3Visible = false;
- emit level3VisibleChanged();
+ return constructQmlSource("metadatamusiccomponents", "0.1", "MediaBrowser");
}
-void MetadataMusicBackend::showArtists()
+bool MetadataMusicBackend::supportsSearch() const
{
- m_nepomukModel->setTerm(Nepomuk::Vocabulary::NMM::performer(), "user-identity");
-
- m_level2Visible = true;
- emit level2VisibleChanged();
- m_level3Visible = false;
- emit level3VisibleChanged();
+ return false;
}
-void MetadataMusicBackend::showMusicForAlbum()
+QObject* MetadataMusicBackend::albumsModel() const
{
- m_metadataMusicModel->setArtistName("");
- m_metadataMusicModel->setAlbumName(m_albumName);
- m_metadataMusicModel->updateModel();
-
- m_level3Visible = true;
- emit level3VisibleChanged();
+ return m_albumsModel;
}
-void MetadataMusicBackend::showMusicForArtist()
+QObject* MetadataMusicBackend::artistsModel() const
{
- m_metadataMusicModel->setArtistName(m_artistName);
- m_metadataMusicModel->setAlbumName("");
- m_metadataMusicModel->updateModel();
-
- m_level3Visible = true;
- emit level3VisibleChanged();
+ return m_artistsModel;
}
-QString MetadataMusicBackend::mediaBrowserOverride() const
+QString MetadataMusicBackend::albumFilter() const
{
- return constructQmlSource("metadatamusiccomponents", "0.1", "MediaBrowser");
+ return m_albumFilter;
}
-QObject* MetadataMusicBackend::level1Model() const
+QString MetadataMusicBackend::artistFilter() const
{
- return m_categoriesModel;
+ return m_artistFilter;
}
-QObject* MetadataMusicBackend::level2Model() const
+void MetadataMusicBackend::setAlbumFilter(const QString& filter)
{
- return m_nepomukModel;
+ m_albumFilter = filter;
+ emit albumFilterChanged();
+ m_artistFilter.clear();
+ emit artistFilterChanged();
+ updateModelAccordingToFilters();
}
-QObject* MetadataMusicBackend::level3Model() const
+void MetadataMusicBackend::setArtistFilter(const QString& filter)
{
- return m_metadataMusicModel;
+ m_artistFilter = filter;
+ emit artistFilterChanged();
+ m_albumFilter.clear();
+ emit albumFilterChanged();
+ updateModelAccordingToFilters();
}
-bool MetadataMusicBackend::level1Visible() const
+void MetadataMusicBackend::updateModelAccordingToFilters()
{
- return m_level1Visible;
-}
+ QList<Nepomuk::Query::Term> termsList;
+ termsList.append(Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::NFO::Audio()));
-bool MetadataMusicBackend::level2Visible() const
-{
- return m_level2Visible;
-}
+ if (!m_albumFilter.isEmpty()) {
+ termsList.append(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NMM::musicAlbum(), \
Nepomuk::Query::ResourceTerm(m_albumFilter))); + }
+ if (!m_artistFilter.isEmpty()) {
+ termsList.append(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NMM::performer(), \
Nepomuk::Query::ResourceTerm(m_artistFilter))); + }
-bool MetadataMusicBackend::level3Visible() const
-{
- return m_level3Visible;
+ m_musicModel->setTerm(Nepomuk::Query::AndTerm(termsList), "amarok");
}
-bool MetadataMusicBackend::supportsSearch() const
+QObject* MetadataMusicBackend::musicModel() const
{
- return false;
+ return m_musicModel;
}
#include "metadatamusicbackend.moc"
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h index \
442468d..a357483 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
@@ -35,9 +35,9 @@ class MetadataMusicModel;
class MetadataMusicBackend : public AbstractMetadataBackend
{
Q_OBJECT
- Q_PROPERTY(bool level1Visible READ level1Visible NOTIFY level1VisibleChanged)
- Q_PROPERTY(bool level2Visible READ level2Visible NOTIFY level2VisibleChanged)
- Q_PROPERTY(bool level3Visible READ level3Visible NOTIFY level3VisibleChanged)
+ Q_PROPERTY(QString artistFilter READ artistFilter WRITE setArtistFilter NOTIFY \
artistFilterChanged) + Q_PROPERTY(QString albumFilter READ albumFilter WRITE \
setAlbumFilter NOTIFY albumFilterChanged) + Q_PROPERTY(QObject* musicModel READ \
musicModel NOTIFY musicModelChanged)
public:
MetadataMusicBackend (QObject* parent, const QVariantList& args);
@@ -47,51 +47,35 @@ public:
virtual QString mediaBrowserOverride() const;
- Q_INVOKABLE QObject *level1Model() const;
- Q_INVOKABLE QObject *level2Model() const;
- Q_INVOKABLE QObject *level3Model() const;
+ Q_INVOKABLE QObject *artistsModel() const;
+ Q_INVOKABLE QObject *albumsModel() const;
+ QObject *musicModel() const;
- Q_INVOKABLE void setCategory(int index);
- Q_INVOKABLE void setSubCategory(int index);
-
- bool level1Visible() const;
- bool level2Visible() const;
- bool level3Visible() const;
bool supportsSearch() const;
-private Q_SLOTS:
- void showAllMusic();
- void showArtists();
- void showAlbums();
- void showMusicForArtist();
- void showMusicForAlbum();
+ QString artistFilter() const;
+ QString albumFilter() const;
+
+ void setArtistFilter(const QString &filter);
+ void setAlbumFilter(const QString &filter);
Q_SIGNALS:
- void currentStateCategories();
- void currentStateAllMusic();
- void currentStateArtists();
- void currentStateAlbums();
- void currentStateMusicForArtist();
- void currentStateMusicForAlbum();
- void backRequested();
-
- void level1VisibleChanged();
- void level2VisibleChanged();
- void level3VisibleChanged();
+ void artistFilterChanged();
+ void albumFilterChanged();
+ void musicModelChanged();
-private:
- QString m_artistName;
- QString m_albumName;
+protected:
+ void updateModelAccordingToFilters();
- CategoriesModel *m_categoriesModel;
+private:
NepomukMusicModel *m_nepomukModel;
+ NepomukMusicModel* m_artistsModel;
+ NepomukMusicModel* m_albumsModel;
+ NepomukMusicModel* m_musicModel;
MetadataMusicModel *m_metadataMusicModel;
- Category::CategoryType m_currentCategory;
-
- bool m_level1Visible;
- bool m_level2Visible;
- bool m_level3Visible;
+ QString m_artistFilter;
+ QString m_albumFilter;
};
#endif // METADATAMUSICBACKEND_H
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml
index e8cf713..3ba8fe6 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml
@@ -21,8 +21,9 @@ import QtQuick 1.1
import org.kde.plasma.components 0.1 as PlasmaComponents
PlasmaComponents.Button {
+ property string categoryName: ""
text: display
iconSource: decoration
- onClicked: backend.setCategory(index)
+ onClicked: categoryName == "album" ? backend.albumFilter = resourceId : \
backend.artistFilter = resourceId }
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/MediaBrowser.qml \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/MediaBrowser.qml
index e68c1f7..51e0343 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/MediaBrowser.qml
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusiccomponents/MediaBrowser.qml
@@ -18,6 +18,7 @@
***************************************************************************/
import QtQuick 1.1
+import org.kde.plasma.components 0.1 as PlasmaComponents
Row {
id: rootRow
@@ -29,26 +30,46 @@ Row {
ListView {
width: parent.width/3 * 0.9; height: parent.height
- model: backend.level1Model();
- delegate: CategoriesDelegate { width: parent.width; height: 96 }
+ model: backend.artistsModel();
+ header: PlasmaComponents.Label {
+ text: "Artists"; width: parent.width; height: 96
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 14
+ color: "white"
+ }
+ delegate: CategoriesDelegate { width: parent.width; height: 96; \
categoryName: "artist" } spacing: 5
- visible: backend.level1Visible
+ snapMode: ListView.SnapToItem
}
ListView {
width: parent.width/3; height: parent.height
- model: backend.level2Model();
- delegate: FilteringDelegate { width: parent.width; height: 64 }
+ model: backend.albumsModel();
+ header: PlasmaComponents.Label {
+ text: "Albums"; width: parent.width; height: 96
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 14
+ color: "white"
+ }
+ delegate: CategoriesDelegate { width: parent.width; height: 96; \
categoryName: "album" } spacing: 5
- visible: backend.level2Visible
+ snapMode: ListView.SnapToItem
}
ListView {
- width: parent.width/3 * (backend.level2Visible ? 1 : 2) ; height: \
parent.height
- model: backend.level3Model();
+ width: parent.width/3 ; height: parent.height
+ model: backend.musicModel
+ header: PlasmaComponents.Label {
+ text: "Songs"; width: parent.width; height: 96
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 14
+ color: "white"
+ }
delegate: MusicDelegate { width: parent.width; height: 64 }
spacing: 5
- visible: backend.level3Visible
highlight: MediaItemHighlight { z: 1 }
highlightFollowsCurrentItem: true
}
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.cpp \
b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.cpp index \
9639bf8..d4f7449 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.cpp
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.cpp
@@ -37,33 +37,49 @@
#include <mediacenter/mediacenter.h>
-NepomukMusicModel::NepomukMusicModel(QObject* parent): QAbstractItemModel(parent)
+NepomukMusicModel::NepomukMusicModel(QObject* parent): QAbstractListModel(parent)
{
setRoleNames(MediaCenter::appendAdditionalMediaRoles(roleNames()));
}
-void NepomukMusicModel::setTerm(Nepomuk::Types::Property term, const QString \
&iconName) +void NepomukMusicModel::setTerm(Nepomuk::Query::Term term, const QString \
&iconName) {
m_icon = iconName;
+ m_term = term;
+ updateModel();
+}
+void NepomukMusicModel::updateModel()
+{
Nepomuk::Query::Query myQuery;
- Nepomuk::Query::ComparisonTerm ct(term, Nepomuk::Query::Term());
- ct.setInverted(true);
Nepomuk::Query::QueryServiceClient *queryClient = new \
Nepomuk::Query::QueryServiceClient(this); +
connect(queryClient, SIGNAL(newEntries(QList<Nepomuk::Query::Result>)),
this, SLOT(newEntries(QList<Nepomuk::Query::Result>)));
+ connect(queryClient, \
SIGNAL(entriesRemoved(QList<QUrl>)),SLOT(entriesRemoved(QList<QUrl>))); \
connect(queryClient, SIGNAL(error(QString)), SLOT(error(QString)));
connect(queryClient, SIGNAL(finishedListing()), this, SLOT(finishedListing()));
- myQuery.setTerm(ct);
+
+ myQuery.setTerm(m_term);
kDebug()<< "Sparql query:"<< myQuery.toSparqlQuery();
+
m_queryResults.clear();
reset();
+
queryClient->query(myQuery);
}
-QVariant NepomukMusicModel::data(const QModelIndex& index, int role) const
+void NepomukMusicModel::setResourceType(Nepomuk::Types::Property property, const \
QString &iconName) {
+ Nepomuk::Query::ComparisonTerm ct(property, Nepomuk::Query::Term());
+ ct.setInverted(true);
+ m_term = ct;
+ m_icon = iconName;
+ updateModel();
+}
+QVariant NepomukMusicModel::data(const QModelIndex& index, int role) const
+{
switch(role) {
case Qt::DecorationRole:
return m_icon;
@@ -71,40 +87,32 @@ QVariant NepomukMusicModel::data(const QModelIndex& index, int \
role) const return m_queryResults.at(index.row()).resource().genericLabel();
case MediaCenter::IsExpandableRole:
return true;
+ case MediaCenter::ResourceIdRole:
+ return m_queryResults.at(index.row()).resource().resourceUri();
+ case MediaCenter::MediaTypeRole:
+ return "audio";
+ case MediaCenter::MediaUrlRole:
+ return m_queryResults.at(index.row()).resource().property(Nepomuk::Vocabulary::NIE::url()).toString();
}
return QVariant();
}
-int NepomukMusicModel::columnCount(const QModelIndex& parent) const
-{
-
- return 1;
-}
-
int NepomukMusicModel::rowCount(const QModelIndex& parent) const
{
-
return m_queryResults.size();
}
-QModelIndex NepomukMusicModel::parent(const QModelIndex& child) const
+void NepomukMusicModel::newEntries(const QList< Nepomuk::Query::Result >& entries)
{
-
- return QModelIndex();
+ Q_FOREACH (const Nepomuk::Query::Result &res, entries) {
+ m_queryResults.append(res);
+ }
}
-QModelIndex NepomukMusicModel::index(int row, int column, const QModelIndex& parent) \
const +void NepomukMusicModel::entriesRemoved(QList< QUrl > entries)
{
- return createIndex(row,column);
-}
-
-void NepomukMusicModel::newEntries(const QList< Nepomuk::Query::Result >& entries)
-{
- Q_FOREACH (const Nepomuk::Query::Result &res, entries) {
- m_queryResults.append(res);
- }
}
void NepomukMusicModel::finishedListing()
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.h \
b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.h index \
7296c43..1ba77e7 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.h
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmodel.h
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright 2011 Sinny Kumari <ksinny@gmail.com> *
+ * Copyright 2012 Shantanu Tushar <shaan7in@gmail.com> *
* *
* 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 *
@@ -20,29 +21,31 @@
#ifndef NEPOMUKMUSICMODEL_H
#define NEPOMUKMUSICMODEL_H
-#include <QAbstractItemModel>
+#include <QAbstractListModel>
#include <Nepomuk/Query/Result>
#include <Nepomuk/Types/Property>
+#include <nepomuk/term.h>
-class NepomukMusicModel : public QAbstractItemModel
+class NepomukMusicModel : public QAbstractListModel
{
-
Q_OBJECT
- protected Q_SLOTS:
- void newEntries(const QList< Nepomuk::Query::Result > &entries);
- void finishedListing();
public:
explicit NepomukMusicModel(QObject* parent = 0);
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) \
const;
- virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
- virtual QModelIndex parent(const QModelIndex& child) const;
- virtual QModelIndex index(int row, int column, const QModelIndex& parent = \
QModelIndex()) const;
- void setTerm(Nepomuk::Types::Property term, const QString& iconName);
+ void setTerm(Nepomuk::Query::Term term, const QString& iconName);
+ void setResourceType(Nepomuk::Types::Property property, const QString& \
iconName); +
+protected Q_SLOTS:
+ void newEntries(const QList< Nepomuk::Query::Result > &entries);
+ void entriesRemoved(QList< QUrl > entries);
+ void finishedListing();
+ void updateModel();
private:
QString m_icon;
QList< Nepomuk::Query::Result > m_queryResults;
+ Nepomuk::Query::Term m_term;
};
#endif // NEPOMUKMUSICMODEL_H
diff --git a/libs/mediacenter/mediacenter.cpp b/libs/mediacenter/mediacenter.cpp
index a960435..510bba6 100644
--- a/libs/mediacenter/mediacenter.cpp
+++ b/libs/mediacenter/mediacenter.cpp
@@ -100,6 +100,7 @@ QHash<int, QByteArray> appendAdditionalMediaRoles (const \
QHash<int, QByteArray> newRoles[MediaTypeRole] = "mediaType";
newRoles[DecorationTypeRole] = "decorationType";
newRoles[HideLabelRole] = "hideLabel";
+ newRoles[ResourceIdRole] = "resourceId";
return newRoles;
}
diff --git a/libs/mediacenter/mediacenter.h b/libs/mediacenter/mediacenter.h
index 3b707d4..8bb48c3 100644
--- a/libs/mediacenter/mediacenter.h
+++ b/libs/mediacenter/mediacenter.h
@@ -16,6 +16,7 @@
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
+
#ifndef MEDIACENTER_H
#define MEDIACENTER_H
@@ -35,7 +36,8 @@ enum AdditionalMediaRoles {
IsExpandableRole,
MediaTypeRole,
DecorationTypeRole,
- HideLabelRole
+ HideLabelRole,
+ ResourceIdRole
};
enum MediaType {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic