]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/general/configurepreviewplugindialog.cpp
Fix opening FTP files in their preferred app
[dolphin.git] / src / settings / general / configurepreviewplugindialog.cpp
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "configurepreviewplugindialog.h"
8
9 #include <KIO/DeleteJob>
10 #include <KIO/JobUiDelegate>
11 #include <KIO/ThumbCreator>
12 #include <KJobWidgets>
13 #include <KLocalizedString>
14 #include <KPluginLoader>
15
16 #include <QDialogButtonBox>
17 #include <QPushButton>
18 #include <QStandardPaths>
19 #include <QUrl>
20 #include <QVBoxLayout>
21
22 ConfigurePreviewPluginDialog::ConfigurePreviewPluginDialog(const QString& pluginName,
23 const QString& desktopEntryName,
24 QWidget* parent) :
25 QDialog(parent)
26 {
27 QSharedPointer<ThumbCreator> previewPlugin;
28 const QString pluginPath = KPluginLoader::findPlugin(desktopEntryName);
29 if (!pluginPath.isEmpty()) {
30 newCreator create = (newCreator)QLibrary::resolve(pluginPath, "new_creator");
31 if (create) {
32 previewPlugin.reset(dynamic_cast<ThumbCreator*>(create()));
33 }
34 }
35
36 setWindowTitle(i18nc("@title:window", "Configure Preview for %1", pluginName));
37 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
38 setMinimumWidth(400);
39
40 auto layout = new QVBoxLayout(this);
41
42 if (previewPlugin) {
43 auto configurationWidget = previewPlugin->createConfigurationWidget();
44 configurationWidget->setParent(this);
45 layout->addWidget(configurationWidget);
46
47 layout->addStretch();
48
49 connect(this, &ConfigurePreviewPluginDialog::accepted, this, [=] {
50 // TODO: It would be great having a mechanism to tell PreviewJob that only previews
51 // for a specific MIME-type should be regenerated. As this is not available yet we
52 // delete the whole thumbnails directory.
53 previewPlugin->writeConfiguration(configurationWidget);
54
55 // https://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY
56 const QString thumbnailsPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/thumbnails/");
57 KIO::del(QUrl::fromLocalFile(thumbnailsPath), KIO::HideProgressInfo);
58 });
59 }
60
61 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
62 connect(buttonBox, &QDialogButtonBox::accepted, this, &ConfigurePreviewPluginDialog::accept);
63 connect(buttonBox, &QDialogButtonBox::rejected, this, &ConfigurePreviewPluginDialog::reject);
64 layout->addWidget(buttonBox);
65
66 auto okButton = buttonBox->button(QDialogButtonBox::Ok);
67 okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
68 okButton->setDefault(true);
69 }