diff --git a/src/main.cpp b/src/main.cpp index 0a2ab676b..99187a699 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,6 +74,20 @@ Q_IMPORT_PLUGIN(qico) #include "misc.h" #include "preferences.h" +class MessagesCollector : public QObject +{ + Q_OBJECT +public slots: + void collectMessage(const QString& message) + { + messages.append(message.split("|", QString::SkipEmptyParts)); + } +public: + QStringList messages; +}; + +#include "main.moc" + #if defined(Q_OS_WIN) && !defined(QBT_HAS_GETCURRENTPID) #error You seem to have updated QtSingleApplication without porting our custom QtSingleApplication::getRunningPid() function. Please see previous version to understate how it works. #endif @@ -113,6 +127,10 @@ int main(int argc, char *argv[]) // Create Application Application app("qBittorrent-" + misc::getUserIDString(), argc, argv); + MessagesCollector* messagesCollector = new MessagesCollector(); + QObject::connect(&app, SIGNAL(messageReceived(const QString &)), + messagesCollector, SLOT(collectMessage(const QString &))); + #ifndef DISABLE_GUI parseCommandLine(showVersion, showUsage, noSplash, torrents); #else @@ -131,9 +149,8 @@ int main(int argc, char *argv[]) return EXIT_SUCCESS; // Set environment variable - if (!qputenv("QBITTORRENT", QByteArray(VERSION))) { + if (!qputenv("QBITTORRENT", QByteArray(VERSION))) std::cerr << "Couldn't set environment variable...\n"; - } if (!userAgreesWithLegalNotice()) return EXIT_SUCCESS; @@ -141,6 +158,7 @@ int main(int argc, char *argv[]) // Check if qBittorrent is already running for this user if (app.isRunning()) { qDebug("qBittorrent is already running for this user."); + misc::msleep(300); #ifdef Q_OS_WIN DWORD pid = (DWORD)app.getRunningPid(); if (pid > 0) { @@ -181,8 +199,12 @@ int main(int argc, char *argv[]) #ifndef DISABLE_GUI MainWindow window(0, torrents); - QObject::connect(&app, SIGNAL(messageReceived(const QString&)), - &window, SLOT(processParams(const QString&))); + QObject::connect(&app, SIGNAL(messageReceived(const QString &)), + &window, SLOT(processParams(const QString &))); + QObject::disconnect(&app, SIGNAL(messageReceived(const QString &)), + messagesCollector, SLOT(collectMessage(const QString &))); + window.processParams(messagesCollector->messages); + delete messagesCollector; app.setActivationWindow(&window); #ifdef Q_OS_MAC static_cast(&app)->setReadyToProcessEvents(); @@ -190,8 +212,12 @@ int main(int argc, char *argv[]) #else // Load Headless class HeadlessLoader loader(torrents); - QObject::connect(&app, SIGNAL(messageReceived(const QString&)), - &loader, SLOT(processParams(const QString&))); + QObject::connect(&app, SIGNAL(messageReceived(const QString &)), + &loader, SLOT(processParams(const QString &))); + QObject::disconnect(&app, SIGNAL(messageReceived(const QString &)), + messagesCollector, SLOT(collectMessage(const QString &))); + loader.processParams(messagesCollector->messages); + delete messagesCollector; #endif int ret = app.exec(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 9aa90de24..e073e6e77 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -87,6 +87,7 @@ public slots: void updateAltSpeedsBtn(bool alternative); void updateNbTorrents(); void shutdownCleanUp(); + void processParams(const QStringList& params); protected slots: // GUI related slots @@ -128,7 +129,6 @@ protected slots: void updateGUI(); void loadPreferences(bool configure_session = true); void processParams(const QString& params); - void processParams(const QStringList& params); void addTorrent(QString path); void addUnauthenticatedTracker(const QPair &tracker); void processDownloadedFiles(QString path, QString url);