From bbdd4b86328f03b5a466dcff5c7179775c03ab2f Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 1 Dec 2015 11:14:30 +0100 Subject: Example client: sync and trees --- examples/client/main.cpp | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/examples/client/main.cpp b/examples/client/main.cpp index 2aeb328..ac40fcb 100644 --- a/examples/client/main.cpp +++ b/examples/client/main.cpp @@ -39,6 +39,18 @@ #include #include +template +QString format(const T &object) +{ + QString output; + output.append(object->identifier()); + output.append(QStringLiteral("\t")); + output.append(object->getProperty("name").toString()); + output.append(QStringLiteral("\t")); + output.append(object->getProperty("parent").toString()); + return output; +} + template class View : public QWidget { @@ -117,6 +129,7 @@ int main(int argc, char *argv[]) cliOptions.addOption(QCommandLineOption("debuglevel")); cliOptions.addOption(QCommandLineOption("list")); cliOptions.addOption(QCommandLineOption("count")); + cliOptions.addOption(QCommandLineOption("synchronize")); cliOptions.addHelpOption(); cliOptions.process(app); QStringList resources = cliOptions.positionalArguments(); @@ -153,15 +166,16 @@ int main(int argc, char *argv[]) QTime time; time.start(); - auto model = Akonadi2::Store::loadModel(query); - qDebug() << "Loaded model in " << time.elapsed() << " ms"; if (cliOptions.isSet("list")) { query.liveQuery = false; + auto model = Akonadi2::Store::loadModel(query); + qDebug() << "Loaded model in " << time.elapsed() << " ms"; qDebug() << "Listing"; QObject::connect(model.data(), &QAbstractItemModel::rowsInserted, [model](const QModelIndex &index, int start, int end) { for (int i = start; i <= end; i++) { - std::cout << "\tRow " << model->rowCount() << ": " << model->data(model->index(i, 0, index)).toString().toStdString() << std::endl; + QString output = format(model->data(model->index(i, 0, index), Akonadi2::Store::DomainObjectRole).value()); + std::cout << "\tRow " << model->rowCount() << ": " << output.toStdString() << std::endl; } }); QObject::connect(model.data(), &QAbstractItemModel::dataChanged, [model, &app](const QModelIndex &, const QModelIndex &, const QVector &roles) { @@ -174,6 +188,8 @@ int main(int argc, char *argv[]) } } else if (cliOptions.isSet("count")) { query.liveQuery = false; + auto model = Akonadi2::Store::loadModel(query); + qDebug() << "Loaded model in " << time.elapsed() << " ms"; QObject::connect(model.data(), &QAbstractItemModel::dataChanged, [model, &app](const QModelIndex &, const QModelIndex &, const QVector &roles) { if (roles.contains(Akonadi2::Store::ChildrenFetchedRole)) { std::cout << "\tCounted results " << model->rowCount(QModelIndex()); @@ -181,8 +197,23 @@ int main(int argc, char *argv[]) } }); return app.exec(); + } else if (cliOptions.isSet("synchronize")) { + query.syncOnDemand = true; + query.processAll = true; + Akonadi2::Store::synchronize(query).then([&app]() { + app.quit(); + }).exec(); + app.exec(); } else { + query.parentProperty = "parent"; query.liveQuery = true; + auto model = Akonadi2::Store::loadModel(query); + qDebug() << "Loaded model in " << time.elapsed() << " ms"; + QObject::connect(model.data(), &QAbstractItemModel::rowsInserted, [model](const QModelIndex &index, int start, int end) { + for (int i = start; i <= end; i++) { + model->fetchMore(model->index(i, 0, index)); + } + }); auto view = QSharedPointer >::create(model.data()); return app.exec(); } -- cgit v1.2.3