[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [digikam] utilities/imageeditor/core: optimization FileOperation::runFiles()
From:       Maik Qualmann <metzpinguin () gmail ! com>
Date:       2016-07-14 19:18:24
Message-ID: E1bNm9Q-00068X-EU () code ! kde ! org
[Download RAW message or body]

Git commit fc79b21fd529314eda2bc62328cddec380ae9196 by Maik Qualmann.
Committed on 14/07/2016 at 19:17.
Pushed by mqualmann into branch 'master'.

optimization FileOperation::runFiles()
CCBUGS: 365375

M  +36   -36   utilities/imageeditor/core/fileoperation.cpp

http://commits.kde.org/digikam/fc79b21fd529314eda2bc62328cddec380ae9196

diff --git a/utilities/imageeditor/core/fileoperation.cpp \
b/utilities/imageeditor/core/fileoperation.cpp index 7f114da..9e2b5a8 100644
--- a/utilities/imageeditor/core/fileoperation.cpp
+++ b/utilities/imageeditor/core/fileoperation.cpp
@@ -193,55 +193,55 @@ bool FileOperation::runFiles(const KService& service, const \
QList<QUrl>& urls)  bool FileOperation::runFiles(const QString& appCmd, const \
                QList<QUrl>& urls, const QString& name,
                                                                              const \
QString& icon)  {
-    QString cmd(appCmd);
+    QRegExp split(QLatin1String(" +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
+    QStringList cmdList = appCmd.split(split, QString::SkipEmptyParts);
 
-    if (cmd.isEmpty())
+    if (cmdList.isEmpty())
     {
         return false;
     }
 
-    cmd.replace(QLatin1String("%c"), name);
-    cmd.replace(QLatin1String("%i"), icon);
-
-    if (!cmd.contains(QLatin1String("%f")) &&
-        !cmd.contains(QLatin1String("%u")) &&
-        !cmd.contains(QLatin1String("%F")) &&
-        !cmd.contains(QLatin1String("%U")))
+    if (!appCmd.contains(QLatin1String("%f"), Qt::CaseInsensitive) &&
+        !appCmd.contains(QLatin1String("%u"), Qt::CaseInsensitive) &&
+        !appCmd.contains(QLatin1String("%d"), Qt::CaseInsensitive))
     {
-        cmd += QLatin1String(" %f");
+        cmdList << QLatin1String("%f");
     }
 
-    if (!urls.isEmpty())
-    {
-        QString locFiles;
-
-        foreach(const QUrl& url, urls)
-        {
-            locFiles += QLatin1String(" \"");
-            locFiles += url.toLocalFile();
-            locFiles += QLatin1Char('"');
-        }
+    QStringList dirs;
+    QStringList files;
+    QStringList cmdArgs;
+    QString exec = cmdList.takeFirst();
 
-        cmd.replace(QLatin1String("%f"), QLatin1Char('"') +
-                                         urls.first().toLocalFile() +
-                                         QLatin1Char('"'));
-
-        cmd.replace(QLatin1String("%u"), QLatin1Char('"') +
-                                         urls.first().toLocalFile() +
-                                         QLatin1Char('"'));
-
-        cmd.replace(QLatin1String("%F"), locFiles);
-        cmd.replace(QLatin1String("%U"), locFiles);
+    foreach(const QUrl& url, urls)
+    {
+        dirs  << url.adjusted(QUrl::RemoveFilename).toLocalFile();
+        files << url.toLocalFile();
     }
-    else
+
+    foreach(const QString& cmd, cmdList)
     {
-        cmd.remove(QLatin1String("%f"));
-        cmd.remove(QLatin1String("%u"));
-        cmd.remove(QLatin1String("%F"));
-        cmd.remove(QLatin1String("%U"));
+        if (cmd == QLatin1String("%c"))
+            cmdArgs << name;
+        else if (cmd == QLatin1String("%i"))
+            cmdArgs << icon;
+        else if (cmd == QLatin1String("%f"))
+            cmdArgs << files.first();
+        else if (cmd == QLatin1String("%F"))
+            cmdArgs << files;
+        else if (cmd == QLatin1String("%u"))
+            cmdArgs << files.first();
+        else if (cmd == QLatin1String("%U"))
+            cmdArgs << files;
+        else if (cmd == QLatin1String("%d"))
+            cmdArgs << dirs.first();
+        else if (cmd == QLatin1String("%D"))
+            cmdArgs << dirs;
+        else
+            cmdArgs << cmd;
     }
 
-    return (QProcess::startDetached(QLatin1String("/bin/sh"), QStringList() << \
QLatin1String("-c") << cmd)); +    return (QProcess::startDetached(exec, cmdArgs));
 }
 
 KService::List FileOperation::servicesForOpenWith(const QList<QUrl>& urls)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic