From 4dc95c5a0ba05aa4f5427347653d5dddfd044781 Mon Sep 17 00:00:00 2001 From: luoqing Date: Fri, 8 Sep 2023 16:56:09 +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 --- ...nk-Source-device-list-displays-only-.patch | 306 ++++++++++++++++++ kiran-control-panel.spec | 6 +- 2 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch diff --git a/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch b/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch new file mode 100644 index 0000000..0dc8b67 --- /dev/null +++ b/0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch @@ -0,0 +1,306 @@ +From 091bc92282fd07e989747ca23157f7af5113c723 Mon Sep 17 00:00:00 2001 +From: luoqing +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 + + /* + * Implementation of interface class AudioDeviceInterface +@@ -28,6 +29,38 @@ AudioDeviceInterface::~AudioDeviceInterface() + { + } + ++QList AudioDeviceInterface::getPortsInfo() ++{ ++ QDBusPendingReply 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(); ++ } ++ ++ QList 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 + #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(property("volume")); + } + ++ QList getPortsInfo(); ++ + public Q_SLOTS: // METHODS + inline QDBusPendingReply 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 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 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 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 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 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 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 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 m_outputDevicesMap; + AudioDeviceInterface *m_defaultSink; +- int m_defaultDeviceIndex; + QDBusServiceWatcher *m_dbusServiceWatcher; + }; + +-- +2.33.0 + diff --git a/kiran-control-panel.spec b/kiran-control-panel.spec index 9c6533d..629f3f2 100644 --- a/kiran-control-panel.spec +++ b/kiran-control-panel.spec @@ -1,6 +1,6 @@ Name: kiran-control-panel Version: 2.5.5 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Kiran Control Panel 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 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 +Patch0009: 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch BuildRequires: gcc-c++ BuildRequires: cmake >= 3.2 @@ -171,6 +172,9 @@ make %{?_smp_mflags} rm -rf %{buildroot} %changelog +* Fri Sep 08 2023 luoqing - 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 - 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) -- Gitee