From kde-commits Sun Jul 15 13:40:07 2012 From: Shantanu Tushar Date: Sun, 15 Jul 2012 13:40:07 +0000 To: kde-commits Subject: [plasma-mediacenter] /: Use Nepomuk directly instead of PA metadatamodels in Music. Fast :) Message-Id: <20120715134007.92823A6094 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=134235986108687 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/metad= atamusicbackend.cpp M +22 -38 browsingbackends/metadatabackends/metadatamusicbackend/metad= atamusicbackend.h M +2 -1 browsingbackends/metadatabackends/metadatamusicbackend/metad= atamusiccomponents/CategoriesDelegate.qml M +30 -9 browsingbackends/metadatabackends/metadatamusicbackend/metad= atamusiccomponents/MediaBrowser.qml M +33 -25 browsingbackends/metadatabackends/metadatamusicbackend/nepom= ukmusicmodel.cpp M +13 -10 browsingbackends/metadatabackends/metadatamusicbackend/nepom= ukmusicmodel.h M +1 -0 libs/mediacenter/mediacenter.cpp M +3 -1 libs/mediacenter/mediacenter.h http://commits.kde.org/plasma-mediacenter/def0aa2521ce3b9170907c5ec078b0843= 75fccfb diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadat= amusicbackend.cpp b/browsingbackends/metadatabackends/metadatamusicbackend/= metadatamusicbackend.cpp index 94001bd..5d93741 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.cpp +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.cpp @@ -25,61 +25,34 @@ #include "metadatamusicmodel.h" #include "nepomukmusicmodel.h" = -#include "categoriesmodel.h" #include "nepomukmusicmodel.h" #include +#include +#include +#include +#include +#include = MEDIACENTER_EXPORT_BROWSINGBACKEND(MetadataMusicBackend) = MetadataMusicBackend::MetadataMusicBackend(QObject* parent, const QVariant= List& 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(), "amar= ok"); + emit musicModelChanged(); } = MetadataMusicBackend::~MetadataMusicBackend() { } = -void MetadataMusicBackend::setCategory (int index) -{ - m_currentCategory =3D 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 =3D m_nepomukModel->data(m_nepomukModel->inde= x(index, 0), Qt::DisplayRole).toString(); - switch (m_currentCategory) { - case Category::AllMusic: - break; - case Category::Artists: - m_artistName =3D currentItemLabel; - showMusicForArtist(); - break; - case Category::Albums: - m_albumName =3D 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 =3D false; - emit level2VisibleChanged(); - m_level3Visible =3D true; - emit level3VisibleChanged(); -} - -void MetadataMusicBackend::showAlbums() +QString MetadataMusicBackend::mediaBrowserOverride() const { - m_nepomukModel->setTerm(Nepomuk::Vocabulary::NMM::musicAlbum(), "tools= -media-optical-copy"); - - m_level2Visible =3D true; - emit level2VisibleChanged(); - m_level3Visible =3D false; - emit level3VisibleChanged(); + return constructQmlSource("metadatamusiccomponents", "0.1", "MediaBrow= ser"); } = -void MetadataMusicBackend::showArtists() +bool MetadataMusicBackend::supportsSearch() const { - m_nepomukModel->setTerm(Nepomuk::Vocabulary::NMM::performer(), "user-i= dentity"); - - m_level2Visible =3D true; - emit level2VisibleChanged(); - m_level3Visible =3D 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 =3D 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 =3D true; - emit level3VisibleChanged(); + return m_artistsModel; } = -QString MetadataMusicBackend::mediaBrowserOverride() const +QString MetadataMusicBackend::albumFilter() const { - return constructQmlSource("metadatamusiccomponents", "0.1", "MediaBrow= ser"); + 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 =3D filter; + emit albumFilterChanged(); + m_artistFilter.clear(); + emit artistFilterChanged(); + updateModelAccordingToFilters(); } = -QObject* MetadataMusicBackend::level3Model() const +void MetadataMusicBackend::setArtistFilter(const QString& filter) { - return m_metadataMusicModel; + m_artistFilter =3D filter; + emit artistFilterChanged(); + m_albumFilter.clear(); + emit albumFilterChanged(); + updateModelAccordingToFilters(); } = -bool MetadataMusicBackend::level1Visible() const +void MetadataMusicBackend::updateModelAccordingToFilters() { - return m_level1Visible; -} + QList 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::Vocabular= y::NMM::musicAlbum(), Nepomuk::Query::ResourceTerm(m_albumFilter))); + } + if (!m_artistFilter.isEmpty()) { + termsList.append(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabular= y::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/metadat= amusicbackend.h b/browsingbackends/metadatabackends/metadatamusicbackend/me= tadatamusicbackend.h index 442468d..a357483 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.h +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.h @@ -35,9 +35,9 @@ class MetadataMusicModel; class MetadataMusicBackend : public AbstractMetadataBackend { Q_OBJECT - Q_PROPERTY(bool level1Visible READ level1Visible NOTIFY level1VisibleC= hanged) - Q_PROPERTY(bool level2Visible READ level2Visible NOTIFY level2VisibleC= hanged) - Q_PROPERTY(bool level3Visible READ level3Visible NOTIFY level3VisibleC= hanged) + Q_PROPERTY(QString artistFilter READ artistFilter WRITE setArtistFilte= r NOTIFY artistFilterChanged) + Q_PROPERTY(QString albumFilter READ albumFilter WRITE setAlbumFilter N= OTIFY albumFilterChanged) + Q_PROPERTY(QObject* musicModel READ musicModel NOTIFY musicModelChange= d) = 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/metadat= amusiccomponents/CategoriesDelegate.qml b/browsingbackends/metadatabackends= /metadatamusicbackend/metadatamusiccomponents/CategoriesDelegate.qml index e8cf713..3ba8fe6 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicc= omponents/CategoriesDelegate.qml +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicc= omponents/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 =3D=3D "album" ? backend.albumFilter =3D resou= rceId : backend.artistFilter =3D resourceId } diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadat= amusiccomponents/MediaBrowser.qml b/browsingbackends/metadatabackends/metad= atamusicbackend/metadatamusiccomponents/MediaBrowser.qml index e68c1f7..51e0343 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicc= omponents/MediaBrowser.qml +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicc= omponents/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; ca= tegoryName: "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; ca= tegoryName: "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/nepomuk= musicmodel.cpp b/browsingbackends/metadatabackends/metadatamusicbackend/nep= omukmusicmodel.cpp index 9639bf8..d4f7449 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmo= del.cpp +++ b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmo= del.cpp @@ -37,33 +37,49 @@ #include = = -NepomukMusicModel::NepomukMusicModel(QObject* parent): QAbstractItemModel(= parent) +NepomukMusicModel::NepomukMusicModel(QObject* parent): QAbstractListModel(= parent) { setRoleNames(MediaCenter::appendAdditionalMediaRoles(roleNames())); } = -void NepomukMusicModel::setTerm(Nepomuk::Types::Property term, const QStri= ng &iconName) +void NepomukMusicModel::setTerm(Nepomuk::Query::Term term, const QString &= iconName) { m_icon =3D iconName; + m_term =3D term; + updateModel(); +} = +void NepomukMusicModel::updateModel() +{ Nepomuk::Query::Query myQuery; - Nepomuk::Query::ComparisonTerm ct(term, Nepomuk::Query::Term()); - ct.setInverted(true); Nepomuk::Query::QueryServiceClient *queryClient =3D new Nepomuk::Query= ::QueryServiceClient(this); + connect(queryClient, SIGNAL(newEntries(QList)), this, SLOT(newEntries(QList))); + connect(queryClient, SIGNAL(entriesRemoved(QList)),SLOT(entriesR= emoved(QList))); connect(queryClient, SIGNAL(error(QString)), SLOT(error(QString))); connect(queryClient, SIGNAL(finishedListing()), this, SLOT(finishedLis= ting())); - 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 =3D ct; + m_icon =3D 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& ind= ex, 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 QModelInde= x& 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/nepomuk= musicmodel.h b/browsingbackends/metadatabackends/metadatamusicbackend/nepom= ukmusicmodel.h index 7296c43..1ba77e7 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmo= del.h +++ b/browsingbackends/metadatabackends/metadatamusicbackend/nepomukmusicmo= del.h @@ -1,5 +1,6 @@ /*************************************************************************= ** * Copyright 2011 Sinny Kumari = * + * Copyright 2012 Shantanu Tushar = * * = * * 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 +#include #include #include +#include = -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 =3D 0); virtual QVariant data(const QModelIndex& index, int role =3D Qt::Displ= ayRole) const; - virtual int columnCount(const QModelIndex& parent =3D QModelIndex()) c= onst; virtual int rowCount(const QModelIndex& parent =3D QModelIndex()) cons= t; - virtual QModelIndex parent(const QModelIndex& child) const; - virtual QModelIndex index(int row, int column, const QModelIndex& pare= nt =3D 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/mediacente= r.cpp index a960435..510bba6 100644 --- a/libs/mediacenter/mediacenter.cpp +++ b/libs/mediacenter/mediacenter.cpp @@ -100,6 +100,7 @@ QHash appendAdditionalMediaRoles (cons= t QHash newRoles[MediaTypeRole] =3D "mediaType"; newRoles[DecorationTypeRole] =3D "decorationType"; newRoles[HideLabelRole] =3D "hideLabel"; + newRoles[ResourceIdRole] =3D "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 {