fix(audio):The Sink/Source device list displays only active ports. The port selection function is temporarily disabled
- 输入输出设备列表只显示目前已激活的端口,暂时禁用选择端口的功能 Related #13261
This commit is contained in:
parent
d510e71ff4
commit
d047f68c4e
306
0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch
Normal file
306
0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
From 091bc92282fd07e989747ca23157f7af5113c723 Mon Sep 17 00:00:00 2001
|
||||||
|
From: luoqing <luoqing@kylinsec.com.cn>
|
||||||
|
Date: Fri, 8 Sep 2023 15:53:56 +0800
|
||||||
|
Subject: [PATCH] fix(audio):The Sink/Source device list displays only active
|
||||||
|
ports. The port selection function is temporarily disabled
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
- 输入输出设备列表只显示目前已激活的端口,暂时禁用选择端口的功能
|
||||||
|
|
||||||
|
Related #13261
|
||||||
|
---
|
||||||
|
.../audio/src/dbus/audio-device-interface.cpp | 33 +++++++++
|
||||||
|
.../audio/src/dbus/audio-device-interface.h | 9 +++
|
||||||
|
plugins/audio/src/plugin/input-page.cpp | 69 +++++++------------
|
||||||
|
plugins/audio/src/plugin/input-page.h | 1 -
|
||||||
|
plugins/audio/src/plugin/output-page.cpp | 62 ++++++-----------
|
||||||
|
plugins/audio/src/plugin/output-page.h | 1 -
|
||||||
|
6 files changed, 89 insertions(+), 86 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/audio/src/dbus/audio-device-interface.cpp b/plugins/audio/src/dbus/audio-device-interface.cpp
|
||||||
|
index a3a750f..7ec201d 100644
|
||||||
|
--- a/plugins/audio/src/dbus/audio-device-interface.cpp
|
||||||
|
+++ b/plugins/audio/src/dbus/audio-device-interface.cpp
|
||||||
|
@@ -13,6 +13,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "audio-device-interface.h"
|
||||||
|
+#include <qt5-log-i.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Implementation of interface class AudioDeviceInterface
|
||||||
|
@@ -28,6 +29,38 @@ AudioDeviceInterface::~AudioDeviceInterface()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
+QList<AudioPortInfo> AudioDeviceInterface::getPortsInfo()
|
||||||
|
+{
|
||||||
|
+ QDBusPendingReply<QString> getPorts = GetPorts();
|
||||||
|
+ KLOG_DEBUG() << "getPorts:" << getPorts;
|
||||||
|
+
|
||||||
|
+ //解析默认sink的端口信息
|
||||||
|
+ QJsonParseError jsonParseError;
|
||||||
|
+ QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
|
||||||
|
+
|
||||||
|
+ if((doc.isNull()) || (jsonParseError.error != QJsonParseError::NoError))
|
||||||
|
+ {
|
||||||
|
+ return QList<AudioPortInfo>();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ QList<AudioPortInfo> portInfoList;
|
||||||
|
+ if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
|
||||||
|
+ {
|
||||||
|
+ QJsonArray array = doc.array();
|
||||||
|
+ for (int i = 0; i < array.count(); ++i)
|
||||||
|
+ {
|
||||||
|
+ QJsonObject object = array.at(i).toObject();
|
||||||
|
+ AudioPortInfo portInfo;
|
||||||
|
+ portInfo.description = object.value("description").toString();
|
||||||
|
+ portInfo.name = object.value("name").toString();
|
||||||
|
+ portInfo.priority = object.value("priority").toDouble();
|
||||||
|
+ portInfoList << portInfo;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return portInfoList;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void sendPropertyChangedDetailSignal(AudioDeviceInterface *ptr, const QString &propertyName, QVariant value)
|
||||||
|
{
|
||||||
|
if (propertyName == QStringLiteral("active_port"))
|
||||||
|
diff --git a/plugins/audio/src/dbus/audio-device-interface.h b/plugins/audio/src/dbus/audio-device-interface.h
|
||||||
|
index 29fbe6d..8bea01a 100644
|
||||||
|
--- a/plugins/audio/src/dbus/audio-device-interface.h
|
||||||
|
+++ b/plugins/audio/src/dbus/audio-device-interface.h
|
||||||
|
@@ -26,6 +26,13 @@
|
||||||
|
#include <QtDBus/QtDBus>
|
||||||
|
#include "audio-device-interface.h"
|
||||||
|
|
||||||
|
+struct AudioPortInfo
|
||||||
|
+{
|
||||||
|
+ QString description;
|
||||||
|
+ QString name;
|
||||||
|
+ double priority;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Proxy class for interface com.kylinsec.Kiran.SessionDaemon.Audio.Device
|
||||||
|
*/
|
||||||
|
@@ -103,6 +110,8 @@ public:
|
||||||
|
return qvariant_cast<double>(property("volume"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+ QList<AudioPortInfo> getPortsInfo();
|
||||||
|
+
|
||||||
|
public Q_SLOTS: // METHODS
|
||||||
|
inline QDBusPendingReply<QString> GetPorts()
|
||||||
|
{
|
||||||
|
diff --git a/plugins/audio/src/plugin/input-page.cpp b/plugins/audio/src/plugin/input-page.cpp
|
||||||
|
index 8b0ecaa..11275ec 100644
|
||||||
|
--- a/plugins/audio/src/plugin/input-page.cpp
|
||||||
|
+++ b/plugins/audio/src/plugin/input-page.cpp
|
||||||
|
@@ -198,48 +198,28 @@ void InputPage::initInputDevice()
|
||||||
|
|
||||||
|
void InputPage::initActivedPort()
|
||||||
|
{
|
||||||
|
- QDBusPendingReply<QString> getPorts = m_defaultSource->GetPorts();
|
||||||
|
- KLOG_DEBUG() << "getPorts:" << getPorts;
|
||||||
|
- //解析默认source的端口信息
|
||||||
|
- QJsonParseError jsonParseError;
|
||||||
|
- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
|
||||||
|
- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError)
|
||||||
|
- {
|
||||||
|
- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
|
||||||
|
- {
|
||||||
|
- QJsonArray array = doc.array();
|
||||||
|
- for (int i = 0; i < array.count(); ++i)
|
||||||
|
- {
|
||||||
|
- KLOG_DEBUG() << "array.at(i)" << array.at(i);
|
||||||
|
- QJsonObject object = array.at(i).toObject();
|
||||||
|
- QString description = object.value("description").toString();
|
||||||
|
- QString name = object.value("name").toString();
|
||||||
|
- double priority = object.value("priority").toDouble();
|
||||||
|
- KLOG_DEBUG() << "description" << description;
|
||||||
|
- KLOG_DEBUG() << "name" << name;
|
||||||
|
- KLOG_DEBUG() << "priority" << priority;
|
||||||
|
-
|
||||||
|
- ui->inputDevices->insertItem(i, description);
|
||||||
|
- ui->inputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息
|
||||||
|
- //获取已激活的端口在comobox中的index
|
||||||
|
- if (m_defaultSource->active_port() == name)
|
||||||
|
- {
|
||||||
|
- m_defaultDeviceIndex = i;
|
||||||
|
- KLOG_DEBUG() << "m_defaultDeviceIndex" << m_defaultDeviceIndex;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- //默认选中已激活的端口
|
||||||
|
- m_isValidPort = true;
|
||||||
|
- ui->inputDevices->setCurrentIndex(m_defaultDeviceIndex);
|
||||||
|
- ui->inputDevices->setEnabled(true);
|
||||||
|
- ui->volumeSetting->setEnabled(true);
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
+ QList<AudioPortInfo> portsInfo = m_defaultSource->getPortsInfo();
|
||||||
|
+
|
||||||
|
+ if(portsInfo.isEmpty())
|
||||||
|
{
|
||||||
|
KLOG_DEBUG() << "ports is null";
|
||||||
|
disableSettings();
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ Q_FOREACH (auto portInfo, portsInfo)
|
||||||
|
+ {
|
||||||
|
+ if(m_defaultSource->active_port() == portInfo.name)
|
||||||
|
+ {
|
||||||
|
+ ui->inputDevices->addItem(portInfo.description,portInfo.name);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ //默认选中已激活的端口
|
||||||
|
+ m_isValidPort = true;
|
||||||
|
+ ui->inputDevices->setEnabled(true);
|
||||||
|
+ ui->volumeSetting->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InputPage::initInputSettins()
|
||||||
|
@@ -304,13 +284,16 @@ void InputPage::disableSettings()
|
||||||
|
void InputPage::handleActivePortChanged(const QString &value)
|
||||||
|
{
|
||||||
|
KLOG_DEBUG() << "handleActivePortChanged :" << value;
|
||||||
|
- for (int i = 0; i < ui->inputDevices->count(); ++i)
|
||||||
|
+
|
||||||
|
+ QList<AudioPortInfo> portsInfo = m_defaultSource->getPortsInfo();
|
||||||
|
+
|
||||||
|
+ Q_FOREACH (auto portInfo, portsInfo)
|
||||||
|
{
|
||||||
|
- QString name = ui->inputDevices->itemData(i, Qt::UserRole).toString();
|
||||||
|
- if (name == value)
|
||||||
|
+ if(m_defaultSource->active_port() == portInfo.name)
|
||||||
|
{
|
||||||
|
- ui->inputDevices->setCurrentIndex(i);
|
||||||
|
- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i;
|
||||||
|
+ ui->inputDevices->clear();
|
||||||
|
+ ui->inputDevices->addItem(portInfo.description,portInfo.name);
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/plugins/audio/src/plugin/input-page.h b/plugins/audio/src/plugin/input-page.h
|
||||||
|
index 3b57daf..e9f6909 100644
|
||||||
|
--- a/plugins/audio/src/plugin/input-page.h
|
||||||
|
+++ b/plugins/audio/src/plugin/input-page.h
|
||||||
|
@@ -91,7 +91,6 @@ private:
|
||||||
|
AudioDeviceInterface *m_activedSource;
|
||||||
|
QMap<int, AudioDeviceInterface *> m_inputDevicesMap;
|
||||||
|
int m_defaultSourceIndex;
|
||||||
|
- int m_defaultDeviceIndex;
|
||||||
|
bool m_isValidPort = false;
|
||||||
|
|
||||||
|
QAudioInput *m_audioInput = nullptr;
|
||||||
|
diff --git a/plugins/audio/src/plugin/output-page.cpp b/plugins/audio/src/plugin/output-page.cpp
|
||||||
|
index 420cf98..1242b8a 100644
|
||||||
|
--- a/plugins/audio/src/plugin/output-page.cpp
|
||||||
|
+++ b/plugins/audio/src/plugin/output-page.cpp
|
||||||
|
@@ -93,47 +93,25 @@ void OutputPage::initOutputDevice()
|
||||||
|
|
||||||
|
void OutputPage::initActivedPort()
|
||||||
|
{
|
||||||
|
- QDBusPendingReply<QString> getPorts = m_defaultSink->GetPorts();
|
||||||
|
- KLOG_DEBUG() << "getPorts:" << getPorts;
|
||||||
|
-
|
||||||
|
- //解析默认sink的端口信息
|
||||||
|
- QJsonParseError jsonParseError;
|
||||||
|
- QJsonDocument doc = QJsonDocument::fromJson(getPorts.value().toUtf8(), &jsonParseError);
|
||||||
|
- if (!doc.isNull() && jsonParseError.error == QJsonParseError::NoError)
|
||||||
|
- {
|
||||||
|
- if (doc.isArray() && jsonParseError.error == QJsonParseError::NoError)
|
||||||
|
- {
|
||||||
|
- QJsonArray array = doc.array();
|
||||||
|
- for (int i = 0; i < array.count(); ++i)
|
||||||
|
- {
|
||||||
|
- KLOG_DEBUG() << "array.at(i)" << array.at(i);
|
||||||
|
- QJsonObject object = array.at(i).toObject();
|
||||||
|
- QString description = object.value("description").toString();
|
||||||
|
- QString name = object.value("name").toString();
|
||||||
|
- double priority = object.value("priority").toDouble();
|
||||||
|
- KLOG_DEBUG() << "description" << description;
|
||||||
|
- KLOG_DEBUG() << "name" << name;
|
||||||
|
- KLOG_DEBUG() << "priority" << priority;
|
||||||
|
- ui->outputDevices->insertItem(i, description);
|
||||||
|
- ui->outputDevices->setItemData(i, name, Qt::UserRole); //激活端口所需信息
|
||||||
|
-
|
||||||
|
- //获取已激活的端口在comobox中的index
|
||||||
|
- if (m_defaultSink->active_port() == name)
|
||||||
|
- {
|
||||||
|
- m_defaultDeviceIndex = i;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- //默认选中已激活的端口
|
||||||
|
- ui->outputDevices->setCurrentIndex(m_defaultDeviceIndex);
|
||||||
|
- initOutputSettins();
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
+ QList<AudioPortInfo> portsInfo = m_defaultSink->getPortsInfo();
|
||||||
|
+ if(portsInfo.isEmpty())
|
||||||
|
{
|
||||||
|
//无激活端口则禁用音量设置和平衡
|
||||||
|
KLOG_DEBUG() << "default sink ports is null";
|
||||||
|
disableSettings();
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ Q_FOREACH (auto portInfo, portsInfo)
|
||||||
|
+ {
|
||||||
|
+ if(m_defaultSink->active_port() == portInfo.name)
|
||||||
|
+ {
|
||||||
|
+ ui->outputDevices->addItem(portInfo.description,portInfo.name);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ initOutputSettins();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputPage::initOutputSettins()
|
||||||
|
@@ -202,13 +180,15 @@ void OutputPage::initConnect()
|
||||||
|
void OutputPage::handleActivePortChanged(const QString &value)
|
||||||
|
{
|
||||||
|
KLOG_DEBUG() << "handleActivePortChanged :" << value;
|
||||||
|
- for (int i = 0; i < ui->outputDevices->count(); ++i)
|
||||||
|
+ QList<AudioPortInfo> portsInfo = m_defaultSink->getPortsInfo();
|
||||||
|
+
|
||||||
|
+ Q_FOREACH (auto portInfo, portsInfo)
|
||||||
|
{
|
||||||
|
- QString name = ui->outputDevices->itemData(i, Qt::UserRole).toString();
|
||||||
|
- if (name == value)
|
||||||
|
+ if(m_defaultSink->active_port() == portInfo.name)
|
||||||
|
{
|
||||||
|
- ui->outputDevices->setCurrentIndex(i);
|
||||||
|
- KLOG_DEBUG() << "handleActivePortChanged setCurrentIndex " << i;
|
||||||
|
+ ui->outputDevices->clear();
|
||||||
|
+ ui->outputDevices->addItem(portInfo.description,portInfo.name);
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/plugins/audio/src/plugin/output-page.h b/plugins/audio/src/plugin/output-page.h
|
||||||
|
index abaf9a1..dea45e7 100644
|
||||||
|
--- a/plugins/audio/src/plugin/output-page.h
|
||||||
|
+++ b/plugins/audio/src/plugin/output-page.h
|
||||||
|
@@ -61,7 +61,6 @@ private:
|
||||||
|
AudioInterface *m_audioInterface;
|
||||||
|
QMap<int, AudioDeviceInterface *> m_outputDevicesMap;
|
||||||
|
AudioDeviceInterface *m_defaultSink;
|
||||||
|
- int m_defaultDeviceIndex;
|
||||||
|
QDBusServiceWatcher *m_dbusServiceWatcher;
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: kiran-control-panel
|
Name: kiran-control-panel
|
||||||
Version: 2.5.5
|
Version: 2.5.5
|
||||||
Release: 6%{?dist}
|
Release: 7%{?dist}
|
||||||
Summary: Kiran Control Panel
|
Summary: Kiran Control Panel
|
||||||
Summary(zh_CN): Kiran桌面控制面板
|
Summary(zh_CN): Kiran桌面控制面板
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ Patch0005: 0005-fix-account-Fixed-issues-related-to-creating-and-del.patch
|
|||||||
Patch0006: 0006-feature-network-When-the-gateway-setting-item-is-0.0.patch
|
Patch0006: 0006-feature-network-When-the-gateway-setting-item-is-0.0.patch
|
||||||
Patch0007: 0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch
|
Patch0007: 0007-fix-audio-Fix-parsing-error-when-json-contains-Chine.patch
|
||||||
Patch0008: 0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch
|
Patch0008: 0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch
|
||||||
|
Patch0009: 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch
|
||||||
|
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: cmake >= 3.2
|
BuildRequires: cmake >= 3.2
|
||||||
@ -172,6 +173,9 @@ make %{?_smp_mflags}
|
|||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Sep 08 2023 luoqing <luoqing@kylinsec.com.cn> - 2.5.5-7
|
||||||
|
- KYOS-F: The Sink/Source device list displays only active ports. The port selection function is temporarily disabled(#13261)
|
||||||
|
|
||||||
* Fri Sep 08 2023 luoqing <luoqing@kylinsec.com.cn> - 2.5.5-6
|
* Fri Sep 08 2023 luoqing <luoqing@kylinsec.com.cn> - 2.5.5-6
|
||||||
- KYOS-F: Fixed an issue where the volume tray icon did not change with the volume after the default Sink was changed(#14124)
|
- KYOS-F: Fixed an issue where the volume tray icon did not change with the volume after the default Sink was changed(#14124)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user