summaryrefslogtreecommitdiffstats
path: root/sinksh
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-10-04 14:57:40 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-10-04 14:57:40 +0200
commitd488457bf699752b39b270cc88535d44f452b594 (patch)
treebd04fe6b8d858b90701d2b66f90201e57e417526 /sinksh
parent51099c67bcb8d3979cf9985f1d850bf9720ebe5b (diff)
downloadsink-d488457bf699752b39b270cc88535d44f452b594.tar.gz
sink-d488457bf699752b39b270cc88535d44f452b594.zip
Less hardcoding of entity types
Diffstat (limited to 'sinksh')
-rw-r--r--sinksh/sinksh_utils.cpp74
1 files changed, 38 insertions, 36 deletions
diff --git a/sinksh/sinksh_utils.cpp b/sinksh/sinksh_utils.cpp
index 5a01d40..0b9a34d 100644
--- a/sinksh/sinksh_utils.cpp
+++ b/sinksh/sinksh_utils.cpp
@@ -27,33 +27,29 @@
27 27
28namespace SinkshUtils { 28namespace SinkshUtils {
29 29
30static QStringList s_types = QStringList() << "resource"
31 << "folder"
32 << "mail"
33 << "event"
34 << "account";
35
36bool isValidStoreType(const QString &type) 30bool isValidStoreType(const QString &type)
37{ 31{
38 return s_types.contains(type); 32 return Sink::ApplicationDomain::getTypeNames().contains(type.toLatin1());
39} 33}
40 34
41StoreBase &getStore(const QString &type) 35StoreBase &getStore(const QString &type)
42{ 36{
43 if (type == "folder") { 37 using namespace Sink::ApplicationDomain;
44 static Store<Sink::ApplicationDomain::Folder> store; 38
39 if (type == getTypeName<Folder>()) {
40 static Store<Folder> store;
45 return store; 41 return store;
46 } else if (type == "mail") { 42 } else if (type == getTypeName<Mail>()) {
47 static Store<Sink::ApplicationDomain::Mail> store; 43 static Store<Mail> store;
48 return store; 44 return store;
49 } else if (type == "event") { 45 } else if (type == getTypeName<Event>()) {
50 static Store<Sink::ApplicationDomain::Event> store; 46 static Store<Event> store;
51 return store; 47 return store;
52 } else if (type == "resource") { 48 } else if (type == getTypeName<SinkResource>()) {
53 static Store<Sink::ApplicationDomain::SinkResource> store; 49 static Store<SinkResource> store;
54 return store; 50 return store;
55 } else if (type == "account") { 51 } else if (type == getTypeName<SinkResource>()) {
56 static Store<Sink::ApplicationDomain::SinkAccount> store; 52 static Store<SinkAccount> store;
57 return store; 53 return store;
58 } 54 }
59 55
@@ -66,19 +62,20 @@ StoreBase &getStore(const QString &type)
66 62
67QList<QByteArray> requestedProperties(const QString &type) 63QList<QByteArray> requestedProperties(const QString &type)
68{ 64{
69 if (type == "folder") { 65 using namespace Sink::ApplicationDomain;
70 return QList<QByteArray>() << "name" 66 if (type == getTypeName<Folder>()) {
71 << "parent"; 67 return QList<QByteArray>() << Folder::Name::name
72 } else if (type == "mail") { 68 << Folder::Parent::name;
73 return QList<QByteArray>() << "subject" 69 } else if (type == getTypeName<Mail>()) {
74 << "folder" 70 return QList<QByteArray>() << Mail::Subject::name
75 << "date"; 71 << Mail::Folder::name
76 } else if (type == "event") { 72 << Mail::Date::name;
77 return QList<QByteArray>() << "summary"; 73 } else if (type == getTypeName<Event>()) {
78 } else if (type == "resource") { 74 return QList<QByteArray>() << Event::Summary::name;
79 return QList<QByteArray>() << "type" << "account"; 75 } else if (type == getTypeName<SinkResource>()) {
80 } else if (type == "account") { 76 return QList<QByteArray>() << SinkResource::ResourceType::name << SinkResource::Account::name;
81 return QList<QByteArray>() << "type" << "name"; 77 } else if (type == getTypeName<SinkAccount>()) {
78 return QList<QByteArray>() << SinkAccount::AccountType::name << SinkAccount::Name::name;
82 } 79 }
83 return QList<QByteArray>(); 80 return QList<QByteArray>();
84} 81}
@@ -112,11 +109,19 @@ QStringList resourceCompleter(const QStringList &, const QString &fragment, Stat
112 return Utils::filteredCompletions(resourceIds(), fragment); 109 return Utils::filteredCompletions(resourceIds(), fragment);
113} 110}
114 111
112static QStringList toStringList(const QByteArrayList &l)
113{
114 QStringList list;
115 for (const auto &s : l) {
116 list << s;
117 }
118 return list;
119}
120
115QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &fragment, State &state) 121QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &fragment, State &state)
116{ 122{
117 static QStringList types = s_types;
118 if (commands.count() == 1) { 123 if (commands.count() == 1) {
119 return Utils::filteredCompletions(s_types, fragment); 124 return Utils::filteredCompletions(toStringList(Sink::ApplicationDomain::getTypeNames()), fragment);
120 } 125 }
121 126
122 return Utils::filteredCompletions(resourceIds(), fragment); 127 return Utils::filteredCompletions(resourceIds(), fragment);
@@ -124,18 +129,15 @@ QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &
124 129
125QStringList typeCompleter(const QStringList &commands, const QString &fragment, State &state) 130QStringList typeCompleter(const QStringList &commands, const QString &fragment, State &state)
126{ 131{
127 return Utils::filteredCompletions(s_types, fragment); 132 return Utils::filteredCompletions(toStringList(Sink::ApplicationDomain::getTypeNames()), fragment);
128} 133}
129 134
130QMap<QString, QString> keyValueMapFromArgs(const QStringList &args) 135QMap<QString, QString> keyValueMapFromArgs(const QStringList &args)
131{ 136{
132 // TODO: this is not the most clever of algorithms. preserved during the port of commands
133 // from sink_client ... we can probably do better, however ;)
134 QMap<QString, QString> map; 137 QMap<QString, QString> map;
135 for (int i = 0; i + 2 <= args.size(); i += 2) { 138 for (int i = 0; i + 2 <= args.size(); i += 2) {
136 map.insert(args.at(i), args.at(i + 1)); 139 map.insert(args.at(i), args.at(i + 1));
137 } 140 }
138
139 return map; 141 return map;
140} 142}
141} 143}