Add FITSRecordModify for XISF files

This commit is contained in:
2024-06-04 16:41:25 +02:00
parent ae84cbdfe0
commit 342e5cc5db
2 changed files with 32 additions and 3 deletions
+1 -1
Submodule libXISF updated: 4db1d86530...263b380dbf
+31 -2
View File
@@ -6,6 +6,7 @@
#include "rawimage.h"
#include "loadrunable.h"
#include <fitsio2.h>
#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;
}