-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmetadatastore.cpp
70 lines (54 loc) · 1.35 KB
/
metadatastore.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "metadatastore.h"
void MetadataStore::setFile(QString filename)
{
source.setFileName(filename);
}
bool MetadataStore::fileIsNotSupported()
{
source.seek(0);
QByteArray magic = source.read(4);
if ( magic.toHex() == QByteArray("0356544d") ) {
return false;
}
return true;
}
void MetadataStore::parse()
{
bundlesList.clear();
filesList.clear();
if (source.exists()) {
source.open(QIODevice::ReadOnly);
}
else {
return;
}
if (fileIsNotSupported()) {
return;
}
source.seek(0);
QByteArray allData = source.readAll();
int startPos = 19;
for (; startPos < 22; startPos++)
if ( QChar(allData.at(startPos)).isLetterOrNumber() ) {
break;
}
QByteArray terminator;
terminator.append('\0').append('\0');
int endPos = allData.indexOf(terminator, startPos);
QByteArray textData = allData.mid(startPos, endPos - startPos);
QList<QByteArray> rawList = textData.split('\0');
QStringList fullList;
for (QByteArray item : rawList) {
fullList << QString(item);
}
for (QString item : fullList) {
if ( item.endsWith(".bundle", Qt::CaseInsensitive) ) {
bundlesList << item;
}
else {
filesList << item;
}
}
filesList.sort();
source.close();
}