Workaround for CFITSIO failing to load path containing non-ASCI chars
This commit is contained in:
+49
-5
@@ -100,6 +100,28 @@ bool loadFITS(const QString path, ImageInfoData &info, std::shared_ptr<RawImage>
|
||||
};
|
||||
|
||||
fits_open_diskfile(&file, path.toLocal8Bit().data(), READONLY, &status);
|
||||
|
||||
QByteArray buffer;
|
||||
size_t bufferSize = 0;
|
||||
void *bufferPtr = nullptr;
|
||||
if(status == FILE_NOT_OPENED)
|
||||
{
|
||||
qWarning() << "Could not open file directly tring memfile workaround" << path;
|
||||
QFile fr(path);
|
||||
if(fr.open(QIODevice::ReadOnly))
|
||||
{
|
||||
buffer = fr.readAll();
|
||||
bufferSize = buffer.size();
|
||||
bufferPtr = buffer.data();
|
||||
status = 0;
|
||||
fits_open_memfile(&file, "memfile", READONLY, &bufferPtr, &bufferSize, 0, NULL, &status);
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning() << "QFile failed to open file" << path;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(status)return checkError();
|
||||
fits_get_num_hdus(file, &num, &status);
|
||||
if(status)return checkError();
|
||||
@@ -344,15 +366,37 @@ bool loadXISF(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage
|
||||
|
||||
bool readFITSHeader(const QString &path, ImageInfoData &info)
|
||||
{
|
||||
fitsfile *fr;
|
||||
fitsfile *file;
|
||||
int status = 0;
|
||||
QString path2 = makeUNCPath(path);
|
||||
fits_open_diskfile(&fr, path2.toLocal8Bit().data(), READONLY, &status);
|
||||
fits_open_diskfile(&file, path2.toLocal8Bit().data(), READONLY, &status);
|
||||
|
||||
if(fr && status == 0)
|
||||
QByteArray buffer;
|
||||
size_t bufferSize = 0;
|
||||
void *bufferPtr = nullptr;
|
||||
if(status == FILE_NOT_OPENED)
|
||||
{
|
||||
status = loadFITSHeader(fr, info);
|
||||
fits_close_file(fr, &status);
|
||||
qWarning() << "Could not open file directly tring memfile workaround" << path;
|
||||
QFile fr(path);
|
||||
if(fr.open(QIODevice::ReadOnly))
|
||||
{
|
||||
buffer = fr.readAll();
|
||||
bufferSize = buffer.size();
|
||||
bufferPtr = buffer.data();
|
||||
status = 0;
|
||||
fits_open_memfile(&file, "memfile", READONLY, &bufferPtr, &bufferSize, 0, NULL, &status);
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning() << "QFile failed to open file" << path;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(file && status == 0)
|
||||
{
|
||||
status = loadFITSHeader(file, info);
|
||||
fits_close_file(file, &status);
|
||||
}
|
||||
return status == 0;
|
||||
}
|
||||
|
||||
+26
-25
@@ -1,37 +1,38 @@
|
||||
#include "about.h"
|
||||
#include "batchprocessing.h"
|
||||
#include "filemanager.h"
|
||||
#include "histogram.h"
|
||||
#include "loadrunable.h"
|
||||
#include "mainwindow.h"
|
||||
#include <QScrollArea>
|
||||
#include "markedfiles.h"
|
||||
#include "settingsdialog.h"
|
||||
#include "statusbar.h"
|
||||
#include <QActionGroup>
|
||||
#include <QDebug>
|
||||
#include <QDesktopServices>
|
||||
#include <QDir>
|
||||
#include <QDockWidget>
|
||||
#include <QFileDialog>
|
||||
#include <QGuiApplication>
|
||||
#include <QImageReader>
|
||||
#include <QImageWriter>
|
||||
#include <QJsonDocument>
|
||||
#include <QKeyEvent>
|
||||
#include <QMenu>
|
||||
#include <QMenuBar>
|
||||
#include <QFileDialog>
|
||||
#include <QStandardPaths>
|
||||
#include <QMessageBox>
|
||||
#include <QMimeDatabase>
|
||||
#include <QNetworkReply>
|
||||
#include <QProgressDialog>
|
||||
#include <QDebug>
|
||||
#include <QDockWidget>
|
||||
#include <QActionGroup>
|
||||
#include <QScrollArea>
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
#include <QStatusBar>
|
||||
#include <QThreadPool>
|
||||
#include <QSessionManager>
|
||||
#include <QTimer>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <QSettings>
|
||||
#include <QGuiApplication>
|
||||
#include <QThreadPool>
|
||||
#include <QStatusBar>
|
||||
#include <QImageReader>
|
||||
#include <QImageWriter>
|
||||
#include <QMimeDatabase>
|
||||
#include <QDesktopServices>
|
||||
#include <QJsonDocument>
|
||||
#include <QNetworkReply>
|
||||
#include <QTimer>
|
||||
#include "loadrunable.h"
|
||||
#include "markedfiles.h"
|
||||
#include "about.h"
|
||||
#include "statusbar.h"
|
||||
#include "settingsdialog.h"
|
||||
#include "histogram.h"
|
||||
#include "batchprocessing.h"
|
||||
#include "filemanager.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
@@ -676,6 +676,27 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
|
||||
int status = 0;
|
||||
QString path = makeUNCPath(_path);
|
||||
fits_open_diskfile(&file, path.toLocal8Bit().data(), READWRITE, &status);
|
||||
QByteArray buffer;
|
||||
size_t bufferSize = 0;
|
||||
void *bufferPtr = nullptr;
|
||||
if(status == FILE_NOT_OPENED)
|
||||
{
|
||||
qWarning() << "Could not open file directly tring memfile workaround" << path;
|
||||
QFile fr(path);
|
||||
if(fr.open(QIODevice::ReadOnly))
|
||||
{
|
||||
buffer = fr.readAll();
|
||||
bufferSize = buffer.size();
|
||||
bufferPtr = buffer.data();
|
||||
status = 0;
|
||||
fits_open_memfile(&file, "memfile", READONLY, &bufferPtr, &bufferSize, 0, NULL, &status);
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning() << "QFile failed to open file" << path;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
int num = 0;
|
||||
fits_get_num_hdus(file, &num, &status);
|
||||
if(status)
|
||||
|
||||
Reference in New Issue
Block a user