diff --git a/assets/languages/en.ts b/assets/languages/en.ts
index 6c8893621..0103776dc 100644
--- a/assets/languages/en.ts
+++ b/assets/languages/en.ts
@@ -985,6 +985,18 @@ your friend's SIP address or username.
logsUploadUrlLabel
Logs upload server url
+
+ logsUploadFailed
+ Failed to upload logs.
+
+
+ logsEnabledLabel
+ Logs enabled
+
+
+ cleanLogs
+ CLEAN LOGS
+
SettingsAudio
diff --git a/assets/languages/fr.ts b/assets/languages/fr.ts
index 5fbd3e926..510a938c9 100644
--- a/assets/languages/fr.ts
+++ b/assets/languages/fr.ts
@@ -983,6 +983,18 @@ Cliquez ici : <a href="%1">%1</a>
logsUploadUrlLabel
Url du serveur de logs
+
+ logsUploadFailed
+ L'envoi des logs a échoué.>
+
+
+ logsEnabledLabel
+ Logs activés.
+
+
+ cleanLogs
+ SUPPRIMER LOGS
+
SettingsAudio
diff --git a/src/app/App.cpp b/src/app/App.cpp
index b38bf02e2..7b9c07afe 100644
--- a/src/app/App.cpp
+++ b/src/app/App.cpp
@@ -86,7 +86,7 @@ App::App (int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::U
// Initialize logger.
shared_ptr config = ::getConfigIfExists(*mParser);
- Logger::init(SettingsModel::getLogsFolder(config));
+ Logger::init(SettingsModel::getLogsFolder(config), SettingsModel::getLogsEnabled(config));
if (mParser->isSet("verbose"))
Logger::getInstance()->setVerbose(true);
diff --git a/src/app/logger/Logger.cpp b/src/app/logger/Logger.cpp
index 3e840caef..979e44086 100644
--- a/src/app/logger/Logger.cpp
+++ b/src/app/logger/Logger.cpp
@@ -155,7 +155,11 @@ void Logger::log (QtMsgType type, const QMessageLogContext &context, const QStri
// -----------------------------------------------------------------------------
-void Logger::init (const QString &folder) {
+void Logger::enable (bool status) {
+ linphone_core_enable_log_collection(status ? LinphoneLogCollectionEnabled : LinphoneLogCollectionDisabled);
+}
+
+void Logger::init (const QString &folder, bool enabled) {
Q_ASSERT(!folder.isEmpty());
if (mInstance)
@@ -173,5 +177,5 @@ void Logger::init (const QString &folder) {
linphone_core_set_log_collection_path(::Utils::appStringToCoreString(folder).c_str());
linphone_core_set_log_collection_max_file_size(MAX_LOGS_COLLECTION_SIZE);
- linphone_core_enable_log_collection(LinphoneLogCollectionEnabled);
+ mInstance->enable(enabled);
}
diff --git a/src/app/logger/Logger.hpp b/src/app/logger/Logger.hpp
index 453d4a115..f676c9f93 100644
--- a/src/app/logger/Logger.hpp
+++ b/src/app/logger/Logger.hpp
@@ -39,7 +39,9 @@ public:
mVerbose = verbose;
}
- static void init (const QString &folder);
+ void enable (bool status);
+
+ static void init (const QString &folder, bool enabled);
static Logger *getInstance () {
return mInstance;
diff --git a/src/components/core/CoreHandlers.cpp b/src/components/core/CoreHandlers.cpp
index a73e344ca..dd2c3cdea 100644
--- a/src/components/core/CoreHandlers.cpp
+++ b/src/components/core/CoreHandlers.cpp
@@ -98,6 +98,14 @@ void CoreHandlers::onCallStateChanged (
App::getInstance()->getNotifier()->notifyReceivedCall(call);
}
+void CoreHandlers::onCallStatsUpdated (
+ const shared_ptr &,
+ const shared_ptr &call,
+ const shared_ptr &stats
+) {
+ call->getData("call-model").updateStats(stats);
+}
+
void CoreHandlers::onGlobalStateChanged (
const shared_ptr &,
linphone::GlobalState gstate,
@@ -114,12 +122,20 @@ void CoreHandlers::onGlobalStateChanged (
}
}
-void CoreHandlers::onCallStatsUpdated (
+void CoreHandlers::onLogCollectionUploadStateChanged (
const shared_ptr &,
- const shared_ptr &call,
- const shared_ptr &stats
+ linphone::CoreLogCollectionUploadState state,
+ const string &
) {
- call->getData("call-model").updateStats(stats);
+ emit logsUploadStateChanged(state);
+}
+
+void CoreHandlers::onLogCollectionUploadProgressIndication (
+ const shared_ptr &,
+ size_t,
+ size_t
+) {
+ // TODO;
}
void CoreHandlers::onMessageReceived (
diff --git a/src/components/core/CoreHandlers.hpp b/src/components/core/CoreHandlers.hpp
index 8e4d49462..59587cfc2 100644
--- a/src/components/core/CoreHandlers.hpp
+++ b/src/components/core/CoreHandlers.hpp
@@ -46,6 +46,7 @@ signals:
void callTransferFailed (const std::shared_ptr &call);
void callTransferSucceeded (const std::shared_ptr &call);
void coreStarted ();
+ void logsUploadStateChanged (linphone::CoreLogCollectionUploadState state);
void messageReceived (const std::shared_ptr &message);
void presenceReceived (const QString &sipAddress, const std::shared_ptr &presenceModel);
void registrationStateChanged (const std::shared_ptr &proxyConfig, linphone::RegistrationState state);
@@ -71,16 +72,28 @@ private:
const std::string &message
) override;
+ void onCallStatsUpdated (
+ const std::shared_ptr &core,
+ const std::shared_ptr &call,
+ const std::shared_ptr &stats
+ ) override;
+
void onGlobalStateChanged (
const std::shared_ptr &core,
linphone::GlobalState gstate,
const std::string &message
) override;
- void onCallStatsUpdated (
+ void onLogCollectionUploadStateChanged (
const std::shared_ptr &core,
- const std::shared_ptr &call,
- const std::shared_ptr &stats
+ linphone::CoreLogCollectionUploadState state,
+ const std::string &info
+ ) override;
+
+ void onLogCollectionUploadProgressIndication (
+ const std::shared_ptr &lc,
+ size_t offset,
+ size_t total
) override;
void onMessageReceived (
diff --git a/src/components/core/CoreManager.cpp b/src/components/core/CoreManager.cpp
index 86ba96842..02f9348c2 100644
--- a/src/components/core/CoreManager.cpp
+++ b/src/components/core/CoreManager.cpp
@@ -40,7 +40,8 @@ using namespace std;
CoreManager *CoreManager::mInstance = nullptr;
-CoreManager::CoreManager (QObject *parent, const QString &configPath) : QObject(parent), mHandlers(make_shared(this)) {
+CoreManager::CoreManager (QObject *parent, const QString &configPath) :
+ QObject(parent), mHandlers(make_shared(this)) {
mPromiseBuild = QtConcurrent::run(this, &CoreManager::createLinphoneCore, configPath);
QObject::connect(&mPromiseWatcher, &QFutureWatcher::finished, this, [] {
@@ -50,7 +51,9 @@ CoreManager::CoreManager (QObject *parent, const QString &configPath) : QObject(
emit mInstance->coreCreated();
});
- QObject::connect(mHandlers.get(), &CoreHandlers::coreStarted, this, [] {
+ CoreHandlers *coreHandlers = mHandlers.get();
+
+ QObject::connect(coreHandlers, &CoreHandlers::coreStarted, this, [] {
mInstance->mCallsListModel = new CallsListModel(mInstance);
mInstance->mContactsListModel = new ContactsListModel(mInstance);
mInstance->mSipAddressesModel = new SipAddressesModel(mInstance);
@@ -60,6 +63,11 @@ CoreManager::CoreManager (QObject *parent, const QString &configPath) : QObject(
emit mInstance->coreStarted();
});
+ QObject::connect(
+ coreHandlers, &CoreHandlers::logsUploadStateChanged,
+ this, &CoreManager::handleLogsUploadStateChanged
+ );
+
mPromiseWatcher.setFuture(mPromiseBuild);
}
@@ -190,6 +198,21 @@ void CoreManager::iterate () {
// -----------------------------------------------------------------------------
+void CoreManager::handleLogsUploadStateChanged (linphone::CoreLogCollectionUploadState state) {
+ switch (state) {
+ case linphone::CoreLogCollectionUploadStateInProgress:
+ break;
+ case linphone::CoreLogCollectionUploadStateDelivered:
+ emit logsUploaded(true);
+ break;
+ case linphone::CoreLogCollectionUploadStateNotDelivered:
+ emit logsUploaded(false);
+ break;
+ }
+}
+
+// -----------------------------------------------------------------------------
+
QString CoreManager::getDownloadUrl () {
return QStringLiteral(DOWNLOAD_URL);
}
diff --git a/src/components/core/CoreManager.hpp b/src/components/core/CoreManager.hpp
index e588fcda0..9116f807e 100644
--- a/src/components/core/CoreManager.hpp
+++ b/src/components/core/CoreManager.hpp
@@ -125,6 +125,8 @@ signals:
void coreCreated ();
void coreStarted ();
+ void logsUploaded (bool success);
+
private:
CoreManager (QObject *parent, const QString &configPath);
@@ -138,6 +140,8 @@ private:
void iterate ();
+ void handleLogsUploadStateChanged (linphone::CoreLogCollectionUploadState state);
+
static QString getDownloadUrl ();
std::shared_ptr mCore;
diff --git a/src/components/settings/SettingsModel.cpp b/src/components/settings/SettingsModel.cpp
index b29301511..0810aa92c 100644
--- a/src/components/settings/SettingsModel.cpp
+++ b/src/components/settings/SettingsModel.cpp
@@ -22,6 +22,7 @@
#include
+#include "../../app/logger/Logger.hpp"
#include "../../app/paths/Paths.hpp"
#include "../../utils/Utils.hpp"
#include "../core/CoreManager.hpp"
@@ -746,8 +747,24 @@ void SettingsModel::setLogsUploadUrl (const QString &url) {
// -----------------------------------------------------------------------------
+bool SettingsModel::getLogsEnabled () const {
+ return getLogsEnabled(mConfig);
+}
+
+void SettingsModel::setLogsEnabled (bool status) {
+ mConfig->setInt(UI_SECTION, "logs_enabled", status);
+ Logger::getInstance()->enable(status);
+ emit logsEnabledChanged(status);
+}
+
+// ---------------------------------------------------------------------------
+
QString SettingsModel::getLogsFolder (const shared_ptr &config) {
return ::Utils::coreStringToAppString(
config->getString(UI_SECTION, "logs_folder", Paths::getLogsDirPath())
);
}
+
+bool SettingsModel::getLogsEnabled (const std::shared_ptr &config) {
+ return config->getInt(UI_SECTION, "logs_enabled", false);
+}
diff --git a/src/components/settings/SettingsModel.hpp b/src/components/settings/SettingsModel.hpp
index 806b73df0..de0102c1c 100644
--- a/src/components/settings/SettingsModel.hpp
+++ b/src/components/settings/SettingsModel.hpp
@@ -124,6 +124,7 @@ class SettingsModel : public QObject {
Q_PROPERTY(QString logsFolder READ getLogsFolder WRITE setLogsFolder NOTIFY logsFolderChanged);
Q_PROPERTY(QString logsUploadUrl READ getLogsUploadUrl WRITE setLogsUploadUrl NOTIFY logsUploadUrlChanged);
+ Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged);
public:
enum MediaEncryption {
@@ -291,9 +292,13 @@ public:
QString getLogsUploadUrl () const;
void setLogsUploadUrl (const QString &url);
+ bool getLogsEnabled () const;
+ void setLogsEnabled (bool status);
+
// ---------------------------------------------------------------------------
static QString getLogsFolder (const std::shared_ptr &config);
+ static bool getLogsEnabled (const std::shared_ptr &config);
static const std::string UI_SECTION;
@@ -376,6 +381,7 @@ signals:
void logsFolderChanged (const QString &folder);
void logsUploadUrlChanged (const QString &url);
+ void logsEnabledChanged (bool status);
private:
std::shared_ptr mConfig;
diff --git a/ui/views/App/Settings/SettingsAdvanced.qml b/ui/views/App/Settings/SettingsAdvanced.qml
index decf026d7..2831bbd9e 100644
--- a/ui/views/App/Settings/SettingsAdvanced.qml
+++ b/ui/views/App/Settings/SettingsAdvanced.qml
@@ -38,6 +38,7 @@ TabContainer {
label: qsTr('logsUploadUrlLabel')
TextField {
+ readOnly: true
text: SettingsModel.logsUploadUrl
onEditingFinished: SettingsModel.logsUploadUrl = text
@@ -45,14 +46,50 @@ TabContainer {
}
}
+ FormLine {
+ FormGroup {
+ label: qsTr('logsEnabledLabel')
+
+ Switch {
+ checked: SettingsModel.logsEnabled
+
+ onClicked: SettingsModel.logsEnabled = !checked
+ }
+ }
+ }
+
FormEmptyLine {}
}
- TextButtonB {
+ Row {
anchors.right: parent.right
- text: qsTr('sendLogs')
+ spacing: 5
- onClicked: CoreManager.sendLogs()
+ TextButtonB {
+ text: qsTr('cleanLogs')
+
+ onClicked: CoreManager.cleanLogs()
+ }
+
+ TextButtonB {
+ enabled: !sendLogsBlock.loading
+ text: qsTr('sendLogs')
+
+ onClicked: sendLogsBlock.execute()
+ }
+ }
+
+ RequestBlock {
+ id: sendLogsBlock
+
+ action: CoreManager.sendLogs
+ width: parent.width
+
+ Connections {
+ target: CoreManager
+
+ onLogsUploaded: sendLogsBlock.stop(success ? '' : qsTr('logsUploadFailed'))
+ }
}
// -------------------------------------------------------------------------