diff options
-rw-r--r-- | core/imagedownloader.cpp | 18 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 18 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 32 | ||||
-rw-r--r-- | core/subsurfacestartup.c | 1 | ||||
-rw-r--r-- | desktop-widgets/preferences/preferences_graph.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/preferences/preferences_graph.ui | 7 |
7 files changed, 64 insertions, 15 deletions
diff --git a/core/imagedownloader.cpp b/core/imagedownloader.cpp index 0c72f3381..da5c86b99 100644 --- a/core/imagedownloader.cpp +++ b/core/imagedownloader.cpp @@ -151,8 +151,24 @@ static QImage getThumbnailFromCache(const QString &picture_filename) QString filename = thumbnailFileName(picture_filename); if (filename.isEmpty()) return QImage(); - QFile file(filename); + + if (prefs.auto_recalculate_thumbnails) { + // Check if thumbnails is older than the (local) image file + QString filenameLocal = localFilePath(qPrintable(picture_filename)); + QFileInfo pictureInfo(filenameLocal); + QFileInfo thumbnailInfo(file); + if (pictureInfo.exists() && thumbnailInfo.exists()) { + QDateTime pictureTime = pictureInfo.lastModified(); + QDateTime thumbnailTime = thumbnailInfo.lastModified(); + if (pictureTime.isValid() && thumbnailTime.isValid() && thumbnailTime < pictureTime) { + // Both files exist, have valid timestamps and thumbnail was calculated before picture. + // Return an empty thumbnail to signal recalculation of the thumbnail + return QImage(); + } + } + } + if (!file.open(QIODevice::ReadOnly)) return QImage(); QDataStream stream(&file); diff --git a/core/pref.h b/core/pref.h index 2628c3677..8ca763ce8 100644 --- a/core/pref.h +++ b/core/pref.h @@ -154,6 +154,7 @@ struct preferences { int distance_threshold; bool git_local_only; short cloud_timeout; + bool auto_recalculate_thumbnails; locale_prefs_t locale; //: TODO: move the rest of locale based info here. update_manager_prefs_t update_manager; dive_computer_prefs_t dive_computer; diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp index d88df5cba..60473ec1a 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.cpp +++ b/core/subsurface-qt/SettingsObjectWrapper.cpp @@ -1802,6 +1802,11 @@ int GeneralSettingsObjectWrapper::pscrRatio() const return prefs.pscr_ratio; } +bool GeneralSettingsObjectWrapper::autoRecalculateThumbnails() const +{ + return prefs.auto_recalculate_thumbnails; +} + void GeneralSettingsObjectWrapper::setDefaultFilename(const QString& value) { if (value == prefs.default_filename) @@ -1895,6 +1900,18 @@ void GeneralSettingsObjectWrapper::setPscrRatio(int value) emit pscrRatioChanged(value); } +void GeneralSettingsObjectWrapper::setAutoRecalculateThumbnails(bool value) +{ + if (value == prefs.auto_recalculate_thumbnails) + return; + + QSettings s; + s.beginGroup(group); + s.setValue("auto_recalculate_thumbnails", value); + prefs.auto_recalculate_thumbnails = value; + emit autoRecalculateThumbnailsChanged(value); +} + DisplaySettingsObjectWrapper::DisplaySettingsObjectWrapper(QObject *parent) : QObject(parent) { @@ -2266,6 +2283,7 @@ void SettingsObjectWrapper::load() GET_INT("defaultsetpoint", defaultsetpoint); GET_INT("o2consumption", o2consumption); GET_INT("pscr_ratio", pscr_ratio); + GET_BOOL("auto_recalculate_thumbnails", auto_recalculate_thumbnails); s.endGroup(); s.beginGroup("Display"); diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h index f2c6745d8..a56175ea7 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.h +++ b/core/subsurface-qt/SettingsObjectWrapper.h @@ -552,13 +552,14 @@ private: class GeneralSettingsObjectWrapper : public QObject { Q_OBJECT - Q_PROPERTY(QString default_filename READ defaultFilename WRITE setDefaultFilename NOTIFY defaultFilenameChanged) - Q_PROPERTY(QString default_cylinder READ defaultCylinder WRITE setDefaultCylinder NOTIFY defaultCylinderChanged) - Q_PROPERTY(short default_file_behavior READ defaultFileBehavior WRITE setDefaultFileBehavior NOTIFY defaultFileBehaviorChanged) - Q_PROPERTY(bool use_default_file READ useDefaultFile WRITE setUseDefaultFile NOTIFY useDefaultFileChanged) - Q_PROPERTY(int defaultsetpoint READ defaultSetPoint WRITE setDefaultSetPoint NOTIFY defaultSetPointChanged) - Q_PROPERTY(int o2consumption READ o2Consumption WRITE setO2Consumption NOTIFY o2ConsumptionChanged) - Q_PROPERTY(int pscr_ratio READ pscrRatio WRITE setPscrRatio NOTIFY pscrRatioChanged) + Q_PROPERTY(QString default_filename READ defaultFilename WRITE setDefaultFilename NOTIFY defaultFilenameChanged) + Q_PROPERTY(QString default_cylinder READ defaultCylinder WRITE setDefaultCylinder NOTIFY defaultCylinderChanged) + Q_PROPERTY(short default_file_behavior READ defaultFileBehavior WRITE setDefaultFileBehavior NOTIFY defaultFileBehaviorChanged) + Q_PROPERTY(bool use_default_file READ useDefaultFile WRITE setUseDefaultFile NOTIFY useDefaultFileChanged) + Q_PROPERTY(int defaultsetpoint READ defaultSetPoint WRITE setDefaultSetPoint NOTIFY defaultSetPointChanged) + Q_PROPERTY(int o2consumption READ o2Consumption WRITE setO2Consumption NOTIFY o2ConsumptionChanged) + Q_PROPERTY(int pscr_ratio READ pscrRatio WRITE setPscrRatio NOTIFY pscrRatioChanged) + Q_PROPERTY(bool auto_recalculate_thumbnails READ autoRecalculateThumbnails WRITE setAutoRecalculateThumbnails NOTIFY autoRecalculateThumbnailsChanged) public: GeneralSettingsObjectWrapper(QObject *parent); @@ -569,15 +570,17 @@ public: int defaultSetPoint() const; int o2Consumption() const; int pscrRatio() const; + bool autoRecalculateThumbnails() const; public slots: - void setDefaultFilename (const QString& value); - void setDefaultCylinder (const QString& value); - void setDefaultFileBehavior (short value); - void setUseDefaultFile (bool value); - void setDefaultSetPoint (int value); - void setO2Consumption (int value); - void setPscrRatio (int value); + void setDefaultFilename (const QString& value); + void setDefaultCylinder (const QString& value); + void setDefaultFileBehavior (short value); + void setUseDefaultFile (bool value); + void setDefaultSetPoint (int value); + void setO2Consumption (int value); + void setPscrRatio (int value); + void setAutoRecalculateThumbnails (bool value); signals: void defaultFilenameChanged(const QString& value); @@ -587,6 +590,7 @@ signals: void defaultSetPointChanged(int value); void o2ConsumptionChanged(int value); void pscrRatioChanged(int value); + void autoRecalculateThumbnailsChanged(int value); private: const QString group = QStringLiteral("GeneralSettings"); }; diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c index 18332742b..65b30e7d6 100644 --- a/core/subsurfacestartup.c +++ b/core/subsurfacestartup.c @@ -99,6 +99,7 @@ struct preferences default_prefs = { #else .cloud_timeout = 5, #endif + .auto_recalculate_thumbnails = true, }; int run_survey; diff --git a/desktop-widgets/preferences/preferences_graph.cpp b/desktop-widgets/preferences/preferences_graph.cpp index 91cd773d8..14025c82c 100644 --- a/desktop-widgets/preferences/preferences_graph.cpp +++ b/desktop-widgets/preferences/preferences_graph.cpp @@ -47,6 +47,7 @@ void PreferencesGraph::refreshSettings() ui->display_unused_tanks->setChecked(prefs.display_unused_tanks); ui->show_average_depth->setChecked(prefs.show_average_depth); + ui->auto_recalculate_thumbnails->setChecked(prefs.auto_recalculate_thumbnails); ui->show_icd->setChecked(prefs.show_icd); } @@ -56,6 +57,7 @@ void PreferencesGraph::syncSettings() general->setDefaultSetPoint(lrint(ui->defaultSetpoint->value() * 1000.0)); general->setO2Consumption(lrint(ui->psro2rate->value() *1000.0)); general->setPscrRatio(lrint(1000.0 / ui->pscrfactor->value())); + general->setAutoRecalculateThumbnails(ui->auto_recalculate_thumbnails->isChecked()); auto pp_gas = SettingsObjectWrapper::instance()->pp_gas; pp_gas->setPheThreshold(ui->pheThreshold->value()); diff --git a/desktop-widgets/preferences/preferences_graph.ui b/desktop-widgets/preferences/preferences_graph.ui index 020ae498f..a7553c990 100644 --- a/desktop-widgets/preferences/preferences_graph.ui +++ b/desktop-widgets/preferences/preferences_graph.ui @@ -368,6 +368,13 @@ </property> </widget> </item> + <item row="2" column="0" colspan="2"> + <widget class="QCheckBox" name="auto_recalculate_thumbnails"> + <property name="text"> + <string>Recalculate thumbnails if older than image</string> + </property> + </widget> + </item> </layout> </widget> </item> |