summaryrefslogtreecommitdiffstats
path: root/sinksh/syntax_modules
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-07 17:56:30 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-07 17:56:30 +0100
commit35a3afc591c85999de856c21dbb493e341951d91 (patch)
treef46b6a8c22e5bdb283148e48e0391c2691bcc343 /sinksh/syntax_modules
parent470203f1c09fa1811ae2859520c168901d5fa6cd (diff)
downloadsink-35a3afc591c85999de856c21dbb493e341951d91.tar.gz
sink-35a3afc591c85999de856c21dbb493e341951d91.zip
Share query syntax
Diffstat (limited to 'sinksh/syntax_modules')
-rw-r--r--sinksh/syntax_modules/sink_count.cpp16
-rw-r--r--sinksh/syntax_modules/sink_list.cpp11
-rw-r--r--sinksh/syntax_modules/sink_sync.cpp56
3 files changed, 16 insertions, 67 deletions
diff --git a/sinksh/syntax_modules/sink_count.cpp b/sinksh/syntax_modules/sink_count.cpp
index 84bbabd..5ab9ca5 100644
--- a/sinksh/syntax_modules/sink_count.cpp
+++ b/sinksh/syntax_modules/sink_count.cpp
@@ -41,20 +41,14 @@ namespace SinkCount
41 41
42bool count(const QStringList &args, State &state) 42bool count(const QStringList &args, State &state)
43{ 43{
44 auto resources = args;
45 auto type = !resources.isEmpty() ? resources.takeFirst() : QString();
46
47 if (!type.isEmpty() && !SinkshUtils::isValidStoreType(type)) {
48 state.printError(QObject::tr("Unknown type: %1").arg(type));
49 return false;
50 }
51
52 Sink::Query query; 44 Sink::Query query;
53 for (const auto &res : resources) { 45 query.setId("count");
54 query.resourceFilter(res.toLatin1()); 46 if (!SinkshUtils::applyFilter(query, args)) {
47 state.printError(QObject::tr("Options: $type $filter"));
48 return false;
55 } 49 }
56 50
57 auto model = SinkshUtils::loadModel(type, query); 51 auto model = SinkshUtils::loadModel(query.type(), query);
58 QObject::connect(model.data(), &QAbstractItemModel::dataChanged, [model, state](const QModelIndex &, const QModelIndex &, const QVector<int> &roles) { 52 QObject::connect(model.data(), &QAbstractItemModel::dataChanged, [model, state](const QModelIndex &, const QModelIndex &, const QVector<int> &roles) {
59 if (roles.contains(Sink::Store::ChildrenFetchedRole)) { 53 if (roles.contains(Sink::Store::ChildrenFetchedRole)) {
60 state.printLine(QObject::tr("Counted results %1").arg(model->rowCount(QModelIndex()))); 54 state.printLine(QObject::tr("Counted results %1").arg(model->rowCount(QModelIndex())));
diff --git a/sinksh/syntax_modules/sink_list.cpp b/sinksh/syntax_modules/sink_list.cpp
index a609463..f9cda1a 100644
--- a/sinksh/syntax_modules/sink_list.cpp
+++ b/sinksh/syntax_modules/sink_list.cpp
@@ -74,16 +74,11 @@ bool list(const QStringList &args_, State &state)
74 74
75 auto type = options.positionalArguments.isEmpty() ? QString{} : options.positionalArguments.first(); 75 auto type = options.positionalArguments.isEmpty() ? QString{} : options.positionalArguments.first();
76 76
77 if (type.isEmpty() || !SinkshUtils::isValidStoreType(type)) {
78 state.printError(QObject::tr("Unknown type: %1").arg(type));
79 return false;
80 }
81
82 Sink::Query query; 77 Sink::Query query;
83 query.setId("list"); 78 query.setId("list");
84 79 if (!SinkshUtils::applyFilter(query, options)) {
85 if (options.options.contains("resource")) { 80 state.printError(QObject::tr("Options: $type [--resource $resource] [--compact] [--filter $property=$value] [--showall|--show $property]"));
86 query.resourceFilter(baIfAvailable(options.options.value("resource"))); 81 return false;
87 } 82 }
88 if (options.options.contains("filter")) { 83 if (options.options.contains("filter")) {
89 for (const auto &f : options.options.value("filter")) { 84 for (const auto &f : options.options.value("filter")) {
diff --git a/sinksh/syntax_modules/sink_sync.cpp b/sinksh/syntax_modules/sink_sync.cpp
index f83f0d8..f90f055 100644
--- a/sinksh/syntax_modules/sink_sync.cpp
+++ b/sinksh/syntax_modules/sink_sync.cpp
@@ -38,56 +38,16 @@
38namespace SinkSync 38namespace SinkSync
39{ 39{
40 40
41bool isId(const QByteArray &value) 41bool sync(const QStringList &args, State &state)
42{ 42{
43 return value.startsWith("{");
44}
45
46bool sync(const QStringList &args_, State &state)
47{
48 auto args = args_;
49 Sink::Query query; 43 Sink::Query query;
50 if (args.isEmpty()) { 44
51 state.printError(QObject::tr("Options: $type $resource/$folder/$subfolder")); 45 if (!args.isEmpty() && !SinkshUtils::isValidStoreType(args.first())) {
52 return false; 46 query.resourceFilter(args.first().toLatin1());
53 } 47 } else {
54 auto type = args.takeFirst().toLatin1(); 48 if (!SinkshUtils::applyFilter(query, args)) {
55 if (type != "*") { 49 state.printError(QObject::tr("Options: $type $resource/$folder/$subfolder"));
56 query.setType(type); 50 return false;
57 }
58 if (!args.isEmpty()) {
59 auto resource = args.takeFirst().toLatin1();
60
61 if (resource.contains('/')) {
62 //The resource isn't an id but a path
63 auto list = resource.split('/');
64 const auto resourceId = list.takeFirst();
65 query.resourceFilter(resourceId);
66 if (type == Sink::ApplicationDomain::getTypeName<Sink::ApplicationDomain::Mail>() && !list.isEmpty()) {
67 auto value = list.takeFirst();
68 if (isId(value)) {
69 query.filter<Sink::ApplicationDomain::Mail::Folder>(value);
70 } else {
71 Sink::Query folderQuery;
72 folderQuery.resourceFilter(resourceId);
73 folderQuery.filter<Sink::ApplicationDomain::Folder::Name>(value);
74 folderQuery.filter<Sink::ApplicationDomain::Folder::Parent>(QVariant());
75 qWarning() << "Looking for folder: " << value << " in " << resourceId;
76 auto folders = Sink::Store::read<Sink::ApplicationDomain::Folder>(folderQuery);
77 if (folders.size() == 1) {
78 query.filter<Sink::ApplicationDomain::Mail::Folder>(folders.first());
79 qWarning() << "Synchronizing folder: " << folders.first().identifier();
80 } else {
81 qWarning() << "Folder name did not match uniquely: " << folders.size();
82 for (const auto &f : folders) {
83 qWarning() << f.getName();
84 }
85 state.printError(QObject::tr("Folder name did not match uniquely."));
86 }
87 }
88 }
89 } else {
90 query.resourceFilter(resource);
91 } 51 }
92 } 52 }
93 53