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 "rawimage.h"
|
||||||
#include "loadrunable.h"
|
#include "loadrunable.h"
|
||||||
#include <fitsio2.h>
|
#include <fitsio2.h>
|
||||||
|
#include "libXISF/libxisf.h"
|
||||||
|
|
||||||
namespace Script
|
namespace Script
|
||||||
{
|
{
|
||||||
@@ -15,8 +16,8 @@ ScriptEngine::ScriptEngine(QObject *parent) : QObject(parent)
|
|||||||
, _database(new Database(this))
|
, _database(new Database(this))
|
||||||
, _pool(new QThreadPool(this))
|
, _pool(new QThreadPool(this))
|
||||||
{
|
{
|
||||||
QJSValue engine = _jsEngine->newQObject(this);
|
QJSValue core = _jsEngine->newQObject(this);
|
||||||
_jsEngine->globalObject().setProperty("engine", engine);
|
_jsEngine->globalObject().setProperty("core", core);
|
||||||
QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject);
|
QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject);
|
||||||
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
|
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
|
||||||
_database->init(QLatin1String("scriptengine"));
|
_database->init(QLatin1String("scriptengine"));
|
||||||
@@ -432,6 +433,34 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
|
|||||||
|
|
||||||
return status == 0;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user