[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