presentation/RuleEditorFields.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "RuleEditorFields.h" | ||
| 2 | |||
| 3 | namespace RuleEditorFields { | ||
| 4 | |||
| 5 | namespace { | ||
| 6 | |||
| 7 | using Sieve::Action; | ||
| 8 | using Sieve::Condition; | ||
| 9 | |||
| 10 | 3224 | QStringList lowered(const QStringList &values) { | |
| 11 | 3224 | QStringList result; | |
| 12 |
2/2✓ Branch 10 → 4 taken 3330 times.
✓ Branch 10 → 11 taken 3224 times.
|
6554 | for (const QString &value : values) |
| 13 |
2/2✓ Branch 5 → 6 taken 3330 times.
✓ Branch 6 → 7 taken 3330 times.
|
3330 | result.append(value.toLower()); |
| 14 | 3224 | return result; | |
| 15 | ✗ | } | |
| 16 | |||
| 17 | 3268 | QString fieldFor(const Condition &condition) { | |
| 18 |
2/2✓ Branch 2 → 3 taken 39 times.
✓ Branch 2 → 8 taken 3229 times.
|
3268 | if (condition.kind == Condition::Kind::Size) |
| 19 | 39 | return QStringLiteral("size"); | |
| 20 |
2/2✓ Branch 8 → 9 taken 5 times.
✓ Branch 8 → 14 taken 3224 times.
|
3229 | if (condition.kind == Condition::Kind::Body) |
| 21 | 5 | return QStringLiteral("body"); | |
| 22 |
1/1✓ Branch 14 → 15 taken 3224 times.
|
3224 | const QStringList headers = lowered(condition.headers); |
| 23 |
2/2✓ Branch 15 → 16 taken 646 times.
✓ Branch 15 → 99 taken 2578 times.
|
3224 | if (condition.kind == Condition::Kind::Address) { |
| 24 |
5/7✓ Branch 20 → 21 taken 646 times.
✓ Branch 23 → 24 taken 646 times.
✓ Branch 23 → 25 taken 646 times.
✓ Branch 26 → 27 taken 559 times.
✓ Branch 26 → 50 taken 87 times.
✗ Branch 142 → 143 not taken.
✗ Branch 142 → 144 not taken.
|
1292 | if (headers == QStringList{QStringLiteral("from")}) |
| 25 | 1118 | return condition.addressPart == QLatin1String("domain") ? QStringLiteral("senderDomain") | |
| 26 |
3/4✓ Branch 35 → 36 taken 479 times.
✗ Branch 35 → 39 not taken.
✓ Branch 47 → 48 taken 80 times.
✓ Branch 47 → 49 taken 479 times.
|
1038 | : condition.addressPart == QLatin1String("all") ? QStringLiteral("from") |
| 27 |
5/6✓ Branch 29 → 30 taken 80 times.
✓ Branch 29 → 33 taken 479 times.
✗ Branch 43 → 44 not taken.
✓ Branch 43 → 45 taken 559 times.
✓ Branch 45 → 46 taken 479 times.
✓ Branch 45 → 47 taken 80 times.
|
1677 | : QStringLiteral("address"); |
| 28 |
1/2✗ Branch 52 → 53 not taken.
✓ Branch 52 → 58 taken 87 times.
|
87 | if (condition.addressPart != QLatin1String("all")) |
| 29 | ✗ | return QStringLiteral("address"); | |
| 30 |
5/7✓ Branch 62 → 63 taken 87 times.
✓ Branch 65 → 66 taken 87 times.
✓ Branch 65 → 67 taken 87 times.
✓ Branch 68 → 69 taken 42 times.
✓ Branch 68 → 74 taken 45 times.
✗ Branch 158 → 159 not taken.
✗ Branch 158 → 160 not taken.
|
174 | if (headers == QStringList{QStringLiteral("to")}) |
| 31 | 42 | return QStringLiteral("to"); | |
| 32 |
5/7✓ Branch 81 → 82 taken 45 times.
✓ Branch 84 → 85 taken 90 times.
✓ Branch 84 → 86 taken 45 times.
✓ Branch 88 → 89 taken 1 time.
✓ Branch 88 → 94 taken 44 times.
✗ Branch 174 → 175 not taken.
✗ Branch 174 → 176 not taken.
|
135 | if (headers == QStringList{QStringLiteral("to"), QStringLiteral("cc")}) |
| 33 | 1 | return QStringLiteral("toOrCc"); | |
| 34 | 44 | return QStringLiteral("address"); | |
| 35 | } | ||
| 36 |
5/7✓ Branch 103 → 104 taken 2578 times.
✓ Branch 106 → 107 taken 2578 times.
✓ Branch 106 → 108 taken 2578 times.
✓ Branch 109 → 110 taken 2067 times.
✓ Branch 109 → 115 taken 511 times.
✗ Branch 193 → 194 not taken.
✗ Branch 193 → 195 not taken.
|
5156 | if (headers == QStringList{QStringLiteral("subject")}) |
| 37 | 2067 | return QStringLiteral("subject"); | |
| 38 |
5/7✓ Branch 119 → 120 taken 511 times.
✓ Branch 122 → 123 taken 511 times.
✓ Branch 122 → 124 taken 511 times.
✓ Branch 125 → 126 taken 193 times.
✓ Branch 125 → 131 taken 318 times.
✗ Branch 209 → 210 not taken.
✗ Branch 209 → 211 not taken.
|
1022 | if (headers == QStringList{QStringLiteral("list-id")}) |
| 39 | 193 | return QStringLiteral("list"); | |
| 40 | 318 | return QStringLiteral("header"); | |
| 41 | 11003 | } | |
| 42 | |||
| 43 | // :matches "abc*" / "*abc" without other wildcards read as starts/ends with. | ||
| 44 | 13 | QString patternOperator(const QStringList &values, QStringList *plain) { | |
| 45 | 13 | bool allStart = true; | |
| 46 | 13 | bool allEnd = true; | |
| 47 | 13 | QStringList starts; | |
| 48 | 13 | QStringList ends; | |
| 49 |
2/2✓ Branch 46 → 4 taken 13 times.
✓ Branch 46 → 47 taken 13 times.
|
26 | for (const QString &value : values) { |
| 50 | 13 | bool wildcard = false; | |
| 51 |
8/10✓ Branch 6 → 7 taken 13 times.
✗ Branch 6 → 15 not taken.
✓ Branch 9 → 10 taken 13 times.
✓ Branch 10 → 11 taken 11 times.
✓ Branch 10 → 15 taken 2 times.
✓ Branch 12 → 13 taken 11 times.
✓ Branch 13 → 14 taken 11 times.
✗ Branch 13 → 15 not taken.
✓ Branch 16 → 17 taken 11 times.
✓ Branch 16 → 25 taken 2 times.
|
13 | if (value.size() > 1 && value.endsWith(QLatin1Char('*')) && !value.endsWith(QLatin1String("\\*"))) { |
| 52 |
2/2✓ Branch 17 → 18 taken 11 times.
✓ Branch 18 → 19 taken 11 times.
|
11 | const QString literal = unescapeWildcards(value.chopped(1), &wildcard); |
| 53 |
2/2✓ Branch 20 → 21 taken 3 times.
✓ Branch 20 → 22 taken 8 times.
|
11 | if (wildcard) |
| 54 | 3 | allStart = false; | |
| 55 |
1/1✓ Branch 22 → 23 taken 11 times.
|
11 | starts.append(literal); |
| 56 | 11 | } else { | |
| 57 | 2 | allStart = false; | |
| 58 | } | ||
| 59 |
6/7✓ Branch 27 → 28 taken 13 times.
✗ Branch 27 → 33 not taken.
✓ Branch 30 → 31 taken 13 times.
✓ Branch 31 → 32 taken 1 time.
✓ Branch 31 → 33 taken 12 times.
✓ Branch 34 → 35 taken 1 time.
✓ Branch 34 → 43 taken 12 times.
|
13 | if (value.size() > 1 && value.startsWith(QLatin1Char('*'))) { |
| 60 |
2/2✓ Branch 35 → 36 taken 1 time.
✓ Branch 36 → 37 taken 1 time.
|
1 | const QString literal = unescapeWildcards(value.mid(1), &wildcard); |
| 61 |
1/2✗ Branch 38 → 39 not taken.
✓ Branch 38 → 40 taken 1 time.
|
1 | if (wildcard) |
| 62 | ✗ | allEnd = false; | |
| 63 |
1/1✓ Branch 40 → 41 taken 1 time.
|
1 | ends.append(literal); |
| 64 | 1 | } else { | |
| 65 | 12 | allEnd = false; | |
| 66 | } | ||
| 67 | } | ||
| 68 |
5/6✓ Branch 47 → 48 taken 8 times.
✓ Branch 47 → 51 taken 5 times.
✓ Branch 49 → 50 taken 8 times.
✗ Branch 49 → 51 not taken.
✓ Branch 52 → 53 taken 8 times.
✓ Branch 52 → 59 taken 5 times.
|
13 | if (allStart && !values.isEmpty()) { |
| 69 | 8 | *plain = starts; | |
| 70 | 8 | return QStringLiteral("startsWith"); | |
| 71 | } | ||
| 72 |
5/6✓ Branch 59 → 60 taken 1 time.
✓ Branch 59 → 63 taken 4 times.
✓ Branch 61 → 62 taken 1 time.
✗ Branch 61 → 63 not taken.
✓ Branch 64 → 65 taken 1 time.
✓ Branch 64 → 71 taken 4 times.
|
5 | if (allEnd && !values.isEmpty()) { |
| 73 | 1 | *plain = ends; | |
| 74 | 1 | return QStringLiteral("endsWith"); | |
| 75 | } | ||
| 76 | 4 | *plain = values; | |
| 77 | 4 | return QStringLiteral("matches"); | |
| 78 | 13 | } | |
| 79 | |||
| 80 | } // namespace | ||
| 81 | |||
| 82 | ✗ | QStringList labelKeywords() { | |
| 83 | ✗ | return {QStringLiteral("$label1"), QStringLiteral("$label2"), QStringLiteral("$label3"), | |
| 84 | ✗ | QStringLiteral("$label4"), QStringLiteral("$label5")}; | |
| 85 | ✗ | } | |
| 86 | |||
| 87 | 4 | QString escapeWildcards(const QString &value) { | |
| 88 | 4 | QString out; | |
| 89 |
2/2✓ Branch 25 → 4 taken 34 times.
✓ Branch 25 → 26 taken 4 times.
|
38 | for (const QChar c : value) { |
| 90 |
7/8✓ Branch 7 → 8 taken 30 times.
✓ Branch 7 → 16 taken 4 times.
✓ Branch 11 → 12 taken 28 times.
✓ Branch 11 → 16 taken 2 times.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 28 times.
✓ Branch 18 → 19 taken 6 times.
✓ Branch 18 → 23 taken 28 times.
|
34 | if (c == QLatin1Char('*') || c == QLatin1Char('?') || c == QLatin1Char('\\')) |
| 91 |
1/1✓ Branch 21 → 22 taken 6 times.
|
6 | out.append(QLatin1Char('\\')); |
| 92 |
1/1✓ Branch 23 → 24 taken 34 times.
|
34 | out.append(c); |
| 93 | } | ||
| 94 | 4 | return out; | |
| 95 | ✗ | } | |
| 96 | |||
| 97 | 12 | QString unescapeWildcards(const QString &pattern, bool *hasWildcard) { | |
| 98 | 12 | QString out; | |
| 99 | 12 | *hasWildcard = false; | |
| 100 |
2/2✓ Branch 32 → 3 taken 91 times.
✓ Branch 32 → 33 taken 12 times.
|
103 | for (int i = 0; i < pattern.size(); ++i) { |
| 101 | 91 | const QChar c = pattern.at(i); | |
| 102 |
5/6✓ Branch 7 → 8 taken 6 times.
✓ Branch 7 → 11 taken 85 times.
✓ Branch 9 → 10 taken 6 times.
✗ Branch 9 → 11 not taken.
✓ Branch 12 → 13 taken 6 times.
✓ Branch 12 → 16 taken 85 times.
|
91 | if (c == QLatin1Char('\\') && i + 1 < pattern.size()) { |
| 103 |
1/1✓ Branch 14 → 15 taken 6 times.
|
6 | out.append(pattern.at(++i)); |
| 104 | 6 | continue; | |
| 105 | } | ||
| 106 |
5/6✓ Branch 19 → 20 taken 82 times.
✓ Branch 19 → 24 taken 3 times.
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 82 times.
✓ Branch 26 → 27 taken 3 times.
✓ Branch 26 → 28 taken 82 times.
|
85 | if (c == QLatin1Char('*') || c == QLatin1Char('?')) |
| 107 | 3 | *hasWildcard = true; | |
| 108 |
1/1✓ Branch 28 → 29 taken 85 times.
|
85 | out.append(c); |
| 109 | } | ||
| 110 | 12 | return out; | |
| 111 | ✗ | } | |
| 112 | |||
| 113 | 3268 | QVariantMap fromCondition(const Condition &condition) { | |
| 114 | 3268 | QVariantMap fields; | |
| 115 |
2/2✓ Branch 2 → 3 taken 3268 times.
✓ Branch 7 → 8 taken 3268 times.
|
6536 | fields.insert(QStringLiteral("field"), fieldFor(condition)); |
| 116 |
1/1✓ Branch 16 → 17 taken 3268 times.
|
6536 | fields.insert(QStringLiteral("negated"), condition.negated); |
| 117 |
2/2✓ Branch 20 → 21 taken 39 times.
✓ Branch 20 → 60 taken 3229 times.
|
3268 | if (condition.kind == Condition::Kind::Size) { |
| 118 |
7/11✓ Branch 21 → 22 taken 32 times.
✓ Branch 21 → 25 taken 7 times.
✓ Branch 32 → 33 taken 39 times.
✓ Branch 37 → 38 taken 7 times.
✓ Branch 37 → 39 taken 32 times.
✓ Branch 39 → 40 taken 32 times.
✓ Branch 39 → 41 taken 7 times.
✗ Branch 144 → 145 not taken.
✗ Branch 144 → 146 not taken.
✗ Branch 148 → 149 not taken.
✗ Branch 148 → 150 not taken.
|
117 | fields.insert(QStringLiteral("op"), condition.sizeOver ? QStringLiteral("over") : QStringLiteral("under")); |
| 119 |
1/1✓ Branch 45 → 46 taken 39 times.
|
78 | fields.insert(QStringLiteral("size"), static_cast<qulonglong>(condition.sizeLimit)); |
| 120 |
1/1✓ Branch 54 → 55 taken 39 times.
|
78 | fields.insert(QStringLiteral("values"), QStringList{}); |
| 121 | 39 | return fields; | |
| 122 | } | ||
| 123 | 3229 | QStringList values = condition.values; | |
| 124 | 3229 | QString op = condition.matchType; | |
| 125 |
2/2✓ Branch 64 → 65 taken 13 times.
✓ Branch 64 → 69 taken 3216 times.
|
3229 | if (op == QLatin1String("matches")) |
| 126 |
1/1✓ Branch 65 → 66 taken 13 times.
|
13 | op = patternOperator(condition.values, &values); |
| 127 |
1/1✓ Branch 73 → 74 taken 3229 times.
|
6458 | fields.insert(QStringLiteral("op"), op); |
| 128 |
1/1✓ Branch 81 → 82 taken 3229 times.
|
6458 | fields.insert(QStringLiteral("values"), values); |
| 129 |
1/1✓ Branch 89 → 90 taken 3229 times.
|
6458 | fields.insert(QStringLiteral("headers"), condition.headers); |
| 130 |
1/1✓ Branch 97 → 98 taken 3229 times.
|
6458 | fields.insert(QStringLiteral("addressPart"), condition.addressPart); |
| 131 |
1/1✓ Branch 105 → 106 taken 3229 times.
|
6458 | fields.insert(QStringLiteral("comparator"), condition.comparator); |
| 132 | 3229 | return fields; | |
| 133 | 3229 | } | |
| 134 | |||
| 135 | 491 | Condition toCondition(const QVariantMap &fields) { | |
| 136 |
1/1✓ Branch 2 → 3 taken 491 times.
|
491 | Condition condition; |
| 137 |
2/2✓ Branch 7 → 8 taken 491 times.
✓ Branch 8 → 9 taken 491 times.
|
982 | const QString field = fields.value(QStringLiteral("field")).toString(); |
| 138 |
2/2✓ Branch 17 → 18 taken 491 times.
✓ Branch 18 → 19 taken 491 times.
|
982 | const QString op = fields.value(QStringLiteral("op")).toString(); |
| 139 |
2/2✓ Branch 27 → 28 taken 491 times.
✓ Branch 28 → 29 taken 491 times.
|
982 | condition.negated = fields.value(QStringLiteral("negated")).toBool(); |
| 140 |
2/2✓ Branch 35 → 36 taken 17 times.
✓ Branch 35 → 49 taken 474 times.
|
491 | if (field == QLatin1String("size")) { |
| 141 | 17 | condition.kind = Condition::Kind::Size; | |
| 142 | 17 | condition.sizeOver = op != QLatin1String("under"); | |
| 143 |
2/2✓ Branch 42 → 43 taken 17 times.
✓ Branch 43 → 44 taken 17 times.
|
34 | condition.sizeLimit = fields.value(QStringLiteral("size")).toULongLong(); |
| 144 | 17 | return condition; | |
| 145 | } | ||
| 146 |
2/2✓ Branch 53 → 54 taken 474 times.
✓ Branch 54 → 55 taken 474 times.
|
948 | QStringList headers = fields.value(QStringLiteral("headers")).toStringList(); |
| 147 |
2/2✓ Branch 63 → 64 taken 474 times.
✓ Branch 64 → 65 taken 474 times.
|
948 | condition.comparator = fields.value(QStringLiteral("comparator")).toString(); |
| 148 |
6/6✓ Branch 73 → 74 taken 317 times.
✓ Branch 73 → 77 taken 157 times.
✓ Branch 76 → 77 taken 3 times.
✓ Branch 76 → 78 taken 314 times.
✓ Branch 79 → 80 taken 160 times.
✓ Branch 79 → 107 taken 314 times.
|
474 | if (field == QLatin1String("from") || field == QLatin1String("senderDomain")) { |
| 149 | 160 | condition.kind = Condition::Kind::Address; | |
| 150 |
2/2✓ Branch 81 → 82 taken 97 times.
✓ Branch 81 → 91 taken 63 times.
|
160 | if (headers.isEmpty()) |
| 151 |
2/4✓ Branch 87 → 88 taken 97 times.
✓ Branch 87 → 89 taken 97 times.
✗ Branch 350 → 351 not taken.
✗ Branch 350 → 352 not taken.
|
194 | headers = {QStringLiteral("from")}; |
| 152 |
2/2✓ Branch 93 → 94 taken 3 times.
✓ Branch 93 → 97 taken 157 times.
|
640 | condition.addressPart = field == QLatin1String("senderDomain") ? QStringLiteral("domain") |
| 153 |
4/4✓ Branch 102 → 103 taken 157 times.
✓ Branch 102 → 104 taken 3 times.
✓ Branch 104 → 105 taken 3 times.
✓ Branch 104 → 106 taken 157 times.
|
320 | : QStringLiteral("all"); |
| 154 |
5/6✓ Branch 109 → 110 taken 302 times.
✓ Branch 109 → 113 taken 12 times.
✗ Branch 112 → 113 not taken.
✓ Branch 112 → 114 taken 302 times.
✓ Branch 115 → 116 taken 12 times.
✓ Branch 115 → 150 taken 302 times.
|
314 | } else if (field == QLatin1String("to") || field == QLatin1String("toOrCc")) { |
| 155 | 12 | condition.kind = Condition::Kind::Address; | |
| 156 |
1/2✗ Branch 117 → 118 not taken.
✓ Branch 117 → 209 taken 12 times.
|
12 | if (headers.isEmpty()) |
| 157 | ✗ | headers = field == QLatin1String("to") ? QStringList{QStringLiteral("to")} | |
| 158 | ✗ | : QStringList{QStringLiteral("to"), QStringLiteral("cc")}; | |
| 159 |
2/2✓ Branch 152 → 153 taken 12 times.
✓ Branch 152 → 171 taken 290 times.
|
302 | } else if (field == QLatin1String("address")) { |
| 160 | 12 | condition.kind = Condition::Kind::Address; | |
| 161 |
2/2✓ Branch 160 → 161 taken 12 times.
✓ Branch 161 → 162 taken 12 times.
|
24 | condition.addressPart = fields.value(QStringLiteral("addressPart"), QStringLiteral("all")).toString(); |
| 162 |
2/2✓ Branch 173 → 174 taken 3 times.
✓ Branch 173 → 175 taken 287 times.
|
290 | } else if (field == QLatin1String("body")) { |
| 163 | 3 | condition.kind = Condition::Kind::Body; | |
| 164 | } else { | ||
| 165 | 287 | condition.kind = Condition::Kind::Header; | |
| 166 |
6/6✓ Branch 176 → 177 taken 60 times.
✓ Branch 176 → 181 taken 227 times.
✓ Branch 179 → 180 taken 48 times.
✓ Branch 179 → 181 taken 12 times.
✓ Branch 182 → 183 taken 48 times.
✓ Branch 182 → 192 taken 239 times.
|
287 | if (headers.isEmpty() && field == QLatin1String("subject")) |
| 167 |
2/4✓ Branch 188 → 189 taken 48 times.
✓ Branch 188 → 190 taken 48 times.
✗ Branch 421 → 422 not taken.
✗ Branch 421 → 423 not taken.
|
96 | headers = {QStringLiteral("subject")}; |
| 168 |
5/6✓ Branch 193 → 194 taken 12 times.
✓ Branch 193 → 198 taken 275 times.
✓ Branch 196 → 197 taken 12 times.
✗ Branch 196 → 198 not taken.
✓ Branch 199 → 200 taken 12 times.
✓ Branch 199 → 209 taken 275 times.
|
287 | if (headers.isEmpty() && field == QLatin1String("list")) |
| 169 |
2/4✓ Branch 205 → 206 taken 12 times.
✓ Branch 205 → 207 taken 12 times.
✗ Branch 434 → 435 not taken.
✗ Branch 434 → 436 not taken.
|
24 | headers = {QStringLiteral("list-id")}; |
| 170 | } | ||
| 171 | 474 | condition.headers = headers; | |
| 172 |
2/2✓ Branch 214 → 215 taken 474 times.
✓ Branch 215 → 216 taken 474 times.
|
948 | const QStringList values = fields.value(QStringLiteral("values")).toStringList(); |
| 173 |
5/6✓ Branch 222 → 223 taken 470 times.
✓ Branch 222 → 226 taken 4 times.
✗ Branch 225 → 226 not taken.
✓ Branch 225 → 227 taken 470 times.
✓ Branch 228 → 229 taken 4 times.
✓ Branch 228 → 259 taken 470 times.
|
474 | if (op == QLatin1String("startsWith") || op == QLatin1String("endsWith")) { |
| 174 | 4 | condition.matchType = QStringLiteral("matches"); | |
| 175 |
2/2✓ Branch 257 → 237 taken 4 times.
✓ Branch 257 → 258 taken 4 times.
|
8 | for (const QString &value : values) |
| 176 |
1/1✓ Branch 249 → 250 taken 4 times.
|
8 | condition.values.append(op == QLatin1String("startsWith") |
| 177 |
3/7✓ Branch 240 → 241 taken 4 times.
✗ Branch 240 → 245 not taken.
✓ Branch 243 → 244 taken 4 times.
✓ Branch 244 → 249 taken 4 times.
✗ Branch 248 → 249 not taken.
✗ Branch 466 → 467 not taken.
✗ Branch 466 → 468 not taken.
|
12 | ? escapeWildcards(value) + QLatin1Char('*') |
| 178 |
2/7✗ Branch 245 → 246 not taken.
✗ Branch 251 → 252 not taken.
✓ Branch 251 → 253 taken 4 times.
✓ Branch 253 → 254 taken 4 times.
✗ Branch 253 → 255 not taken.
✗ Branch 462 → 463 not taken.
✗ Branch 462 → 464 not taken.
|
4 | : QLatin1Char('*') + escapeWildcards(value)); |
| 179 | } else { | ||
| 180 |
2/4✗ Branch 260 → 261 not taken.
✓ Branch 260 → 264 taken 470 times.
✗ Branch 267 → 268 not taken.
✓ Branch 267 → 269 taken 470 times.
|
470 | condition.matchType = op.isEmpty() ? QStringLiteral("contains") : op; |
| 181 | 470 | condition.values = values; | |
| 182 | } | ||
| 183 | 474 | return condition; | |
| 184 | 805 | } | |
| 185 | |||
| 186 | 3314 | QVariantMap fromAction(const Action &action) { | |
| 187 | 3314 | QVariantMap fields; | |
| 188 | 3314 | QString kind; | |
| 189 |
8/9✓ Branch 2 → 3 taken 2962 times.
✓ Branch 2 → 65 taken 37 times.
✓ Branch 2 → 79 taken 203 times.
✓ Branch 2 → 145 taken 13 times.
✓ Branch 2 → 169 taken 37 times.
✓ Branch 2 → 176 taken 27 times.
✓ Branch 2 → 183 taken 10 times.
✓ Branch 2 → 190 taken 25 times.
✗ Branch 2 → 197 not taken.
|
3314 | switch (action.kind) { |
| 190 | 2962 | case Action::Kind::FileInto: | |
| 191 |
2/2✓ Branch 5 → 6 taken 8 times.
✓ Branch 5 → 13 taken 2954 times.
|
2962 | if (action.specialUse.compare(QLatin1String("\\Junk"), Qt::CaseInsensitive) == 0) |
| 192 | 8 | kind = QStringLiteral("junk"); | |
| 193 |
1/2✗ Branch 15 → 16 not taken.
✓ Branch 15 → 23 taken 2954 times.
|
2954 | else if (action.specialUse.compare(QLatin1String("\\Trash"), Qt::CaseInsensitive) == 0) |
| 194 | ✗ | kind = QStringLiteral("trash"); | |
| 195 | else | ||
| 196 |
6/6✓ Branch 23 → 24 taken 10 times.
✓ Branch 23 → 27 taken 2944 times.
✓ Branch 32 → 33 taken 2944 times.
✓ Branch 32 → 34 taken 10 times.
✓ Branch 34 → 35 taken 10 times.
✓ Branch 34 → 36 taken 2944 times.
|
5908 | kind = action.copy ? QStringLiteral("copy") : QStringLiteral("move"); |
| 197 |
1/1✓ Branch 41 → 42 taken 2962 times.
|
5924 | fields.insert(QStringLiteral("create"), action.create); |
| 198 |
1/1✓ Branch 49 → 50 taken 2962 times.
|
5924 | fields.insert(QStringLiteral("specialUse"), action.specialUse); |
| 199 |
2/2✓ Branch 54 → 55 taken 8 times.
✓ Branch 54 → 64 taken 2954 times.
|
2962 | if (!action.specialUse.isEmpty()) |
| 200 |
1/1✓ Branch 59 → 60 taken 8 times.
|
16 | fields.insert(QStringLiteral("copy"), action.copy); |
| 201 | 2962 | break; | |
| 202 | 37 | case Action::Kind::Redirect: | |
| 203 |
6/6✓ Branch 65 → 66 taken 30 times.
✓ Branch 65 → 69 taken 7 times.
✓ Branch 74 → 75 taken 7 times.
✓ Branch 74 → 76 taken 30 times.
✓ Branch 76 → 77 taken 30 times.
✓ Branch 76 → 78 taken 7 times.
|
74 | kind = action.copy ? QStringLiteral("forwardCopy") : QStringLiteral("forward"); |
| 204 | 37 | break; | |
| 205 | 203 | case Action::Kind::AddFlag: | |
| 206 |
5/7✓ Branch 83 → 84 taken 203 times.
✓ Branch 86 → 87 taken 203 times.
✓ Branch 86 → 88 taken 203 times.
✓ Branch 89 → 90 taken 163 times.
✓ Branch 89 → 97 taken 40 times.
✗ Branch 254 → 255 not taken.
✗ Branch 254 → 256 not taken.
|
406 | if (action.flags == QStringList{QStringLiteral("\\Seen")}) |
| 207 | 163 | kind = QStringLiteral("read"); | |
| 208 |
5/7✓ Branch 101 → 102 taken 40 times.
✓ Branch 104 → 105 taken 40 times.
✓ Branch 104 → 106 taken 40 times.
✓ Branch 107 → 108 taken 19 times.
✓ Branch 107 → 115 taken 21 times.
✗ Branch 270 → 271 not taken.
✗ Branch 270 → 272 not taken.
|
80 | else if (action.flags == QStringList{QStringLiteral("\\Flagged")}) |
| 209 | 19 | kind = QStringLiteral("important"); | |
| 210 |
4/5✓ Branch 116 → 117 taken 4 times.
✓ Branch 116 → 128 taken 17 times.
✓ Branch 120 → 121 taken 4 times.
✓ Branch 121 → 122 taken 4 times.
✗ Branch 121 → 128 not taken.
|
25 | else if (action.flags.size() == 1 && !action.flags.first().startsWith(QLatin1Char('\\')) && |
| 211 |
4/5✓ Branch 125 → 126 taken 4 times.
✓ Branch 126 → 127 taken 4 times.
✗ Branch 126 → 128 not taken.
✓ Branch 129 → 130 taken 4 times.
✓ Branch 129 → 137 taken 17 times.
|
25 | !action.flags.first().contains(QLatin1Char(' '))) |
| 212 | 4 | kind = QStringLiteral("label"); | |
| 213 | else | ||
| 214 | 17 | kind = QStringLiteral("addFlags"); | |
| 215 | 203 | break; | |
| 216 | 13 | case Action::Kind::RemoveFlag: | |
| 217 |
4/7✓ Branch 149 → 150 taken 13 times.
✓ Branch 150 → 151 taken 13 times.
✗ Branch 150 → 154 not taken.
✓ Branch 165 → 166 taken 13 times.
✓ Branch 165 → 167 taken 13 times.
✗ Branch 290 → 291 not taken.
✗ Branch 290 → 292 not taken.
|
65 | kind = action.flags == QStringList{QStringLiteral("\\Seen")} ? QStringLiteral("unread") |
| 218 |
2/4✗ Branch 159 → 160 not taken.
✓ Branch 159 → 161 taken 13 times.
✓ Branch 161 → 162 taken 13 times.
✗ Branch 161 → 163 not taken.
|
26 | : QStringLiteral("removeFlags"); |
| 219 | 13 | break; | |
| 220 | 74 | case Action::Kind::SetFlag: kind = QStringLiteral("setFlags"); break; | |
| 221 | 54 | case Action::Kind::Keep: kind = QStringLiteral("keep"); break; | |
| 222 | 20 | case Action::Kind::Discard: kind = QStringLiteral("discard"); break; | |
| 223 | 50 | case Action::Kind::Reject: kind = QStringLiteral("reject"); break; | |
| 224 | } | ||
| 225 |
1/1✓ Branch 201 → 202 taken 3314 times.
|
6628 | fields.insert(QStringLiteral("kind"), kind); |
| 226 |
1/1✓ Branch 209 → 210 taken 3314 times.
|
6628 | fields.insert(QStringLiteral("target"), action.target); |
| 227 |
1/1✓ Branch 217 → 218 taken 3314 times.
|
6628 | fields.insert(QStringLiteral("flags"), action.flags); |
| 228 | 3314 | return fields; | |
| 229 | 3826 | } | |
| 230 | |||
| 231 | 510 | Action toAction(const QVariantMap &fields) { | |
| 232 | 510 | Action action; | |
| 233 |
2/2✓ Branch 6 → 7 taken 510 times.
✓ Branch 7 → 8 taken 510 times.
|
1020 | const QString kind = fields.value(QStringLiteral("kind")).toString(); |
| 234 |
2/2✓ Branch 16 → 17 taken 510 times.
✓ Branch 17 → 18 taken 510 times.
|
1020 | action.target = fields.value(QStringLiteral("target")).toString(); |
| 235 |
2/2✓ Branch 28 → 29 taken 510 times.
✓ Branch 29 → 30 taken 510 times.
|
1020 | action.flags = fields.value(QStringLiteral("flags")).toStringList(); |
| 236 |
6/6✓ Branch 38 → 39 taken 166 times.
✓ Branch 38 → 42 taken 344 times.
✓ Branch 41 → 42 taken 6 times.
✓ Branch 41 → 43 taken 160 times.
✓ Branch 44 → 45 taken 350 times.
✓ Branch 44 → 58 taken 160 times.
|
510 | if (kind == QLatin1String("move") || kind == QLatin1String("copy")) { |
| 237 | 350 | action.kind = Action::Kind::FileInto; | |
| 238 | 350 | action.copy = kind == QLatin1String("copy"); | |
| 239 |
2/2✓ Branch 51 → 52 taken 350 times.
✓ Branch 52 → 53 taken 350 times.
|
700 | action.create = fields.value(QStringLiteral("create")).toBool(); |
| 240 |
6/6✓ Branch 60 → 61 taken 151 times.
✓ Branch 60 → 64 taken 9 times.
✓ Branch 63 → 64 taken 1 time.
✓ Branch 63 → 65 taken 150 times.
✓ Branch 66 → 67 taken 10 times.
✓ Branch 66 → 118 taken 150 times.
|
160 | } else if (kind == QLatin1String("junk") || kind == QLatin1String("trash")) { |
| 241 | 10 | action.kind = Action::Kind::FileInto; | |
| 242 |
2/2✓ Branch 71 → 72 taken 10 times.
✓ Branch 72 → 73 taken 10 times.
|
20 | action.specialUse = fields.value(QStringLiteral("specialUse")).toString(); |
| 243 |
2/2✓ Branch 80 → 81 taken 7 times.
✓ Branch 80 → 97 taken 3 times.
|
10 | if (action.specialUse.isEmpty()) |
| 244 |
6/6✓ Branch 83 → 84 taken 6 times.
✓ Branch 83 → 87 taken 1 time.
✓ Branch 92 → 93 taken 1 time.
✓ Branch 92 → 94 taken 6 times.
✓ Branch 94 → 95 taken 6 times.
✓ Branch 94 → 96 taken 1 time.
|
14 | action.specialUse = kind == QLatin1String("junk") ? QStringLiteral("\\Junk") : QStringLiteral("\\Trash"); |
| 245 |
2/2✓ Branch 101 → 102 taken 10 times.
✓ Branch 102 → 103 taken 10 times.
|
20 | action.copy = fields.value(QStringLiteral("copy")).toBool(); |
| 246 |
2/2✓ Branch 111 → 112 taken 10 times.
✓ Branch 112 → 113 taken 10 times.
|
20 | action.create = fields.value(QStringLiteral("create")).toBool(); |
| 247 |
6/6✓ Branch 120 → 121 taken 140 times.
✓ Branch 120 → 124 taken 10 times.
✓ Branch 123 → 124 taken 23 times.
✓ Branch 123 → 125 taken 117 times.
✓ Branch 126 → 127 taken 33 times.
✓ Branch 126 → 130 taken 117 times.
|
150 | } else if (kind == QLatin1String("forward") || kind == QLatin1String("forwardCopy")) { |
| 248 | 33 | action.kind = Action::Kind::Redirect; | |
| 249 | 33 | action.copy = kind == QLatin1String("forwardCopy"); | |
| 250 |
2/2✓ Branch 132 → 133 taken 52 times.
✓ Branch 132 → 142 taken 65 times.
|
117 | } else if (kind == QLatin1String("read")) { |
| 251 | 52 | action.kind = Action::Kind::AddFlag; | |
| 252 |
2/4✓ Branch 138 → 139 taken 52 times.
✓ Branch 138 → 140 taken 52 times.
✗ Branch 308 → 309 not taken.
✗ Branch 308 → 310 not taken.
|
104 | action.flags = {QStringLiteral("\\Seen")}; |
| 253 |
2/2✓ Branch 144 → 145 taken 4 times.
✓ Branch 144 → 154 taken 61 times.
|
65 | } else if (kind == QLatin1String("important")) { |
| 254 | 4 | action.kind = Action::Kind::AddFlag; | |
| 255 |
2/4✓ Branch 150 → 151 taken 4 times.
✓ Branch 150 → 152 taken 4 times.
✗ Branch 321 → 322 not taken.
✗ Branch 321 → 323 not taken.
|
8 | action.flags = {QStringLiteral("\\Flagged")}; |
| 256 |
2/2✓ Branch 156 → 157 taken 5 times.
✓ Branch 156 → 166 taken 56 times.
|
61 | } else if (kind == QLatin1String("unread")) { |
| 257 | 5 | action.kind = Action::Kind::RemoveFlag; | |
| 258 |
2/4✓ Branch 162 → 163 taken 5 times.
✓ Branch 162 → 164 taken 5 times.
✗ Branch 334 → 335 not taken.
✗ Branch 334 → 336 not taken.
|
10 | action.flags = {QStringLiteral("\\Seen")}; |
| 259 |
2/2✓ Branch 168 → 169 taken 2 times.
✓ Branch 168 → 183 taken 54 times.
|
56 | } else if (kind == QLatin1String("label")) { |
| 260 | 2 | action.kind = Action::Kind::AddFlag; | |
| 261 |
2/6✗ Branch 170 → 171 not taken.
✓ Branch 170 → 174 taken 2 times.
✗ Branch 172 → 173 not taken.
✗ Branch 172 → 174 not taken.
✗ Branch 175 → 176 not taken.
✓ Branch 175 → 182 taken 2 times.
|
2 | if (action.flags.isEmpty() && !action.target.isEmpty()) |
| 262 | ✗ | action.flags = {action.target}; | |
| 263 | 2 | action.target.clear(); | |
| 264 |
2/2✓ Branch 185 → 186 taken 6 times.
✓ Branch 185 → 187 taken 48 times.
|
54 | } else if (kind == QLatin1String("addFlags")) { |
| 265 | 6 | action.kind = Action::Kind::AddFlag; | |
| 266 |
2/2✓ Branch 189 → 190 taken 13 times.
✓ Branch 189 → 191 taken 35 times.
|
48 | } else if (kind == QLatin1String("setFlags")) { |
| 267 | 13 | action.kind = Action::Kind::SetFlag; | |
| 268 |
1/2✗ Branch 193 → 194 not taken.
✓ Branch 193 → 195 taken 35 times.
|
35 | } else if (kind == QLatin1String("removeFlags")) { |
| 269 | ✗ | action.kind = Action::Kind::RemoveFlag; | |
| 270 |
2/2✓ Branch 197 → 198 taken 18 times.
✓ Branch 197 → 199 taken 17 times.
|
35 | } else if (kind == QLatin1String("keep")) { |
| 271 | 18 | action.kind = Action::Kind::Keep; | |
| 272 |
2/2✓ Branch 201 → 202 taken 7 times.
✓ Branch 201 → 203 taken 10 times.
|
17 | } else if (kind == QLatin1String("discard")) { |
| 273 | 7 | action.kind = Action::Kind::Discard; | |
| 274 |
1/2✓ Branch 205 → 206 taken 10 times.
✗ Branch 205 → 207 not taken.
|
10 | } else if (kind == QLatin1String("reject")) { |
| 275 | 10 | action.kind = Action::Kind::Reject; | |
| 276 | } | ||
| 277 |
4/4✓ Branch 207 → 208 taken 446 times.
✓ Branch 207 → 212 taken 64 times.
✓ Branch 208 → 209 taken 433 times.
✓ Branch 208 → 212 taken 13 times.
|
510 | if (action.kind == Action::Kind::AddFlag || action.kind == Action::Kind::SetFlag || |
| 278 |
4/4✓ Branch 209 → 210 taken 428 times.
✓ Branch 209 → 212 taken 5 times.
✓ Branch 210 → 211 taken 410 times.
✓ Branch 210 → 212 taken 18 times.
|
433 | action.kind == Action::Kind::RemoveFlag || action.kind == Action::Kind::Keep || |
| 279 |
2/2✓ Branch 211 → 212 taken 7 times.
✓ Branch 211 → 213 taken 403 times.
|
410 | action.kind == Action::Kind::Discard) |
| 280 | 107 | action.target.clear(); | |
| 281 |
4/4✓ Branch 213 → 214 taken 446 times.
✓ Branch 213 → 217 taken 64 times.
✓ Branch 214 → 215 taken 433 times.
✓ Branch 214 → 217 taken 13 times.
|
510 | if (action.kind != Action::Kind::AddFlag && action.kind != Action::Kind::SetFlag && |
| 282 |
2/2✓ Branch 215 → 216 taken 428 times.
✓ Branch 215 → 217 taken 5 times.
|
433 | action.kind != Action::Kind::RemoveFlag) |
| 283 |
1/1✓ Branch 216 → 217 taken 428 times.
|
428 | action.flags.clear(); |
| 284 | 510 | return action; | |
| 285 | 632 | } | |
| 286 | |||
| 287 | 300 | QVariantMap fromRule(const Sieve::Rule &rule) { | |
| 288 | 300 | QVariantList conditions; | |
| 289 |
2/2✓ Branch 12 → 4 taken 318 times.
✓ Branch 12 → 13 taken 300 times.
|
618 | for (const Condition &condition : rule.conditions) |
| 290 |
2/2✓ Branch 5 → 6 taken 318 times.
✓ Branch 7 → 8 taken 318 times.
|
318 | conditions.append(fromCondition(condition)); |
| 291 | 300 | QVariantList actions; | |
| 292 |
2/2✓ Branch 23 → 15 taken 346 times.
✓ Branch 23 → 24 taken 300 times.
|
646 | for (const Action &action : rule.actions) |
| 293 |
2/2✓ Branch 16 → 17 taken 346 times.
✓ Branch 18 → 19 taken 346 times.
|
346 | actions.append(fromAction(action)); |
| 294 | 600 | return {{QStringLiteral("name"), rule.name}, | |
| 295 | 600 | {QStringLiteral("enabled"), rule.enabled}, | |
| 296 | 600 | {QStringLiteral("matchAll"), rule.matchAll}, | |
| 297 | 600 | {QStringLiteral("explicitList"), rule.explicitList}, | |
| 298 | 600 | {QStringLiteral("stop"), rule.stop}, | |
| 299 | 600 | {QStringLiteral("conditions"), conditions}, | |
| 300 |
2/4✓ Branch 54 → 55 taken 2100 times.
✓ Branch 54 → 56 taken 300 times.
✗ Branch 89 → 90 not taken.
✗ Branch 89 → 91 not taken.
|
3000 | {QStringLiteral("actions"), actions}}; |
| 301 | 2700 | } | |
| 302 | |||
| 303 | 455 | Sieve::Rule toRule(const QVariantMap &draft) { | |
| 304 | 455 | Sieve::Rule rule; | |
| 305 |
3/3✓ Branch 6 → 7 taken 455 times.
✓ Branch 7 → 8 taken 455 times.
✓ Branch 8 → 9 taken 455 times.
|
910 | rule.name = draft.value(QStringLiteral("name")).toString().trimmed(); |
| 306 |
2/2✓ Branch 20 → 21 taken 455 times.
✓ Branch 21 → 22 taken 455 times.
|
910 | rule.enabled = draft.value(QStringLiteral("enabled"), true).toBool(); |
| 307 |
2/2✓ Branch 30 → 31 taken 455 times.
✓ Branch 31 → 32 taken 455 times.
|
910 | rule.matchAll = draft.value(QStringLiteral("matchAll"), true).toBool(); |
| 308 |
2/2✓ Branch 40 → 41 taken 455 times.
✓ Branch 41 → 42 taken 455 times.
|
910 | rule.explicitList = draft.value(QStringLiteral("explicitList")).toBool(); |
| 309 |
2/2✓ Branch 50 → 51 taken 455 times.
✓ Branch 51 → 52 taken 455 times.
|
910 | rule.stop = draft.value(QStringLiteral("stop")).toBool(); |
| 310 |
6/6✓ Branch 60 → 61 taken 455 times.
✓ Branch 61 → 62 taken 455 times.
✓ Branch 66 → 67 taken 455 times.
✓ Branch 67 → 68 taken 455 times.
✓ Branch 77 → 69 taken 486 times.
✓ Branch 77 → 78 taken 455 times.
|
1396 | for (const QVariant &entry : draft.value(QStringLiteral("conditions")).toList()) |
| 311 |
3/3✓ Branch 70 → 71 taken 486 times.
✓ Branch 71 → 72 taken 486 times.
✓ Branch 72 → 73 taken 486 times.
|
941 | rule.conditions.append(toCondition(entry.toMap())); |
| 312 |
6/6✓ Branch 83 → 84 taken 455 times.
✓ Branch 84 → 85 taken 455 times.
✓ Branch 89 → 90 taken 455 times.
✓ Branch 90 → 91 taken 455 times.
✓ Branch 100 → 92 taken 510 times.
✓ Branch 100 → 101 taken 455 times.
|
1420 | for (const QVariant &entry : draft.value(QStringLiteral("actions")).toList()) |
| 313 |
3/3✓ Branch 93 → 94 taken 510 times.
✓ Branch 94 → 95 taken 510 times.
✓ Branch 95 → 96 taken 510 times.
|
965 | rule.actions.append(toAction(entry.toMap())); |
| 314 |
2/2✓ Branch 103 → 104 taken 94 times.
✓ Branch 103 → 105 taken 361 times.
|
455 | if (rule.conditions.size() != 1) |
| 315 | 94 | rule.explicitList = false; | |
| 316 | 455 | return rule; | |
| 317 | ✗ | } | |
| 318 | |||
| 319 | } // namespace RuleEditorFields | ||
| 320 |