summaryrefslogtreecommitdiffstats
path: root/core/qthelper.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-04-29 23:10:32 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-05-13 13:52:35 -0700
commite811c7306d210af17a6571e61f23496ce91fa4bc (patch)
tree3b4f216860238a7caf094c988e678fdd191f3212 /core/qthelper.cpp
parent6618c9ebfc6a7cebbef687fcb3aa74c70f504ff2 (diff)
downloadsubsurface-e811c7306d210af17a6571e61f23496ce91fa4bc.tar.gz
Dive pictures: Convert thumbnailHash to individual files
On startup, convert an old-style thumbnailHash to individual thumbnail files. Show a modal progress bar while doing so. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/qthelper.cpp')
-rw-r--r--core/qthelper.cpp46
1 files changed, 45 insertions, 1 deletions
diff --git a/core/qthelper.cpp b/core/qthelper.cpp
index 55015d226..93c4c20f5 100644
--- a/core/qthelper.cpp
+++ b/core/qthelper.cpp
@@ -9,6 +9,7 @@
#include "divecomputer.h"
#include "time.h"
#include "gettextfromc.h"
+#include "metadata.h"
#include <sys/time.h>
#include "prefs-macros.h"
#include <QFile>
@@ -28,6 +29,7 @@
#include <QFont>
#include <QApplication>
#include <QTextDocument>
+#include <QProgressDialog> // TODO: remove with convertThumbnails()
#include <cstdarg>
#include <cstdint>
@@ -1094,18 +1096,60 @@ extern "C" char *hashfile_name_string()
return copy_qstring(hashfile_name());
}
+// During a transition period, convert old thumbnail-hashes to individual files
+// TODO: remove this code in due course
+static void convertThumbnails(const QHash <QString, QImage> &thumbnails)
+{
+ if (thumbnails.empty())
+ return;
+ // This is a singular occurrence, therefore translating the strings seems not worth it
+ QProgressDialog progress("Convert thumbnails...", "Abort", 0, thumbnails.size());
+ progress.setWindowModality(Qt::WindowModal);
+
+ int count = 0;
+ for (const QString &name: thumbnails.keys()) {
+ const QImage thumbnail = thumbnails[name];
+
+ if (thumbnail.isNull())
+ continue;
+
+ // This is duplicate code (see qt-models/divepicturemodel.cpp)
+ // Not a problem, since this routine will be removed in due course.
+ QString filename = thumbnailFileName(name);
+ if (filename.isEmpty())
+ continue;
+
+ QSaveFile file(filename);
+ if (!file.open(QIODevice::WriteOnly))
+ return;
+ QDataStream stream(&file);
+
+ quint32 type = MEDIATYPE_PICTURE;
+ stream << type;
+ stream << thumbnail;
+ file.commit();
+
+ progress.setValue(++count);
+ if (progress.wasCanceled())
+ break;
+ }
+}
+
void read_hashes()
{
QFile hashfile(hashfile_name());
- QMutexLocker locker(&hashOfMutex);
if (hashfile.open(QIODevice::ReadOnly)) {
QDataStream stream(&hashfile);
stream >> localFilenameOf;
+ QMutexLocker locker(&hashOfMutex);
stream >> hashOf;
+ locker.unlock();
QHash <QString, QImage> thumbnailCache;
stream >> thumbnailCache; // For backwards compatibility
hashfile.close();
+ convertThumbnails(thumbnailCache);
}
+ QMutexLocker locker(&hashOfMutex);
localFilenameOf.remove("");
QMutableHashIterator<QString, QByteArray> iter(hashOf);
while (iter.hasNext()) {