[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [elisa] /: simplify AllArtistsModel to not have filtering and use a QSortFilterProxyModel
From: Matthieu Gallien <matthieu_gallien () yahoo ! fr>
Date: 2016-12-06 22:10:58
Message-ID: E1cENww-00046P-0S () code ! kde ! org
[Download RAW message or body]
Git commit a123090265cecbcabe1ba6b820bac72404ba7c33 by Matthieu Gallien.
Committed on 06/12/2016 at 21:53.
Pushed by mgallien into branch 'master'.
simplify AllArtistsModel to not have filtering and use a QSortFilterProxyModel
the QSortFilterProxyModel is faster than my hand made solution by not
requirign a freeze of the ui that is easy to perceive
M +1 -1 autotests/databaseinterfacetest.cpp
M +9 -4 src/MediaAllArtistView.qml
M +2 -26 src/allartistsmodel.cpp
M +2 -11 src/allartistsmodel.h
M +14 -18 src/databaseinterface.cpp
M +1 -1 src/databaseinterface.h
M +3 -0 src/upnpControl.cpp
https://commits.kde.org/elisa/a123090265cecbcabe1ba6b820bac72404ba7c33
diff --git a/autotests/databaseinterfacetest.cpp \
b/autotests/databaseinterfacetest.cpp index b67f390..0d4bacc 100644
--- a/autotests/databaseinterfacetest.cpp
+++ b/autotests/databaseinterfacetest.cpp
@@ -60,7 +60,7 @@ private Q_SLOTS:
void avoidCrashInAllArtists()
{
DatabaseInterface musicDb;
- musicDb.allArtists({});
+ musicDb.allArtists();
}
void avoidCrashInAllAlbums()
diff --git a/src/MediaAllArtistView.qml b/src/MediaAllArtistView.qml
index 03ac507..3d79682 100644
--- a/src/MediaAllArtistView.qml
+++ b/src/MediaAllArtistView.qml
@@ -107,11 +107,16 @@ Item {
model: DelegateModel {
id: delegateContentModel
- model: AllArtistsModel {
- id: allArtistsModel
+ model: SortFilterProxyModel {
+ sourceModel: AllArtistsModel {
+ id: allArtistsModel
- databaseInterface: rootElement.musicDatabase
- filter: filterTextInput.text
+ databaseInterface: rootElement.musicDatabase
+ }
+
+ filterRole: AllArtistsModel.NameRole
+
+ filterRegExp: new RegExp(filterTextInput.text, 'i')
}
delegate: MediaArtistDelegate {
diff --git a/src/allartistsmodel.cpp b/src/allartistsmodel.cpp
index 3571d83..b6f15ce 100644
--- a/src/allartistsmodel.cpp
+++ b/src/allartistsmodel.cpp
@@ -34,8 +34,6 @@ public:
{
}
- QString mFilter;
-
DatabaseInterface *mMusicDatabase = nullptr;
QVector<MusicArtist> mAllArtists;
@@ -184,11 +182,6 @@ DatabaseInterface *AllArtistsModel::databaseInterface() const
return d->mMusicDatabase;
}
-QString AllArtistsModel::filter() const
-{
- return d->mFilter;
-}
-
void AllArtistsModel::setDatabaseInterface(DatabaseInterface *musicDatabase)
{
if (d->mMusicDatabase == musicDatabase) {
@@ -207,30 +200,13 @@ void AllArtistsModel::setDatabaseInterface(DatabaseInterface \
*musicDatabase) }
beginResetModel();
- d->mAllArtists = d->mMusicDatabase->allArtists(d->mFilter);
+ d->mAllArtists = d->mMusicDatabase->allArtists();
d->mArtistsCount = d->mAllArtists.count();
endResetModel();
emit databaseInterfaceChanged();
}
-void AllArtistsModel::setFilter(const QString &filter)
-{
- if (d->mFilter == filter) {
- return;
- }
-
- beginResetModel();
-
- d->mFilter = filter;
- d->mAllArtists = d->mMusicDatabase->allArtists(d->mFilter);
- d->mArtistsCount = d->mAllArtists.count();
-
- endResetModel();
-
- Q_EMIT filterChanged();
-}
-
void AllArtistsModel::beginArtistAdded(QVector<qulonglong> newArtists)
{
Q_UNUSED(newArtists);
@@ -241,7 +217,7 @@ void AllArtistsModel::endArtistAdded(QVector<qulonglong> \
newArtists) Q_UNUSED(newArtists);
beginResetModel();
- d->mAllArtists = d->mMusicDatabase->allArtists(d->mFilter);
+ d->mAllArtists = d->mMusicDatabase->allArtists();
d->mArtistsCount = d->mAllArtists.count();
endResetModel();
diff --git a/src/allartistsmodel.h b/src/allartistsmodel.h
index 6b95467..cd3575b 100644
--- a/src/allartistsmodel.h
+++ b/src/allartistsmodel.h
@@ -39,11 +39,6 @@ class AllArtistsModel : public QAbstractItemModel
WRITE setDatabaseInterface
NOTIFY databaseInterfaceChanged)
- Q_PROPERTY(QString filter
- READ filter
- WRITE setFilter
- NOTIFY filterChanged)
-
public:
enum ColumnsRoles {
@@ -53,6 +48,8 @@ public:
IdRole = ImageRole + 1,
};
+ Q_ENUM(ColumnsRoles)
+
explicit AllArtistsModel(QObject *parent = 0);
virtual ~AllArtistsModel();
@@ -73,20 +70,14 @@ public:
DatabaseInterface* databaseInterface() const;
- QString filter() const;
-
Q_SIGNALS:
void databaseInterfaceChanged();
- void filterChanged();
-
public Q_SLOTS:
void setDatabaseInterface(DatabaseInterface* databaseInterface);
- void setFilter(const QString &filter);
-
private Q_SLOTS:
diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp
index 2d567af..08ecdf6 100644
--- a/src/databaseinterface.cpp
+++ b/src/databaseinterface.cpp
@@ -44,7 +44,7 @@ public:
mUpdateAlbumQuery(mTracksDatabase), \
mSelectTracksFromArtist(mTracksDatabase),
mSelectTrackFromIdQuery(mTracksDatabase), \
mSelectCountAlbumsForArtistQuery(mTracksDatabase),
mSelectTrackIdFromTitleAlbumArtistQuery(mTracksDatabase), \
mSelectAllAlbumsWithFilterQuery(mTracksDatabase),
- mSelectAllAlbumsFromArtistQuery(mTracksDatabase), \
mSelectAllArtistsWithFilterQuery(mTracksDatabase), + \
mSelectAllAlbumsFromArtistQuery(mTracksDatabase), \
mSelectAllArtistsQuery(mTracksDatabase),
mInsertArtistsQuery(mTracksDatabase), \
mSelectArtistByNameQuery(mTracksDatabase) {
}
@@ -79,7 +79,7 @@ public:
QSqlQuery mSelectAllAlbumsFromArtistQuery;
- QSqlQuery mSelectAllArtistsWithFilterQuery;
+ QSqlQuery mSelectAllArtistsQuery;
QSqlQuery mInsertArtistsQuery;
@@ -277,7 +277,7 @@ QVector<MusicAlbum> \
DatabaseInterface::allAlbumsFromArtist(QString artistName) c return result;
}
-QVector<MusicArtist> DatabaseInterface::allArtists(QString filter) const
+QVector<MusicArtist> DatabaseInterface::allArtists() const
{
auto result = QVector<MusicArtist>();
@@ -292,15 +292,13 @@ QVector<MusicArtist> DatabaseInterface::allArtists(QString \
filter) const
QString currentFilter(QStringLiteral("%%1%"));
- d->mSelectAllArtistsWithFilterQuery.bindValue(QStringLiteral(":filter"), \
currentFilter.arg(filter)); + auto queryResult = d->mSelectAllArtistsQuery.exec();
- auto queryResult = d->mSelectAllArtistsWithFilterQuery.exec();
+ if (!queryResult || !d->mSelectAllArtistsQuery.isSelect() || \
!d->mSelectAllArtistsQuery.isActive()) { + qDebug() << \
"DatabaseInterface::allArtists" << "not select" << \
d->mSelectAllArtistsQuery.lastQuery(); + qDebug() << \
"DatabaseInterface::allArtists" << d->mSelectAllArtistsQuery.lastError();
- if (!queryResult || !d->mSelectAllArtistsWithFilterQuery.isSelect() || \
!d->mSelectAllArtistsWithFilterQuery.isActive()) {
- qDebug() << "DatabaseInterface::allArtists" << "not select" << \
d->mSelectAllArtistsWithFilterQuery.lastQuery();
- qDebug() << "DatabaseInterface::allArtists" << \
d->mSelectAllArtistsWithFilterQuery.lastError();
-
- d->mSelectAllArtistsWithFilterQuery.finish();
+ d->mSelectAllArtistsQuery.finish();
transactionResult = finishTransaction();
if (!transactionResult) {
@@ -310,11 +308,11 @@ QVector<MusicArtist> DatabaseInterface::allArtists(QString \
filter) const return result;
}
- while(d->mSelectAllArtistsWithFilterQuery.next()) {
+ while(d->mSelectAllArtistsQuery.next()) {
auto newArtist = MusicArtist();
- newArtist.setDatabaseId(d->mSelectAllArtistsWithFilterQuery.record().value(0).toULongLong());
- newArtist.setName(d->mSelectAllArtistsWithFilterQuery.record().value(1).toString());
+ newArtist.setDatabaseId(d->mSelectAllArtistsQuery.record().value(0).toULongLong());
+ newArtist.setName(d->mSelectAllArtistsQuery.record().value(1).toString());
newArtist.setValid(true);
d->mSelectCountAlbumsForArtistQuery.bindValue(QStringLiteral(":artistName"), \
newArtist.name()); @@ -342,7 +340,7 @@ QVector<MusicArtist> \
DatabaseInterface::allArtists(QString filter) const result.push_back(newArtist);
}
- d->mSelectAllArtistsWithFilterQuery.finish();
+ d->mSelectAllArtistsQuery.finish();
transactionResult = finishTransaction();
if (!transactionResult) {
@@ -885,14 +883,12 @@ void DatabaseInterface::initRequest()
auto selectAllArtistsWithFilterText = QStringLiteral("SELECT `ID`, "
"`Name` "
"FROM `Artists` "
- "WHERE "
- "`Name` like :filter "
"ORDER BY `Name`");
- auto result = \
d->mSelectAllArtistsWithFilterQuery.prepare(selectAllArtistsWithFilterText); + \
auto result = d->mSelectAllArtistsQuery.prepare(selectAllArtistsWithFilterText);
if (!result) {
- qDebug() << "DatabaseInterface::initRequest" << \
selectAllArtistsWithFilterText << d->mSelectAllArtistsWithFilterQuery.lastError(); + \
qDebug() << "DatabaseInterface::initRequest" << selectAllArtistsWithFilterText << \
d->mSelectAllArtistsQuery.lastError(); qDebug() << d->mTracksDatabase.lastError();
}
}
diff --git a/src/databaseinterface.h b/src/databaseinterface.h
index 7921735..c6d468d 100644
--- a/src/databaseinterface.h
+++ b/src/databaseinterface.h
@@ -69,7 +69,7 @@ public:
QVector<MusicAlbum> allAlbumsFromArtist(QString artistName) const;
- QVector<MusicArtist> allArtists(QString filter) const;
+ QVector<MusicArtist> allArtists() const;
QVector<MusicAudioTrack> tracksFromAuthor(QString artistName) const;
diff --git a/src/upnpControl.cpp b/src/upnpControl.cpp
index 7632af2..737eb03 100644
--- a/src/upnpControl.cpp
+++ b/src/upnpControl.cpp
@@ -67,6 +67,8 @@
#include <KCoreAddons/KAboutData>
#endif
+#include <QtCore/QSortFilterProxyModel>
+
#include <QtGui/QIcon>
#include <QtWidgets/QApplication>
@@ -120,6 +122,7 @@ int __attribute__((visibility("default"))) main(int argc, char \
*argv[])
qmlRegisterType<AllArtistsModel>("org.mgallien.QmlExtension", 1, 0, \
"AllArtistsModel");
qmlRegisterType<AlbumModel>("org.mgallien.QmlExtension", 1, 0, "AlbumModel");
qmlRegisterType<MusicListenersManager>("org.mgallien.QmlExtension", 1, 0, \
"MusicListenersManager"); + \
qmlRegisterType<QSortFilterProxyModel>("org.mgallien.QmlExtension", 1, 0, \
"SortFilterProxyModel");
#if defined Qt5DBus_FOUND && Qt5DBus_FOUND
qmlRegisterType<Mpris2>("org.mgallien.QmlExtension", 1, 0, "Mpris2");
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic