f.replace('*', ' ');
f = f.simplified();
- if (!f.isEmpty() && f.at(0) == '.')
- f = f.mid(1).trimmed();
+ if (!f.isEmpty() && f.at(0) == '.') f = f.midRef(1).trimmed().toString();
return f;
}
}
uint DataUtils::parseIsoPeriod(const QString &isoPeriod) {
- // QTime time = QTime::fromString("1mm12car00", "PT8M50S");
- // ^P((\d+Y)?(\d+M)?(\d+W)?(\d+D)?)?(T(\d+H)?(\d+M)?(\d+S)?)?$
- /*
- QRegExp isoPeriodRE("^PT(\d+H)?(\d+M)?(\d+S)?)?$");
- if (!isoPeriodRE.indexIn(isoPeriod)) {
- qWarning() << "Cannot parse ISO period" << isoPeriod;
- continue;
- }
-
- int totalCaptures = isoPeriodRE.capturedTexts();
- for (int i = totalCaptures; i > 0; --i) {
-
- }
- */
-
uint days = 0, hours = 0, minutes = 0, seconds = 0;
- QByteArray ba = isoPeriod.toLocal8Bit();
- const char *ptr = ba.data();
-
- while (*ptr) {
- if(*ptr == 'P' || *ptr == 'T') {
- ptr++;
- continue;
+ const int len = isoPeriod.length();
+ int digitStart = -1;
+ for (int i = 0; i < len; ++i) {
+ const QChar c = isoPeriod.at(i);
+ if (c.isDigit()) {
+ if (digitStart == -1) digitStart = i;
+ } else if (digitStart != -1) {
+ if (c == 'H') {
+ hours = QStringRef(&isoPeriod, digitStart, i - digitStart).toUInt();
+ } else if (c == 'M') {
+ minutes = QStringRef(&isoPeriod, digitStart, i - digitStart).toUInt();
+ } else if (c == 'S') {
+ seconds = QStringRef(&isoPeriod, digitStart, i - digitStart).toUInt();
+ }
+ digitStart = -1;
}
-
- int value, charsRead;
- char type;
- if (sscanf(ptr, "%d%c%n", &value, &type, &charsRead) != 2)
- continue;
-
- if (type == 'D')
- days = value;
- else if (type == 'H')
- hours = value;
- else if (type == 'M')
- minutes = value;
- else if (type == 'S')
- seconds = value;
-
- ptr += charsRead;
}
uint period = ((days * 24 + hours) * 60 + minutes) * 60 + seconds;
QString s;
int f = 60;
if (seconds < f) {
- s = qApp->translate("DataUtils", "Just now");
+ s = QCoreApplication::translate("DataUtils", "Just now");
} else if (seconds < (f *= 60)) {
- s = qApp->translate("DataUtils", "%n minute(s) ago", "", seconds / 60);
+ s = QCoreApplication::translate("DataUtils", "%n minute(s) ago", Q_NULLPTR, seconds / 60);
} else if (seconds < (f *= 24)) {
- s = qApp->translate("DataUtils", "%n hour(s) ago", "", seconds / (60*60));
+ int n = seconds / (60 * 60);
+ s = QCoreApplication::translate("DataUtils", "%n hour(s) ago", Q_NULLPTR, n);
} else if (seconds < (f *= 7)) {
- s = qApp->translate("DataUtils", "%n day(s) ago", "", seconds / (60*60*24));
- } else if (seconds < (f = 60*60*24*30)) {
- s = qApp->translate("DataUtils", "%n weeks(s) ago", "", seconds / (60*60*24*7));
- } else if (seconds < (f = 60*60*24*365)) {
- s = qApp->translate("DataUtils", "%n month(s) ago", "", seconds / (60*60*24*30));
+ int n = seconds / (60 * 60 * 24);
+ s = QCoreApplication::translate("DataUtils", "%n day(s) ago", Q_NULLPTR, n);
+ } else if (seconds < (f = 60 * 60 * 24 * 30)) {
+ int n = seconds / (60 * 60 * 24 * 7);
+ s = QCoreApplication::translate("DataUtils", "%n weeks(s) ago", Q_NULLPTR, n);
+ } else if (seconds < (f = 60 * 60 * 24 * 365)) {
+ int n = seconds / (60 * 60 * 24 * 30);
+ s = QCoreApplication::translate("DataUtils", "%n month(s) ago", Q_NULLPTR, n);
} else {
s = dt.date().toString(Qt::DefaultLocaleShortDate);
}
uint minutes = d % 60;
d /= 60;
uint hours = d % 24;
- if (hours == 0)
- return res.sprintf("%d:%02d", minutes, seconds);
+ if (hours == 0) return res.sprintf("%d:%02d", minutes, seconds);
return res.sprintf("%d:%02d:%02d", hours, minutes, seconds);
}