]> git.sur5r.net Git - minitube/blob - src/datautils.cpp
Smart date formatting
[minitube] / src / datautils.cpp
1 #include "datautils.h"
2
3 QString DataUtils::stringToFilename(const QString &s) {
4     QString f = s;
5     f.replace('(', '[');
6     f.replace(')', ']');
7     f.replace('/', ' ');
8     f.replace('\\', ' ');
9     f.replace('<', ' ');
10     f.replace('>', ' ');
11     f.replace(':', ' ');
12     f.replace('"', ' ');
13     f.replace('|', ' ');
14     f.replace('?', ' ');
15     f.replace('*', ' ');
16     f = f.simplified();
17
18     if (!f.isEmpty() && f.at(0) == '.')
19         f = f.mid(1).trimmed();
20
21     return f;
22 }
23
24 QString DataUtils::regioneCode(const QLocale &locale) {
25     QString name = locale.name();
26     int index = name.indexOf('_');
27     if (index == -1) return QString();
28     return name.right(index);
29 }
30
31 QString DataUtils::systemRegioneCode() {
32     return regioneCode(QLocale::system());
33 }
34
35 uint DataUtils::parseIsoPeriod(const QString &isoPeriod) {
36     // QTime time = QTime::fromString("1mm12car00", "PT8M50S");
37     // ^P((\d+Y)?(\d+M)?(\d+W)?(\d+D)?)?(T(\d+H)?(\d+M)?(\d+S)?)?$
38     /*
39     QRegExp isoPeriodRE("^PT(\d+H)?(\d+M)?(\d+S)?)?$");
40     if (!isoPeriodRE.indexIn(isoPeriod)) {
41         qWarning() << "Cannot parse ISO period" << isoPeriod;
42         continue;
43     }
44
45     int totalCaptures = isoPeriodRE.capturedTexts();
46     for (int i = totalCaptures; i > 0; --i) {
47
48     }
49     */
50
51     uint days = 0, hours = 0, minutes = 0, seconds = 0;
52
53     QByteArray ba = isoPeriod.toLocal8Bit();
54     const char *ptr = ba.data();
55     
56     while (*ptr) {
57         if(*ptr == 'P' || *ptr == 'T') {
58             ptr++;
59             continue;
60         }
61
62         int value, charsRead;
63         char type;
64         if (sscanf(ptr, "%d%c%n", &value, &type, &charsRead) != 2)
65             continue;
66
67         if (type == 'D')
68             days = value;
69         else if (type == 'H')
70             hours = value;
71         else if (type == 'M')
72             minutes = value;
73         else if (type == 'S')
74             seconds = value;
75
76         ptr += charsRead;
77     }
78
79     uint period = ((days * 24 + hours) * 60 + minutes) * 60 + seconds;
80     return period;
81 }
82
83 QString DataUtils::formatDateTime(const QDateTime &dt) {
84     const qint64 seconds = dt.secsTo(QDateTime::currentDateTime());
85     QString s;
86     int f = 60;
87     if (seconds < f) {
88         s = qApp->tr("Just now");
89     } else if (seconds < (f *= 60)) {
90         s = qApp->tr("%n minute(s) ago", "", seconds / 60);
91     } else if (seconds < (f *= 24)) {
92         s = qApp->tr("%n hour(s) ago", "", seconds / (60*60));
93     } else if (seconds < (f *= 7)) {
94         s = qApp->tr("%n day(s) ago", "", seconds / (60*60*24));
95     } else if (seconds < (f = 60*60*24*30)) {
96         s = qApp->tr("%n weeks(s) ago", "", seconds / (60*60*24*7));
97     } else if (seconds < (f = 60*60*24*365)) {
98         s = qApp->tr("%n month(s) ago", "", seconds / (60*60*24*30));
99     } else {
100         s = dt.toString(Qt::DefaultLocaleShortDate);
101     }
102     return s;
103 }