UI: Sort and pretty-print exported collections

This commit is contained in:
derrod
2023-03-10 23:55:42 +01:00
committed by Rodney
parent 4b062a7147
commit f55b251fa8
+39 -3
View File
@@ -397,10 +397,46 @@ void OBSBasic::on_actionExportSceneCollection_triggered()
string file = QT_TO_UTF8(exportFile);
if (!exportFile.isEmpty() && !exportFile.isNull()) {
if (QFile::exists(exportFile))
QFile::remove(exportFile);
QString inputFile = path + currentFile + ".json";
QFile::copy(path + currentFile + ".json", exportFile);
OBSDataAutoRelease collection =
obs_data_create_from_json_file(QT_TO_UTF8(inputFile));
OBSDataArrayAutoRelease sources =
obs_data_get_array(collection, "sources");
if (!sources) {
blog(LOG_WARNING,
"No sources in exported scene collection");
return;
}
obs_data_erase(collection, "sources");
// We're just using std::sort on a vector to make life easier.
vector<OBSData> sourceItems;
obs_data_array_enum(
sources,
[](obs_data_t *data, void *pVec) -> void {
auto &sourceItems =
*static_cast<vector<OBSData> *>(pVec);
sourceItems.push_back(data);
},
&sourceItems);
std::sort(sourceItems.begin(), sourceItems.end(),
[](const OBSData &a, const OBSData &b) {
return astrcmpi(obs_data_get_string(a,
"name"),
obs_data_get_string(
b, "name")) < 0;
});
OBSDataArrayAutoRelease newSources = obs_data_array_create();
for (auto &item : sourceItems)
obs_data_array_push_back(newSources, item);
obs_data_set_array(collection, "sources", newSources);
obs_data_save_json_pretty_safe(
collection, QT_TO_UTF8(exportFile), "tmp", "bak");
}
}