summaryrefslogtreecommitdiff
path: root/kde-misc/krename
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2020-12-25 23:06:25 +0000
committerV3n3RiX <venerix@redcorelinux.org>2020-12-25 23:06:25 +0000
commit441d1370330332b7d78f238d2f5e13f7aed5e4e0 (patch)
tree6a5171dd615dfeee62a45044144c66e864738fb0 /kde-misc/krename
parentab3da91fb6c91a9df52fff8f991570f456fd3c7a (diff)
gentoo christmass resync : 25.12.2020
Diffstat (limited to 'kde-misc/krename')
-rw-r--r--kde-misc/krename/Manifest2
-rw-r--r--kde-misc/krename/files/krename-5.0.1-no-kjs.patch519
-rw-r--r--kde-misc/krename/krename-5.0.1-r1.ebuild58
3 files changed, 579 insertions, 0 deletions
diff --git a/kde-misc/krename/Manifest b/kde-misc/krename/Manifest
index c7c18f904fba..e1c105e673f0 100644
--- a/kde-misc/krename/Manifest
+++ b/kde-misc/krename/Manifest
@@ -1,3 +1,5 @@
+AUX krename-5.0.1-no-kjs.patch 20279 BLAKE2B 06a3267c03489c06122fccb65b7ce317dca41ac9531f5c3db1b0f315361b2b02ee9877bd9d5920b40339414f7e73c08f723934993254f1f6be0394dddd062dfb SHA512 24ea4270caa76a44132d8412ea7209a436710d8e6a35033a6218451bc71cd94814faf42336390e9f4a41d856d749d7efca424a0922408279e89664c3b6f253e2
DIST krename-5.0.1.tar.xz 321556 BLAKE2B 38835e4f7ce97b4991419ac7676268701c0977feb32457c9dc5ddcea92f576012320eac06aadbe426a5e176aae6270606688afd377af4c9ea32d66bd75a74fdd SHA512 1e8b17d9b8396354da131132fb6add24c6620ac39ab7ea5954391358369a4749f83df040e8425c74442ec143d1f07b322e592e5744f80eeef4b961d72f9dd379
+EBUILD krename-5.0.1-r1.ebuild 1534 BLAKE2B 8248ea78284ffe0a0a52bf1dba319bf908cb7640017fb94271934c122a0637f058434e6ba49ac14f5efea10da2d10edee2280f9439a43ead59b345103497ebf1 SHA512 7a4d9255b4b77b82e9242028b349eb315d6d3af769be93e9a1dfc7e84c71d653f9c9f60b357701626e911520b07d1ef3a14b25223c1ea1c6be2524de29a7154d
EBUILD krename-5.0.1.ebuild 1486 BLAKE2B 4e284b7e2cec7a2d10973f03053b6ef29c00b5c7b6448b619548d2d80c5ba1c04b6bc52262ea0a3954fb68e1267d69a93ce88e6484a5564edd24024544db584f SHA512 0161c660fb891ea3453d5fa7de3acb154d6f332840c9e5580548583689d0f68de44caaa3a736719d8b80bf870b87d676f940de40b479aa42455abe72ec111231
MISC metadata.xml 249 BLAKE2B ad415db89e5dee1627aa77f44ded9d4e1e5b8217d06c7ca25bbaa3fe92ce67c2b1090957c45a821b407d7927e5af798498aa6a5b903895ee1af8ee20a446c7f7 SHA512 76a5a340b13f0053ca3c5e94ed24380ea8d29b45ac8655419e22eaadb1e4a827c04d2e7e36b65145c4964e6526f656618fc6ac144e277ef53cb7373e6239e3c3
diff --git a/kde-misc/krename/files/krename-5.0.1-no-kjs.patch b/kde-misc/krename/files/krename-5.0.1-no-kjs.patch
new file mode 100644
index 000000000000..f4b7eb786890
--- /dev/null
+++ b/kde-misc/krename/files/krename-5.0.1-no-kjs.patch
@@ -0,0 +1,519 @@
+From 407b612a93128b9f935a686d5ff82c7ee06087f5 Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Thu, 17 Dec 2020 13:19:56 +0100
+Subject: [PATCH 1/5] reduce nesting
+
+easier on the eyes
+---
+ src/scriptplugin.cpp | 63 +++++++++++++++++++++++---------------------
+ 1 file changed, 33 insertions(+), 30 deletions(-)
+
+diff --git a/src/scriptplugin.cpp b/src/scriptplugin.cpp
+index 0790fd4..8f4b11e 100644
+--- a/src/scriptplugin.cpp
++++ b/src/scriptplugin.cpp
+@@ -175,36 +175,39 @@ void ScriptPlugin::initKRenameVars(const KRenameFile &file, int index)
+ file.srcDirectory());
+
+ // User definitions, set them only on first file
+- if (index == 0) {
+- for (int i = 0; i < m_widget->listVariables->topLevelItemCount(); i++) {
+- // TODO, we have to know the type of the variable!
+- QTreeWidgetItem *item = m_widget->listVariables->topLevelItem(i);
+- if (item) {
+- EVarType eVarType = static_cast<EVarType>(item->data(1, Qt::UserRole).toInt());
+- const QString &name = item->text(0);
+- const QString &value = item->text(1);
+- switch (eVarType) {
+- default:
+- case eVarType_String:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toUtf8().data());
+- break;
+- case eVarType_Int:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toInt());
+- break;
+- case eVarType_Double:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toDouble());
+- break;
+- case eVarType_Bool:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name,
+- (value.toLower() == "true" ? true : false));
+- break;
+-
+- }
+- }
++ if (index != 0) {
++ return;
++ }
++
++ for (int i = 0; i < m_widget->listVariables->topLevelItemCount(); i++) {
++ // TODO, we have to know the type of the variable!
++ QTreeWidgetItem *item = m_widget->listVariables->topLevelItem(i);
++ if (!item) {
++ continue;
++ }
++
++ EVarType eVarType = static_cast<EVarType>(item->data(1, Qt::UserRole).toInt());
++ const QString &name = item->text(0);
++ const QString &value = item->text(1);
++ switch (eVarType) {
++ default:
++ case eVarType_String:
++ m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
++ name, value.toUtf8().data());
++ break;
++ case eVarType_Int:
++ m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
++ name, value.toInt());
++ break;
++ case eVarType_Double:
++ m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
++ name, value.toDouble());
++ break;
++ case eVarType_Bool:
++ m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
++ name,
++ (value.toLower() == "true" ? true : false));
++ break;
+ }
+ }
+ }
+--
+2.29.2
+
+
+From f80de4b81846da45c4cc16c585a159872dcc2c29 Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Thu, 17 Dec 2020 13:24:37 +0100
+Subject: [PATCH 2/5] don't needlessly use qpointer
+
+for one it has no value, scopedpointer might. we don't need a pointer
+at all though, simply put qdialog on the stack and let the compiler
+take care of it
+---
+ src/scriptplugin.cpp | 44 ++++++++++++++++++++++----------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/src/scriptplugin.cpp b/src/scriptplugin.cpp
+index 8f4b11e..fec61e7 100644
+--- a/src/scriptplugin.cpp
++++ b/src/scriptplugin.cpp
+@@ -28,7 +28,6 @@
+ #include <QTemporaryFile>
+ #include <QFile>
+ #include <QMenu>
+-#include <QPointer>
+ #include <QTextStream>
+ #include <QVariant>
+ #include <QFileDialog>
+@@ -228,7 +227,7 @@ void ScriptPlugin::slotEnableControls()
+
+ void ScriptPlugin::slotAdd()
+ {
+- QPointer<QDialog> dialog = new QDialog();
++ QDialog dialog;
+ Ui::ScriptPluginDialog dlg;
+
+ QStringList types;
+@@ -238,32 +237,33 @@ void ScriptPlugin::slotAdd()
+ types << i18n("Double");
+ types << i18n("Boolean");
+
+- dlg.setupUi(dialog);
++ dlg.setupUi(&dialog);
+ dlg.comboType->addItems(types);
+
+- if (dialog->exec() == QDialog::Accepted) {
+- QString name = dlg.lineName->text();
+- QString value = dlg.lineValue->text();
++ if (dialog.exec() != QDialog::Accepted) {
++ return;
++ }
+
+- // Build a Java script statement
+- QString script = name + " = " + value + ';';
++ QString name = dlg.lineName->text();
++ QString value = dlg.lineValue->text();
+
+- KJSInterpreter interpreter;
+- KJSResult result = m_interpreter->evaluate(script, nullptr);
+- if (result.isException()) {
+- KMessageBox::error(m_parent,
+- i18n("A JavaScript error has occurred: ") +
+- result.errorMessage(), this->name());
+- } else {
+- QTreeWidgetItem *item = new QTreeWidgetItem();
+- item->setText(0, name);
+- item->setText(1, value);
+- item->setData(1, Qt::UserRole, QVariant(dlg.comboType->currentIndex()));
++ // Build a Java script statement
++ QString script = name + " = " + value + ';';
+
+- m_widget->listVariables->addTopLevelItem(item);
+- }
++ KJSInterpreter interpreter;
++ KJSResult result = m_interpreter->evaluate(script, nullptr);
++ if (result.isException()) {
++ KMessageBox::error(m_parent,
++ i18n("A JavaScript error has occurred: ") +
++ result.errorMessage(), this->name());
++ } else {
++ QTreeWidgetItem *item = new QTreeWidgetItem();
++ item->setText(0, name);
++ item->setText(1, value);
++ item->setData(1, Qt::UserRole, QVariant(dlg.comboType->currentIndex()));
++
++ m_widget->listVariables->addTopLevelItem(item);
+ }
+- delete dialog;
+ }
+
+ void ScriptPlugin::slotRemove()
+--
+2.29.2
+
+
+From 5979b30da5b385008894ff5577da917dd888959e Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Thu, 17 Dec 2020 13:32:41 +0100
+Subject: [PATCH 3/5] fix dangerously implicit int->int->enum mapping
+
+the type order in the qstringlist was implicitly the int values of the
+type enum. incredibly scary. instead push the items into the combobox
+along with their enum value as Qt::UserRole and then pass that along.
+this ensures (kind of) that the int we cast back to enum in
+initKRenameVars will be an actual enum value
+---
+ src/scriptplugin.cpp | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/src/scriptplugin.cpp b/src/scriptplugin.cpp
+index fec61e7..1933bc6 100644
+--- a/src/scriptplugin.cpp
++++ b/src/scriptplugin.cpp
+@@ -4,6 +4,7 @@
+ begin : Fri Nov 9 2007
+ copyright : (C) 2007 by Dominik Seichter
+ email : domseichter@web.de
++ copyright : (C) 2020 by Harald Sitter <sitter@kde.org>
+ ***************************************************************************/
+
+ /***************************************************************************
+@@ -230,15 +231,11 @@ void ScriptPlugin::slotAdd()
+ QDialog dialog;
+ Ui::ScriptPluginDialog dlg;
+
+- QStringList types;
+-
+- types << i18n("String");
+- types << i18n("Int");
+- types << i18n("Double");
+- types << i18n("Boolean");
+-
+ dlg.setupUi(&dialog);
+- dlg.comboType->addItems(types);
++ dlg.comboType->addItem(i18n("String"), eVarType_String);
++ dlg.comboType->addItem(i18n("Int"), eVarType_Int);
++ dlg.comboType->addItem(i18n("Double"), eVarType_Double);
++ dlg.comboType->addItem(i18n("Boolean"), eVarType_Bool);
+
+ if (dialog.exec() != QDialog::Accepted) {
+ return;
+@@ -260,7 +257,7 @@ void ScriptPlugin::slotAdd()
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, name);
+ item->setText(1, value);
+- item->setData(1, Qt::UserRole, QVariant(dlg.comboType->currentIndex()));
++ item->setData(1, Qt::UserRole, dlg.comboType->currentData());
+
+ m_widget->listVariables->addTopLevelItem(item);
+ }
+--
+2.29.2
+
+
+From 82161c323b7b0d4b77602551923118f304c5c536 Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Thu, 17 Dec 2020 15:05:49 +0100
+Subject: [PATCH 4/5] port away from stringy QMenu::addAction to functor based
+ API
+
+was introdcued in 5.6 so is fine to use and loads safer
+---
+ src/previewlist.cpp | 8 ++++----
+ src/progressdialog.cpp | 8 ++++----
+ src/scriptplugin.cpp | 10 +++++-----
+ 3 files changed, 13 insertions(+), 13 deletions(-)
+
+diff --git a/src/previewlist.cpp b/src/previewlist.cpp
+index df8097b..0d3ccb6 100644
+--- a/src/previewlist.cpp
++++ b/src/previewlist.cpp
+@@ -28,12 +28,12 @@ PreviewList::PreviewList(QWidget *parent)
+ : QTreeView(parent), m_model(nullptr)
+ {
+ m_menu = new QMenu("KRename", this); // we need any text here so that we have a title
+- m_menu->addAction(i18n("&Change filename manually..."), this, SLOT(slotManually()), QKeySequence("F2"));
++ m_menu->addAction(i18n("&Change filename manually..."), this, &PreviewList::slotManually, QKeySequence("F2"));
+ m_menu->addSeparator();
+- m_menu->addAction(i18n("&Open"), this, SLOT(slotOpen()));
++ m_menu->addAction(i18n("&Open"), this, &PreviewList::slotOpen);
+ m_menu->addSeparator();
+- m_menu->addAction(i18n("&Add..."), this, SIGNAL(addFiles()));
+- m_menu->addAction(i18n("&Remove"), this, SLOT(slotRemove()));
++ m_menu->addAction(i18n("&Add..."), this, &PreviewList::addFiles);
++ m_menu->addAction(i18n("&Remove"), this, &PreviewList::slotRemove);
+
+ connect(this, &PreviewList::activated, this, &PreviewList::slotManually);
+ }
+diff --git a/src/progressdialog.cpp b/src/progressdialog.cpp
+index 4eaaf1a..d217614 100644
+--- a/src/progressdialog.cpp
++++ b/src/progressdialog.cpp
+@@ -49,11 +49,11 @@ ProgressDialog::ProgressDialog(ESplitMode eSplitMode, unsigned int dot, QWidget
+ qApp, &QApplication::quit, Qt::QueuedConnection);
+
+ QMenu *menu = new QMenu(this);
+- menu->addAction(i18n("Restart &KRename..."), this, SLOT(slotRestartKRename()));
++ menu->addAction(i18n("Restart &KRename..."), this, &ProgressDialog::slotRestartKRename);
+ menu->addSeparator();
+- m_actProcessed = menu->addAction(i18n("Rename Processed Files &Again..."), this, SLOT(slotRenameProcessedAgain()));
+- m_actUnprocessed = menu->addAction(i18n("Rename &Unprocessed Files Again..."), this, SLOT(slotRenameUnprocessedAgain()));
+- menu->addAction(i18n("&Rename All Files Again..."), this, SLOT(slotRenameAllAgain()));
++ m_actProcessed = menu->addAction(i18n("Rename Processed Files &Again..."), this, &ProgressDialog::slotRenameProcessedAgain);
++ m_actUnprocessed = menu->addAction(i18n("Rename &Unprocessed Files Again..."), this, &ProgressDialog::slotRenameUnprocessedAgain);
++ menu->addAction(i18n("&Rename All Files Again..."), this, &ProgressDialog::slotRenameAllAgain);
+
+ m_buttonMore->setMenu(menu);
+ }
+diff --git a/src/scriptplugin.cpp b/src/scriptplugin.cpp
+index 1933bc6..46b27ca 100644
+--- a/src/scriptplugin.cpp
++++ b/src/scriptplugin.cpp
+@@ -68,11 +68,11 @@ ScriptPlugin::ScriptPlugin(PluginLoader *loader)
+
+ m_help.append("[js;4+5];;" + i18n("Insert a snippet of JavaScript code (4+5 in this case)"));
+
+- m_menu->addAction(i18n("Index of the current file"), this, SLOT(slotInsertIndex()));
+- m_menu->addAction(i18n("URL of the current file"), this, SLOT(slotInsertUrl()));
+- m_menu->addAction(i18n("Filename of the current file"), this, SLOT(slotInsertFilename()));
+- m_menu->addAction(i18n("Extension of the current file"), this, SLOT(slotInsertExtension()));
+- m_menu->addAction(i18n("Directory of the current file"), this, SLOT(slotInsertDirectory()));
++ m_menu->addAction(i18n("Index of the current file"), this, &ScriptPlugin::slotInsertIndex);
++ m_menu->addAction(i18n("URL of the current file"), this, &ScriptPlugin::slotInsertUrl);
++ m_menu->addAction(i18n("Filename of the current file"), this, &ScriptPlugin::slotInsertFilename);
++ m_menu->addAction(i18n("Extension of the current file"), this, &ScriptPlugin::slotInsertExtension);
++ m_menu->addAction(i18n("Directory of the current file"), this, &ScriptPlugin::slotInsertDirectory);
+ }
+
+ ScriptPlugin::~ScriptPlugin()
+--
+2.29.2
+
+
+From e0a93830d0ea0c71ab649b7e68af0238bd48eb10 Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Thu, 17 Dec 2020 13:45:07 +0100
+Subject: [PATCH 5/5] port from deprecated kjs to qjsengine
+
+for kf6 todo https://phabricator.kde.org/T11604
+
+kjs is deprecated and we want to move away from it. this ports to
+qjsengine which does what we need for krename just fine and is also
+supported in qt6 still
+
+all use cases of the js plugin still seem to work fine. variable
+definition, function definition and using either in the replacement.
+same for the implicit global variables.
+---
+ CMakeLists.txt | 2 +-
+ src/CMakeLists.txt | 2 +-
+ src/scriptplugin.cpp | 55 ++++++++++++++------------------------------
+ src/scriptplugin.h | 6 +++--
+ 4 files changed, 23 insertions(+), 42 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b39e18..e1673e1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -17,7 +17,7 @@ include(FeatureSummary)
+ include(KDECompilerSettings NO_POLICY_SCOPE)
+ include(FeatureSummary)
+
+-find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
++find_package(Qt5 REQUIRED COMPONENTS Core Qml Widgets)
+ find_package(KF5 REQUIRED COMPONENTS
+ Completion
+ Config
+@@ -27,7 +27,6 @@ find_package(KF5 REQUIRED COMPONENTS
+ IconThemes
+ ItemViews
+ JobWidgets
+- JS
+ KIO
+ Service
+ WidgetsAddons
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 3f262b3..bee7378 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -128,9 +128,9 @@ target_link_libraries(krename
+ KF5::KIOCore
+ KF5::KIOFileWidgets
+ KF5::I18n
+- KF5::JSApi
+ KF5::IconThemes
+ Qt5::Widgets
++ Qt5::Qml
+ )
+ if(TAGLIB_FOUND)
+ target_link_libraries(krename
+diff --git a/src/scriptplugin.cpp b/src/scriptplugin.cpp
+index d7f7125..651e656 100644
+--- a/src/scriptplugin.cpp
++++ b/src/scriptplugin.cpp
+@@ -18,8 +18,7 @@
+ #include <QTextStream>
+ #include <QVariant>
+ #include <QFileDialog>
+-
+-#include <kjs/kjsinterpreter.h>
++#include <QDebug>
+
+ #include "ui_scriptplugindialog.h"
+ #include "ui_scriptpluginwidget.h"
+@@ -46,7 +45,6 @@ ScriptPlugin::ScriptPlugin(PluginLoader *loader)
+ {
+ m_name = i18n("JavaScript Plugin");
+ m_icon = "applications-development";
+- m_interpreter = new KJSInterpreter();
+ m_menu = new QMenu();
+ m_widget = new Ui::ScriptPluginWidget();
+
+@@ -65,7 +63,6 @@ ScriptPlugin::~ScriptPlugin()
+ {
+ delete m_widget;
+ delete m_menu;
+- delete m_interpreter;
+ }
+
+ QString ScriptPlugin::processFile(BatchRenamer *b, int index,
+@@ -90,13 +87,13 @@ QString ScriptPlugin::processFile(BatchRenamer *b, int index,
+ // Make sure definitions are executed first
+ script = definitions + '\n' + script;
+
+- KJSResult result = m_interpreter->evaluate(script, nullptr);
+- if (result.isException()) {
+- qDebug("JavaScript Error: %s", result.errorMessage().toUtf8().data());
++ const QJSValue result = m_engine.evaluate(script);
++ if (result.isError()) {
++ qDebug() << "JavaScript Error:" << result.toString();
+ return QString();
+ }
+
+- return result.value().toString(m_interpreter->globalContext());
++ return result.toString();
+ }
+
+ return QString();
+@@ -144,21 +141,11 @@ void ScriptPlugin::createUI(QWidget *parent) const
+ void ScriptPlugin::initKRenameVars(const KRenameFile &file, int index)
+ {
+ // KRename definitions
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- ScriptPlugin::s_pszVarNameIndex,
+- index);
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- ScriptPlugin::s_pszVarNameUrl,
+- file.srcUrl().url());
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- ScriptPlugin::s_pszVarNameFilename,
+- file.srcFilename());
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- ScriptPlugin::s_pszVarNameExtension,
+- file.srcExtension());
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- ScriptPlugin::s_pszVarNameDirectory,
+- file.srcDirectory());
++ m_engine.globalObject().setProperty(ScriptPlugin::s_pszVarNameIndex, index);
++ m_engine.globalObject().setProperty(ScriptPlugin::s_pszVarNameUrl, file.srcUrl().url());
++ m_engine.globalObject().setProperty(ScriptPlugin::s_pszVarNameFilename, file.srcFilename());
++ m_engine.globalObject().setProperty(ScriptPlugin::s_pszVarNameExtension, file.srcExtension());
++ m_engine.globalObject().setProperty(ScriptPlugin::s_pszVarNameDirectory, file.srcDirectory());
+
+ // User definitions, set them only on first file
+ if (index != 0) {
+@@ -178,21 +165,16 @@ void ScriptPlugin::initKRenameVars(const KRenameFile &file, int index)
+ switch (eVarType) {
+ default:
+ case eVarType_String:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toUtf8().data());
++ m_engine.globalObject().setProperty(name, value);
+ break;
+ case eVarType_Int:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toInt());
++ m_engine.globalObject().setProperty(name, value.toInt());
+ break;
+ case eVarType_Double:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name, value.toDouble());
++ m_engine.globalObject().setProperty(name, value.toDouble());
+ break;
+ case eVarType_Bool:
+- m_interpreter->globalObject().setProperty(m_interpreter->globalContext(),
+- name,
+- (value.toLower() == "true" ? true : false));
++ m_engine.globalObject().setProperty(name, (value.toLower() == "true" ? true : false));
+ break;
+ }
+ }
+@@ -233,12 +215,9 @@ void ScriptPlugin::slotAdd()
+ // Build a Java script statement
+ QString script = name + " = " + value + ';';
+
+- KJSInterpreter interpreter;
+- KJSResult result = m_interpreter->evaluate(script, nullptr);
+- if (result.isException()) {
+- KMessageBox::error(m_parent,
+- i18n("A JavaScript error has occurred: ") +
+- result.errorMessage(), this->name());
++ const QJSValue result = m_engine.evaluate(script);
++ if (result.isError()) {
++ KMessageBox::error(m_parent, i18n("A JavaScript error has occurred: ") + result.toString(), this->name());
+ } else {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, name);
+diff --git a/src/scriptplugin.h b/src/scriptplugin.h
+index 367310b..f91e79b 100644
+--- a/src/scriptplugin.h
++++ b/src/scriptplugin.h
+@@ -3,9 +3,10 @@
+
+ #include "plugin.h"
+
++#include <QJSEngine>
++
+ class QMenu;
+
+-class KJSInterpreter;
+ class KRenameFile;
+
+ namespace Ui
+@@ -171,7 +173,7 @@ private:
+
+ QStringList m_keys;
+ QStringList m_help;
+- KJSInterpreter *m_interpreter;
++ QJSEngine m_engine;
+ QWidget *m_parent;
+ QMenu *m_menu;
+
+--
+2.29.2
+
diff --git a/kde-misc/krename/krename-5.0.1-r1.ebuild b/kde-misc/krename/krename-5.0.1-r1.ebuild
new file mode 100644
index 000000000000..168940d1e283
--- /dev/null
+++ b/kde-misc/krename/krename-5.0.1-r1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+ECM_TEST="true"
+KFMIN=5.70.0
+QTMIN=5.14.2
+inherit ecm kde.org
+
+DESCRIPTION="Powerful batch file renamer"
+HOMEPAGE="https://apps.kde.org/en/krename https://userbase.kde.org/KRename"
+
+if [[ ${KDE_BUILD_TYPE} != live ]]; then
+ SRC_URI="mirror://kde/stable/${PN}/${PV}/src/${P}.tar.xz"
+ KEYWORDS="~amd64 ~arm64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="5"
+IUSE="exif pdf taglib truetype"
+
+BDEPEND="sys-devel/gettext"
+DEPEND="
+ >=dev-qt/qtdeclarative-${QTMIN}:5
+ >=dev-qt/qtgui-${QTMIN}:5
+ >=dev-qt/qtwidgets-${QTMIN}:5
+ >=dev-qt/qtxml-${QTMIN}:5
+ >=kde-frameworks/kcompletion-${KFMIN}:5
+ >=kde-frameworks/kconfig-${KFMIN}:5
+ >=kde-frameworks/kcoreaddons-${KFMIN}:5
+ >=kde-frameworks/kcrash-${KFMIN}:5
+ >=kde-frameworks/ki18n-${KFMIN}:5
+ >=kde-frameworks/kiconthemes-${KFMIN}:5
+ >=kde-frameworks/kio-${KFMIN}:5
+ >=kde-frameworks/kitemviews-${KFMIN}:5
+ >=kde-frameworks/kjobwidgets-${KFMIN}:5
+ >=kde-frameworks/kservice-${KFMIN}:5
+ >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+ >=kde-frameworks/kxmlgui-${KFMIN}:5
+ exif? ( media-gfx/exiv2:= )
+ pdf? ( app-text/podofo:= )
+ taglib? ( media-libs/taglib )
+ truetype? ( media-libs/freetype:2 )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-no-kjs.patch" )
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake_use_find_package exif LibExiv2)
+ $(cmake_use_find_package pdf PoDoFo)
+ $(cmake_use_find_package taglib Taglib)
+ $(cmake_use_find_package truetype Freetype)
+ )
+ ecm_src_configure
+}