[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [akonadi-next/feature/new_cli] akonadi2_cli/syntax_modules: listing
From:       Aaron Seigo <aseigo () kde ! org>
Date:       2015-12-23 19:28:36
Message-ID: E1aBp5Q-0002QW-Ah () scm ! kde ! org
[Download RAW message or body]

Git commit 34210d830a2075562bb18c7803bedca7540a2512 by Aaron Seigo.
Committed on 23/12/2015 at 19:21.
Pushed by aseigo into branch 'feature/new_cli'.

listing

A  +112  -0    akonadi2_cli/syntax_modules/akonadi_list.cpp     [License: GPL (v2+)]
A  +29   -0    akonadi2_cli/syntax_modules/akonadi_list.h     [License: GPL (v2+)]

http://commits.kde.org/akonadi-next/34210d830a2075562bb18c7803bedca7540a2512

diff --git a/akonadi2_cli/syntax_modules/akonadi_list.cpp \
b/akonadi2_cli/syntax_modules/akonadi_list.cpp new file mode 100644
index 0000000..26b1f1e
--- /dev/null
+++ b/akonadi2_cli/syntax_modules/akonadi_list.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2014 Aaron Seigo <aseigo@kde.org>
+ *
+ *   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
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#include "akonadi_list.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QObject> // tr()
+#include <QModelIndex>
+#include <QTime>
+
+#include "common/resource.h"
+#include "common/storage.h"
+#include "common/domain/event.h"
+#include "common/domain/folder.h"
+#include "common/resourceconfig.h"
+#include "common/log.h"
+#include "common/storage.h"
+#include "common/definitions.h"
+
+#include "akonadish_utils.h"
+
+namespace AkonadiList
+{
+
+SyntaxTree::SyntaxList syntax()
+{
+    SyntaxTree::SyntaxList syntax;
+    syntax << SyntaxTree::Syntax("list", QObject::tr("List all resources, or the \
contents of one or more resources"), &AkonadiList::list, \
SyntaxTree::Syntax::EventDriven); +
+    return syntax;
+}
+
+bool list(const QStringList &args, State &state)
+{
+    auto resources = args;
+    auto type = !resources.isEmpty() ? resources.takeFirst() : QString();
+
+    if (!type.isEmpty() && !AkonadishUtils::isValidStoreType(type)) {
+        state.printError(QObject::tr("Unknown type: %1").arg(type));
+        return false;
+    }
+
+    Akonadi2::Query query;
+    for (const auto &res : resources) {
+        query.resources << res.toLatin1();
+    }
+    query.syncOnDemand = false;
+    query.processAll = false;
+    query.liveQuery = false;
+
+    QTime time;
+    time.start();
+    auto model = AkonadishUtils::loadModel(type, query);
+    if (state.debugLevel() > 0) {
+        state.printLine(QObject::tr("Folder type %1").arg(type));
+        state.printLine(QObject::tr("Loaded model in %1 ms").arg(time.elapsed()));
+    }
+
+    //qDebug() << "Listing";
+    int colSize = 38; //Necessary to display a complete UUID
+    state.print("  " + QObject::tr("Column") + "     ");
+    state.print(QObject::tr("Resource").leftJustified(colSize, ' ', true) +
+                QObject::tr("Identifier").leftJustified(colSize, ' ', true));
+    for (int i = 0; i < model->columnCount(QModelIndex()); i++) {
+        state.print(" | " + model->headerData(i, \
Qt::Horizontal).toString().leftJustified(colSize, ' ', true)); +    }
+    state.printLine();
+
+    QObject::connect(model.data(), &QAbstractItemModel::rowsInserted, [model, \
colSize, state](const QModelIndex &index, int start, int end) { +        for (int i = \
start; i <= end; i++) { +            state.print("  " + QObject::tr("Row \
%1").arg(QString::number(model->rowCount())).rightJustified(4, ' ') + ": "); +        \
auto object = model->data(model->index(i, 0, index), \
Akonadi2::Store::DomainObjectBaseRole).value<Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr>();
 +            state.print("  " + \
object->resourceInstanceIdentifier().leftJustified(colSize, ' ', true)); +            \
state.print(object->identifier().leftJustified(colSize, ' ', true)); +            for \
(int col = 0; col < model->columnCount(QModelIndex()); col++) { +                \
state.print(" | " + model->data(model->index(i, col, \
index)).toString().leftJustified(colSize, ' ', true)); +            }
+            state.printLine();
+        }
+    });
+
+    QObject::connect(model.data(), &QAbstractItemModel::dataChanged, [model, \
state](const QModelIndex &, const QModelIndex &, const QVector<int> &roles) { +       \
if (roles.contains(Akonadi2::Store::ChildrenFetchedRole)) { +            \
state.commandFinished(); +        }
+    });
+
+    if (!model->data(QModelIndex(), Akonadi2::Store::ChildrenFetchedRole).toBool()) \
{ +        return true;
+    }
+
+    return false;
+}
+
+}
diff --git a/akonadi2_cli/syntax_modules/akonadi_list.h \
b/akonadi2_cli/syntax_modules/akonadi_list.h new file mode 100644
index 0000000..f2a123d
--- /dev/null
+++ b/akonadi2_cli/syntax_modules/akonadi_list.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 Aaron Seigo <aseigo@kde.org>
+ *
+ *   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
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#pragma once
+
+#include "syntaxtree.h"
+
+namespace AkonadiList
+{
+    SyntaxTree::SyntaxList syntax();
+    bool list(const QStringList &commands, State &state);
+}
+


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic