From 85c7b8c15a56178f3ff46cc5796f1073be250bc3 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Fri, 8 Mar 2024 12:40:45 +0100 Subject: [PATCH] Fix URI handlers and remote provisioning. --- CHANGELOG.md | 3 +- linphone-app/src/app/App.cpp | 38 +++++++++++++------ linphone-app/src/app/cli/Cli.cpp | 4 +- .../src/components/core/CoreManager.hpp | 1 - 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0cd45c3e..0db0f1b65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Screen Sharing -## 5.2.2 - 2024-03-07 +## 5.2.2 - 2024-03-08 ### Fixed - Day offset in start date when scheduling a conference. @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Empty route can now be set in account settings. - Network remote file can be used in chat attachment on Windows. - Crash on forwarding a message to a new secure chat room. +- URI handlers and remote provisioning. - Update SDK to 5.3.26. ### Added diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp index d397c3788..e31666615 100644 --- a/linphone-app/src/app/App.cpp +++ b/linphone-app/src/app/App.cpp @@ -230,10 +230,18 @@ QString App::getFetchConfig (QCommandLineParser *parser) { void App::useFetchConfig(const QString& filePath){ if( !filePath.isEmpty()){ - if(CoreManager::getInstance()->getSettingsModel()->getAutoApplyProvisioningConfigUriHandlerEnabled()) - setFetchConfig(filePath); - else - emit requestFetchConfig(filePath); + if(CoreManager::getInstance()->isInitialized()) { + if(CoreManager::getInstance()->getSettingsModel()->getAutoApplyProvisioningConfigUriHandlerEnabled()) + setFetchConfig(filePath); + else + emit requestFetchConfig(filePath); + }else{ + QObject * context = new QObject(); + connect(CoreManager::getInstance(), &CoreManager::coreManagerInitialized, context, [context, filePath, this](){ + useFetchConfig(filePath); + context->deleteLater(); + }); + } } } @@ -556,14 +564,20 @@ void App::initContentApp () { } } ); - - // Execute command argument if needed. - const QString commandArgument = getCommandArgument(); - if (!commandArgument.isEmpty()) { - Cli::CommandFormat format; - Cli::executeCommand(commandArgument, &format); - if (format == Cli::UriFormat || format == Cli::UrlFormat ) - mustBeIconified = true; + + // Execute command argument if needed + // Commands are executed only once. clearPsitionalArguments doesn't work as its name suggest : getPositionalArguments still retrieve user arguments. + // So execute the command only once. + static bool firstRun = false; + if(!firstRun){ + firstRun = true; + const QString commandArgument = getCommandArgument(); + if (!commandArgument.isEmpty()) { + Cli::CommandFormat format; + Cli::executeCommand(commandArgument, &format); + if (format == Cli::UriFormat || format == Cli::UrlFormat ) + mustBeIconified = true; + } } } diff --git a/linphone-app/src/app/cli/Cli.cpp b/linphone-app/src/app/cli/Cli.cpp index 2b3bc7247..39e977a71 100644 --- a/linphone-app/src/app/cli/Cli.cpp +++ b/linphone-app/src/app/cli/Cli.cpp @@ -524,9 +524,7 @@ void Cli::executeCommand (const QString &command, CommandFormat *format) { App::getInstance()->useFetchConfig(fetchUrl); }else{ shared_ptr address; - QString qAddress; - std::string t; - address = linphone::Factory::get()->createAddress(Utils::appStringToCoreString(transformedCommand));// Test if command is an address + QString qAddress = transformedCommand; if(Utils::isUsername(transformedCommand)){ address = linphone::Factory::get()->createAddress(Utils::appStringToCoreString(transformedCommand+"@to.remove")); address->setDomain(""); diff --git a/linphone-app/src/components/core/CoreManager.hpp b/linphone-app/src/components/core/CoreManager.hpp index a4703b940..d53116494 100644 --- a/linphone-app/src/components/core/CoreManager.hpp +++ b/linphone-app/src/components/core/CoreManager.hpp @@ -118,7 +118,6 @@ public: } SettingsModel *getSettingsModel () const { - Q_CHECK_PTR(mSettingsModel); return mSettingsModel; } EmojisSettingsModel *getEmojisSettingsModel () const {