diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 8286cf983..673ca6cbd 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/qthelp_regex.h" #include "core/update_checker.h" #include "core/crash_report_window.h" +#include "base/qthelp_regex.h" namespace { @@ -140,11 +141,11 @@ void Application::socketConnected() { const QStringList &lst(cSendPaths()); for (QStringList::const_iterator i = lst.cbegin(), e = lst.cend(); i != e; ++i) { commands += qsl("SEND:") + _escapeTo7bit(*i) + ';'; + commands += qsl("CMD:show;"); } if (!cStartUrl().isEmpty()) { commands += qsl("OPEN:") + _escapeTo7bit(cStartUrl()) + ';'; } - commands += qsl("CMD:show;"); DEBUG_LOG(("Application Info: writing commands %1").arg(commands)); _localSocket.write(commands.toLatin1()); @@ -169,7 +170,9 @@ void Application::socketReading() { _localSocketReadData.append(_localSocket.readAll()); if (QRegularExpression("RES:(\\d+);").match(_localSocketReadData).hasMatch()) { uint64 pid = _localSocketReadData.mid(4, _localSocketReadData.length() - 5).toULongLong(); - psActivateProcess(pid); + if (pid != kEmptyPidForCommandResponse) { + psActivateProcess(pid); + } LOG(("Show command response received, pid = %1, activating and quitting...").arg(pid)); return App::quit(); } @@ -270,16 +273,26 @@ void Application::readClients() { QStringRef cmd(&cmds, from, to - from); if (cmd.startsWith(qsl("CMD:"))) { Sandbox::execExternal(cmds.mid(from + 4, to - from - 4)); - QByteArray response(qsl("RES:%1;").arg(QCoreApplication::applicationPid()).toLatin1()); + const auto response = qsl("RES:%1;").arg(QCoreApplication::applicationPid()).toLatin1(); i->first->write(response.data(), response.size()); } else if (cmd.startsWith(qsl("SEND:"))) { if (cSendPaths().isEmpty()) { toSend.append(_escapeFrom7bit(cmds.mid(from + 5, to - from - 5))); } } else if (cmd.startsWith(qsl("OPEN:"))) { + auto activateRequired = true; if (cStartUrl().isEmpty()) { startUrl = _escapeFrom7bit(cmds.mid(from + 5, to - from - 5)).mid(0, 8192); + activateRequired = StartUrlRequiresActivate(startUrl); } + if (activateRequired) { + Sandbox::execExternal("show"); + } + const auto responsePid = activateRequired + ? QCoreApplication::applicationPid() + : kEmptyPidForCommandResponse; + const auto response = qsl("RES:%1;").arg(responsePid).toLatin1(); + i->first->write(response.data(), response.size()); } else { LOG(("Application Error: unknown command %1 passed in local socket").arg(QString(cmd.constData(), cmd.length()))); }