Set limits for collection pixmap cache based on size unit

This commit is contained in:
Jonas Kvinge 2021-01-12 20:36:10 +01:00
parent 706308cefd
commit a6a29d5c5a
4 changed files with 40 additions and 9 deletions

View File

@ -1741,9 +1741,9 @@ bool CollectionModel::CompareItems(const CollectionItem *a, const CollectionItem
}
int CollectionModel::MaximumCacheSize(QSettings *s, const char *size_id, const char *size_unit_id, const int cache_size_default) const {
qint64 CollectionModel::MaximumCacheSize(QSettings *s, const char *size_id, const char *size_unit_id, const qint64 cache_size_default) const {
int size = s->value(size_id, cache_size_default).toInt();
qint64 size = s->value(size_id, cache_size_default).toInt();
int unit = s->value(size_unit_id, CollectionSettingsPage::CacheSizeUnit::CacheSizeUnit_MB).toInt() + 1;
do {

View File

@ -268,7 +268,7 @@ class CollectionModel : public SimpleTreeModel<CollectionItem> {
QVariant AlbumIcon(const QModelIndex &idx);
QVariant data(const CollectionItem *item, const int role) const;
bool CompareItems(const CollectionItem *a, const CollectionItem *b) const;
int MaximumCacheSize(QSettings *s, const char *size_id, const char *size_unit_id, const int cache_size_default) const;
qint64 MaximumCacheSize(QSettings *s, const char *size_id, const char *size_unit_id, const qint64 cache_size_default) const;
private:
CollectionBackend *backend_;

View File

@ -21,6 +21,8 @@
#include "config.h"
#include <limits>
#include <QStandardPaths>
#include <QAbstractItemModel>
#include <QItemSelectionModel>
@ -59,8 +61,6 @@ const char *CollectionSettingsPage::kSettingsDiskCacheSizeUnit = "disk_cache_siz
const int CollectionSettingsPage::kSettingsCacheSizeDefault = 160;
const int CollectionSettingsPage::kSettingsDiskCacheSizeDefault = 360;
const QStringList CollectionSettingsPage::cacheUnitNames = { "KB", "MB", "GB", "TB" };
CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog)
: SettingsPage(dialog),
ui_(new Ui_CollectionSettingsPage),
@ -74,8 +74,8 @@ CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog)
setWindowIcon(IconLoader::Load("library-music"));
ui_->add->setIcon(IconLoader::Load("document-open-folder"));
ui_->combobox_cache_size->addItems(cacheUnitNames);
ui_->combobox_disk_cache_size->addItems(cacheUnitNames);
ui_->combobox_cache_size->addItems({"KB", "MB"});
ui_->combobox_disk_cache_size->addItems({"KB", "MB", "GB"});
connect(ui_->add, SIGNAL(clicked()), SLOT(Add()));
connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove()));
@ -88,6 +88,9 @@ CollectionSettingsPage::CollectionSettingsPage(SettingsDialog *dialog)
connect(ui_->button_clear_disk_cache, SIGNAL(clicked()), dialog->app(), SIGNAL(ClearPixmapDiskCache()));
connect(ui_->button_clear_disk_cache, SIGNAL(clicked()), SLOT(ClearPixmapDiskCache()));
connect(ui_->combobox_cache_size, SIGNAL(currentIndexChanged(int)), SLOT(CacheSizeUnitChanged(int)));
connect(ui_->combobox_disk_cache_size, SIGNAL(currentIndexChanged(int)), SLOT(DiskCacheSizeUnitChanged(int)));
}
CollectionSettingsPage::~CollectionSettingsPage() { delete ui_; }
@ -173,9 +176,11 @@ void CollectionSettingsPage::Load() {
ui_->spinbox_cache_size->setValue(s.value(kSettingsCacheSize, kSettingsCacheSizeDefault).toInt());
ui_->combobox_cache_size->setCurrentIndex(s.value(kSettingsCacheSizeUnit, static_cast<int>(CacheSizeUnit_MB)).toInt());
if (ui_->combobox_cache_size->currentIndex() == -1) ui_->combobox_cache_size->setCurrentIndex(static_cast<int>(CacheSizeUnit_MB));
ui_->checkbox_disk_cache->setChecked(s.value(kSettingsDiskCacheEnable, false).toBool());
ui_->spinbox_disk_cache_size->setValue(s.value(kSettingsDiskCacheSize, kSettingsDiskCacheSizeDefault).toInt());
ui_->combobox_disk_cache_size->setCurrentIndex(s.value(kSettingsDiskCacheSizeUnit, static_cast<int>(CacheSizeUnit_MB)).toInt());
if (ui_->combobox_disk_cache_size->currentIndex() == -1) ui_->combobox_cache_size->setCurrentIndex(static_cast<int>(CacheSizeUnit_MB));
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
ui_->checkbox_delete_files->setChecked(s.value("delete_files", false).toBool());
@ -271,3 +276,29 @@ void CollectionSettingsPage::ClearPixmapDiskCache() {
ui_->disk_cache_in_use->setText("empty");
}
void CollectionSettingsPage::CacheSizeUnitChanged(int index) {
switch (static_cast<CacheSizeUnit>(index)) {
case CacheSizeUnit_MB:
ui_->spinbox_cache_size->setMaximum(std::numeric_limits<int>::max() / 1024);
break;
default:
ui_->spinbox_cache_size->setMaximum(std::numeric_limits<int>::max());
break;
}
}
void CollectionSettingsPage::DiskCacheSizeUnitChanged(int index) {
switch (static_cast<CacheSizeUnit>(index)) {
case CacheSizeUnit_GB:
ui_->spinbox_disk_cache_size->setMaximum(4);
break;
default:
ui_->spinbox_disk_cache_size->setMaximum(std::numeric_limits<int>::max());
break;
}
}

View File

@ -73,12 +73,12 @@ class CollectionSettingsPage : public SettingsPage {
void DiskCacheEnable(const int state);
void CoverSaveInAlbumDirChanged();
void ClearPixmapDiskCache();
void CacheSizeUnitChanged(int index);
void DiskCacheSizeUnitChanged(int index);
private:
Ui_CollectionSettingsPage *ui_;
bool initialized_model_;
static const QStringList cacheUnitNames;
};
#endif // COLLECTIONSETTINGSPAGE_H