diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-04-29 23:10:32 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-05-13 13:52:35 -0700 |
commit | e811c7306d210af17a6571e61f23496ce91fa4bc (patch) | |
tree | 3b4f216860238a7caf094c988e678fdd191f3212 /core/qthelper.cpp | |
parent | 6618c9ebfc6a7cebbef687fcb3aa74c70f504ff2 (diff) | |
download | subsurface-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.cpp | 46 |
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()) { |