From 4fd0c33450b26dd6c326fa6a7e7d05adbd02a140 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Wed, 30 Sep 2020 14:54:25 -0400 Subject: [PATCH] avsettings: use a more declarative approach for the level meter - prevents a slurry of calls to stop/startAudioMeter Gitlab: #120 Gitlab: #124 Change-Id: I6118baab1a3f3e08e72a60a35682ce753e05e2eb --- src/accountadapter.cpp | 12 ----- src/accountadapter.h | 3 +- src/avadapter.cpp | 12 +++++ src/avadapter.h | 3 ++ src/settingsview/SettingsView.qml | 22 +-------- src/settingsview/components/AudioSettings.qml | 49 +++---------------- src/settingsview/components/AvSettingPage.qml | 1 - src/settingsview/components/LevelMeter.qml | 32 +++++++----- 8 files changed, 46 insertions(+), 88 deletions(-) diff --git a/src/accountadapter.cpp b/src/accountadapter.cpp index 693f1da2b..11007e0da 100644 --- a/src/accountadapter.cpp +++ b/src/accountadapter.cpp @@ -247,18 +247,6 @@ AccountAdapter::savePassword(const QString& accountId, return LRCInstance::accountModel().changeAccountPassword(accountId, oldPassword, newPassword); } -void -AccountAdapter::startAudioMeter(bool async) -{ - LRCInstance::startAudioMeter(async); -} - -void -AccountAdapter::stopAudioMeter(bool async) -{ - LRCInstance::stopAudioMeter(async); -} - void AccountAdapter::startPreviewing(bool force, bool async) { diff --git a/src/accountadapter.h b/src/accountadapter.h index 0f7ff21e1..33840a704 100644 --- a/src/accountadapter.h +++ b/src/accountadapter.h @@ -97,8 +97,7 @@ public: Q_INVOKABLE bool savePassword(const QString& accountId, const QString& oldPassword, const QString& newPassword); - Q_INVOKABLE void startAudioMeter(bool async); - Q_INVOKABLE void stopAudioMeter(bool async); + Q_INVOKABLE void startPreviewing(bool force = false, bool async = true); Q_INVOKABLE void stopPreviewing(bool async = true); Q_INVOKABLE bool hasVideoCall(); diff --git a/src/avadapter.cpp b/src/avadapter.cpp index 2633ea0c6..91cd9e2a4 100644 --- a/src/avadapter.cpp +++ b/src/avadapter.cpp @@ -126,3 +126,15 @@ AvAdapter::shareScreenArea(int screenNumber, int x, int y, int width, int height width < 128 ? 128 : width, height < 128 ? 128 : height); } + +void +AvAdapter::startAudioMeter(bool async) +{ + LRCInstance::startAudioMeter(async); +} + +void +AvAdapter::stopAudioMeter(bool async) +{ + LRCInstance::stopAudioMeter(async); +} diff --git a/src/avadapter.h b/src/avadapter.h index 111a5b473..cd30f7a74 100644 --- a/src/avadapter.h +++ b/src/avadapter.h @@ -64,4 +64,7 @@ protected: * Select screen area to display. */ Q_INVOKABLE void shareScreenArea(int screenNumber, int x, int y, int width, int height); + + Q_INVOKABLE void startAudioMeter(bool async); + Q_INVOKABLE void stopAudioMeter(bool async); }; diff --git a/src/settingsview/SettingsView.qml b/src/settingsview/SettingsView.qml index 1e5b95b54..da9ca9648 100644 --- a/src/settingsview/SettingsView.qml +++ b/src/settingsview/SettingsView.qml @@ -51,40 +51,25 @@ Rectangle { switch(sel) { case SettingsView.Account: pageIdCurrentAccountSettings.connectCurrentAccount() - - settingsViewRect.stopAudioMeter() settingsViewRect.stopPreviewing() - selectedMenu = sel - if(pageIdCurrentAccountSettings.isPhotoBoothOpened()) { settingsViewRect.setAvatar() } - pageIdCurrentAccountSettings.updateAccountInfoDisplayed() break case SettingsView.General: - try{ - settingsViewRect.stopAudioMeter() - settingsViewRect.stopPreviewing() - } catch(erro) {} - + settingsViewRect.stopPreviewing() selectedMenu = sel break case SettingsView.Media: selectedMenu = sel - settingsViewRect.stopPreviewing() avSettings.populateAVSettings() - settingsViewRect.startAudioMeter() break case SettingsView.Plugin: - try{ - settingsViewRect.stopAudioMeter() - settingsViewRect.stopPreviewing() - } catch(erro) {} - + settingsViewRect.stopPreviewing() selectedMenu = sel pluginSettings.populatePluginSettings() break @@ -102,7 +87,6 @@ Rectangle { // slots function leaveSettingsSlot(showMainView) { - settingsViewRect.stopAudioMeter() settingsViewRect.stopPreviewing() settingsViewRect.stopBooth() if (showMainView) @@ -137,8 +121,6 @@ Rectangle { anchors.fill: root - signal stopAudioMeter - signal startAudioMeter signal stopPreviewing signal stopBooth signal setAvatar diff --git a/src/settingsview/components/AudioSettings.qml b/src/settingsview/components/AudioSettings.qml index 9ac0b1f0d..c20b5b216 100644 --- a/src/settingsview/components/AudioSettings.qml +++ b/src/settingsview/components/AudioSettings.qml @@ -41,29 +41,6 @@ ColumnLayout { AUDIOMANAGER } - Connections { - target: settingsViewRect - - function onStopAudioMeter() { - stopAudioMeter() - } - - function onStartAudioMeter() { - startAudioMeter() - } - } - - Connections{ - target: AVModel - enabled: root.visible - - function onAudioMeter(id, level) { - if (id === "audiolayer_id") { - audioInputMeter.setLevel(level) - } - } - } - function populateAudioSettings() { inputComboBoxSetting.comboModel.reset() audioOutputDeviceModel.reset() @@ -79,16 +56,6 @@ ColumnLayout { audioManagerComboBoxSetting.visible = (audioManagerComboBoxSetting.comboModel.rowCount() > 0) } - function stopAudioMeter(async = true){ - audioInputMeter.stop() - AccountAdapter.stopAudioMeter(async) - } - - function startAudioMeter(async = true){ - audioInputMeter.start() - AccountAdapter.startAudioMeter(async) - } - AudioOutputDeviceModel{ id: audioOutputDeviceModel } @@ -117,12 +84,12 @@ ColumnLayout { role: "ID_UTF8" onIndexChanged: { - stopAudioMeter(false) + AvAdapter.stopAudioMeter(false) var selectedInputDeviceName = comboModel.data( comboModel.index(modelIndex, 0), AudioInputDeviceModel.Device_ID) AVModel.setInputDevice(selectedInputDeviceName) - startAudioMeter(false) + AvAdapter.startAudioMeter(false) } } @@ -154,12 +121,12 @@ ColumnLayout { role: "ID_UTF8" onIndexChanged: { - stopAudioMeter(false) + AvAdapter.stopAudioMeter(false) var selectedOutputDeviceName = audioOutputDeviceModel.data( audioOutputDeviceModel.index(modelIndex, 0), AudioOutputDeviceModel.Device_ID) AVModel.setOutputDevice(selectedOutputDeviceName) - startAudioMeter(false) + AvAdapter.startAudioMeter(false) } } @@ -178,12 +145,12 @@ ColumnLayout { role: "ID_UTF8" onIndexChanged: { - stopAudioMeter(false) + AvAdapter.stopAudioMeter(false) var selectedRingtoneDeviceName = audioOutputDeviceModel.data( audioOutputDeviceModel.index(modelIndex, 0), AudioOutputDeviceModel.Device_ID) AVModel.setRingtoneDevice(selectedRingtoneDeviceName) - startAudioMeter(false) + AvAdapter.startAudioMeter(false) } } @@ -201,11 +168,11 @@ ColumnLayout { role: "ID_UTF8" onIndexChanged: { - stopAudioMeter(false) + AvAdapter.stopAudioMeter(false) var selectedAudioManager = comboModel.data( comboModel.index(modelIndex, 0), AudioManagerListModel.AudioManagerID) AVModel.setAudioManager(selectedAudioManager) - startAudioMeter(false) + AvAdapter.startAudioMeter(false) populateAudioSettings() } } diff --git a/src/settingsview/components/AvSettingPage.qml b/src/settingsview/components/AvSettingPage.qml index 19fb86bd2..200d6bbc6 100644 --- a/src/settingsview/components/AvSettingPage.qml +++ b/src/settingsview/components/AvSettingPage.qml @@ -38,7 +38,6 @@ Rectangle { onVisibleChanged: { if (!visible) { videoSettings.stopPreviewing() - audioSettings.stopAudioMeter() } } diff --git a/src/settingsview/components/LevelMeter.qml b/src/settingsview/components/LevelMeter.qml index d8cf9eeef..d5b984cea 100644 --- a/src/settingsview/components/LevelMeter.qml +++ b/src/settingsview/components/LevelMeter.qml @@ -18,30 +18,38 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 +import net.jami.Models 1.0 +import net.jami.Adapters 1.0 ProgressBar { id: root + property real rmsLevel: 0 + value: { return clamp(rmsLevel * 300.0, 0.0, 100.0) } - property real rmsLevel: 0 - - function clamp(num,a,b) { - return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)) + onVisibleChanged: { + if (visible) { + rmsLevel = 0 + AvAdapter.startAudioMeter(true) + } else + AvAdapter.stopAudioMeter(true) } - function start() { - rmsLevel = 0 + function clamp(num, a, b) { + return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)) } - function stop() { - - } + Connections{ + target: AVModel + enabled: root.visible - function setLevel(rmsLevelIn) { - rmsLevel = rmsLevelIn + function onAudioMeter(id, level) { + if (id === "audiolayer_id") { + rmsLevel = level + } + } } - } -- GitLab