diff --git a/src/common/iflytek_ai_assistant.cpp b/src/common/iflytek_ai_assistant.cpp index e50a53d5..b7a281d6 100644 --- a/src/common/iflytek_ai_assistant.cpp +++ b/src/common/iflytek_ai_assistant.cpp @@ -25,10 +25,16 @@ #include namespace { -// DDE音频服务常量 +// DDE音频服务常量 (根据Qt版本选择不同的DBus服务) +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) const QString AUDIO_SERVICE = "org.deepin.dde.Audio1"; const QString AUDIO_PATH = "/org/deepin/dde/Audio1"; const QString AUDIO_INTERFACE = "org.deepin.dde.Audio1"; +#else +const QString AUDIO_SERVICE = "com.deepin.daemon.Audio"; +const QString AUDIO_PATH = "/com/deepin/daemon/Audio"; +const QString AUDIO_INTERFACE = "com.deepin.daemon.Audio"; +#endif // 端口方向枚举 enum PortDirection { diff --git a/src/editor/dtextedit.cpp b/src/editor/dtextedit.cpp index ba5135c4..7f74a08f 100644 --- a/src/editor/dtextedit.cpp +++ b/src/editor/dtextedit.cpp @@ -141,11 +141,18 @@ TextEdit::TextEdit(QWidget *parent) break; } - // 连接音频设备状态变化信号 + // 连接音频设备状态变化信号 (根据Qt版本选择不同的DBus服务) +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + dbus.sessionBus().connect("org.deepin.dde.Audio1", + "/org/deepin/dde/Audio1", "org.deepin.dde.Audio1", + "PortEnabledChanged", + this, SLOT(onAudioPortEnabledChanged(quint32, QString, bool))); +#else dbus.sessionBus().connect("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", "com.deepin.daemon.Audio", "PortEnabledChanged", this, SLOT(onAudioPortEnabledChanged(quint32, QString, bool))); +#endif //初始化右键菜单 initRightClickedMenu(); @@ -9241,77 +9248,17 @@ void TextEdit::onTextContentChanged(int from, int charsRemoved, int charsAdded) } } -bool TextEdit::checkAudioOutputDevice() -{ - QDBusMessage msg = QDBusMessage::createMethodCall("com.deepin.daemon.Audio", - "/com/deepin/daemon/Audio", - "org.freedesktop.DBus.Properties", - "Get"); - msg << QString("com.deepin.daemon.Audio") << QString("CardsWithoutUnavailable"); - - QDBusReply reply = QDBusConnection::sessionBus().call(msg); - if (reply.isValid()) { - QJsonDocument doc = QJsonDocument::fromJson(reply.value().toByteArray()); - QJsonArray cards = doc.array(); - - // 检查是否有启用的输出设备 (Direction=1) - for (const QJsonValue &cardValue : cards) { - QJsonObject card = cardValue.toObject(); - QJsonArray ports = card["Ports"].toArray(); - - for (const QJsonValue &portValue : ports) { - QJsonObject port = portValue.toObject(); - if (port["Direction"].toInt() == 1 && port["Enabled"].toBool()) { - return true; // 找到启用的输出设备 - } - } - } - } - - return false; -} - -bool TextEdit::checkAudioInputDevice() -{ - QDBusMessage msg = QDBusMessage::createMethodCall("com.deepin.daemon.Audio", - "/com/deepin/daemon/Audio", - "org.freedesktop.DBus.Properties", - "Get"); - msg << QString("com.deepin.daemon.Audio") << QString("CardsWithoutUnavailable"); - - QDBusReply reply = QDBusConnection::sessionBus().call(msg); - if (reply.isValid()) { - QJsonDocument doc = QJsonDocument::fromJson(reply.value().toByteArray()); - QJsonArray cards = doc.array(); - - // 检查是否有启用的输出设备 (Direction=2) - for (const QJsonValue &cardValue : cards) { - QJsonObject card = cardValue.toObject(); - QJsonArray ports = card["Ports"].toArray(); - - for (const QJsonValue &portValue : ports) { - QJsonObject port = portValue.toObject(); - if (port["Direction"].toInt() == 2 && port["Enabled"].toBool()) { - return true; // 找到启用的输入设备 - } - } - } - } - - return false; -} - void TextEdit::onAudioPortEnabledChanged(quint32 cardId, const QString &portName, bool enabled) { Q_UNUSED(cardId) Q_UNUSED(portName) - + // 只处理设备被禁用的情况 if (!enabled) { // 检查是否还有可用的输出设备和输入设备 - bool hasOutputDevice = checkAudioOutputDevice(); - bool hasInputDevice = checkAudioInputDevice(); - + bool hasOutputDevice = IflytekAiAssistant::instance()->hasAudioOutputDevice(); + bool hasInputDevice = IflytekAiAssistant::instance()->hasAudioInputDevice(); + // 如果所有输出设备都被禁用,显示输出设备提示 if (!hasOutputDevice) { #ifdef DTKWIDGET_CLASS_DSizeMode @@ -9320,7 +9267,7 @@ void TextEdit::onAudioPortEnabledChanged(quint32 cardId, const QString &portName 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.")); #endif } - + // 如果所有输入设备都被禁用,显示输入设备提示 if (!hasInputDevice) { #ifdef DTKWIDGET_CLASS_DSizeMode diff --git a/src/editor/dtextedit.h b/src/editor/dtextedit.h index f770df0b..f93dce1c 100644 --- a/src/editor/dtextedit.h +++ b/src/editor/dtextedit.h @@ -532,11 +532,7 @@ public slots: void slotVoiceReadingAction(bool checked = false); bool slotStopReadingAction(bool checked = false); void slotdictationAction(bool checked = false); - - // 音频设备检测方法 - bool checkAudioOutputDevice(); - bool checkAudioInputDevice(); - + // 音频设备状态监听槽函数 void onAudioPortEnabledChanged(quint32 cardId, const QString &portName, bool enabled); void slotColumnEditAction(bool checked = false);