mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
Provide ability to configure size cut-off for local file previews
Summary: FileWidgets read from kdeglobals the property "MaximumSize" under "PreviewSettings" to decide if a preview will be generated for that file. There is no current GUI to change that file size limit. On the other hand Dolphin ignores it. This patch aims to fix that by adding new configuration options to Dolphin. That is a new spinbox in Dolphin settings under General -> Previews tab. Test Plan: 1 - Set up a local folder with 2 jpg images of less and more than 1 MB respectively. 2 - Go to Dolphin Preferences. General -> Previews and check "JPEG Images" from the list. And set "Skip previews for files above:" to 1MB. 3 - Navigate to the afore mentioned folder. Only the image of size less than 1 MB should show a preview. BUG: 331240 Reviewers: ngraham, #dolphin, meven, elvisangelaccio Reviewed By: ngraham, #dolphin, meven, elvisangelaccio Subscribers: cfeck, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D28402
This commit is contained in:
parent
ecc8b18b2a
commit
0f0d14d4c2
|
@ -116,6 +116,18 @@ QStringList KFileItemListView::enabledPlugins() const
|
||||||
return m_modelRolesUpdater ? m_modelRolesUpdater->enabledPlugins() : QStringList();
|
return m_modelRolesUpdater ? m_modelRolesUpdater->enabledPlugins() : QStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KFileItemListView::setLocalFileSizePreviewLimit(const qlonglong size)
|
||||||
|
{
|
||||||
|
if (m_modelRolesUpdater) {
|
||||||
|
m_modelRolesUpdater->setLocalFileSizePreviewLimit(size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qlonglong KFileItemListView::localFileSizePreviewLimit() const
|
||||||
|
{
|
||||||
|
return m_modelRolesUpdater ? m_modelRolesUpdater->localFileSizePreviewLimit() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const
|
QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const
|
||||||
{
|
{
|
||||||
if (!model()) {
|
if (!model()) {
|
||||||
|
|
|
@ -71,6 +71,17 @@ public:
|
||||||
*/
|
*/
|
||||||
QStringList enabledPlugins() const;
|
QStringList enabledPlugins() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the maximum file size of local files for which
|
||||||
|
* previews will be generated (if enabled). A value of 0
|
||||||
|
* indicates no file size limit.
|
||||||
|
* Per default the value from KConfigGroup "PreviewSettings"
|
||||||
|
* MaximumSize is used, 0 otherwise.
|
||||||
|
* @param size
|
||||||
|
*/
|
||||||
|
void setLocalFileSizePreviewLimit(qlonglong size);
|
||||||
|
qlonglong localFileSizePreviewLimit() const;
|
||||||
|
|
||||||
QPixmap createDragPixmap(const KItemSet& indexes) const override;
|
QPixmap createDragPixmap(const KItemSet& indexes) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -85,7 +85,8 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
|
||||||
m_recentlyChangedItemsTimer(nullptr),
|
m_recentlyChangedItemsTimer(nullptr),
|
||||||
m_recentlyChangedItems(),
|
m_recentlyChangedItems(),
|
||||||
m_changedItems(),
|
m_changedItems(),
|
||||||
m_directoryContentsCounter(nullptr)
|
m_directoryContentsCounter(nullptr),
|
||||||
|
m_localFileSizePreviewLimit(0)
|
||||||
#ifdef HAVE_BALOO
|
#ifdef HAVE_BALOO
|
||||||
, m_balooFileMonitor(nullptr)
|
, m_balooFileMonitor(nullptr)
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,6 +95,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
|
||||||
|
|
||||||
const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
|
const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
|
||||||
m_enabledPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
|
m_enabledPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
|
||||||
|
m_localFileSizePreviewLimit = static_cast<qulonglong>(globalConfig.readEntry("MaximumSize", 0));
|
||||||
|
|
||||||
connect(m_model, &KFileItemModel::itemsInserted,
|
connect(m_model, &KFileItemModel::itemsInserted,
|
||||||
this, &KFileItemModelRolesUpdater::slotItemsInserted);
|
this, &KFileItemModelRolesUpdater::slotItemsInserted);
|
||||||
|
@ -317,6 +319,16 @@ QStringList KFileItemModelRolesUpdater::enabledPlugins() const
|
||||||
return m_enabledPlugins;
|
return m_enabledPlugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KFileItemModelRolesUpdater::setLocalFileSizePreviewLimit(const qlonglong size)
|
||||||
|
{
|
||||||
|
m_localFileSizePreviewLimit = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
qlonglong KFileItemModelRolesUpdater::localFileSizePreviewLimit() const
|
||||||
|
{
|
||||||
|
return m_localFileSizePreviewLimit;
|
||||||
|
}
|
||||||
|
|
||||||
void KFileItemModelRolesUpdater::slotItemsInserted(const KItemRangeList& itemRanges)
|
void KFileItemModelRolesUpdater::slotItemsInserted(const KItemRangeList& itemRanges)
|
||||||
{
|
{
|
||||||
QElapsedTimer timer;
|
QElapsedTimer timer;
|
||||||
|
@ -898,7 +910,7 @@ void KFileItemModelRolesUpdater::startPreviewJob()
|
||||||
|
|
||||||
KIO::PreviewJob* job = new KIO::PreviewJob(itemSubSet, cacheSize, &m_enabledPlugins);
|
KIO::PreviewJob* job = new KIO::PreviewJob(itemSubSet, cacheSize, &m_enabledPlugins);
|
||||||
|
|
||||||
job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile());
|
job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile() && m_localFileSizePreviewLimit <= 0);
|
||||||
if (job->uiDelegate()) {
|
if (job->uiDelegate()) {
|
||||||
KJobWidgets::setWindow(job, qApp->activeWindow());
|
KJobWidgets::setWindow(job, qApp->activeWindow());
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,17 @@ public:
|
||||||
*/
|
*/
|
||||||
QStringList enabledPlugins() const;
|
QStringList enabledPlugins() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the maximum file size of local files for which
|
||||||
|
* previews will be generated (if enabled). A value of 0
|
||||||
|
* indicates no file size limit.
|
||||||
|
* Per default the value from KConfigGroup "PreviewSettings"
|
||||||
|
* MaximumSize is used, 0 otherwise.
|
||||||
|
* @param size
|
||||||
|
*/
|
||||||
|
void setLocalFileSizePreviewLimit(qlonglong size);
|
||||||
|
qlonglong localFileSizePreviewLimit() const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotItemsInserted(const KItemRangeList& itemRanges);
|
void slotItemsInserted(const KItemRangeList& itemRanges);
|
||||||
void slotItemsRemoved(const KItemRangeList& itemRanges);
|
void slotItemsRemoved(const KItemRangeList& itemRanges);
|
||||||
|
@ -313,6 +324,7 @@ private:
|
||||||
QSet<QByteArray> m_roles;
|
QSet<QByteArray> m_roles;
|
||||||
QSet<QByteArray> m_resolvableRoles;
|
QSet<QByteArray> m_resolvableRoles;
|
||||||
QStringList m_enabledPlugins;
|
QStringList m_enabledPlugins;
|
||||||
|
qulonglong m_localFileSizePreviewLimit;
|
||||||
|
|
||||||
// Items for which the sort role still has to be determined.
|
// Items for which the sort role still has to be determined.
|
||||||
QSet<KFileItem> m_pendingSortRoleItems;
|
QSet<KFileItem> m_pendingSortRoleItems;
|
||||||
|
|
|
@ -38,7 +38,8 @@
|
||||||
|
|
||||||
// default settings
|
// default settings
|
||||||
namespace {
|
namespace {
|
||||||
const int MaxRemotePreviewSize = 0; // 0 MB
|
const int DefaultMaxLocalPreviewSize = 0; // 0 MB
|
||||||
|
const int DefaultMaxRemotePreviewSize = 0; // 0 MB
|
||||||
}
|
}
|
||||||
|
|
||||||
PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
|
PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
|
||||||
|
@ -46,6 +47,7 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
|
||||||
m_initialized(false),
|
m_initialized(false),
|
||||||
m_listView(nullptr),
|
m_listView(nullptr),
|
||||||
m_enabledPreviewPlugins(),
|
m_enabledPreviewPlugins(),
|
||||||
|
m_localFileSizeBox(nullptr),
|
||||||
m_remoteFileSizeBox(nullptr)
|
m_remoteFileSizeBox(nullptr)
|
||||||
{
|
{
|
||||||
QVBoxLayout* topLayout = new QVBoxLayout(this);
|
QVBoxLayout* topLayout = new QVBoxLayout(this);
|
||||||
|
@ -68,24 +70,41 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
|
||||||
m_listView->setItemDelegate(delegate);
|
m_listView->setItemDelegate(delegate);
|
||||||
m_listView->setVerticalScrollMode(QListView::ScrollPerPixel);
|
m_listView->setVerticalScrollMode(QListView::ScrollPerPixel);
|
||||||
|
|
||||||
|
QLabel* localFileSizeLabel = new QLabel(i18n("Skip previews for local files above:"), this);
|
||||||
|
|
||||||
|
m_localFileSizeBox = new QSpinBox(this);
|
||||||
|
m_localFileSizeBox->setSingleStep(1);
|
||||||
|
m_localFileSizeBox->setSuffix(QStringLiteral(" MB"));
|
||||||
|
m_localFileSizeBox->setRange(0, 9999999); /* MB */
|
||||||
|
m_localFileSizeBox->setSpecialValueText(tr("No limit"));
|
||||||
|
|
||||||
|
QHBoxLayout* localFileSizeBoxLayout = new QHBoxLayout();
|
||||||
|
localFileSizeBoxLayout->addWidget(localFileSizeLabel);
|
||||||
|
localFileSizeBoxLayout->addStretch(0);
|
||||||
|
localFileSizeBoxLayout->addWidget(m_localFileSizeBox);
|
||||||
|
|
||||||
QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label", "Skip previews for remote files above:"), this);
|
QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label", "Skip previews for remote files above:"), this);
|
||||||
|
|
||||||
m_remoteFileSizeBox = new QSpinBox(this);
|
m_remoteFileSizeBox = new QSpinBox(this);
|
||||||
m_remoteFileSizeBox->setSingleStep(1);
|
m_remoteFileSizeBox->setSingleStep(1);
|
||||||
m_remoteFileSizeBox->setSuffix(QStringLiteral(" MB"));
|
m_remoteFileSizeBox->setSuffix(QStringLiteral(" MB"));
|
||||||
m_remoteFileSizeBox->setRange(0, 9999999); /* MB */
|
m_remoteFileSizeBox->setRange(0, 9999999); /* MB */
|
||||||
|
m_remoteFileSizeBox->setSpecialValueText(tr("No previews"));
|
||||||
|
|
||||||
QHBoxLayout* fileSizeBoxLayout = new QHBoxLayout();
|
QHBoxLayout* remoteFileSizeBoxLayout = new QHBoxLayout();
|
||||||
fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 0, Qt::AlignRight);
|
remoteFileSizeBoxLayout->addWidget(remoteFileSizeLabel);
|
||||||
fileSizeBoxLayout->addWidget(m_remoteFileSizeBox);
|
remoteFileSizeBoxLayout->addStretch(0);
|
||||||
|
remoteFileSizeBoxLayout->addWidget(m_remoteFileSizeBox);
|
||||||
|
|
||||||
topLayout->addWidget(showPreviewsLabel);
|
topLayout->addWidget(showPreviewsLabel);
|
||||||
topLayout->addWidget(m_listView);
|
topLayout->addWidget(m_listView);
|
||||||
topLayout->addLayout(fileSizeBoxLayout);
|
topLayout->addLayout(localFileSizeBoxLayout);
|
||||||
|
topLayout->addLayout(remoteFileSizeBoxLayout);
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
|
|
||||||
connect(m_listView, &QListView::clicked, this, &PreviewsSettingsPage::changed);
|
connect(m_listView, &QListView::clicked, this, &PreviewsSettingsPage::changed);
|
||||||
|
connect(m_localFileSizeBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &PreviewsSettingsPage::changed);
|
||||||
connect(m_remoteFileSizeBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &PreviewsSettingsPage::changed);
|
connect(m_remoteFileSizeBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &PreviewsSettingsPage::changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +131,11 @@ void PreviewsSettingsPage::applySettings()
|
||||||
KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
|
KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
|
||||||
globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins);
|
globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins);
|
||||||
|
|
||||||
|
const qulonglong maximumLocalSize = static_cast<qulonglong>(m_localFileSizeBox->value()) * 1024 * 1024;
|
||||||
|
globalConfig.writeEntry("MaximumSize",
|
||||||
|
maximumLocalSize,
|
||||||
|
KConfigBase::Normal | KConfigBase::Global);
|
||||||
|
|
||||||
const qulonglong maximumRemoteSize = static_cast<qulonglong>(m_remoteFileSizeBox->value()) * 1024 * 1024;
|
const qulonglong maximumRemoteSize = static_cast<qulonglong>(m_remoteFileSizeBox->value()) * 1024 * 1024;
|
||||||
globalConfig.writeEntry("MaximumRemoteSize",
|
globalConfig.writeEntry("MaximumRemoteSize",
|
||||||
maximumRemoteSize,
|
maximumRemoteSize,
|
||||||
|
@ -121,7 +145,8 @@ void PreviewsSettingsPage::applySettings()
|
||||||
|
|
||||||
void PreviewsSettingsPage::restoreDefaults()
|
void PreviewsSettingsPage::restoreDefaults()
|
||||||
{
|
{
|
||||||
m_remoteFileSizeBox->setValue(MaxRemotePreviewSize);
|
m_localFileSizeBox->setValue(DefaultMaxLocalPreviewSize);
|
||||||
|
m_remoteFileSizeBox->setValue(DefaultMaxRemotePreviewSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreviewsSettingsPage::showEvent(QShowEvent* event)
|
void PreviewsSettingsPage::showEvent(QShowEvent* event)
|
||||||
|
@ -169,9 +194,13 @@ void PreviewsSettingsPage::loadSettings()
|
||||||
const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
|
const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
|
||||||
m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
|
m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
|
||||||
|
|
||||||
const qulonglong defaultRemotePreview = static_cast<qulonglong>(MaxRemotePreviewSize) * 1024 * 1024;
|
const qulonglong defaultLocalPreview = static_cast<qulonglong>(DefaultMaxLocalPreviewSize) * 1024 * 1024;
|
||||||
|
const qulonglong maxLocalByteSize = globalConfig.readEntry("MaximumSize", defaultLocalPreview);
|
||||||
|
const int maxLocalMByteSize = maxLocalByteSize / (1024 * 1024);
|
||||||
|
m_localFileSizeBox->setValue(maxLocalMByteSize);
|
||||||
|
|
||||||
|
const qulonglong defaultRemotePreview = static_cast<qulonglong>(DefaultMaxRemotePreviewSize) * 1024 * 1024;
|
||||||
const qulonglong maxRemoteByteSize = globalConfig.readEntry("MaximumRemoteSize", defaultRemotePreview);
|
const qulonglong maxRemoteByteSize = globalConfig.readEntry("MaximumRemoteSize", defaultRemotePreview);
|
||||||
const int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024);
|
const int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024);
|
||||||
m_remoteFileSizeBox->setValue(maxRemoteMByteSize);
|
m_remoteFileSizeBox->setValue(maxRemoteMByteSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ private:
|
||||||
bool m_initialized;
|
bool m_initialized;
|
||||||
QListView *m_listView;
|
QListView *m_listView;
|
||||||
QStringList m_enabledPreviewPlugins;
|
QStringList m_enabledPreviewPlugins;
|
||||||
|
QSpinBox* m_localFileSizeBox;
|
||||||
QSpinBox* m_remoteFileSizeBox;
|
QSpinBox* m_remoteFileSizeBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ void DolphinItemListView::readSettings()
|
||||||
|
|
||||||
const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
|
const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
|
||||||
setEnabledPlugins(globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
|
setEnabledPlugins(globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
|
||||||
|
setLocalFileSizePreviewLimit(globalConfig.readEntry("MaximumSize", 0));
|
||||||
endTransaction();
|
endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue