7 #include "placeholderpath.h"
9 #include "ekos/scheduler/schedulerjob.h"
10 #include "sequencejob.h"
15 #include <QStringList>
22 PlaceholderPath::PlaceholderPath(
QString seqFilename):
25 {FRAME_LIGHT,
"Light"},
31 m_seqFilename(seqFilename)
35 PlaceholderPath::PlaceholderPath():
40 PlaceholderPath::~PlaceholderPath()
46 job->setCoreProperty(SequenceJob::SJ_TargetName, targetName);
48 auto frameType = getFrameType(job->getFrameType());
49 auto filterType = job->getCoreProperty(SequenceJob::SJ_Filter).toString();
50 auto exposure = job->getCoreProperty(SequenceJob::SJ_Exposure).toDouble();
51 auto rawPrefix = job->getCoreProperty(SequenceJob::SJ_RawPrefix).toString();
52 auto filterEnabled = job->getCoreProperty(SequenceJob::SJ_FilterPrefixEnabled).toBool();
53 auto expEnabled = job->getCoreProperty(SequenceJob::SJ_ExpPrefixEnabled).toBool();
55 const auto isDarkFlat = job->getCoreProperty(SequenceJob::SJ_DarkFlat).toBool();
58 frameType =
"DarkFlat";
70 if (targetName.
isEmpty() ==
false && rawPrefix.isEmpty())
71 rawPrefix = targetName;
74 QString imagePrefix = rawPrefix;
76 if (imagePrefix.
isEmpty() ==
false)
79 imagePrefix += frameType;
81 if (filterEnabled && filterType.isEmpty() ==
false &&
82 (job->getFrameType() == FRAME_LIGHT || job->getFrameType() == FRAME_FLAT || job->getFrameType() == FRAME_NONE || isDarkFlat))
86 imagePrefix += filterType;
97 double fractpart, intpart;
98 fractpart = std::modf(exposure, &intpart);
103 else if (exposure >= 1e-3)
113 job->setCoreProperty(SequenceJob::SJ_FullPrefix, imagePrefix);
123 if ((job->getFrameType() == FRAME_LIGHT || job->getFrameType() == FRAME_FLAT || job->getFrameType() == FRAME_NONE || isDarkFlat)
124 && filterType.isEmpty() ==
false)
127 job->setCoreProperty(SequenceJob::SJ_DirectoryPostfix, directoryPostfix);
133 job->setCoreProperty(SequenceJob::SJ_TargetName, targetName);
135 auto frameType = job->getFrameType();
136 auto frameTypeString = getFrameType(job->getFrameType());
137 const auto rawPrefix = job->getCoreProperty(SequenceJob::SJ_RawPrefix).toString();
138 QString imagePrefix = rawPrefix;
141 const auto isDarkFlat = job->getCoreProperty(SequenceJob::SJ_DarkFlat).toBool();
143 frameTypeString =
"DarkFlat";
150 imagePrefix = targetName;
153 constructPrefix(job, imagePrefix);
155 job->setCoreProperty(SequenceJob::SJ_FullPrefix, imagePrefix);
159 const auto filterName = job->getCoreProperty(SequenceJob::SJ_Filter).toString();
168 if ((frameType == FRAME_LIGHT || frameType == FRAME_FLAT || frameType == FRAME_NONE || isDarkFlat)
169 && filterName.isEmpty() ==
false)
172 job->setCoreProperty(SequenceJob::SJ_DirectoryPostfix, directoryPostfix);
177 CCDFrameType frameType = job->getFrameType();
178 auto filter = job->getCoreProperty(SequenceJob::SJ_Filter).toString();
179 auto rawPrefix = job->getCoreProperty(SequenceJob::SJ_RawPrefix).toString();
180 auto filterEnabled = job->getCoreProperty(SequenceJob::SJ_FilterPrefixEnabled).toBool();
181 auto expEnabled = job->getCoreProperty(SequenceJob::SJ_ExpPrefixEnabled).toBool();
182 auto tsEnabled = job->getCoreProperty(SequenceJob::SJ_TimeStampPrefixEnabled).toBool();
184 double exposure = job->getCoreProperty(SequenceJob::SJ_Exposure).toDouble();
186 if (imagePrefix.
isEmpty() ==
false)
189 const auto isDarkFlat = job->getCoreProperty(SequenceJob::SJ_DarkFlat).toBool();
191 imagePrefix += isDarkFlat ?
"DarkFlat" : CCDFrameTypeNames[frameType];
193 if (filterEnabled &&
filter.isEmpty() ==
false &&
194 (frameType == FRAME_LIGHT ||
195 frameType == FRAME_FLAT ||
196 frameType == FRAME_NONE ||
206 double exposureValue = job->getCoreProperty(SequenceJob::SJ_Exposure).toDouble();
209 if (exposureValue ==
static_cast<int>(exposureValue))
215 if (exposure >= 0.001)
223 imagePrefix += SequenceJob::ISOMarker;
227 void PlaceholderPath::generateFilenameOld(
const QString &format,
bool batch_mode,
QString *filename,
233 currentDir = fitsDir.
isEmpty() ? Options::fitsDir() : fitsDir;
242 if (currentDir.
endsWith(
'/') ==
false)
252 QString finalPrefix = seqPrefix;
253 finalPrefix.
replace(
"ISO8601", ts);
254 *filename = currentDir + finalPrefix +
258 *filename = currentDir + seqPrefix + (seqPrefix.
isEmpty() ?
"" :
"_") +
262 void PlaceholderPath::generateFilename(
266 auto filter = job.getCoreProperty(SequenceJob::SJ_Filter).toString();
267 auto rawPrefix = job.getCoreProperty(SequenceJob::SJ_RawPrefix).toString();
268 auto filterEnabled = job.getCoreProperty(SequenceJob::SJ_FilterPrefixEnabled).toBool();
269 auto expEnabled = job.getCoreProperty(SequenceJob::SJ_ExpPrefixEnabled).toBool();
270 auto tsEnabled = job.getCoreProperty(SequenceJob::SJ_TimeStampPrefixEnabled).toBool();
271 auto darkFlat = job.getCoreProperty(SequenceJob::SJ_DarkFlat).toBool();
274 generateFilename(format, rawPrefix, filterEnabled, expEnabled,
275 tsEnabled, darkFlat, filter, job.getFrameType(), job.getCoreProperty(SequenceJob::SJ_Exposure).toDouble(),
276 targetName, batch_mode, nextSequenceID, extension, filename);
279 void PlaceholderPath::generateFilename(
QString format,
bool tsEnabled,
bool batch_mode,
280 int nextSequenceID,
const QString &extension,
QString *filename)
const
282 generateFilename(format, m_RawPrefix, m_filterPrefixEnabled, m_expPrefixEnabled,
283 tsEnabled, m_DarkFlat, m_filter, m_frameType, m_exposure, m_targetName, batch_mode,
284 nextSequenceID, extension, filename);
287 void PlaceholderPath::generateFilename(
288 QString format,
QString rawFilePrefix,
bool filterEnabled,
bool exposureEnabled,
289 bool tsEnabled,
bool isDarkFlat,
QString filter, CCDFrameType frameType,
double exposure,
QString targetName,
290 bool batch_mode,
int nextSequenceID,
const QString &extension,
QString *filename)
const
302 currentDir = m_seqFilename.path().
isEmpty() ? Options::fitsDir() : currentDir;
309 if (currentDir.
endsWith(
'/') ==
true)
313 format = currentDir +
"/" + format.
section(
"/", -1);
316 QRegularExpression re(
"(?<replace>\\%(?<name>[f,D,T,e,F,t,d,p,s])(?<level>\\d+)?)(?<sep>[_/])?");
317 while ((i = format.
indexOf(re, i, &match)) != -1)
320 if (
match.captured(
"name") ==
"f")
322 replacement = m_seqFilename.baseName();
324 else if (
match.captured(
"name") ==
"D")
331 else if (
match.captured(
"name") ==
"T")
334 replacement =
"DarkFlat";
336 replacement = getFrameType(frameType);
338 else if (
match.captured(
"name") ==
"e")
342 double fractpart, intpart;
343 fractpart = std::modf(exposure, &intpart);
348 else if (exposure >= 1e-3)
358 else if (
match.captured(
"name") ==
"F")
363 if (filterEnabled &&
filter.isEmpty() ==
false
364 && (frameType == FRAME_LIGHT
365 || frameType == FRAME_FLAT
366 || frameType == FRAME_NONE
375 if (
filter.isEmpty() ==
false
376 && (frameType == FRAME_LIGHT
377 || frameType == FRAME_FLAT
378 || frameType == FRAME_NONE
385 else if (
match.captured(
"name") ==
"t")
390 replacement = targetName;
395 replacement = rawFilePrefix;
398 replacement = targetName;
402 else if (
match.captured(
"name") ==
"d" ||
match.captured(
"name") ==
"p")
405 if (!
match.captured(
"level").isEmpty())
410 for (
int j = 0; j <
level; ++j)
414 if (
match.captured(
"name") ==
"d")
416 replacement =
dir.dir().dirName();
418 else if (
match.captured(
"name") ==
"p")
420 replacement =
dir.path();
423 else if (
match.captured(
"name") ==
"s")
426 if (!
match.captured(
"level").isEmpty())
430 replacement =
QString(
"%1").
arg(nextSequenceID, level, 10,
QChar(
'0'));
434 qWarning() <<
"Unknown replacement string: " <<
match.captured(
"replace");
438 format = format.
replace(
match.capturedStart(),
match.capturedLength(), replacement);
442 format = format.
replace(
match.capturedStart(
"replace"),
match.capturedLength(
"replace"), replacement);
444 i += replacement.
length();
446 *filename = format + extension;
449 void PlaceholderPath::setGenerateFilenameSettings(
const SequenceJob &job)
451 m_frameType = job.getFrameType();
452 m_RawPrefix = job.getCoreProperty(SequenceJob::SJ_RawPrefix).toString();
453 m_filterPrefixEnabled = job.getCoreProperty(SequenceJob::SJ_FilterPrefixEnabled).toBool();
454 m_expPrefixEnabled = job.getCoreProperty(SequenceJob::SJ_ExpPrefixEnabled).toBool();
455 m_filter = job.getCoreProperty(SequenceJob::SJ_Filter).toString();
456 m_exposure = job.getCoreProperty(SequenceJob::SJ_Exposure).toDouble();
457 m_targetName = job.getCoreProperty(SequenceJob::SJ_TargetName).toString();
458 m_DarkFlat = job.getCoreProperty(SequenceJob::SJ_DarkFlat).toBool();
467 while ((i = filename.
indexOf(re, i, &match)) != -1)
469 if (
match.hasMatch())
473 i +=
match.capturedLength(
"replace");