]> git.sur5r.net Git - minitube/blob - src/datautils.cpp
11bb943e231b00c3adde1c7799c9876031a36064
[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     const char *ptr = isoPeriod.toStdString().c_str();
54     while (*ptr) {
55         if(*ptr == 'P' || *ptr == 'T') {
56             ptr++;
57             continue;
58         }
59
60         int value, charsRead;
61         char type;
62         if (sscanf(ptr, "%d%c%n", &value, &type, &charsRead) != 2)
63             continue;
64
65         if (type == 'D')
66             days = value;
67         else if (type == 'H')
68             hours = value;
69         else if (type == 'M')
70             minutes = value;
71         else if (type == 'S')
72             seconds = value;
73
74         ptr += charsRead;
75     }
76
77     uint period = ((days * 24 + hours) * 60 + minutes) * 60 + seconds;
78     return period;
79 }