diff --git a/libXISF b/libXISF index 4db1d86..263b380 160000 --- a/libXISF +++ b/libXISF @@ -1 +1 @@ -Subproject commit 4db1d865305405627d9db9579cb2f1dde1cad8ed +Subproject commit 263b380dbfdb6f1cb17980ec29025616ca44e3e0 diff --git a/scriptengine.cpp b/scriptengine.cpp index 6d61640..c2dfc84 100644 --- a/scriptengine.cpp +++ b/scriptengine.cpp @@ -6,6 +6,7 @@ #include "rawimage.h" #include "loadrunable.h" #include +#include "libXISF/libxisf.h" namespace Script { @@ -15,8 +16,8 @@ ScriptEngine::ScriptEngine(QObject *parent) : QObject(parent) , _database(new Database(this)) , _pool(new QThreadPool(this)) { - QJSValue engine = _jsEngine->newQObject(this); - _jsEngine->globalObject().setProperty("engine", engine); + QJSValue core = _jsEngine->newQObject(this); + _jsEngine->globalObject().setProperty("core", core); QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject); _jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject); _database->init(QLatin1String("scriptengine")); @@ -432,6 +433,34 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify) return status == 0; } + else if(suffix() == "xisf") + { + try + { + LibXISF::XISFModify modifyXISF; + modifyXISF.open(_path.toLocal8Bit().data()); + QFileInfo in(_path); + QFileInfo out(_path + "~"); + + for(auto &remove : modify->_remove) + modifyXISF.removeFITSKeyword(0, remove.toStdString()); + + for(auto &record : modify->_update) + modifyXISF.updateFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.value.toString().toStdString()}, true); + + for(auto &record : modify->_add) + modifyXISF.addFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.value.toString().toStdString()}); + + modifyXISF.save(out.filesystemAbsoluteFilePath()); + modifyXISF.close(); + std::filesystem::rename(out.filesystemAbsoluteFilePath(), in.filesystemAbsoluteFilePath()); + } + catch(LibXISF::Error &err) + { + _engine->newMessage("Failed to modify file " + _path + " " + err.what(), true); + return false; + } + } return false; }