Log error messages when JSON parsing fails
This commit is contained in:
parent
f82126df45
commit
7b440f38a4
2 changed files with 46 additions and 28 deletions
|
@ -138,6 +138,7 @@ public:
|
||||||
static int getNumMetatilesTotal();
|
static int getNumMetatilesTotal();
|
||||||
static int getNumPalettesPrimary();
|
static int getNumPalettesPrimary();
|
||||||
static int getNumPalettesTotal();
|
static int getNumPalettesTotal();
|
||||||
|
static bool tryParseJsonFile(QJsonDocument *out, QString filepath);
|
||||||
private:
|
private:
|
||||||
void updateMapLayout(Map*);
|
void updateMapLayout(Map*);
|
||||||
void readCDefinesSorted(QString, QStringList, QStringList*);
|
void readCDefinesSorted(QString, QStringList, QStringList*);
|
||||||
|
|
|
@ -185,14 +185,12 @@ bool Project::loadMapData(Map* map) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map->name);
|
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map->name);
|
||||||
QFile mapFile(mapFilepath);
|
QJsonDocument mapDoc;
|
||||||
if (!mapFile.open(QIODevice::ReadOnly)) {
|
if (!tryParseJsonFile(&mapDoc, mapFilepath)) {
|
||||||
logError(QString("Error: Could not open %1 for reading").arg(mapFilepath));
|
logError(QString("Failed to read map data from %1").arg(mapFilepath));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray mapData = mapFile.readAll();
|
|
||||||
QJsonDocument mapDoc = QJsonDocument::fromJson(mapData);
|
|
||||||
QJsonObject mapObj = mapDoc.object();
|
QJsonObject mapObj = mapDoc.object();
|
||||||
|
|
||||||
map->song = mapObj["music"].toString();
|
map->song = mapObj["music"].toString();
|
||||||
|
@ -383,14 +381,12 @@ QString Project::readMapLayoutId(QString map_name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map_name);
|
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map_name);
|
||||||
QFile mapFile(mapFilepath);
|
QJsonDocument mapDoc;
|
||||||
if (!mapFile.open(QIODevice::ReadOnly)) {
|
if (!tryParseJsonFile(&mapDoc, mapFilepath)) {
|
||||||
logError(QString("Error: Could not open %1 for reading").arg(mapFilepath));
|
logError(QString("Failed to read map layout id from %1").arg(mapFilepath));
|
||||||
return QString::null;
|
return QString::null;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray mapData = mapFile.readAll();
|
|
||||||
QJsonDocument mapDoc = QJsonDocument::fromJson(mapData);
|
|
||||||
QJsonObject mapObj = mapDoc.object();
|
QJsonObject mapObj = mapDoc.object();
|
||||||
return mapObj["layout"].toString();
|
return mapObj["layout"].toString();
|
||||||
}
|
}
|
||||||
|
@ -401,14 +397,12 @@ QString Project::readMapLocation(QString map_name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map_name);
|
QString mapFilepath = QString("%1/data/maps/%2/map.json").arg(root).arg(map_name);
|
||||||
QFile mapFile(mapFilepath);
|
QJsonDocument mapDoc;
|
||||||
if (!mapFile.open(QIODevice::ReadOnly)) {
|
if (!tryParseJsonFile(&mapDoc, mapFilepath)) {
|
||||||
logError(QString("Error: Could not open %1 for reading").arg(mapFilepath));
|
logError(QString("Failed to read map's region map section from %1").arg(mapFilepath));
|
||||||
return QString::null;
|
return QString::null;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray mapData = mapFile.readAll();
|
|
||||||
QJsonDocument mapDoc = QJsonDocument::fromJson(mapData);
|
|
||||||
QJsonObject mapObj = mapDoc.object();
|
QJsonObject mapObj = mapDoc.object();
|
||||||
return mapObj["region_map_section"].toString();
|
return mapObj["region_map_section"].toString();
|
||||||
}
|
}
|
||||||
|
@ -454,14 +448,12 @@ void Project::readMapLayouts() {
|
||||||
mapLayoutsTable.clear();
|
mapLayoutsTable.clear();
|
||||||
|
|
||||||
QString layoutsFilepath = QString("%1/data/layouts/layouts.json").arg(root);
|
QString layoutsFilepath = QString("%1/data/layouts/layouts.json").arg(root);
|
||||||
QFile layoutsFile(layoutsFilepath);
|
QJsonDocument layoutsDoc;
|
||||||
if (!layoutsFile.open(QIODevice::ReadOnly)) {
|
if (!tryParseJsonFile(&layoutsDoc, layoutsFilepath)) {
|
||||||
logError(QString("Error: Could not open %1 for reading").arg(layoutsFilepath));
|
logError(QString("Failed to read map layouts from %1").arg(layoutsFilepath));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray layoutsData = layoutsFile.readAll();
|
|
||||||
QJsonDocument layoutsDoc = QJsonDocument::fromJson(layoutsData);
|
|
||||||
QJsonObject layoutsObj = layoutsDoc.object();
|
QJsonObject layoutsObj = layoutsDoc.object();
|
||||||
layoutsLabel = layoutsObj["layouts_table_label"].toString();
|
layoutsLabel = layoutsObj["layouts_table_label"].toString();
|
||||||
|
|
||||||
|
@ -869,15 +861,20 @@ void Project::saveMap(Map *map) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append to "layouts" array in data/layouts/layouts.json.
|
|
||||||
QString layoutsFilepath = QString("%1/data/layouts/layouts.json").arg(root);
|
QString layoutsFilepath = QString("%1/data/layouts/layouts.json").arg(root);
|
||||||
|
QJsonDocument layoutsDoc;
|
||||||
|
if (!tryParseJsonFile(&layoutsDoc, layoutsFilepath)) {
|
||||||
|
logError(QString("Failed to read map layouts from %1").arg(layoutsFilepath));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QFile layoutsFile(layoutsFilepath);
|
QFile layoutsFile(layoutsFilepath);
|
||||||
if (!layoutsFile.open(QIODevice::ReadWrite)) {
|
if (!layoutsFile.open(QIODevice::ReadWrite)) {
|
||||||
logError(QString("Error: Could not open %1 for read/write").arg(layoutsFilepath));
|
logError(QString("Error: Could not open %1 for read/write").arg(layoutsFilepath));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QByteArray layoutsData = layoutsFile.readAll();
|
|
||||||
QJsonDocument layoutsDoc = QJsonDocument::fromJson(layoutsData);
|
// Append to "layouts" array in data/layouts/layouts.json.
|
||||||
QJsonObject layoutsObj = layoutsDoc.object();
|
QJsonObject layoutsObj = layoutsDoc.object();
|
||||||
QJsonArray layoutsArr = layoutsObj["layouts"].toArray();
|
QJsonArray layoutsArr = layoutsObj["layouts"].toArray();
|
||||||
QJsonObject newLayoutObj;
|
QJsonObject newLayoutObj;
|
||||||
|
@ -891,6 +888,7 @@ void Project::saveMap(Map *map) {
|
||||||
newLayoutObj["blockdata_filepath"] = map->layout->blockdata_path;
|
newLayoutObj["blockdata_filepath"] = map->layout->blockdata_path;
|
||||||
layoutsArr.append(newLayoutObj);
|
layoutsArr.append(newLayoutObj);
|
||||||
layoutsFile.write(layoutsDoc.toJson());
|
layoutsFile.write(layoutsDoc.toJson());
|
||||||
|
layoutsFile.close();
|
||||||
|
|
||||||
// Create map.json for map data.
|
// Create map.json for map data.
|
||||||
QString mapFilepath = QString("%1/map.json").arg(mapDataDir);
|
QString mapFilepath = QString("%1/map.json").arg(mapDataDir);
|
||||||
|
@ -1001,6 +999,7 @@ void Project::saveMap(Map *map) {
|
||||||
|
|
||||||
QJsonDocument mapDoc(mapObj);
|
QJsonDocument mapDoc(mapObj);
|
||||||
mapFile.write(mapDoc.toJson());
|
mapFile.write(mapDoc.toJson());
|
||||||
|
mapFile.close();
|
||||||
|
|
||||||
saveLayoutBorder(map);
|
saveLayoutBorder(map);
|
||||||
saveLayoutBlockdata(map);
|
saveLayoutBlockdata(map);
|
||||||
|
@ -1270,14 +1269,12 @@ void Project::deleteFile(QString path) {
|
||||||
|
|
||||||
void Project::readMapGroups() {
|
void Project::readMapGroups() {
|
||||||
QString mapGroupsFilepath = QString("%1/data/maps/map_groups.json").arg(root);
|
QString mapGroupsFilepath = QString("%1/data/maps/map_groups.json").arg(root);
|
||||||
QFile mapGroupsFile(mapGroupsFilepath);
|
QJsonDocument mapGroupsDoc;
|
||||||
if (!mapGroupsFile.open(QIODevice::ReadOnly)) {
|
if (!tryParseJsonFile(&mapGroupsDoc, mapGroupsFilepath)) {
|
||||||
logError(QString("Error: Could not open %1 for reading").arg(mapGroupsFilepath));
|
logError(QString("Failed to read map groups from %1").arg(mapGroupsFilepath));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray mapGroupsData = mapGroupsFile.readAll();
|
|
||||||
QJsonDocument mapGroupsDoc = QJsonDocument::fromJson(mapGroupsData);
|
|
||||||
QJsonObject mapGroupsObj = mapGroupsDoc.object();
|
QJsonObject mapGroupsObj = mapGroupsDoc.object();
|
||||||
QJsonArray mapGroupOrder = mapGroupsObj["group_order"].toArray();
|
QJsonArray mapGroupOrder = mapGroupsObj["group_order"].toArray();
|
||||||
|
|
||||||
|
@ -1857,3 +1854,23 @@ int Project::getNumPalettesTotal()
|
||||||
{
|
{
|
||||||
return Project::num_pals_total;
|
return Project::num_pals_total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Project::tryParseJsonFile(QJsonDocument *out, QString filepath)
|
||||||
|
{
|
||||||
|
QFile file(filepath);
|
||||||
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
|
logError(QString("Error: Could not open %1 for reading").arg(filepath));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray data = file.readAll();
|
||||||
|
QJsonParseError parseError;
|
||||||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &parseError);
|
||||||
|
file.close();
|
||||||
|
if (parseError.error != QJsonParseError::NoError) {
|
||||||
|
logError(QString("Error: Failed to parse json file %1: %2").arg(filepath).arg(parseError.errorString()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out = jsonDoc;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue