I have made the following changes intended for : CE:MW:Shared / buteo-mtp
Please review and accept or decline. BOSS has already run some checks on this request. See the "Messages from BOSS" section below. https://build.pub.meego.com//request/show/8402 Thank You, aard [This message was auto-generated] --- Request # 8402: Messages from BOSS: State: review at 2013-03-11T18:58:12 by bossbot Reviews: accepted by bossbot : Prechecks succeeded. new for CE-maintainers : Please replace this text with a review and approve/reject the review (not the SR). BOSS will take care of the rest Changes: submit: home:aard:branches:CE:MW:Shared / buteo-mtp -> CE:MW:Shared / buteo-mtp changes files: -------------- --- buteo-mtp.changes +++ buteo-mtp.changes @@ -0,0 +1,3 @@ +* Mon Mar 11 2013 Bernd Wachter <[email protected]> - 0.0.44 +- Switch from libqttracker to qtsparql + old: ---- buteo-mtp-0.0.43.tar.gz new: ---- buteo-mtp-0.0.44.tar.gz spec files: ----------- --- buteo-mtp.spec +++ buteo-mtp.spec @@ -1,5 +1,5 @@ Name: buteo-mtp -Version: 0.0.43 +Version: 0.0.44 Release: 1 Summary: MTP library Group: System/Libraries @@ -7,7 +7,7 @@ URL: https://github.com/nemomobile/buteo-mtp Source0: %{name}-%{version}.tar.gz BuildRequires: pkgconfig(contextsubscriber-1.0) -BuildRequires: pkgconfig(qttracker) +BuildRequires: pkgconfig(QtSparql) BuildRequires: pkgconfig(synccommon) BuildRequires: pkgconfig(QtSystemInfo) Requires: mtp-vendor-configuration other changes: -------------- ++++++ buteo-mtp-0.0.43.tar.gz -> buteo-mtp-0.0.44.tar.gz --- mts/platform/storage/fsstorageplugin/fsstorageplugin.pro +++ mts/platform/storage/fsstorageplugin/fsstorageplugin.pro @@ -3,13 +3,13 @@ ###################################################################### TEMPLATE = lib -LIBS += -lqttracker TARGET = fsstorage CONFIG += plugin debug #QMAKE_CXXFLAGS += -O0 -Werror QT += dbus QT -= gui +CONFIG += qtsparql DEPENDPATH += . \ .. \ --- mts/platform/storage/fsstorageplugin/storagetracker.cpp +++ mts/platform/storage/fsstorageplugin/storagetracker.cpp @@ -33,9 +33,13 @@ #include <QString> #include <QRegExp> #include <QUuid> +#include <QUrl> #include <QDBusPendingReply> #include <QDBusConnection> -#include <QtTracker/Tracker> +#include <QtSparql/QSparqlConnection> +#include <QtSparql/QSparqlError> +#include <QtSparql/QSparqlQuery> +#include <QtSparql/QSparqlResult> #include <libsynccommon/SyncDBusConnection.h> // Local headers #include "storagetracker.h" @@ -691,17 +695,37 @@ return true; } +static QSparqlConnection *trackerConnection() +{ + // QTRACKER_DIRECT does not handle the case when DB is removed and + // recreated, like with `tracker-control -r` (storage-test does this) + static QSparqlConnection *trackerConnection = new QSparqlConnection("QTRACKER"); + return trackerConnection; +} + static void trackerQuery(const QString& query, QVector<QStringList> &res) { MTP_LOG_INFO(query); - res = ::tracker()->rawSparqlQuery(query.toUtf8().data()); + + QSparqlResult* result = trackerConnection()->syncExec(QSparqlQuery(query)); + + while (result->next()) { + QStringList row; + for (int i = 0; i < result->current().count(); ++i) { + row.append(result->current().value(i).toString()); + } + res.append(row); + } + + delete result; } static void trackerUpdateQuery(const QString& query) { // Ignore result for now... - ::tracker()->rawSparqlUpdateQuery(query); MTP_LOG_INFO(query); + + delete trackerConnection()->syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); } static QString generateIriForTracker(const QString& path) @@ -1253,7 +1277,7 @@ } else { - QString query = QString("DELETE{?f nmm:MusicAlbum ?fld} WHERE{?f nie:url '") + iri + QString("' ; nmm:MusicAlbum ?fld} INSERT{?f nmm:MusicAlbum[ a nmm:MusicAlbum ; nie:title '") + val + QString("']} WHERE{?f a nmm:MusicPiece; nie:url '") + iri + QString("'}"); + QString query = QString("DELETE{?f nmm:musicAlbum ?fld} WHERE{?f nie:url '") + iri + QString("' ; nmm:musicAlbum ?fld} INSERT{?f nmm:musicAlbum[ a nmm:MusicAlbum ; nie:title '") + val + QString("']} WHERE{?f a nmm:MusicPiece; nie:url '") + iri + QString("'}"); return trackerUpdateQuery(query); } } @@ -1318,12 +1342,12 @@ { if(iri.isNull()) { - val = QString("mtp:waveFormat"); + val = QString("mtp:waveformat"); domains.append("nmm:Video"); } else { - QString query = QString("DELETE{?f mtp:waveFormat ?fld} WHERE{?f nie:url '") + iri + QString("' ; mtp:waveFormat ?fld} INSERT{?f mtp:waveFormat '") + val + QString("'} WHERE{?f a nmm:Video; nie:url '") + iri + QString("'}"); + QString query = QString("DELETE{?f mtp:waveformat ?fld} WHERE{?f nie:url '") + iri + QString("' ; mtp:waveformat ?fld} INSERT{?f mtp:waveformat '") + val + QString("'} WHERE{?f a nmm:Video; nie:url '") + iri + QString("'}"); return trackerUpdateQuery(query); } } --- mts/platform/storage/fsstorageplugin/unittests/fsstorageplugin_test.cpp +++ mts/platform/storage/fsstorageplugin/unittests/fsstorageplugin_test.cpp @@ -33,7 +33,9 @@ #include "fsstorageplugin.h" #include "storageitem.h" #include "storagetracker.h" -#include <QtTracker/Tracker> +#include <QtSparql/QSparqlConnection> +#include <QtSparql/QSparqlQuery> +#include <QtSparql/QSparqlResult> using namespace meegomtp1dot0; @@ -41,7 +43,6 @@ void FSStoragePlugin_test::initTestCase() { - QDir dir; QFile file( QDir::homePath() + "/.mtp/.mtphandles"); if( file.open( QIODevice::ReadOnly ) ) @@ -172,53 +173,55 @@ sleep(5); + QSparqlConnection connection("QTRACKER_DIRECT"); + // Create tracker playlist1 with song1 and song2 QString query; query = "INSERT{<file:///tmp/mtptests/Music/song1.mp3> a nfo:FileDataObject, nie:InformationElement ; nie:url 'file:///tmp/mtptests/Music/song1.mp3'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "INSERT{<file:///tmp/mtptests/Music/song2.mp3> a nfo:FileDataObject, nie:InformationElement ; nie:url 'file:///tmp/mtptests/Music/song2.mp3'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "INSERT{<file:///tmp/mtptests/Music/song3.mp3> a nfo:FileDataObject, nie:InformationElement ; nie:url 'file:///tmp/mtptests/Music/song3.mp3'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "INSERT{<file:///tmp/mtptests/Music/song4.mp3> a nfo:FileDataObject, nie:InformationElement ; nie:url 'file:///tmp/mtptests/Music/song4.mp3'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "DELETE { ?entry a rdfs:Resource } WHERE { <urn:playlist:pl1> nfo:hasMediaFileListEntry ?entry . }"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::DeleteStatement)); query = "DELETE {<urn:playlist:pl1> a rdfs:Resource}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::DeleteStatement)); query = "INSERT {<urn:playlist:pl1> a nmm:Playlist; nie:title 'play1'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "INSERT {<urn:playlist:pl1> nfo:hasMediaFileListEntry <urn:playlist-entry:pl1:0> . <urn:playlist-entry:pl1:0> a nfo:MediaFileListEntry . <urn:playlist-entry:pl1:0> nfo:entryUrl <file:///tmp/mtptests/Music/song1.mp3> . <urn:playlist-entry:pl1:0> nfo:listPosition '0' . <urn:playlist:pl1> nfo:hasMediaFileListEntry <urn:playlist-entry:pl1:1> . <urn:playlist-entry:pl1:1> a nfo:MediaFileListEntry . <urn:playlist-entry:pl1:1> nfo:entryUrl <file:///tmp/mtptests/Music/song2.mp3> . <urn:playlist-entry:pl1:1> nfo:listPosition '1' .}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); // Create tracker playlist2 with song3 and song4 query = "DELETE { ?entry a rdfs:Resource } WHERE { <urn:playlist:pl2> nfo:hasMediaFileListEntry ?entry . }"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::DeleteStatement)); query = "DELETE {<urn:playlist:pl2> a rdfs:Resource}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::DeleteStatement)); query = "INSERT {<urn:playlist:pl2> a nmm:Playlist; nie:title 'play2'}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); query = "INSERT {<urn:playlist:pl2> nfo:hasMediaFileListEntry <urn:playlist-entry:pl2:0> . <urn:playlist-entry:pl2:0> a nfo:MediaFileListEntry . <urn:playlist-entry:pl2:0> nfo:entryUrl <file:///tmp/mtptests/Music/song3.mp3> . <urn:playlist-entry:pl2:0> nfo:listPosition '0' . <urn:playlist:pl2> nfo:hasMediaFileListEntry <urn:playlist-entry:pl2:1> . <urn:playlist-entry:pl2:1> a nfo:MediaFileListEntry . <urn:playlist-entry:pl2:1> nfo:entryUrl <file:///tmp/mtptests/Music/song4.mp3> . <urn:playlist-entry:pl2:1> nfo:listPosition '1' .}"; - ::tracker()->rawSparqlUpdateQuery(query); + delete connection.syncExec(QSparqlQuery(query, QSparqlQuery::InsertStatement)); } @@ -1554,10 +1557,15 @@ MTPResponseCode response = m_storage->deleteItem(handle, MTP_OBF_FORMAT_Undefined); QCOMPARE(response, (MTPResponseCode)MTP_RESP_OK); + // QTRACKER_DIRECT does not support QSparqlResult::QuerySize - use QTRACKER + QSparqlConnection connection("QTRACKER"); + // Ensure that the playlist is deleted from tracker too - QVector<QStringList> result = ::tracker()->rawSparqlQuery(QString("SELECT ?f WHERE {?f a nmm:Playlist}")); - QCOMPARE(result.size(), 1); - QCOMPARE(result[0][0], QString("urn:playlist:pl2")); + QSparqlResult* result = connection.syncExec(QSparqlQuery("SELECT ?f WHERE {?f a nmm:Playlist}")); + QCOMPARE(result->size(), 1); + result->next(); + QCOMPARE(result->current().value(0).toString(), QString("urn:playlist:pl2")); + delete result; // Delete the other one too handle = m_storage->m_pathNamesMap["/tmp/mtptests/Playlists/play2.pla"]; @@ -1565,10 +1573,10 @@ response = m_storage->deleteItem(handle, MTP_OBF_FORMAT_Undefined); QCOMPARE(response, (MTPResponseCode)MTP_RESP_OK); - result.clear(); // Ensure that the playlist is deleted from tracker too - result = ::tracker()->rawSparqlQuery(QString("SELECT ?f WHERE {?f a nmm:Playlist}")); - QCOMPARE(result.size(), 0); + result = connection.syncExec(QSparqlQuery("SELECT ?f WHERE {?f a nmm:Playlist}")); + QCOMPARE(result->size(), 0); + delete result; } void FSStoragePlugin_test::testCreatePlaylists() @@ -1602,49 +1610,72 @@ { // Make direct tracker queries to ensure that the playlist MyPlaylist has // been added. + // QTRACKER_DIRECT does not support QSparqlResult::QuerySize - use QTRACKER + QSparqlConnection connection("QTRACKER"); QString urn; - QVector<QStringList> resultSet; + QSparqlResult *resultSet = 0; + QString query = QString("SELECT ?f WHERE {?f a nmm:Playlist}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - urn = resultSet[0][0]; + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + urn = resultSet->stringValue(0); + delete resultSet; query = QString("SELECT ?f WHERE{<") + urn + QString("> nie:title ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("MyPlaylist")); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("MyPlaylist")); + delete resultSet; query = QString("SELECT ?f WHERE{<") + urn + QString("> nie:identifier ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("file:///tmp/mtptests/Playlists/MyPlaylist")); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("file:///tmp/mtptests/Playlists/MyPlaylist")); + delete resultSet; // Query the entries now query = QString("SELECT ?f WHERE{<") + urn + QString("> nfo:hasMediaFileListEntry ?f}"); - QVector<QStringList> resultSetAll = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSetAll.size(), 4); + QSparqlResult *resultSetAll = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSetAll->size(), 4); // Query the entry content's uri to ensure that the playlist entries were // added correctly - query = QString("SELECT ?f WHERE{<") + resultSetAll[0][0] + QString("> nfo:entryUrl ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("file:///tmp/mtptests/Music/song1.mp3")); - - query = QString("SELECT ?f WHERE{<") + resultSetAll[1][0] + QString("> nfo:entryUrl ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("file:///tmp/mtptests/Music/song2.mp3")); - - query = QString("SELECT ?f WHERE{<") + resultSetAll[2][0] + QString("> nfo:entryUrl ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("file:///tmp/mtptests/Music/song3.mp3")); - - query = QString("SELECT ?f WHERE{<") + resultSetAll[3][0] + QString("> nfo:entryUrl ?f}"); - resultSet = ::tracker()->rawSparqlQuery(query); - QCOMPARE(resultSet.size(), 1); - QCOMPARE(resultSet[0][0], QString("file:///tmp/mtptests/Music/song4.mp3")); + resultSetAll->next(); + query = QString("SELECT ?f WHERE{<") + resultSetAll->stringValue(0) + QString("> nfo:entryUrl ?f}"); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("file:///tmp/mtptests/Music/song1.mp3")); + delete resultSet; + + resultSetAll->next(); + query = QString("SELECT ?f WHERE{<") + resultSetAll->stringValue(0) + QString("> nfo:entryUrl ?f}"); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("file:///tmp/mtptests/Music/song2.mp3")); + delete resultSet; + + resultSetAll->next(); + query = QString("SELECT ?f WHERE{<") + resultSetAll->stringValue(0) + QString("> nfo:entryUrl ?f}"); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("file:///tmp/mtptests/Music/song3.mp3")); + delete resultSet; + + resultSetAll->next(); + query = QString("SELECT ?f WHERE{<") + resultSetAll->stringValue(0) + QString("> nfo:entryUrl ?f}"); + resultSet = connection.syncExec(QSparqlQuery(query)); + QCOMPARE(resultSet->size(), 1); + resultSet->next(); + QCOMPARE(resultSet->stringValue(0), QString("file:///tmp/mtptests/Music/song4.mp3")); + delete resultSet; + + delete resultSetAll; } void FSStoragePlugin_test::cleanupTestCase() --- mts/platform/storage/fsstorageplugin/unittests/unittests.pro +++ mts/platform/storage/fsstorageplugin/unittests/unittests.pro @@ -3,8 +3,9 @@ ###################################################################### CONFIG += qtestlib warn_off debug_and_release mobility +CONFIG += qtsparql MOBILITY = systeminfo -LIBS += -lqttracker -lcontextsubscriber +LIBS += -lcontextsubscriber LIBS += -lsynccommon -ldl TEMPLATE = app TARGET = storage-test --- rpm/buteo-mtp.changes +++ rpm/buteo-mtp.changes @@ -1,3 +1,6 @@ +* Mon Mar 11 2013 Bernd Wachter <[email protected]> - 0.0.44 +- Switch from libqttracker to qtsparql + * Fri Feb 01 2013 Bernd Wachter <[email protected]> - 0.0.43 - Add device icon support --- rpm/buteo-mtp.spec +++ rpm/buteo-mtp.spec @@ -1,5 +1,5 @@ Name: buteo-mtp -Version: 0.0.43 +Version: 0.0.44 Release: 1 Summary: MTP library Group: System/Libraries @@ -7,7 +7,7 @@ URL: https://github.com/nemomobile/buteo-mtp Source0: %{name}-%{version}.tar.gz BuildRequires: pkgconfig(contextsubscriber-1.0) -BuildRequires: pkgconfig(qttracker) +BuildRequires: pkgconfig(QtSparql) BuildRequires: pkgconfig(synccommon) BuildRequires: pkgconfig(QtSystemInfo) Requires: mtp-vendor-configuration
