presentation/ConflictValueText.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "ConflictValueText.h" | ||
| 2 | |||
| 3 | #include "RuleSentence.h" | ||
| 4 | #include "data/ICalTime.h" | ||
| 5 | #include "data/ICalendar.h" | ||
| 6 | #include "data/RecurrenceRule.h" | ||
| 7 | #include "data/SieveRuleCodec.h" | ||
| 8 | #include "data/VCardCodec.h" | ||
| 9 | |||
| 10 | #include <QJsonArray> | ||
| 11 | #include <QJsonDocument> | ||
| 12 | #include <QJsonObject> | ||
| 13 | #include <QLocale> | ||
| 14 | #include <QRegularExpression> | ||
| 15 | |||
| 16 | namespace { | ||
| 17 | |||
| 18 | 4221 | ICal::Property propertyOf(const QString &line) { | |
| 19 | const ICal::Component parsed = | ||
| 20 |
3/3✓ Branch 11 → 12 taken 4221 times.
✓ Branch 12 → 13 taken 4221 times.
✓ Branch 13 → 14 taken 4221 times.
|
12663 | ICal::parseFirst(QStringLiteral("BEGIN:X\r\n") + line + QStringLiteral("\r\nEND:X\r\n"), QStringLiteral("X")); |
| 21 |
2/2✓ Branch 23 → 24 taken 126 times.
✓ Branch 23 → 25 taken 4095 times.
|
8442 | return parsed.properties.isEmpty() ? ICal::Property{} : parsed.properties.first(); |
| 22 | 4221 | } | |
| 23 | |||
| 24 | // The first line of a (possibly multi-line) value. | ||
| 25 |
1/1✓ Branch 5 → 6 taken 4789 times.
|
4789 | QString firstLine(const QString &text) { return text.section(QLatin1Char('\n'), 0, 0); } |
| 26 | |||
| 27 | 1629 | QString shortText(QString text, int limit = 160) { | |
| 28 |
1/1✓ Branch 7 → 8 taken 1629 times.
|
1629 | text.replace(QLatin1Char('\n'), QStringLiteral(" · ")); |
| 29 |
10/16✓ Branch 11 → 12 taken 4 times.
✓ Branch 11 → 17 taken 1625 times.
✓ Branch 15 → 16 taken 4 times.
✓ Branch 16 → 18 taken 4 times.
✓ Branch 19 → 20 taken 4 times.
✓ Branch 19 → 21 taken 1625 times.
✓ Branch 21 → 22 taken 4 times.
✓ Branch 21 → 23 taken 1625 times.
✓ Branch 23 → 24 taken 4 times.
✓ Branch 23 → 25 taken 1625 times.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 37 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 41 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 45 not taken.
|
1633 | return text.size() > limit ? text.left(limit - 1) + QStringLiteral("…") : text; |
| 30 | } | ||
| 31 | |||
| 32 | // "PT15M", "-P1D", "-PT1H30M" → minutes (negative = before). | ||
| 33 | 94 | int durationMinutes(const QString &value, bool *ok) { | |
| 34 | static const QRegularExpression pattern( | ||
| 35 |
4/7✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 15 taken 93 times.
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 15 not taken.
✓ Branch 9 → 10 taken 1 time.
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 57 not taken.
|
95 | QStringLiteral("^([+-])?P(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$")); |
| 36 |
3/3✓ Branch 16 → 17 taken 94 times.
✓ Branch 17 → 18 taken 94 times.
✓ Branch 18 → 19 taken 94 times.
|
94 | const auto match = pattern.match(value.trimmed().toUpper()); |
| 37 |
1/1✓ Branch 21 → 22 taken 94 times.
|
94 | *ok = match.hasMatch(); |
| 38 |
2/2✓ Branch 22 → 23 taken 4 times.
✓ Branch 22 → 24 taken 90 times.
|
94 | if (!*ok) |
| 39 | 4 | return 0; | |
| 40 |
4/4✓ Branch 24 → 25 taken 90 times.
✓ Branch 25 → 26 taken 90 times.
✓ Branch 26 → 27 taken 90 times.
✓ Branch 27 → 28 taken 90 times.
|
180 | const int minutes = match.captured(2).toInt() * 7 * 24 * 60 + match.captured(3).toInt() * 24 * 60 + |
| 41 |
4/4✓ Branch 28 → 29 taken 90 times.
✓ Branch 29 → 30 taken 90 times.
✓ Branch 30 → 31 taken 90 times.
✓ Branch 31 → 32 taken 90 times.
|
90 | match.captured(4).toInt() * 60 + match.captured(5).toInt(); |
| 42 |
3/3✓ Branch 37 → 38 taken 90 times.
✓ Branch 39 → 40 taken 77 times.
✓ Branch 39 → 41 taken 13 times.
|
90 | return match.captured(1) == QLatin1String("-") ? -minutes : minutes; |
| 43 | 94 | } | |
| 44 | |||
| 45 | 263 | ICalTime::ZoneResolver zonesOf(const QString &calendarText) { | |
| 46 |
2/2✓ Branch 5 → 6 taken 263 times.
✓ Branch 6 → 7 taken 263 times.
|
263 | return ICalTime::ZoneResolver(ICal::parseFirst(calendarText)); |
| 47 | } | ||
| 48 | |||
| 49 | 263 | QString sideText(const Merge::Plan &plan, ConflictValueText::Side side) { | |
| 50 |
3/4✓ Branch 2 → 3 taken 71 times.
✓ Branch 2 → 4 taken 77 times.
✓ Branch 2 → 5 taken 115 times.
✗ Branch 2 → 6 not taken.
|
263 | switch (side) { |
| 51 | 71 | case ConflictValueText::Side::Base: | |
| 52 | 71 | return plan.baseText; | |
| 53 | 77 | case ConflictValueText::Side::Server: | |
| 54 | 77 | return plan.serverText; | |
| 55 | 115 | case ConflictValueText::Side::Local: | |
| 56 | 115 | break; | |
| 57 | } | ||
| 58 | 115 | return plan.localText; | |
| 59 | } | ||
| 60 | |||
| 61 | } // namespace | ||
| 62 | |||
| 63 | 10048 | const Merge::Value &ConflictValueText::valueOf(const Merge::Item &item, Side side) { | |
| 64 |
3/4✓ Branch 2 → 3 taken 2799 times.
✓ Branch 2 → 4 taken 3533 times.
✓ Branch 2 → 5 taken 3716 times.
✗ Branch 2 → 6 not taken.
|
10048 | switch (side) { |
| 65 | 2799 | case Side::Base: | |
| 66 | 2799 | return item.base; | |
| 67 | 3533 | case Side::Server: | |
| 68 | 3533 | return item.server; | |
| 69 | 3716 | case Side::Local: | |
| 70 | 3716 | break; | |
| 71 | } | ||
| 72 | 3716 | return item.local; | |
| 73 | } | ||
| 74 | |||
| 75 | 117 | QString ConflictValueText::groupLabel(const QString &group) { | |
| 76 |
2/2✓ Branch 4 → 5 taken 72 times.
✓ Branch 4 → 6 taken 45 times.
|
117 | if (group == QLatin1String("time")) |
| 77 | 72 | return tr("Time"); | |
| 78 |
2/2✓ Branch 8 → 9 taken 9 times.
✓ Branch 8 → 10 taken 36 times.
|
45 | if (group == QLatin1String("completion")) |
| 79 | 9 | return tr("Done"); | |
| 80 |
2/2✓ Branch 12 → 13 taken 8 times.
✓ Branch 12 → 14 taken 28 times.
|
36 | if (group == QLatin1String("recurrence")) |
| 81 | 8 | return tr("Repeats"); | |
| 82 |
2/2✓ Branch 16 → 17 taken 16 times.
✓ Branch 16 → 18 taken 12 times.
|
28 | if (group == QLatin1String("name")) |
| 83 | 16 | return tr("Name"); | |
| 84 |
3/3✓ Branch 19 → 20 taken 12 times.
✓ Branch 20 → 21 taken 2 times.
✓ Branch 20 → 22 taken 10 times.
|
12 | if (group.startsWith(QLatin1String("dav:"))) |
| 85 | 2 | return tr("Calendars and address books"); | |
| 86 | 10 | return group; | |
| 87 | } | ||
| 88 | |||
| 89 | 1103 | QString ConflictValueText::label(const Merge::Plan &plan, const Merge::Item &item) { | |
| 90 | 1103 | const QString name = item.name; | |
| 91 |
2/2✓ Branch 5 → 6 taken 51 times.
✓ Branch 5 → 79 taken 1052 times.
|
1103 | if (plan.domain == QLatin1String("settings")) { |
| 92 | 51 | const QString key = item.context; | |
| 93 |
2/2✓ Branch 9 → 10 taken 14 times.
✓ Branch 9 → 15 taken 37 times.
|
51 | if (name == QLatin1String("folderIcons")) |
| 94 |
2/2✓ Branch 10 → 11 taken 14 times.
✓ Branch 12 → 13 taken 14 times.
|
28 | return tr("%1 — icon").arg(key); |
| 95 |
2/2✓ Branch 17 → 18 taken 3 times.
✓ Branch 17 → 23 taken 34 times.
|
37 | if (name == QLatin1String("folderColors")) |
| 96 |
2/2✓ Branch 18 → 19 taken 3 times.
✓ Branch 20 → 21 taken 3 times.
|
6 | return tr("%1 — colour").arg(key); |
| 97 |
2/2✓ Branch 25 → 26 taken 3 times.
✓ Branch 25 → 28 taken 31 times.
|
34 | if (name == QLatin1String("calendarColors")) |
| 98 |
1/1✓ Branch 26 → 27 taken 3 times.
|
3 | return tr("Calendar colour"); |
| 99 |
2/2✓ Branch 30 → 31 taken 7 times.
✓ Branch 30 → 33 taken 24 times.
|
31 | if (name == QLatin1String("hiddenFolders")) |
| 100 |
1/1✓ Branch 31 → 32 taken 7 times.
|
7 | return tr("Hidden folders"); |
| 101 |
2/2✓ Branch 35 → 36 taken 7 times.
✓ Branch 35 → 47 taken 17 times.
|
24 | if (name == QLatin1String("davAccounts")) |
| 102 |
3/3✓ Branch 37 → 38 taken 7 times.
✓ Branch 38 → 39 taken 2 times.
✓ Branch 38 → 40 taken 5 times.
|
7 | return key.endsWith(QLatin1String(":books")) ? tr("Address books") |
| 103 |
3/3✓ Branch 41 → 42 taken 5 times.
✓ Branch 42 → 43 taken 2 times.
✓ Branch 42 → 44 taken 3 times.
|
12 | : key.endsWith(QLatin1String(":calendars")) ? tr("Calendars") |
| 104 |
3/3✓ Branch 39 → 45 taken 2 times.
✓ Branch 43 → 45 taken 2 times.
✓ Branch 44 → 45 taken 3 times.
|
7 | : tr("Calendar and contact account"); |
| 105 |
1/2✗ Branch 49 → 50 not taken.
✓ Branch 49 → 61 taken 17 times.
|
17 | if (name == QLatin1String("identities")) |
| 106 | ✗ | return tr("%1 — name and signatures").arg(key.section(QLatin1Char('|'), 2)); | |
| 107 |
1/2✗ Branch 63 → 64 not taken.
✓ Branch 63 → 66 taken 17 times.
|
17 | if (name == QLatin1String("templates")) |
| 108 | ✗ | return tr("Template"); | |
| 109 |
2/2✓ Branch 68 → 69 taken 14 times.
✓ Branch 68 → 71 taken 3 times.
|
17 | if (key == QLatin1String("defaultView")) |
| 110 |
1/1✓ Branch 69 → 70 taken 14 times.
|
14 | return tr("Reading mode"); |
| 111 |
1/2✓ Branch 73 → 74 taken 3 times.
✗ Branch 73 → 76 not taken.
|
3 | if (key == QLatin1String("language")) |
| 112 |
1/1✓ Branch 74 → 75 taken 3 times.
|
3 | return tr("Language"); |
| 113 | ✗ | return key; | |
| 114 | 51 | } | |
| 115 |
2/2✓ Branch 81 → 82 taken 181 times.
✓ Branch 81 → 96 taken 871 times.
|
1052 | if (plan.domain == QLatin1String("sieve")) { |
| 116 |
2/2✓ Branch 82 → 83 taken 12 times.
✓ Branch 82 → 85 taken 169 times.
|
181 | if (item.kind == Merge::Kind::Order) |
| 117 |
1/1✓ Branch 83 → 84 taken 12 times.
|
12 | return tr("Order of the rules"); |
| 118 |
2/2✓ Branch 87 → 88 taken 18 times.
✓ Branch 87 → 90 taken 151 times.
|
169 | if (item.context == QLatin1String("vacation")) |
| 119 |
1/1✓ Branch 88 → 89 taken 18 times.
|
18 | return tr("Out of office"); |
| 120 |
2/2✓ Branch 92 → 93 taken 6 times.
✓ Branch 92 → 95 taken 145 times.
|
151 | if (item.id == QLatin1String("raw")) |
| 121 |
1/1✓ Branch 93 → 94 taken 6 times.
|
6 | return tr("Script"); |
| 122 | 145 | return item.name; | |
| 123 | } | ||
| 124 |
2/2✓ Branch 98 → 99 taken 23 times.
✓ Branch 98 → 106 taken 848 times.
|
871 | if (item.id == QLatin1String("raw")) |
| 125 |
4/4✓ Branch 101 → 102 taken 9 times.
✓ Branch 101 → 103 taken 14 times.
✓ Branch 102 → 104 taken 9 times.
✓ Branch 103 → 104 taken 14 times.
|
23 | return plan.domain == QLatin1String("vcard") ? tr("The whole contact") : tr("The whole entry"); |
| 126 | static const QHash<QString, const char *> labels{ | ||
| 127 | 8 | {QStringLiteral("SUMMARY"), QT_TR_NOOP("Title")}, | |
| 128 | 8 | {QStringLiteral("LOCATION"), QT_TR_NOOP("Location")}, | |
| 129 | 8 | {QStringLiteral("DESCRIPTION"), QT_TR_NOOP("Notes")}, | |
| 130 | 8 | {QStringLiteral("COMMENT"), QT_TR_NOOP("Comment")}, | |
| 131 | 8 | {QStringLiteral("DTSTART"), QT_TR_NOOP("Start")}, | |
| 132 | 8 | {QStringLiteral("DTEND"), QT_TR_NOOP("End")}, | |
| 133 | 8 | {QStringLiteral("DUE"), QT_TR_NOOP("Due")}, | |
| 134 | 8 | {QStringLiteral("DURATION"), QT_TR_NOOP("Duration")}, | |
| 135 | 8 | {QStringLiteral("RRULE"), QT_TR_NOOP("Repeats")}, | |
| 136 | 8 | {QStringLiteral("EXDATE"), QT_TR_NOOP("Left out of the series")}, | |
| 137 | 8 | {QStringLiteral("RDATE"), QT_TR_NOOP("Extra dates")}, | |
| 138 | 8 | {QStringLiteral("ATTENDEE"), QT_TR_NOOP("Attendees")}, | |
| 139 | 8 | {QStringLiteral("ORGANIZER"), QT_TR_NOOP("Organizer")}, | |
| 140 | 8 | {QStringLiteral("CATEGORIES"), QT_TR_NOOP("Tags")}, | |
| 141 | 8 | {QStringLiteral("BEGIN:VALARM"), QT_TR_NOOP("Reminders")}, | |
| 142 | 8 | {QStringLiteral("STATUS"), QT_TR_NOOP("Status")}, | |
| 143 | 8 | {QStringLiteral("PERCENT-COMPLETE"), QT_TR_NOOP("Progress")}, | |
| 144 | 8 | {QStringLiteral("COMPLETED"), QT_TR_NOOP("Completed on")}, | |
| 145 | 8 | {QStringLiteral("PRIORITY"), QT_TR_NOOP("Priority")}, | |
| 146 | 8 | {QStringLiteral("RELATED-TO"), QT_TR_NOOP("Belongs to")}, | |
| 147 | 8 | {QStringLiteral("CONTACT"), QT_TR_NOOP("People")}, | |
| 148 | 8 | {QStringLiteral("ATTACH"), QT_TR_NOOP("Attachments")}, | |
| 149 | 8 | {QStringLiteral("CLASS"), QT_TR_NOOP("Visibility")}, | |
| 150 | 8 | {QStringLiteral("TRANSP"), QT_TR_NOOP("Shown as")}, | |
| 151 | 8 | {QStringLiteral("URL"), QT_TR_NOOP("Link")}, | |
| 152 | 8 | {QStringLiteral("FN"), QT_TR_NOOP("Name")}, | |
| 153 | 8 | {QStringLiteral("N"), QT_TR_NOOP("Name parts")}, | |
| 154 | 8 | {QStringLiteral("NICKNAME"), QT_TR_NOOP("Nickname")}, | |
| 155 | 8 | {QStringLiteral("ORG"), QT_TR_NOOP("Organization")}, | |
| 156 | 8 | {QStringLiteral("TITLE"), QT_TR_NOOP("Job title")}, | |
| 157 | 8 | {QStringLiteral("ROLE"), QT_TR_NOOP("Role")}, | |
| 158 | 8 | {QStringLiteral("NOTE"), QT_TR_NOOP("Note")}, | |
| 159 | 8 | {QStringLiteral("BDAY"), QT_TR_NOOP("Birthday")}, | |
| 160 | 8 | {QStringLiteral("ANNIVERSARY"), QT_TR_NOOP("Anniversary")}, | |
| 161 | 8 | {QStringLiteral("PHOTO"), QT_TR_NOOP("Photo")}, | |
| 162 | 8 | {QStringLiteral("EMAIL"), QT_TR_NOOP("E-mail addresses")}, | |
| 163 | 8 | {QStringLiteral("TEL"), QT_TR_NOOP("Phone numbers")}, | |
| 164 | 8 | {QStringLiteral("ADR"), QT_TR_NOOP("Addresses")}, | |
| 165 | 8 | {QStringLiteral("IMPP"), QT_TR_NOOP("Chat")}, | |
| 166 | 8 | {QStringLiteral("RELATED"), QT_TR_NOOP("Relationships")}, | |
| 167 | 8 | {QStringLiteral("MEMBER"), QT_TR_NOOP("Members")}, | |
| 168 | 8 | {QStringLiteral("GENDER"), QT_TR_NOOP("Gender")}, | |
| 169 | 8 | {QStringLiteral("KIND"), QT_TR_NOOP("Kind")}, | |
| 170 |
5/10✓ Branch 106 → 107 taken 4 times.
✓ Branch 106 → 374 taken 844 times.
✓ Branch 108 → 109 taken 4 times.
✗ Branch 108 → 374 not taken.
✓ Branch 285 → 286 taken 172 times.
✓ Branch 285 → 287 taken 4 times.
✗ Branch 413 → 414 not taken.
✗ Branch 413 → 415 not taken.
✗ Branch 680 → 681 not taken.
✗ Branch 680 → 682 not taken.
|
1028 | }; |
| 171 |
2/2✓ Branch 375 → 376 taken 828 times.
✓ Branch 375 → 378 taken 20 times.
|
848 | if (const char *text = labels.value(name, nullptr)) |
| 172 |
1/1✓ Branch 376 → 377 taken 828 times.
|
828 | return tr(text); |
| 173 |
2/4✓ Branch 379 → 380 taken 20 times.
✗ Branch 380 → 381 not taken.
✓ Branch 380 → 382 taken 20 times.
✗ Branch 381 → 383 not taken.
|
20 | return name.startsWith(QLatin1String("BEGIN:")) ? name.mid(6) : name; |
| 174 | 1279 | } | |
| 175 | |||
| 176 | 594 | QString ConflictValueText::absent(const Merge::Item &item) { | |
| 177 |
4/4✓ Branch 2 → 3 taken 399 times.
✓ Branch 2 → 4 taken 195 times.
✓ Branch 3 → 4 taken 24 times.
✓ Branch 3 → 14 taken 375 times.
|
594 | if (item.kind == Merge::Kind::Component || item.kind == Merge::Kind::Deletion) { |
| 178 |
6/6✓ Branch 5 → 6 taken 39 times.
✓ Branch 5 → 10 taken 180 times.
✓ Branch 8 → 9 taken 21 times.
✓ Branch 8 → 10 taken 18 times.
✓ Branch 11 → 12 taken 21 times.
✓ Branch 11 → 13 taken 198 times.
|
219 | if (!item.context.isEmpty() && item.context != QLatin1String("vacation")) |
| 179 | 21 | return tr("Left out of the series"); | |
| 180 | 198 | return tr("Deleted"); | |
| 181 | } | ||
| 182 | 375 | return tr("(none)"); | |
| 183 | } | ||
| 184 | |||
| 185 | 4098 | QString ConflictValueText::source(const Merge::Item &item, Side side) { | |
| 186 | 4098 | const Merge::Value &value = valueOf(item, side); | |
| 187 |
2/2✓ Branch 3 → 4 taken 3139 times.
✓ Branch 3 → 5 taken 959 times.
|
4098 | return value.present ? value.text : QString(); |
| 188 | } | ||
| 189 | |||
| 190 | 509 | QString ConflictValueText::dateTimeText(const QString &contentLine, const Context &context) { | |
| 191 |
1/1✓ Branch 2 → 3 taken 509 times.
|
509 | const ICal::Property property = propertyOf(contentLine); |
| 192 |
2/2✓ Branch 4 → 5 taken 1 time.
✓ Branch 4 → 6 taken 508 times.
|
509 | if (property.name.isEmpty()) |
| 193 | 1 | return {}; | |
| 194 |
1/1✓ Branch 7 → 8 taken 508 times.
|
508 | const ICalTime::Value value = ICalTime::parseProperty(property, ICalTime::ZoneResolver()); |
| 195 |
2/3✓ Branch 9 → 10 taken 508 times.
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 13 taken 508 times.
|
508 | if (!value.valid()) |
| 196 | ✗ | return ICal::unescapeText(property.value); | |
| 197 |
1/1✓ Branch 13 → 14 taken 508 times.
|
508 | const QLocale locale; |
| 198 |
2/2✓ Branch 14 → 15 taken 62 times.
✓ Branch 14 → 24 taken 446 times.
|
508 | if (value.dateOnly) |
| 199 |
2/2✓ Branch 18 → 19 taken 62 times.
✓ Branch 19 → 20 taken 62 times.
|
62 | return locale.toString(value.dateTime.date(), QStringLiteral("ddd d MMM yyyy")); |
| 200 |
3/3✓ Branch 24 → 25 taken 28 times.
✓ Branch 24 → 26 taken 418 times.
✓ Branch 26 → 27 taken 418 times.
|
446 | QDateTime shown = value.floating ? value.dateTime : value.dateTime.toTimeZone(context.zone); |
| 201 |
3/3✓ Branch 37 → 38 taken 446 times.
✓ Branch 38 → 39 taken 446 times.
✓ Branch 39 → 40 taken 446 times.
|
1338 | QString text = locale.toString(shown.date(), QStringLiteral("ddd d MMM yyyy")) + QLatin1Char(' ') + |
| 202 |
3/3✓ Branch 30 → 31 taken 446 times.
✓ Branch 31 → 32 taken 446 times.
✓ Branch 40 → 41 taken 446 times.
|
1338 | locale.toString(shown.time(), QStringLiteral("HH:mm")); |
| 203 | // Another zone than the user's: the time there, too ("09:00 (11:00 Europe/Berlin)"). | ||
| 204 |
10/14✓ Branch 48 → 49 taken 418 times.
✓ Branch 48 → 55 taken 28 times.
✓ Branch 49 → 50 taken 418 times.
✓ Branch 50 → 51 taken 418 times.
✗ Branch 50 → 55 not taken.
✓ Branch 51 → 52 taken 418 times.
✓ Branch 53 → 54 taken 418 times.
✗ Branch 53 → 55 not taken.
✓ Branch 56 → 57 taken 418 times.
✓ Branch 56 → 58 taken 28 times.
✓ Branch 58 → 59 taken 418 times.
✓ Branch 58 → 82 taken 28 times.
✗ Branch 122 → 123 not taken.
✗ Branch 122 → 124 not taken.
|
446 | if (!value.floating && value.dateTime.timeSpec() == Qt::TimeZone && value.dateTime.timeZone() != context.zone) |
| 205 | 836 | text += QStringLiteral(" (%1 %2)") | |
| 206 |
3/3✓ Branch 68 → 69 taken 418 times.
✓ Branch 69 → 70 taken 418 times.
✓ Branch 70 → 71 taken 418 times.
|
1254 | .arg(locale.toString(value.dateTime.time(), QStringLiteral("HH:mm")), |
| 207 |
4/4✓ Branch 62 → 63 taken 418 times.
✓ Branch 63 → 64 taken 418 times.
✓ Branch 64 → 65 taken 418 times.
✓ Branch 71 → 72 taken 418 times.
|
1254 | QString::fromUtf8(value.dateTime.timeZone().id())); |
| 208 | 446 | return text; | |
| 209 | 509 | } | |
| 210 | |||
| 211 | 676 | QString ConflictValueText::groupValue(const Merge::Plan &plan, const QList<const Merge::Item *> &members, Side side, | |
| 212 | const Context &context) { | ||
| 213 | 676 | QHash<QString, QString> lines; | |
| 214 |
2/2✓ Branch 13 → 4 taken 1562 times.
✓ Branch 13 → 14 taken 676 times.
|
2238 | for (const Merge::Item *item : members) { |
| 215 | 1562 | const Merge::Value &value = valueOf(*item, side); | |
| 216 |
2/2✓ Branch 6 → 7 taken 1151 times.
✓ Branch 6 → 11 taken 411 times.
|
1562 | if (value.present) |
| 217 |
2/2✓ Branch 7 → 8 taken 1151 times.
✓ Branch 8 → 9 taken 1151 times.
|
1151 | lines.insert(item->name, firstLine(value.text)); |
| 218 | } | ||
| 219 |
11/14✓ Branch 18 → 19 taken 413 times.
✓ Branch 18 → 24 taken 263 times.
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 413 times.
✓ Branch 26 → 27 taken 413 times.
✓ Branch 26 → 28 taken 263 times.
✓ Branch 28 → 29 taken 413 times.
✓ Branch 28 → 30 taken 263 times.
✓ Branch 30 → 31 taken 676 times.
✗ Branch 30 → 32 not taken.
✓ Branch 32 → 33 taken 676 times.
✗ Branch 32 → 34 not taken.
✓ Branch 34 → 35 taken 263 times.
✓ Branch 34 → 314 taken 413 times.
|
1765 | if (lines.contains(QStringLiteral("DTSTART")) || lines.contains(QStringLiteral("DUE"))) { |
| 220 | 263 | const QString start = lines.value(QStringLiteral("DTSTART")); | |
| 221 |
2/2✓ Branch 60 → 61 taken 257 times.
✓ Branch 60 → 62 taken 6 times.
|
783 | const QString end = lines.contains(QStringLiteral("DTEND")) ? lines.value(QStringLiteral("DTEND")) |
| 222 |
8/8✓ Branch 45 → 46 taken 257 times.
✓ Branch 45 → 50 taken 6 times.
✓ Branch 54 → 55 taken 6 times.
✓ Branch 54 → 56 taken 257 times.
✓ Branch 56 → 57 taken 6 times.
✓ Branch 56 → 58 taken 257 times.
✓ Branch 58 → 59 taken 257 times.
✓ Branch 58 → 60 taken 6 times.
|
526 | : lines.value(QStringLiteral("DUE")); |
| 223 |
1/1✓ Branch 64 → 65 taken 263 times.
|
263 | const QLocale locale; |
| 224 |
1/1✓ Branch 66 → 67 taken 263 times.
|
263 | const ICalTime::ZoneResolver zones = zonesOf(sideText(plan, side)); |
| 225 |
4/12✗ Branch 69 → 70 not taken.
✓ Branch 69 → 72 taken 263 times.
✓ Branch 72 → 73 taken 263 times.
✓ Branch 73 → 74 taken 263 times.
✓ Branch 74 → 75 taken 263 times.
✗ Branch 74 → 76 not taken.
✗ Branch 348 → 349 not taken.
✗ Branch 348 → 350 not taken.
✗ Branch 352 → 353 not taken.
✗ Branch 352 → 355 not taken.
✗ Branch 353 → 354 not taken.
✗ Branch 353 → 355 not taken.
|
263 | const ICalTime::Value from = start.isEmpty() ? ICalTime::Value{} : ICalTime::parseProperty(propertyOf(start), zones); |
| 226 |
6/12✓ Branch 77 → 78 taken 3 times.
✓ Branch 77 → 80 taken 260 times.
✓ Branch 80 → 81 taken 260 times.
✓ Branch 81 → 82 taken 260 times.
✓ Branch 82 → 83 taken 260 times.
✓ Branch 82 → 84 taken 3 times.
✗ Branch 356 → 357 not taken.
✗ Branch 356 → 358 not taken.
✗ Branch 360 → 361 not taken.
✗ Branch 360 → 363 not taken.
✗ Branch 361 → 362 not taken.
✗ Branch 361 → 363 not taken.
|
263 | ICalTime::Value to = end.isEmpty() ? ICalTime::Value{} : ICalTime::parseProperty(propertyOf(end), zones); |
| 227 |
12/18✓ Branch 84 → 85 taken 263 times.
✓ Branch 85 → 86 taken 3 times.
✓ Branch 85 → 94 taken 260 times.
✓ Branch 86 → 87 taken 3 times.
✓ Branch 87 → 88 taken 3 times.
✗ Branch 87 → 94 not taken.
✓ Branch 92 → 93 taken 3 times.
✗ Branch 92 → 94 not taken.
✓ Branch 95 → 96 taken 3 times.
✓ Branch 95 → 97 taken 260 times.
✓ Branch 97 → 98 taken 3 times.
✓ Branch 97 → 99 taken 260 times.
✓ Branch 99 → 100 taken 3 times.
✓ Branch 99 → 116 taken 260 times.
✗ Branch 364 → 365 not taken.
✗ Branch 364 → 366 not taken.
✗ Branch 368 → 369 not taken.
✗ Branch 368 → 370 not taken.
|
266 | if (!to.valid() && from.valid() && lines.contains(QStringLiteral("DURATION"))) { |
| 228 | 3 | bool ok = false; | |
| 229 |
2/2✓ Branch 104 → 105 taken 3 times.
✓ Branch 105 → 106 taken 3 times.
|
3 | const int minutes = durationMinutes(propertyOf(lines.value(QStringLiteral("DURATION"))).value, &ok); |
| 230 |
1/2✓ Branch 110 → 111 taken 3 times.
✗ Branch 110 → 115 not taken.
|
3 | if (ok) |
| 231 | 3 | to = {from.dateTime.addSecs(qint64(minutes) * 60), from.dateOnly, from.floating}; | |
| 232 | } | ||
| 233 | 526 | const auto local = [&context](const ICalTime::Value &value) { | |
| 234 |
4/4✓ Branch 2 → 3 taken 520 times.
✓ Branch 2 → 4 taken 6 times.
✓ Branch 3 → 4 taken 9 times.
✓ Branch 3 → 5 taken 511 times.
|
526 | return value.floating || value.dateOnly ? value.dateTime : value.dateTime.toTimeZone(context.zone); |
| 235 | 263 | }; | |
| 236 |
5/8✓ Branch 116 → 117 taken 263 times.
✓ Branch 117 → 118 taken 263 times.
✗ Branch 117 → 121 not taken.
✓ Branch 118 → 119 taken 263 times.
✓ Branch 119 → 120 taken 263 times.
✗ Branch 119 → 121 not taken.
✓ Branch 122 → 123 taken 263 times.
✗ Branch 122 → 268 not taken.
|
263 | if (from.valid() && to.valid()) { |
| 237 |
2/2✓ Branch 123 → 124 taken 263 times.
✓ Branch 124 → 125 taken 263 times.
|
263 | const QDateTime a = local(from), b = local(to); |
| 238 |
2/2✓ Branch 125 → 126 taken 6 times.
✓ Branch 125 → 174 taken 257 times.
|
263 | if (from.dateOnly) { |
| 239 |
2/2✓ Branch 126 → 127 taken 6 times.
✓ Branch 127 → 128 taken 6 times.
|
6 | const QDate last = b.date().addDays(-1); |
| 240 |
4/18✓ Branch 128 → 129 taken 6 times.
✗ Branch 132 → 133 not taken.
✗ Branch 136 → 137 not taken.
✗ Branch 137 → 138 not taken.
✗ Branch 167 → 168 not taken.
✓ Branch 167 → 169 taken 6 times.
✗ Branch 169 → 170 not taken.
✓ Branch 169 → 171 taken 6 times.
✗ Branch 171 → 172 not taken.
✓ Branch 171 → 173 taken 6 times.
✗ Branch 415 → 416 not taken.
✗ Branch 415 → 417 not taken.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 421 not taken.
✗ Branch 423 → 424 not taken.
✗ Branch 423 → 425 not taken.
✗ Branch 427 → 428 not taken.
✗ Branch 427 → 429 not taken.
|
12 | return last <= a.date() ? locale.toString(a.date(), QStringLiteral("ddd d MMM yyyy")) + tr(", all day") |
| 241 |
2/5✓ Branch 139 → 140 taken 6 times.
✗ Branch 165 → 166 not taken.
✓ Branch 165 → 167 taken 6 times.
✗ Branch 411 → 412 not taken.
✗ Branch 411 → 413 not taken.
|
12 | : tr("%1 – %2, all day") |
| 242 |
5/14✓ Branch 147 → 148 taken 6 times.
✓ Branch 148 → 149 taken 6 times.
✓ Branch 151 → 152 taken 6 times.
✗ Branch 151 → 153 not taken.
✓ Branch 153 → 154 taken 6 times.
✗ Branch 153 → 155 not taken.
✓ Branch 155 → 156 taken 6 times.
✗ Branch 155 → 157 not taken.
✗ Branch 387 → 388 not taken.
✗ Branch 387 → 389 not taken.
✗ Branch 391 → 392 not taken.
✗ Branch 391 → 393 not taken.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 397 not taken.
|
12 | .arg(locale.toString(a.date(), QStringLiteral("ddd d MMM")), |
| 243 |
7/19✗ Branch 131 → 132 not taken.
✓ Branch 131 → 139 taken 6 times.
✗ Branch 138 → 150 not taken.
✓ Branch 143 → 144 taken 6 times.
✓ Branch 149 → 150 taken 6 times.
✓ Branch 157 → 158 taken 6 times.
✗ Branch 157 → 159 not taken.
✓ Branch 159 → 160 taken 6 times.
✗ Branch 159 → 161 not taken.
✓ Branch 161 → 162 taken 6 times.
✗ Branch 161 → 163 not taken.
✓ Branch 163 → 164 taken 6 times.
✗ Branch 163 → 165 not taken.
✗ Branch 399 → 400 not taken.
✗ Branch 399 → 401 not taken.
✗ Branch 403 → 404 not taken.
✗ Branch 403 → 405 not taken.
✗ Branch 407 → 408 not taken.
✗ Branch 407 → 409 not taken.
|
30 | locale.toString(last, QStringLiteral("ddd d MMM yyyy"))); |
| 244 | } | ||
| 245 | // Times are the user's; another original zone adds its own times | ||
| 246 | // (§4.3): "09:00–10:00 (11:00–12:00 Europe/Berlin)". | ||
| 247 | 257 | QString zone; | |
| 248 |
10/14✓ Branch 174 → 175 taken 254 times.
✓ Branch 174 → 181 taken 3 times.
✓ Branch 175 → 176 taken 254 times.
✓ Branch 176 → 177 taken 254 times.
✗ Branch 176 → 181 not taken.
✓ Branch 177 → 178 taken 254 times.
✓ Branch 179 → 180 taken 254 times.
✗ Branch 179 → 181 not taken.
✓ Branch 182 → 183 taken 254 times.
✓ Branch 182 → 184 taken 3 times.
✓ Branch 184 → 185 taken 254 times.
✓ Branch 184 → 220 taken 3 times.
✗ Branch 433 → 434 not taken.
✗ Branch 433 → 435 not taken.
|
257 | if (!from.floating && from.dateTime.timeSpec() == Qt::TimeZone && from.dateTime.timeZone() != context.zone) |
| 249 | 508 | zone = QStringLiteral(" (%1–%2 %3)") | |
| 250 |
3/3✓ Branch 201 → 202 taken 254 times.
✓ Branch 202 → 203 taken 254 times.
✓ Branch 203 → 204 taken 254 times.
|
762 | .arg(locale.toString(from.dateTime.time(), QStringLiteral("HH:mm")), |
| 251 |
4/4✓ Branch 194 → 195 taken 254 times.
✓ Branch 195 → 196 taken 254 times.
✓ Branch 196 → 197 taken 254 times.
✓ Branch 197 → 198 taken 254 times.
|
508 | locale.toString(to.dateTime.toTimeZone(from.dateTime.timeZone()).time(), QStringLiteral("HH:mm")), |
| 252 |
3/3✓ Branch 188 → 189 taken 254 times.
✓ Branch 189 → 190 taken 254 times.
✓ Branch 190 → 191 taken 254 times.
|
762 | QString::fromUtf8(from.dateTime.timeZone().id())); |
| 253 |
3/4✓ Branch 220 → 221 taken 257 times.
✓ Branch 221 → 222 taken 257 times.
✓ Branch 223 → 224 taken 257 times.
✗ Branch 223 → 255 not taken.
|
257 | if (a.date() == b.date()) |
| 254 |
1/1✓ Branch 224 → 225 taken 257 times.
|
257 | return tr("%1 %2–%3") |
| 255 |
3/3✓ Branch 238 → 239 taken 257 times.
✓ Branch 239 → 240 taken 257 times.
✓ Branch 240 → 241 taken 257 times.
|
771 | .arg(locale.toString(a.date(), QStringLiteral("ddd d MMM yyyy")), |
| 256 |
4/4✓ Branch 228 → 229 taken 257 times.
✓ Branch 229 → 230 taken 257 times.
✓ Branch 233 → 234 taken 257 times.
✓ Branch 234 → 235 taken 257 times.
|
771 | locale.toString(a.time(), QStringLiteral("HH:mm")), locale.toString(b.time(), QStringLiteral("HH:mm"))) + |
| 257 |
1/1✓ Branch 241 → 242 taken 257 times.
|
257 | zone; |
| 258 | ✗ | return tr("%1 – %2").arg(dateTimeText(start, context), dateTimeText(end, context)); | |
| 259 | 263 | } | |
| 260 | ✗ | if (from.valid()) | |
| 261 | ✗ | return tr("Starts %1").arg(dateTimeText(start, context)); | |
| 262 | ✗ | if (to.valid()) | |
| 263 | ✗ | return tr("Due %1").arg(dateTimeText(end, context)); | |
| 264 | 1578 | } | |
| 265 | 413 | QStringList parts; | |
| 266 |
2/2✓ Branch 329 → 316 taken 1036 times.
✓ Branch 329 → 330 taken 413 times.
|
1449 | for (const Merge::Item *item : members) { |
| 267 |
1/1✓ Branch 317 → 318 taken 1036 times.
|
1036 | const QString text = value(plan, *item, side, context); |
| 268 |
6/6✓ Branch 319 → 320 taken 625 times.
✓ Branch 319 → 323 taken 411 times.
✓ Branch 321 → 322 taken 592 times.
✓ Branch 321 → 323 taken 33 times.
✓ Branch 324 → 325 taken 592 times.
✓ Branch 324 → 326 taken 444 times.
|
1036 | if (!text.isEmpty() && !parts.contains(text)) |
| 269 |
1/1✓ Branch 325 → 326 taken 592 times.
|
592 | parts.append(text); |
| 270 | 1036 | } | |
| 271 |
1/1✓ Branch 333 → 334 taken 413 times.
|
413 | return parts.join(QStringLiteral(" · ")); |
| 272 | 679 | } | |
| 273 | |||
| 274 | 304 | QString ConflictValueText::componentLabel(const Merge::Plan &plan, const Merge::Item &item, const Context &context) { | |
| 275 |
6/6✓ Branch 4 → 5 taken 147 times.
✓ Branch 4 → 8 taken 157 times.
✓ Branch 7 → 8 taken 12 times.
✓ Branch 7 → 9 taken 135 times.
✓ Branch 10 → 11 taken 169 times.
✓ Branch 10 → 12 taken 135 times.
|
304 | if (plan.domain == QLatin1String("sieve") || plan.domain == QLatin1String("settings")) |
| 276 | 169 | return label(plan, item); | |
| 277 |
2/2✓ Branch 13 → 14 taken 50 times.
✓ Branch 13 → 39 taken 85 times.
|
135 | if (!item.context.isEmpty()) { |
| 278 |
2/2✓ Branch 17 → 18 taken 50 times.
✓ Branch 21 → 22 taken 50 times.
|
150 | const QString date = dateTimeText(QStringLiteral("RECURRENCE-ID:") + item.context.section(QLatin1Char(':'), -1), |
| 279 |
1/1✓ Branch 22 → 23 taken 50 times.
|
50 | context); |
| 280 |
3/3✓ Branch 27 → 28 taken 50 times.
✓ Branch 32 → 33 taken 50 times.
✓ Branch 33 → 34 taken 50 times.
|
100 | return tr("Occurrence %1").arg(date.section(QLatin1Char(' '), 0, 3)); |
| 281 | 50 | } | |
| 282 |
2/4✗ Branch 41 → 42 not taken.
✓ Branch 41 → 43 taken 85 times.
✗ Branch 42 → 44 not taken.
✓ Branch 43 → 44 taken 85 times.
|
85 | return item.name == QLatin1String("VTODO") ? tr("Task") : tr("Appointment"); |
| 283 | } | ||
| 284 | |||
| 285 | 4388 | QString ConflictValueText::value(const Merge::Plan &plan, const Merge::Item &item, Side side, const Context &context) { | |
| 286 | 4388 | const Merge::Value &v = valueOf(item, side); | |
| 287 |
2/2✓ Branch 3 → 4 taken 510 times.
✓ Branch 3 → 5 taken 3878 times.
|
4388 | if (!v.present) |
| 288 | 510 | return {}; | |
| 289 | // ─── settings ─── | ||
| 290 |
2/2✓ Branch 7 → 8 taken 137 times.
✓ Branch 7 → 313 taken 3741 times.
|
3878 | if (plan.domain == QLatin1String("settings")) { |
| 291 |
2/2✓ Branch 10 → 11 taken 11 times.
✓ Branch 10 → 16 taken 126 times.
|
137 | if (item.name == QLatin1String("hiddenFolders")) |
| 292 |
2/2✓ Branch 11 → 12 taken 11 times.
✓ Branch 13 → 14 taken 11 times.
|
22 | return tr("Hidden: %1").arg(item.context); |
| 293 |
2/2✓ Branch 18 → 19 taken 15 times.
✓ Branch 18 → 131 taken 111 times.
|
126 | if (item.name == QLatin1String("davAccounts")) { |
| 294 |
2/2✓ Branch 19 → 20 taken 15 times.
✓ Branch 20 → 21 taken 15 times.
|
15 | const QJsonDocument json = QJsonDocument::fromJson(v.text.toUtf8()); |
| 295 |
3/3✓ Branch 22 → 23 taken 15 times.
✓ Branch 23 → 24 taken 6 times.
✓ Branch 23 → 57 taken 9 times.
|
15 | if (json.isArray()) { |
| 296 | 6 | QStringList names; | |
| 297 |
6/6✓ Branch 24 → 25 taken 6 times.
✓ Branch 25 → 26 taken 6 times.
✓ Branch 26 → 27 taken 6 times.
✓ Branch 29 → 30 taken 6 times.
✓ Branch 41 → 28 taken 6 times.
✓ Branch 41 → 42 taken 6 times.
|
12 | for (const QJsonValue &entry : json.array()) |
| 298 |
3/3✓ Branch 30 → 31 taken 6 times.
✓ Branch 34 → 35 taken 6 times.
✓ Branch 35 → 36 taken 6 times.
|
18 | names.append(entry.toString().section(QLatin1Char('/'), -2, -2)); |
| 299 |
4/12✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 6 times.
✗ Branch 45 → 50 not taken.
✓ Branch 49 → 50 taken 6 times.
✓ Branch 51 → 52 taken 6 times.
✗ Branch 51 → 53 not taken.
✓ Branch 53 → 54 taken 6 times.
✗ Branch 53 → 55 not taken.
✗ Branch 949 → 950 not taken.
✗ Branch 949 → 951 not taken.
✗ Branch 953 → 954 not taken.
✗ Branch 953 → 955 not taken.
|
12 | return names.isEmpty() ? tr("None") : names.join(QStringLiteral(", ")); |
| 300 | 6 | } | |
| 301 |
1/1✓ Branch 57 → 58 taken 9 times.
|
9 | const QJsonObject object = json.object(); |
| 302 |
3/3✓ Branch 61 → 62 taken 9 times.
✓ Branch 64 → 65 taken 6 times.
✓ Branch 64 → 105 taken 3 times.
|
9 | if (object.contains(QStringLiteral("selected"))) { |
| 303 | 6 | QStringList names; | |
| 304 |
7/7✓ Branch 68 → 69 taken 6 times.
✓ Branch 69 → 70 taken 6 times.
✓ Branch 73 → 74 taken 6 times.
✓ Branch 74 → 75 taken 6 times.
✓ Branch 77 → 78 taken 6 times.
✓ Branch 89 → 76 taken 6 times.
✓ Branch 89 → 90 taken 6 times.
|
12 | for (const QJsonValue &entry : object.value(QStringLiteral("selected")).toArray()) |
| 305 |
3/3✓ Branch 78 → 79 taken 6 times.
✓ Branch 82 → 83 taken 6 times.
✓ Branch 83 → 84 taken 6 times.
|
18 | names.append(entry.toString().section(QLatin1Char('/'), -2, -2)); |
| 306 |
4/12✗ Branch 92 → 93 not taken.
✓ Branch 92 → 94 taken 6 times.
✗ Branch 93 → 98 not taken.
✓ Branch 97 → 98 taken 6 times.
✓ Branch 99 → 100 taken 6 times.
✗ Branch 99 → 101 not taken.
✓ Branch 101 → 102 taken 6 times.
✗ Branch 101 → 103 not taken.
✗ Branch 991 → 992 not taken.
✗ Branch 991 → 993 not taken.
✗ Branch 995 → 996 not taken.
✗ Branch 995 → 997 not taken.
|
12 | return names.isEmpty() ? tr("None") : names.join(QStringLiteral(", ")); |
| 307 | 6 | } | |
| 308 |
3/3✓ Branch 105 → 106 taken 3 times.
✓ Branch 114 → 115 taken 3 times.
✓ Branch 115 → 116 taken 3 times.
|
12 | return tr("%1 at %2").arg(object.value(QStringLiteral("username")).toString(), |
| 309 |
3/3✓ Branch 109 → 110 taken 3 times.
✓ Branch 110 → 111 taken 3 times.
✓ Branch 116 → 117 taken 3 times.
|
9 | object.value(QStringLiteral("serverUrl")).toString()); |
| 310 | 15 | } | |
| 311 |
2/2✓ Branch 133 → 134 taken 50 times.
✓ Branch 133 → 145 taken 61 times.
|
111 | if (item.context == QLatin1String("defaultView")) |
| 312 |
2/2✓ Branch 136 → 137 taken 2 times.
✓ Branch 136 → 138 taken 48 times.
|
50 | return v.text == QLatin1String("html") ? tr("Original layout") |
| 313 |
2/2✓ Branch 140 → 141 taken 24 times.
✓ Branch 140 → 142 taken 24 times.
|
98 | : v.text == QLatin1String("light") ? tr("Simple layout") |
| 314 |
3/3✓ Branch 137 → 143 taken 2 times.
✓ Branch 141 → 143 taken 24 times.
✓ Branch 142 → 143 taken 24 times.
|
50 | : tr("Plain text"); |
| 315 |
2/2✓ Branch 147 → 148 taken 6 times.
✓ Branch 147 → 167 taken 55 times.
|
61 | if (item.context == QLatin1String("language")) |
| 316 |
0/2✗ Branch 1041 → 1042 not taken.
✗ Branch 1041 → 1043 not taken.
|
12 | return v.text == QLatin1String("de") ? QStringLiteral("Deutsch") |
| 317 |
6/8✓ Branch 156 → 157 taken 2 times.
✓ Branch 156 → 160 taken 2 times.
✓ Branch 162 → 163 taken 2 times.
✓ Branch 162 → 164 taken 4 times.
✓ Branch 164 → 165 taken 2 times.
✓ Branch 164 → 166 taken 4 times.
✗ Branch 1036 → 1037 not taken.
✗ Branch 1036 → 1038 not taken.
|
10 | : v.text == QLatin1String("en") ? QStringLiteral("English") |
| 318 |
3/3✓ Branch 150 → 151 taken 2 times.
✓ Branch 150 → 154 taken 4 times.
✓ Branch 160 → 161 taken 2 times.
|
12 | : tr("System language"); |
| 319 | // Sprint 108: an address's name and signatures, a template's name, | ||
| 320 | // subject and beginning — in words, not JSON. | ||
| 321 |
3/6✓ Branch 169 → 170 taken 55 times.
✗ Branch 169 → 173 not taken.
✗ Branch 172 → 173 not taken.
✓ Branch 172 → 174 taken 55 times.
✗ Branch 175 → 176 not taken.
✓ Branch 175 → 304 taken 55 times.
|
55 | if (item.name == QLatin1String("identities") || item.name == QLatin1String("templates")) { |
| 322 | ✗ | const QJsonObject object = QJsonDocument::fromJson(v.text.toUtf8()).object(); | |
| 323 | ✗ | if (item.name == QLatin1String("templates")) | |
| 324 | ✗ | return tr("%1 · %2 · %3") | |
| 325 | ✗ | .arg(object.value(QStringLiteral("name")).toString(), object.value(QStringLiteral("subject")).toString(), | |
| 326 | ✗ | shortText(object.value(QStringLiteral("text")).toString(), 120)); | |
| 327 | ✗ | QStringList signatures; | |
| 328 | ✗ | for (const QJsonValue &entry : object.value(QStringLiteral("signatures")).toArray()) { | |
| 329 | ✗ | const QJsonObject signature = entry.toObject(); | |
| 330 | ✗ | signatures.append(tr("%1: %2").arg(signature.value(QStringLiteral("name")).toString(), | |
| 331 | ✗ | shortText(signature.value(QStringLiteral("text")).toString(), 80))); | |
| 332 | ✗ | } | |
| 333 | ✗ | return tr("Name “%1”").arg(object.value(QStringLiteral("name")).toString()) + | |
| 334 | ✗ | (signatures.isEmpty() ? tr(" · no signature") : QStringLiteral(" · ") + signatures.join(QStringLiteral(" · "))); | |
| 335 | ✗ | } | |
| 336 |
2/2✓ Branch 306 → 307 taken 41 times.
✓ Branch 306 → 312 taken 14 times.
|
55 | if (item.name == QLatin1String("folderIcons")) |
| 337 |
2/2✓ Branch 307 → 308 taken 41 times.
✓ Branch 309 → 310 taken 41 times.
|
82 | return tr("Icon “%1”").arg(v.text); |
| 338 | 14 | return v.text; | |
| 339 | } | ||
| 340 | // ─── Sieve ─── | ||
| 341 |
2/2✓ Branch 315 → 316 taken 419 times.
✓ Branch 315 → 390 taken 3322 times.
|
3741 | if (plan.domain == QLatin1String("sieve")) { |
| 342 |
2/2✓ Branch 316 → 317 taken 42 times.
✓ Branch 316 → 354 taken 377 times.
|
419 | if (item.kind == Merge::Kind::Order) { |
| 343 | 42 | QStringList names; | |
| 344 |
5/5✓ Branch 320 → 321 taken 42 times.
✓ Branch 321 → 322 taken 42 times.
✓ Branch 322 → 323 taken 42 times.
✓ Branch 343 → 324 taken 168 times.
✓ Branch 343 → 344 taken 42 times.
|
210 | for (const QString &key : v.text.split(QLatin1Char('\n'), Qt::SkipEmptyParts)) { |
| 345 |
2/2✓ Branch 328 → 329 taken 168 times.
✓ Branch 332 → 333 taken 168 times.
|
336 | const QString name = key.section(QLatin1Char(':'), 2).section(QLatin1Char('#'), 0, 0); |
| 346 |
4/4✓ Branch 335 → 336 taken 42 times.
✓ Branch 335 → 337 taken 126 times.
✓ Branch 336 → 338 taken 42 times.
✓ Branch 338 → 339 taken 168 times.
|
168 | names.append(name.isEmpty() ? tr("(unnamed)") : name); |
| 347 | 210 | } | |
| 348 |
1/1✓ Branch 348 → 349 taken 42 times.
|
42 | return names.join(QStringLiteral(" → ")); |
| 349 | 42 | } | |
| 350 |
1/2✗ Branch 354 → 355 not taken.
✓ Branch 354 → 360 taken 377 times.
|
377 | if (item.kind == Merge::Kind::Text) |
| 351 | ✗ | return shortText(v.text, 200); | |
| 352 |
2/2✓ Branch 360 → 361 taken 377 times.
✓ Branch 361 → 362 taken 377 times.
|
377 | const Sieve::Document document = Sieve::decode(v.text.toUtf8()); |
| 353 |
2/2✓ Branch 381 → 365 taken 377 times.
✓ Branch 381 → 382 taken 12 times.
|
389 | for (const Sieve::Block &block : document.blocks) { |
| 354 |
2/2✓ Branch 366 → 367 taken 329 times.
✓ Branch 366 → 376 taken 48 times.
|
377 | if (block.kind == Sieve::BlockKind::Rule) |
| 355 |
3/5✓ Branch 367 → 368 taken 329 times.
✓ Branch 368 → 369 taken 329 times.
✗ Branch 368 → 370 not taken.
✗ Branch 370 → 371 not taken.
✓ Branch 371 → 372 taken 329 times.
|
329 | return (block.rule.enabled ? QString() : tr("Off · ")) + RuleSentence::sentence(block.rule); |
| 356 |
2/2✓ Branch 376 → 377 taken 36 times.
✓ Branch 376 → 379 taken 12 times.
|
48 | if (block.kind == Sieve::BlockKind::Vacation) |
| 357 |
1/1✓ Branch 377 → 378 taken 36 times.
|
36 | return RuleSentence::vacationSummary(block.vacation); |
| 358 | } | ||
| 359 |
2/2✓ Branch 382 → 384 taken 12 times.
✓ Branch 384 → 385 taken 12 times.
|
12 | return shortText(v.text.trimmed()); |
| 360 | 377 | } | |
| 361 | // ─── iCalendar / vCard ─── | ||
| 362 |
2/2✓ Branch 392 → 393 taken 6 times.
✓ Branch 392 → 398 taken 3316 times.
|
3322 | if (item.id == QLatin1String("raw")) |
| 363 |
1/1✓ Branch 394 → 395 taken 6 times.
|
6 | return shortText(v.text, 200); |
| 364 |
2/2✓ Branch 398 → 399 taken 9 times.
✓ Branch 398 → 410 taken 3307 times.
|
3316 | if (item.kind == Merge::Kind::Text) |
| 365 |
5/5✓ Branch 399 → 400 taken 3 times.
✓ Branch 399 → 401 taken 6 times.
✓ Branch 401 → 402 taken 3 times.
✓ Branch 401 → 403 taken 3 times.
✓ Branch 406 → 407 taken 9 times.
|
9 | return shortText(side == Side::Local ? item.localPlain : side == Side::Server ? item.serverPlain : item.basePlain); |
| 366 |
4/4✓ Branch 410 → 411 taken 3286 times.
✓ Branch 410 → 412 taken 21 times.
✓ Branch 411 → 412 taken 12 times.
✓ Branch 411 → 490 taken 3274 times.
|
3307 | if (item.kind == Merge::Kind::Component || item.kind == Merge::Kind::Deletion) { |
| 367 |
1/1✓ Branch 412 → 413 taken 33 times.
|
33 | const ICal::Component component = ICal::parseFirst(v.text, item.name); |
| 368 |
2/2✓ Branch 416 → 417 taken 33 times.
✓ Branch 417 → 418 taken 33 times.
|
33 | const QString summary = ICal::unescapeText(component.value(QStringLiteral("SUMMARY"))); |
| 369 |
1/1✓ Branch 424 → 425 taken 33 times.
|
33 | const ICal::Property *start = component.property(QStringLiteral("DTSTART")); |
| 370 |
1/1✓ Branch 430 → 431 taken 33 times.
|
33 | const ICal::Property *end = component.property(QStringLiteral("DTEND")); |
| 371 | 33 | QString when; | |
| 372 |
2/4✓ Branch 433 → 434 taken 33 times.
✗ Branch 433 → 461 not taken.
✓ Branch 434 → 435 taken 33 times.
✗ Branch 434 → 461 not taken.
|
33 | if (start && end) { |
| 373 | 33 | Merge::Item s, e; | |
| 374 | 33 | s.name = QStringLiteral("DTSTART"); | |
| 375 | 33 | s.local = {true, start->contentLine()}; | |
| 376 | 33 | e.name = QStringLiteral("DTEND"); | |
| 377 | 33 | e.local = {true, end->contentLine()}; | |
| 378 |
2/2✓ Branch 453 → 454 taken 33 times.
✓ Branch 454 → 455 taken 33 times.
|
33 | when = groupValue(plan, {&s, &e}, Side::Local, context); |
| 379 |
0/2✗ Branch 461 → 462 not taken.
✗ Branch 461 → 468 not taken.
|
33 | } else if (start) { |
| 380 | ✗ | when = dateTimeText(start->contentLine(), context); | |
| 381 | } | ||
| 382 |
7/18✗ Branch 469 → 470 not taken.
✓ Branch 469 → 471 taken 33 times.
✗ Branch 472 → 473 not taken.
✓ Branch 472 → 474 taken 33 times.
✓ Branch 477 → 478 taken 33 times.
✓ Branch 478 → 479 taken 33 times.
✓ Branch 480 → 481 taken 33 times.
✗ Branch 480 → 482 not taken.
✓ Branch 482 → 483 taken 33 times.
✗ Branch 482 → 484 not taken.
✓ Branch 484 → 485 taken 33 times.
✗ Branch 484 → 486 not taken.
✗ Branch 1288 → 1289 not taken.
✗ Branch 1288 → 1290 not taken.
✗ Branch 1292 → 1293 not taken.
✗ Branch 1292 → 1294 not taken.
✗ Branch 1296 → 1297 not taken.
✗ Branch 1296 → 1298 not taken.
|
66 | return when.isEmpty() ? summary : summary.isEmpty() ? when : summary + QStringLiteral(" · ") + when; |
| 383 | 33 | } | |
| 384 | 3274 | const QString name = item.name; | |
| 385 |
2/2✓ Branch 493 → 494 taken 88 times.
✓ Branch 493 → 550 taken 3186 times.
|
3274 | if (name == QLatin1String("BEGIN:VALARM")) { |
| 386 |
1/1✓ Branch 497 → 498 taken 88 times.
|
88 | const ICal::Component alarm = ICal::parseFirst(v.text, QStringLiteral("VALARM")); |
| 387 |
1/1✓ Branch 503 → 504 taken 88 times.
|
88 | const ICal::Property *trigger = alarm.property(QStringLiteral("TRIGGER")); |
| 388 | 88 | bool ok = false; | |
| 389 |
2/3✓ Branch 506 → 507 taken 88 times.
✗ Branch 506 → 509 not taken.
✓ Branch 507 → 508 taken 88 times.
|
88 | const int minutes = trigger ? durationMinutes(trigger->value, &ok) : 0; |
| 390 |
1/2✗ Branch 510 → 511 not taken.
✓ Branch 510 → 513 taken 88 times.
|
88 | if (!trigger) |
| 391 | ✗ | return tr("Reminder"); | |
| 392 |
2/2✓ Branch 513 → 514 taken 4 times.
✓ Branch 513 → 524 taken 84 times.
|
88 | if (!ok) |
| 393 |
4/4✓ Branch 514 → 515 taken 4 times.
✓ Branch 516 → 517 taken 4 times.
✓ Branch 517 → 518 taken 4 times.
✓ Branch 518 → 519 taken 4 times.
|
8 | return tr("Reminder at %1").arg(dateTimeText(trigger->contentLine(), context)); |
| 394 | 84 | const int before = -minutes; | |
| 395 |
2/2✓ Branch 524 → 525 taken 3 times.
✓ Branch 524 → 527 taken 81 times.
|
84 | if (before == 0) |
| 396 |
1/1✓ Branch 525 → 526 taken 3 times.
|
3 | return tr("At the start"); |
| 397 | // English has no catalogue: the singular is its own source text. | ||
| 398 |
4/4✓ Branch 527 → 528 taken 77 times.
✓ Branch 527 → 533 taken 4 times.
✓ Branch 528 → 529 taken 3 times.
✓ Branch 528 → 533 taken 74 times.
|
81 | if (before > 0 && before % (24 * 60) == 0) |
| 399 |
2/4✓ Branch 529 → 530 taken 3 times.
✗ Branch 529 → 531 not taken.
✓ Branch 530 → 532 taken 3 times.
✗ Branch 531 → 532 not taken.
|
3 | return before == 24 * 60 ? tr("1 day before") : tr("%n days before", "", before / (24 * 60)); |
| 400 |
4/4✓ Branch 533 → 534 taken 74 times.
✓ Branch 533 → 539 taken 4 times.
✓ Branch 534 → 535 taken 22 times.
✓ Branch 534 → 539 taken 52 times.
|
78 | if (before > 0 && before % 60 == 0) |
| 401 |
4/4✓ Branch 535 → 536 taken 18 times.
✓ Branch 535 → 537 taken 4 times.
✓ Branch 536 → 538 taken 18 times.
✓ Branch 537 → 538 taken 4 times.
|
22 | return before == 60 ? tr("1 hour before") : tr("%n hours before", "", before / 60); |
| 402 |
2/2✓ Branch 539 → 540 taken 52 times.
✓ Branch 539 → 544 taken 4 times.
|
56 | if (before > 0) |
| 403 |
2/4✗ Branch 540 → 541 not taken.
✓ Branch 540 → 542 taken 52 times.
✗ Branch 541 → 543 not taken.
✓ Branch 542 → 543 taken 52 times.
|
52 | return before == 1 ? tr("1 minute before") : tr("%n minutes before", "", before); |
| 404 |
2/4✗ Branch 544 → 545 not taken.
✓ Branch 544 → 546 taken 4 times.
✗ Branch 545 → 547 not taken.
✓ Branch 546 → 547 taken 4 times.
|
4 | return before == -1 ? tr("1 minute after") : tr("%n minutes after", "", -before); |
| 405 | 88 | } | |
| 406 |
2/2✓ Branch 550 → 551 taken 3186 times.
✓ Branch 551 → 552 taken 3186 times.
|
3186 | const ICal::Property property = propertyOf(firstLine(v.text)); |
| 407 |
2/2✓ Branch 554 → 555 taken 125 times.
✓ Branch 554 → 560 taken 3061 times.
|
3186 | if (property.name.isEmpty()) |
| 408 |
1/1✓ Branch 556 → 557 taken 125 times.
|
125 | return shortText(v.text); |
| 409 |
1/1✓ Branch 560 → 561 taken 3061 times.
|
3061 | const QString base = VCardCodec::baseName(property); |
| 410 |
1/1✓ Branch 561 → 562 taken 3061 times.
|
3061 | const QString raw = ICal::unescapeText(property.value); |
| 411 |
6/6✓ Branch 567 → 568 taken 2748 times.
✓ Branch 567 → 580 taken 143 times.
✓ Branch 570 → 571 taken 2691 times.
✓ Branch 570 → 580 taken 57 times.
✓ Branch 573 → 574 taken 2671 times.
✓ Branch 573 → 580 taken 20 times.
|
8643 | if (base == QLatin1String("DTSTART") || base == QLatin1String("DTEND") || base == QLatin1String("DUE") || |
| 412 |
8/8✓ Branch 564 → 565 taken 2891 times.
✓ Branch 564 → 580 taken 170 times.
✓ Branch 576 → 577 taken 2653 times.
✓ Branch 576 → 580 taken 18 times.
✓ Branch 579 → 580 taken 44 times.
✓ Branch 579 → 581 taken 2609 times.
✓ Branch 582 → 583 taken 452 times.
✓ Branch 582 → 588 taken 2609 times.
|
8643 | base == QLatin1String("COMPLETED") || base == QLatin1String("RDATE") || base == QLatin1String("EXDATE")) |
| 413 |
2/2✓ Branch 583 → 584 taken 452 times.
✓ Branch 584 → 585 taken 452 times.
|
452 | return dateTimeText(firstLine(v.text), context); |
| 414 |
2/2✓ Branch 590 → 591 taken 24 times.
✓ Branch 590 → 603 taken 2585 times.
|
2609 | if (base == QLatin1String("RRULE")) { |
| 415 |
1/1✓ Branch 591 → 592 taken 24 times.
|
24 | const RecurrenceRule rule = RecurrenceRule::parse(property.value); |
| 416 |
1/1✓ Branch 593 → 594 taken 24 times.
|
24 | const QString described = describeRecurrence(rule, QDateTime()); |
| 417 |
1/2✗ Branch 596 → 597 not taken.
✓ Branch 596 → 598 taken 24 times.
|
24 | return described.isEmpty() ? raw : described; |
| 418 | 24 | } | |
| 419 |
2/2✓ Branch 605 → 606 taken 3 times.
✓ Branch 605 → 614 taken 2582 times.
|
2585 | if (base == QLatin1String("DURATION")) { |
| 420 | 3 | bool ok = false; | |
| 421 |
1/1✓ Branch 606 → 607 taken 3 times.
|
3 | const int minutes = durationMinutes(property.value, &ok); |
| 422 |
3/6✗ Branch 607 → 608 not taken.
✓ Branch 607 → 609 taken 3 times.
✗ Branch 609 → 610 not taken.
✓ Branch 609 → 611 taken 3 times.
✗ Branch 610 → 612 not taken.
✓ Branch 611 → 612 taken 3 times.
|
3 | return !ok ? raw : minutes == 1 ? tr("1 minute") : tr("%n minutes", "", minutes); |
| 423 | } | ||
| 424 |
6/6✓ Branch 616 → 617 taken 2419 times.
✓ Branch 616 → 620 taken 163 times.
✓ Branch 619 → 620 taken 6 times.
✓ Branch 619 → 621 taken 2413 times.
✓ Branch 622 → 623 taken 169 times.
✓ Branch 622 → 678 taken 2413 times.
|
2582 | if (base == QLatin1String("ATTENDEE") || base == QLatin1String("ORGANIZER")) { |
| 425 |
2/7✓ Branch 626 → 627 taken 169 times.
✓ Branch 638 → 639 taken 169 times.
✗ Branch 638 → 640 not taken.
✗ Branch 1351 → 1352 not taken.
✗ Branch 1351 → 1353 not taken.
✗ Branch 1355 → 1356 not taken.
✗ Branch 1355 → 1357 not taken.
|
507 | const QString who = property.hasParameter(QStringLiteral("CN")) ? property.parameter(QStringLiteral("CN")) |
| 426 |
3/6✓ Branch 627 → 628 taken 169 times.
✗ Branch 627 → 632 not taken.
✓ Branch 631 → 636 taken 169 times.
✗ Branch 635 → 636 not taken.
✓ Branch 636 → 637 taken 169 times.
✗ Branch 636 → 638 not taken.
|
338 | : raw.section(QLatin1Char(':'), 1); |
| 427 |
2/2✓ Branch 645 → 646 taken 169 times.
✓ Branch 646 → 647 taken 169 times.
|
169 | const QString partstat = property.parameter(QStringLiteral("PARTSTAT")).toUpper(); |
| 428 |
2/2✓ Branch 652 → 653 taken 75 times.
✓ Branch 652 → 654 taken 94 times.
|
169 | const QString answer = partstat == QLatin1String("ACCEPTED") ? tr("accepted") |
| 429 |
2/2✓ Branch 656 → 657 taken 8 times.
✓ Branch 656 → 658 taken 86 times.
|
94 | : partstat == QLatin1String("DECLINED") ? tr("declined") |
| 430 |
2/2✓ Branch 660 → 661 taken 2 times.
✓ Branch 660 → 662 taken 84 times.
|
86 | : partstat == QLatin1String("TENTATIVE") ? tr("maybe") |
| 431 |
2/2✓ Branch 663 → 664 taken 6 times.
✓ Branch 663 → 665 taken 78 times.
|
84 | : partstat.isEmpty() ? QString() |
| 432 |
4/4✓ Branch 653 → 666 taken 75 times.
✓ Branch 657 → 666 taken 8 times.
✓ Branch 661 → 666 taken 2 times.
✓ Branch 665 → 666 taken 78 times.
|
169 | : tr("no answer yet"); |
| 433 |
6/8✓ Branch 667 → 668 taken 6 times.
✓ Branch 667 → 669 taken 163 times.
✓ Branch 669 → 670 taken 163 times.
✓ Branch 670 → 671 taken 163 times.
✓ Branch 672 → 673 taken 163 times.
✓ Branch 672 → 674 taken 6 times.
✗ Branch 1377 → 1378 not taken.
✗ Branch 1377 → 1379 not taken.
|
169 | return answer.isEmpty() ? who : tr("%1 (%2)").arg(who, answer); |
| 434 | 169 | } | |
| 435 |
2/2✓ Branch 680 → 681 taken 78 times.
✓ Branch 680 → 710 taken 2335 times.
|
2413 | if (base == QLatin1String("STATUS")) { |
| 436 |
1/1✓ Branch 681 → 682 taken 78 times.
|
78 | const QString status = raw.toUpper(); |
| 437 |
2/2✓ Branch 684 → 685 taken 20 times.
✓ Branch 684 → 686 taken 58 times.
|
78 | return status == QLatin1String("COMPLETED") ? tr("Done") |
| 438 |
2/2✓ Branch 688 → 689 taken 20 times.
✓ Branch 688 → 690 taken 38 times.
|
58 | : status == QLatin1String("IN-PROCESS") ? tr("In progress") |
| 439 |
2/2✓ Branch 692 → 693 taken 2 times.
✓ Branch 692 → 694 taken 36 times.
|
38 | : status == QLatin1String("CANCELLED") ? tr("Cancelled") |
| 440 |
2/2✓ Branch 696 → 697 taken 32 times.
✓ Branch 696 → 698 taken 4 times.
|
36 | : status == QLatin1String("NEEDS-ACTION") ? tr("Open") |
| 441 |
2/2✓ Branch 700 → 701 taken 2 times.
✓ Branch 700 → 702 taken 2 times.
|
4 | : status == QLatin1String("CONFIRMED") ? tr("Confirmed") |
| 442 |
1/2✓ Branch 704 → 705 taken 2 times.
✗ Branch 704 → 706 not taken.
|
2 | : status == QLatin1String("TENTATIVE") ? tr("Tentative") |
| 443 |
6/6✓ Branch 685 → 707 taken 20 times.
✓ Branch 689 → 707 taken 20 times.
✓ Branch 693 → 707 taken 2 times.
✓ Branch 697 → 707 taken 32 times.
✓ Branch 701 → 707 taken 2 times.
✓ Branch 705 → 707 taken 2 times.
|
78 | : raw; |
| 444 | 78 | } | |
| 445 |
2/2✓ Branch 712 → 713 taken 30 times.
✓ Branch 712 → 719 taken 2305 times.
|
2335 | if (base == QLatin1String("PERCENT-COMPLETE")) |
| 446 |
3/3✓ Branch 713 → 714 taken 30 times.
✓ Branch 715 → 716 taken 30 times.
✓ Branch 716 → 717 taken 30 times.
|
60 | return tr("%1 %").arg(raw.toInt()); |
| 447 |
2/2✓ Branch 721 → 722 taken 30 times.
✓ Branch 721 → 731 taken 2275 times.
|
2305 | if (base == QLatin1String("PRIORITY")) { |
| 448 |
1/1✓ Branch 722 → 723 taken 30 times.
|
30 | const int priority = raw.toInt(); |
| 449 |
8/10✗ Branch 723 → 724 not taken.
✓ Branch 723 → 725 taken 30 times.
✗ Branch 724 → 730 not taken.
✓ Branch 725 → 726 taken 10 times.
✓ Branch 725 → 727 taken 20 times.
✓ Branch 726 → 730 taken 10 times.
✓ Branch 727 → 728 taken 10 times.
✓ Branch 727 → 729 taken 10 times.
✓ Branch 728 → 730 taken 10 times.
✓ Branch 729 → 730 taken 10 times.
|
30 | return priority == 0 ? tr("None") : priority <= 4 ? tr("High") : priority == 5 ? tr("Normal") : tr("Low"); |
| 450 | } | ||
| 451 |
2/2✓ Branch 733 → 734 taken 47 times.
✓ Branch 733 → 748 taken 2228 times.
|
2275 | if (base == QLatin1String("RELATED-TO")) { |
| 452 |
6/8✓ Branch 735 → 736 taken 11 times.
✓ Branch 735 → 738 taken 36 times.
✓ Branch 736 → 737 taken 11 times.
✓ Branch 737 → 739 taken 11 times.
✓ Branch 739 → 740 taken 11 times.
✓ Branch 739 → 741 taken 36 times.
✗ Branch 1401 → 1402 not taken.
✗ Branch 1401 → 1403 not taken.
|
47 | const QString title = context.taskTitle ? context.taskTitle(raw.trimmed()) : QString(); |
| 453 |
2/2✓ Branch 742 → 743 taken 43 times.
✓ Branch 742 → 744 taken 4 times.
|
47 | return title.isEmpty() ? raw : title; |
| 454 | 47 | } | |
| 455 |
2/2✓ Branch 750 → 751 taken 47 times.
✓ Branch 750 → 785 taken 2181 times.
|
2228 | if (base == QLatin1String("RELATED")) { |
| 456 |
6/8✓ Branch 752 → 753 taken 11 times.
✓ Branch 752 → 755 taken 36 times.
✓ Branch 753 → 754 taken 11 times.
✓ Branch 754 → 756 taken 11 times.
✓ Branch 756 → 757 taken 11 times.
✓ Branch 756 → 758 taken 36 times.
✗ Branch 1406 → 1407 not taken.
✗ Branch 1406 → 1408 not taken.
|
47 | const QString who = context.contactName ? context.contactName(raw.trimmed()) : QString(); |
| 457 |
1/1✓ Branch 761 → 762 taken 47 times.
|
47 | const QString type = property.parameter(QStringLiteral("TYPE")); |
| 458 |
7/14✓ Branch 765 → 766 taken 43 times.
✓ Branch 765 → 767 taken 4 times.
✗ Branch 769 → 770 not taken.
✓ Branch 769 → 771 taken 47 times.
✓ Branch 774 → 775 taken 47 times.
✓ Branch 775 → 776 taken 47 times.
✓ Branch 778 → 779 taken 47 times.
✗ Branch 778 → 780 not taken.
✓ Branch 780 → 781 taken 47 times.
✗ Branch 780 → 782 not taken.
✗ Branch 1418 → 1419 not taken.
✗ Branch 1418 → 1420 not taken.
✗ Branch 1422 → 1423 not taken.
✗ Branch 1422 → 1424 not taken.
|
94 | return (type.isEmpty() ? QString() : type + QStringLiteral(": ")) + (who.isEmpty() ? raw : who); |
| 459 | 47 | } | |
| 460 |
2/2✓ Branch 787 → 788 taken 62 times.
✓ Branch 787 → 798 taken 2119 times.
|
2181 | if (base == QLatin1String("PHOTO")) |
| 461 |
2/4✓ Branch 789 → 790 taken 62 times.
✓ Branch 791 → 792 taken 14 times.
✗ Branch 1433 → 1434 not taken.
✗ Branch 1433 → 1435 not taken.
|
138 | return property.value.startsWith(QLatin1String("http"), Qt::CaseInsensitive) ? tr("Picture at %1").arg(property.value) |
| 462 |
6/6✓ Branch 790 → 791 taken 14 times.
✓ Branch 790 → 794 taken 48 times.
✓ Branch 793 → 795 taken 14 times.
✓ Branch 794 → 795 taken 48 times.
✓ Branch 795 → 796 taken 14 times.
✓ Branch 795 → 797 taken 48 times.
|
76 | : tr("Picture"); |
| 463 |
2/2✓ Branch 800 → 801 taken 48 times.
✓ Branch 800 → 831 taken 2071 times.
|
2119 | if (base == QLatin1String("N")) { |
| 464 |
1/1✓ Branch 804 → 805 taken 48 times.
|
48 | const QStringList parts = raw.split(QLatin1Char(';')); |
| 465 |
2/4✓ Branch 827 → 828 taken 240 times.
✓ Branch 827 → 829 taken 48 times.
✗ Branch 1458 → 1459 not taken.
✗ Branch 1458 → 1460 not taken.
|
288 | return QStringList{parts.value(3), parts.value(1), parts.value(2), parts.value(0), parts.value(4)} |
| 466 |
2/2✓ Branch 815 → 816 taken 48 times.
✓ Branch 816 → 817 taken 48 times.
|
96 | .filter(QRegularExpression(QStringLiteral("\\S"))) |
| 467 |
1/1✓ Branch 819 → 820 taken 48 times.
|
48 | .join(QLatin1Char(' ')); |
| 468 | 48 | } | |
| 469 |
2/2✓ Branch 833 → 834 taken 41 times.
✓ Branch 833 → 850 taken 2030 times.
|
2071 | if (base == QLatin1String("ADR")) { |
| 470 |
1/1✓ Branch 837 → 838 taken 41 times.
|
41 | QStringList parts = raw.split(QLatin1Char(';')); |
| 471 |
1/1✓ Branch 839 → 840 taken 41 times.
|
41 | parts.removeAll(QString()); |
| 472 |
1/1✓ Branch 844 → 845 taken 41 times.
|
41 | return parts.join(QStringLiteral(", ")); |
| 473 | 41 | } | |
| 474 |
8/8✓ Branch 852 → 853 taken 1875 times.
✓ Branch 852 → 862 taken 155 times.
✓ Branch 855 → 856 taken 1708 times.
✓ Branch 855 → 862 taken 167 times.
✓ Branch 858 → 859 taken 1655 times.
✓ Branch 858 → 862 taken 53 times.
✓ Branch 861 → 862 taken 29 times.
✓ Branch 861 → 863 taken 1626 times.
|
3685 | if (base == QLatin1String("TEL") || base == QLatin1String("EMAIL") || base == QLatin1String("URL") || |
| 475 |
2/2✓ Branch 864 → 865 taken 404 times.
✓ Branch 864 → 883 taken 1626 times.
|
3685 | base == QLatin1String("IMPP")) { |
| 476 |
2/2✓ Branch 868 → 869 taken 404 times.
✓ Branch 869 → 870 taken 404 times.
|
404 | const QString type = property.parameter(QStringLiteral("TYPE")).toLower(); |
| 477 |
6/8✓ Branch 874 → 875 taken 82 times.
✓ Branch 874 → 876 taken 322 times.
✓ Branch 876 → 877 taken 322 times.
✓ Branch 877 → 878 taken 322 times.
✓ Branch 879 → 880 taken 322 times.
✓ Branch 879 → 881 taken 82 times.
✗ Branch 1496 → 1497 not taken.
✗ Branch 1496 → 1498 not taken.
|
404 | return type.isEmpty() ? raw : tr("%1 (%2)").arg(raw, type); |
| 478 | 404 | } | |
| 479 |
2/2✓ Branch 885 → 886 taken 143 times.
✓ Branch 885 → 896 taken 1483 times.
|
1626 | if (base == QLatin1String("CATEGORIES")) |
| 480 |
2/2✓ Branch 886 → 887 taken 143 times.
✓ Branch 890 → 891 taken 143 times.
|
286 | return ICal::splitValues(property.value).join(QStringLiteral(", ")); |
| 481 |
2/2✓ Branch 898 → 899 taken 6 times.
✓ Branch 898 → 915 taken 1477 times.
|
1483 | if (base == QLatin1String("CLASS")) |
| 482 |
10/12✓ Branch 900 → 901 taken 6 times.
✓ Branch 902 → 903 taken 2 times.
✓ Branch 902 → 904 taken 4 times.
✓ Branch 903 → 910 taken 2 times.
✓ Branch 905 → 906 taken 4 times.
✓ Branch 907 → 908 taken 2 times.
✓ Branch 907 → 909 taken 2 times.
✓ Branch 908 → 910 taken 2 times.
✓ Branch 911 → 912 taken 4 times.
✓ Branch 911 → 913 taken 2 times.
✗ Branch 1512 → 1513 not taken.
✗ Branch 1512 → 1514 not taken.
|
6 | return raw.toUpper() == QLatin1String("PRIVATE") ? tr("Private") : raw.toUpper() == QLatin1String("PUBLIC") ? tr("Public") : raw; |
| 483 |
1/1✓ Branch 916 → 917 taken 1477 times.
|
1477 | return shortText(raw); |
| 484 | 3388 | } | |
| 485 | |||
| 486 | 17 | QString ConflictValueText::problemText(const QString &rule) { | |
| 487 |
2/2✓ Branch 4 → 5 taken 6 times.
✓ Branch 4 → 6 taken 11 times.
|
17 | if (rule == QLatin1String("end-before-start")) |
| 488 | 6 | return tr("The end is before the start."); | |
| 489 |
2/2✓ Branch 8 → 9 taken 1 time.
✓ Branch 8 → 10 taken 10 times.
|
11 | if (rule == QLatin1String("due-before-start")) |
| 490 | 1 | return tr("The task is due before it starts."); | |
| 491 |
2/2✓ Branch 12 → 13 taken 1 time.
✓ Branch 12 → 14 taken 9 times.
|
10 | if (rule == QLatin1String("end-and-duration")) |
| 492 | 1 | return tr("An end and a duration cannot both be kept."); | |
| 493 |
2/2✓ Branch 16 → 17 taken 1 time.
✓ Branch 16 → 18 taken 8 times.
|
9 | if (rule == QLatin1String("task-completion")) |
| 494 | 1 | return tr("Done, progress and completion date do not agree."); | |
| 495 |
2/2✓ Branch 20 → 21 taken 1 time.
✓ Branch 20 → 22 taken 7 times.
|
8 | if (rule == QLatin1String("exdate-without-recurrence")) |
| 496 | 1 | return tr("Dates are left out of a series that no longer repeats."); | |
| 497 |
2/2✓ Branch 24 → 25 taken 1 time.
✓ Branch 24 → 26 taken 6 times.
|
7 | if (rule == QLatin1String("occurrence-moved-and-cancelled")) |
| 498 | 1 | return tr("An occurrence would be both changed and left out of the series."); | |
| 499 |
2/2✓ Branch 28 → 29 taken 1 time.
✓ Branch 28 → 30 taken 5 times.
|
6 | if (rule == QLatin1String("contact-without-name")) |
| 500 | 1 | return tr("A contact needs a name."); | |
| 501 |
2/2✓ Branch 32 → 33 taken 1 time.
✓ Branch 32 → 34 taken 4 times.
|
5 | if (rule == QLatin1String("unreadable-result")) |
| 502 | 1 | return tr("The result cannot be read. Check the text."); | |
| 503 |
2/2✓ Branch 36 → 37 taken 1 time.
✓ Branch 36 → 38 taken 3 times.
|
4 | if (rule == QLatin1String("uid-changed")) |
| 504 | 1 | return tr("The result must keep its UID line."); | |
| 505 |
2/2✓ Branch 40 → 41 taken 1 time.
✓ Branch 40 → 42 taken 2 times.
|
3 | if (rule == QLatin1String("script-does-not-parse")) |
| 506 | 1 | return tr("The combined rules are not a valid script."); | |
| 507 |
2/2✓ Branch 44 → 45 taken 1 time.
✓ Branch 44 → 46 taken 1 time.
|
2 | if (rule == QLatin1String("calendars-without-account")) |
| 508 | 1 | return tr("Calendars of an account that is not kept."); | |
| 509 | 1 | return rule; | |
| 510 | } | ||
| 511 |