immich improvements
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build was killed

This commit is contained in:
2026-02-02 09:23:38 +11:00
parent 3958da1983
commit 86b19d5513
13 changed files with 454 additions and 9 deletions

View File

@@ -8,6 +8,7 @@
#include <QLocale>
#include <QTime>
#include <QFileInfo>
#include <QFile>
#include <QStringList>
#include <QRegExp>
#include <iostream>
@@ -162,9 +163,47 @@ QString Overlay::getExifDate(std::string filename) {
dateTime = exif_entry_get_value(exifEntry, buf, sizeof(buf));
}
exif_data_free(exifData);
QString exifDateFormat = "yyyy:MM:dd hh:mm:ss";
QDateTime exifDateTime = QDateTime::fromString(dateTime, exifDateFormat);
return QLocale::system().toString(exifDateTime);
}
return dateTime;
QString formatted = formatExifDateString(dateTime);
if (!formatted.isEmpty())
return formatted;
QString sidecar = readSidecarExifDate(QString::fromStdString(filename));
if (!sidecar.isEmpty())
return formatExifDateString(sidecar);
return "";
}
QString Overlay::readSidecarExifDate(const QString &filePath)
{
QString sidecarPath = filePath + ".exif";
QFile file(sidecarPath);
if (!file.exists())
return "";
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return "";
QString contents = QString::fromUtf8(file.readAll()).trimmed();
file.close();
return contents;
}
QString Overlay::formatExifDateString(const QString &raw)
{
QString trimmed = raw.trimmed();
if (trimmed.isEmpty())
return "";
QDateTime parsed = QDateTime::fromString(trimmed, Qt::ISODate);
if (!parsed.isValid())
parsed = QDateTime::fromString(trimmed, Qt::ISODateWithMs);
if (!parsed.isValid())
parsed = QDateTime::fromString(trimmed, "yyyy:MM:dd hh:mm:ss");
if (!parsed.isValid())
parsed = QDateTime::fromString(trimmed, "yyyy-MM-dd hh:mm:ss");
if (parsed.isValid())
return QLocale::system().toString(parsed);
return trimmed;
}