Add FITSRecordModify for XISF files
This commit is contained in:
+1
-1
Submodule libXISF updated: 4db1d86530...263b380dbf
+31
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user