Handle MAX_PATH every where

This commit is contained in:
2025-01-26 15:54:28 +01:00
parent fc36024eee
commit 0ff2001797
4 changed files with 40 additions and 11 deletions
+22 -5
View File
@@ -15,8 +15,23 @@
#include "starfit.h" #include "starfit.h"
#include <lcms2.h> #include <lcms2.h>
QString makeMaxPath(QString path)
{
#ifdef Q_OS_WIN64
if(!path.startsWith("\\\\?\\"))
{
QFileInfo info(path);
path = info.absoluteFilePath();
path = QDir::toNativeSeparators(path);
path.prepend("\\\\?\\");
qDebug() << path;
}
#endif
return path;
}
LoadRunable::LoadRunable(const QString &file, Image *receiver, AnalyzeLevel level, bool thumbnail) : LoadRunable::LoadRunable(const QString &file, Image *receiver, AnalyzeLevel level, bool thumbnail) :
m_file(file), m_file(makeMaxPath(file)),
m_receiver(receiver), m_receiver(receiver),
m_analyzeLevel(level), m_analyzeLevel(level),
m_thumbnail(thumbnail) m_thumbnail(thumbnail)
@@ -451,7 +466,8 @@ bool readFITSHeader(const QString &path, ImageInfoData &info)
{ {
fitsfile *fr; fitsfile *fr;
int status = 0; int status = 0;
fits_open_diskfile(&fr, path.toLocal8Bit().data(), READONLY, &status); QString path2 = makeMaxPath(path);
fits_open_diskfile(&fr, path2.toLocal8Bit().data(), READONLY, &status);
if(fr && status == 0) if(fr && status == 0)
{ {
@@ -463,10 +479,11 @@ bool readFITSHeader(const QString &path, ImageInfoData &info)
bool readXISFHeader(const QString &path, ImageInfoData &info) bool readXISFHeader(const QString &path, ImageInfoData &info)
{ {
QString path2 = makeMaxPath(path);
try try
{ {
LibXISF::XISFReader xisf; LibXISF::XISFReader xisf;
xisf.open(path.toLocal8Bit().data()); xisf.open(path2.toLocal8Bit().data());
const LibXISF::Image &image = xisf.getImage(0, false); const LibXISF::Image &image = xisf.getImage(0, false);
auto fitskeywords = image.fitsKeywords(); auto fitskeywords = image.fitsKeywords();
@@ -532,8 +549,8 @@ bool loadImage(const QString &path, ImageInfoData &info, std::shared_ptr<RawImag
} }
ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QString &format, const ConvertParams &params, QSemaphore *semaphore) : ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QString &format, const ConvertParams &params, QSemaphore *semaphore) :
m_infile(in), m_infile(makeMaxPath(in)),
m_outfile(out), m_outfile(makeMaxPath(out)),
m_format(format), m_format(format),
m_params(params), m_params(params),
m_semaphore(semaphore) m_semaphore(semaphore)
+1
View File
@@ -8,6 +8,7 @@
class RawImage; class RawImage;
QString makeMaxPath(QString path);
bool readFITSHeader(const QString &path, ImageInfoData &info); bool readFITSHeader(const QString &path, ImageInfoData &info);
bool readXISFHeader(const QString &path, ImageInfoData &info); bool readXISFHeader(const QString &path, ImageInfoData &info);
bool loadImage(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage> &rawImage, bool planar = false); bool loadImage(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage> &rawImage, bool planar = false);
+8 -6
View File
@@ -519,7 +519,8 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
{ {
fitsfile *file; fitsfile *file;
int status = 0; int status = 0;
fits_open_diskfile(&file, _path.toLocal8Bit().data(), READWRITE, &status); QString path = makeMaxPath(_path);
fits_open_diskfile(&file, path.toLocal8Bit().data(), READWRITE, &status);
int num = 0; int num = 0;
fits_get_num_hdus(file, &num, &status); fits_get_num_hdus(file, &num, &status);
if(status) if(status)
@@ -642,9 +643,10 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
try try
{ {
LibXISF::XISFModify modifyXISF; LibXISF::XISFModify modifyXISF;
modifyXISF.open(_path.toLocal8Bit().data()); QString in = makeMaxPath(absoluteFilePath());
QFileInfo in(_path); QString out = in + "~";
QFileInfo out(_path + "~"); modifyXISF.open(in.toLocal8Bit().data());
qDebug() << "modify" << in << out;
for(auto &remove : modify->_remove) for(auto &remove : modify->_remove)
modifyXISF.removeFITSKeyword(0, remove.toStdString()); modifyXISF.removeFITSKeyword(0, remove.toStdString());
@@ -655,9 +657,9 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
for(auto &record : modify->_add) for(auto &record : modify->_add)
modifyXISF.addFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()}); modifyXISF.addFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()});
modifyXISF.save(out.absoluteFilePath().toLocal8Bit().toStdString()); modifyXISF.save(out.toLocal8Bit().toStdString());
modifyXISF.close(); modifyXISF.close();
std::filesystem::rename(out.filesystemAbsoluteFilePath(), in.filesystemAbsoluteFilePath()); std::filesystem::rename(out.toLocal8Bit().toStdString(), in.toLocal8Bit().toStdString());
return true; return true;
} }
catch(std::filesystem::filesystem_error &err) catch(std::filesystem::filesystem_error &err)
+9
View File
@@ -57,6 +57,15 @@
</screenshots> </screenshots>
<content_rating type="oars-1.1"/> <content_rating type="oars-1.1"/>
<releases> <releases>
<release version="20250126" date="2025-01-26">
<description>
<ul>
<li>Support for really big images +50000px</li>
<li>Fix handling of MAX_PATH on Windows</li>
<li>Add setting solver profile in scripts</li>
</ul>
</description>
</release>
<release version="20241116" date="2024-11-16"> <release version="20241116" date="2024-11-16">
<description> <description>
<ul> <ul>