]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Provide ability to configure size cut-off for local file previews
authorGastón Haro <harogaston@gmail.com>
Tue, 9 Jun 2020 17:03:30 +0000 (11:03 -0600)
committerNate Graham <nate@kde.org>
Tue, 9 Jun 2020 17:05:55 +0000 (11:05 -0600)
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

src/kitemviews/kfileitemlistview.cpp
src/kitemviews/kfileitemlistview.h
src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h
src/settings/general/previewssettingspage.cpp
src/settings/general/previewssettingspage.h
src/views/dolphinitemlistview.cpp

index 80d85aa2e1e8e3e8cb809d19c940d158bb7b72d1..4fffbcbfd208bebc17b5a0b33eb76a1e84b82c55 100644 (file)
@@ -116,6 +116,18 @@ QStringList KFileItemListView::enabledPlugins() const
     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
 {
     if (!model()) {
index c13ea5ef2d403395d96ee513a2e1bf781ffef609..92005c2df5105742e3b476ba4fe21a9a99515765 100644 (file)
@@ -71,6 +71,17 @@ public:
      */
     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;
 
 protected:
index c28e240a5f97ba6b54dc1bd6e5c5453a769da363..eb2c1b64626c8d550cb8c1cc5b0fce349d51c9b8 100644 (file)
@@ -85,7 +85,8 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
     m_recentlyChangedItemsTimer(nullptr),
     m_recentlyChangedItems(),
     m_changedItems(),
-    m_directoryContentsCounter(nullptr)
+    m_directoryContentsCounter(nullptr),
+    m_localFileSizePreviewLimit(0)
   #ifdef HAVE_BALOO
   , m_balooFileMonitor(nullptr)
   #endif
@@ -94,6 +95,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
 
     const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
     m_enabledPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins());
+    m_localFileSizePreviewLimit = static_cast<qulonglong>(globalConfig.readEntry("MaximumSize", 0));
 
     connect(m_model, &KFileItemModel::itemsInserted,
             this,    &KFileItemModelRolesUpdater::slotItemsInserted);
@@ -317,6 +319,16 @@ QStringList KFileItemModelRolesUpdater::enabledPlugins() const
     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)
 {
     QElapsedTimer timer;
@@ -898,7 +910,7 @@ void KFileItemModelRolesUpdater::startPreviewJob()
 
     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()) {
         KJobWidgets::setWindow(job, qApp->activeWindow());
     }
index e21cd30dfe0672b358fd012467c9d73fc4b0399e..b881b73e4b0b4e369bc89f3d4025a93f6aa43a3d 100644 (file)
@@ -154,6 +154,17 @@ public:
      */
     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:
     void slotItemsInserted(const KItemRangeList& itemRanges);
     void slotItemsRemoved(const KItemRangeList& itemRanges);
@@ -313,6 +324,7 @@ private:
     QSet<QByteArray> m_roles;
     QSet<QByteArray> m_resolvableRoles;
     QStringList m_enabledPlugins;
+    qulonglong m_localFileSizePreviewLimit;
 
     // Items for which the sort role still has to be determined.
     QSet<KFileItem> m_pendingSortRoleItems;
index 90a4211c0f971628755ad506dff733a595cff7d4..3e435b53c8b46d07475ca34c6e40358a09d74f8b 100644 (file)
@@ -38,7 +38,8 @@
 
 // default settings
 namespace {
-    const int MaxRemotePreviewSize = 0; // 0 MB
+    const int DefaultMaxLocalPreviewSize = 0; // 0 MB
+    const int DefaultMaxRemotePreviewSize = 0; // 0 MB
 }
 
 PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
@@ -46,6 +47,7 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
     m_initialized(false),
     m_listView(nullptr),
     m_enabledPreviewPlugins(),
+    m_localFileSizeBox(nullptr),
     m_remoteFileSizeBox(nullptr)
 {
     QVBoxLayout* topLayout = new QVBoxLayout(this);
@@ -68,24 +70,41 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
     m_listView->setItemDelegate(delegate);
     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);
 
     m_remoteFileSizeBox = new QSpinBox(this);
     m_remoteFileSizeBox->setSingleStep(1);
     m_remoteFileSizeBox->setSuffix(QStringLiteral(" MB"));
     m_remoteFileSizeBox->setRange(0, 9999999); /* MB */
+    m_remoteFileSizeBox->setSpecialValueText(tr("No previews"));
 
-    QHBoxLayout* fileSizeBoxLayout = new QHBoxLayout();
-    fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 0, Qt::AlignRight);
-    fileSizeBoxLayout->addWidget(m_remoteFileSizeBox);
+    QHBoxLayout* remoteFileSizeBoxLayout = new QHBoxLayout();
+    remoteFileSizeBoxLayout->addWidget(remoteFileSizeLabel);
+    remoteFileSizeBoxLayout->addStretch(0);
+    remoteFileSizeBoxLayout->addWidget(m_remoteFileSizeBox);
 
     topLayout->addWidget(showPreviewsLabel);
     topLayout->addWidget(m_listView);
-    topLayout->addLayout(fileSizeBoxLayout);
+    topLayout->addLayout(localFileSizeBoxLayout);
+    topLayout->addLayout(remoteFileSizeBoxLayout);
 
     loadSettings();
 
     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);
 }
 
@@ -112,6 +131,11 @@ void PreviewsSettingsPage::applySettings()
     KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
     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;
     globalConfig.writeEntry("MaximumRemoteSize",
                             maximumRemoteSize,
@@ -121,7 +145,8 @@ void PreviewsSettingsPage::applySettings()
 
 void PreviewsSettingsPage::restoreDefaults()
 {
-    m_remoteFileSizeBox->setValue(MaxRemotePreviewSize);
+    m_localFileSizeBox->setValue(DefaultMaxLocalPreviewSize);
+    m_remoteFileSizeBox->setValue(DefaultMaxRemotePreviewSize);
 }
 
 void PreviewsSettingsPage::showEvent(QShowEvent* event)
@@ -169,9 +194,13 @@ void PreviewsSettingsPage::loadSettings()
     const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
     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 int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024);
     m_remoteFileSizeBox->setValue(maxRemoteMByteSize);
 }
-
index 957523710130c6a943fe407f70fd19719855bc43..a7f54f601166f4c286955079aae8b97c8bfd6de1 100644 (file)
@@ -61,6 +61,7 @@ private:
     bool m_initialized;
     QListView *m_listView;
     QStringList m_enabledPreviewPlugins;
+    QSpinBox* m_localFileSizeBox;
     QSpinBox* m_remoteFileSizeBox;
 };
 
index 6397a48b70e60fdc2f583fb6efd741afaac7fc38..9e8fda650e37149f1a6d051d1514a2825ebbdb1d 100644 (file)
@@ -91,7 +91,7 @@ void DolphinItemListView::readSettings()
 
     const KConfigGroup globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
     setEnabledPlugins(globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
-
+    setLocalFileSizePreviewLimit(globalConfig.readEntry("MaximumSize", 0));
     endTransaction();
 }