| 268 | } |
| 269 | |
| 270 | QString describeRule(const QString& rrule) |
| 271 | { |
| 272 | if (rrule.trimmed().isEmpty()) |
| 273 | return QStringLiteral("Once"); |
| 274 | |
| 275 | const ParsedRule rule = parseRule(rrule); |
| 276 | if (!rule.isValid()) |
| 277 | return {}; |
| 278 | |
| 279 | switch (rule.freq) { |
| 280 | case ParsedRule::Freq::Daily: |
| 281 | return rule.interval > 1 ? QString("Every %1 days").arg(rule.interval) : "Daily"; |
| 282 | case ParsedRule::Freq::Weekly: { |
| 283 | QStringList names; |
| 284 | for (int dow : rule.weekdays) |
| 285 | names << weekdayLongName(dow); |
| 286 | const QString on = names.isEmpty() ? QString() : QString(" on %1").arg(names.join(", ")); |
| 287 | if (rule.interval > 1) |
| 288 | return QString("Every %1 weeks%2").arg(rule.interval).arg(on); |
| 289 | return QString("Weekly%1").arg(on); |
| 290 | } |
| 291 | case ParsedRule::Freq::Monthly: { |
| 292 | const QString body = QString("on the %1 %2") |
| 293 | .arg(ordinalName(rule.monthlyOrdinal)) |
| 294 | .arg(weekdayLongName(rule.monthlyWeekday)); |
| 295 | if (rule.interval > 1) |
| 296 | return QString("Every %1 months %2").arg(rule.interval).arg(body); |
| 297 | return QString("Monthly %1").arg(body); |
| 298 | } |
| 299 | case ParsedRule::Freq::Invalid: |
| 300 | break; |
| 301 | } |
| 302 | return {}; |
| 303 | } |
| 304 | |
| 305 | } // namespace NetRecurrence |
| 306 | } // namespace AetherSDR |