Skip to content

Commit 22b176c

Browse files
pppanghu77deepin-bot[bot]
authored andcommitted
fix: [Audio] Unify audio device detection and adapt DBus service for Qt version
This commit consolidates the duplicate audio device detection logic and adapts the DBus service selection based on Qt version: 1. In iflytek_ai_assistant.cpp: - Add Qt version check to select appropriate DBus service - Qt >= 6.0: uses "org.deepin.dde.Audio1" (new DDE audio service) - Qt < 6.0: uses "com.deepin.daemon.Audio" (legacy audio service) 2. In dtextedit.cpp: - Remove duplicate checkAudioOutputDevice() and checkAudioInputDevice() methods - Update onAudioPortEnabledChanged() to use IflytekAiAssistant's unified methods - Add Qt version check for DBus signal connection to PortEnabledChanged 3. In dtextedit.h: - Remove declarations of checkAudioOutputDevice() and checkAudioInputDevice() This refactoring eliminates code duplication by using IflytekAiAssistant as the single source of truth for audio device detection, improving maintainability and ensuring consistent behavior across the application. 本次提交整合了重复的音频设备检测逻辑,并根据Qt版本适配不同的DBus服务: 1. iflytek_ai_assistant.cpp: - 添加Qt版本判断来选择合适的DBus服务 - Qt >= 6.0: 使用 "org.deepin.dde.Audio1" (新版DDE音频服务) - Qt < 6.0: 使用 "com.deepin.daemon.Audio" (旧版音频服务) 2. dtextedit.cpp: - 删除重复的 checkAudioOutputDevice() 和 checkAudioInputDevice() 方法 - 修改 onAudioPortEnabledChanged() 使用 IflytekAiAssistant 的统一方法 - 为 PortEnabledChanged 信号连接添加Qt版本判断 3. dtextedit.h: - 删除 checkAudioOutputDevice() 和 checkAudioInputDevice() 的声明 此次重构消除了代码重复,使用 IflytekAiAssistant 作为音频设备检测的唯一 入口,提高了代码可维护性并确保应用程序行为的一致性。 Log: fix: [Audio] Unify audio device detection and adapt DBus service for Qt version
1 parent 5cd3fcb commit 22b176c

3 files changed

Lines changed: 21 additions & 72 deletions

File tree

src/common/iflytek_ai_assistant.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,16 @@
2525
#include <DSysInfo>
2626

2727
namespace {
28-
// DDE音频服务常量
28+
// DDE音频服务常量 (根据Qt版本选择不同的DBus服务)
29+
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
2930
const QString AUDIO_SERVICE = "org.deepin.dde.Audio1";
3031
const QString AUDIO_PATH = "/org/deepin/dde/Audio1";
3132
const QString AUDIO_INTERFACE = "org.deepin.dde.Audio1";
33+
#else
34+
const QString AUDIO_SERVICE = "com.deepin.daemon.Audio";
35+
const QString AUDIO_PATH = "/com/deepin/daemon/Audio";
36+
const QString AUDIO_INTERFACE = "com.deepin.daemon.Audio";
37+
#endif
3238

3339
// 端口方向枚举
3440
enum PortDirection {

src/editor/dtextedit.cpp

Lines changed: 13 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,18 @@ TextEdit::TextEdit(QWidget *parent)
141141
break;
142142
}
143143

144-
// 连接音频设备状态变化信号
144+
// 连接音频设备状态变化信号 (根据Qt版本选择不同的DBus服务)
145+
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
146+
dbus.sessionBus().connect("org.deepin.dde.Audio1",
147+
"/org/deepin/dde/Audio1", "org.deepin.dde.Audio1",
148+
"PortEnabledChanged",
149+
this, SLOT(onAudioPortEnabledChanged(quint32, QString, bool)));
150+
#else
145151
dbus.sessionBus().connect("com.deepin.daemon.Audio",
146152
"/com/deepin/daemon/Audio", "com.deepin.daemon.Audio",
147153
"PortEnabledChanged",
148154
this, SLOT(onAudioPortEnabledChanged(quint32, QString, bool)));
155+
#endif
149156

150157
//初始化右键菜单
151158
initRightClickedMenu();
@@ -9241,77 +9248,17 @@ void TextEdit::onTextContentChanged(int from, int charsRemoved, int charsAdded)
92419248
}
92429249
}
92439250

9244-
bool TextEdit::checkAudioOutputDevice()
9245-
{
9246-
QDBusMessage msg = QDBusMessage::createMethodCall("com.deepin.daemon.Audio",
9247-
"/com/deepin/daemon/Audio",
9248-
"org.freedesktop.DBus.Properties",
9249-
"Get");
9250-
msg << QString("com.deepin.daemon.Audio") << QString("CardsWithoutUnavailable");
9251-
9252-
QDBusReply<QVariant> reply = QDBusConnection::sessionBus().call(msg);
9253-
if (reply.isValid()) {
9254-
QJsonDocument doc = QJsonDocument::fromJson(reply.value().toByteArray());
9255-
QJsonArray cards = doc.array();
9256-
9257-
// 检查是否有启用的输出设备 (Direction=1)
9258-
for (const QJsonValue &cardValue : cards) {
9259-
QJsonObject card = cardValue.toObject();
9260-
QJsonArray ports = card["Ports"].toArray();
9261-
9262-
for (const QJsonValue &portValue : ports) {
9263-
QJsonObject port = portValue.toObject();
9264-
if (port["Direction"].toInt() == 1 && port["Enabled"].toBool()) {
9265-
return true; // 找到启用的输出设备
9266-
}
9267-
}
9268-
}
9269-
}
9270-
9271-
return false;
9272-
}
9273-
9274-
bool TextEdit::checkAudioInputDevice()
9275-
{
9276-
QDBusMessage msg = QDBusMessage::createMethodCall("com.deepin.daemon.Audio",
9277-
"/com/deepin/daemon/Audio",
9278-
"org.freedesktop.DBus.Properties",
9279-
"Get");
9280-
msg << QString("com.deepin.daemon.Audio") << QString("CardsWithoutUnavailable");
9281-
9282-
QDBusReply<QVariant> reply = QDBusConnection::sessionBus().call(msg);
9283-
if (reply.isValid()) {
9284-
QJsonDocument doc = QJsonDocument::fromJson(reply.value().toByteArray());
9285-
QJsonArray cards = doc.array();
9286-
9287-
// 检查是否有启用的输出设备 (Direction=2)
9288-
for (const QJsonValue &cardValue : cards) {
9289-
QJsonObject card = cardValue.toObject();
9290-
QJsonArray ports = card["Ports"].toArray();
9291-
9292-
for (const QJsonValue &portValue : ports) {
9293-
QJsonObject port = portValue.toObject();
9294-
if (port["Direction"].toInt() == 2 && port["Enabled"].toBool()) {
9295-
return true; // 找到启用的输入设备
9296-
}
9297-
}
9298-
}
9299-
}
9300-
9301-
return false;
9302-
}
9303-
93049251
void TextEdit::onAudioPortEnabledChanged(quint32 cardId, const QString &portName, bool enabled)
93059252
{
93069253
Q_UNUSED(cardId)
93079254
Q_UNUSED(portName)
9308-
9255+
93099256
// 只处理设备被禁用的情况
93109257
if (!enabled) {
93119258
// 检查是否还有可用的输出设备和输入设备
9312-
bool hasOutputDevice = checkAudioOutputDevice();
9313-
bool hasInputDevice = checkAudioInputDevice();
9314-
9259+
bool hasOutputDevice = IflytekAiAssistant::instance()->hasAudioOutputDevice();
9260+
bool hasInputDevice = IflytekAiAssistant::instance()->hasAudioInputDevice();
9261+
93159262
// 如果所有输出设备都被禁用,显示输出设备提示
93169263
if (!hasOutputDevice) {
93179264
#ifdef DTKWIDGET_CLASS_DSizeMode
@@ -9320,7 +9267,7 @@ void TextEdit::onAudioPortEnabledChanged(quint32 cardId, const QString &portName
93209267
DMessageManager::instance()->sendMessage(this, QIcon(":/images/warning.svg"), tr("No audio output device was detected. Please ensure your speakers or headphones are properly connected and try again."));
93219268
#endif
93229269
}
9323-
9270+
93249271
// 如果所有输入设备都被禁用,显示输入设备提示
93259272
if (!hasInputDevice) {
93269273
#ifdef DTKWIDGET_CLASS_DSizeMode

src/editor/dtextedit.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -532,11 +532,7 @@ public slots:
532532
void slotVoiceReadingAction(bool checked = false);
533533
bool slotStopReadingAction(bool checked = false);
534534
void slotdictationAction(bool checked = false);
535-
536-
// 音频设备检测方法
537-
bool checkAudioOutputDevice();
538-
bool checkAudioInputDevice();
539-
535+
540536
// 音频设备状态监听槽函数
541537
void onAudioPortEnabledChanged(quint32 cardId, const QString &portName, bool enabled);
542538
void slotColumnEditAction(bool checked = false);

0 commit comments

Comments
 (0)