From fad93b42c285ffb463e9494070f40d3b339d732f Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Thu, 16 Dec 2021 15:07:44 -0500 Subject: Initial rework to replace app framework usage Changes: - Remove "core" code related to WebSocket messaging for the app framework. - Stub out hvac, navigation, network, and weather interfaces. This allows building several of the demo applications without modification for now. The network interface will definitely be reused to plumb in a new connman-glib library derived from the previous network binding. The others may potentially be reused to plumb in other new backend implementations. - Update the Network interface object constructor arguments to add a agent registration flag. This prepares for the connman-glib switch and means users will not need to be updated twice. - Update the Bluetooth interface to use a new bluez-glib library that is derived from the previous Bluetooth binding. This has been successfully tested with a the Settings application. - Remove signal-composer and voice API interface code as there are no direct replacements planned. The signal-composer interface was effectively exposing the binding events, so has little reuse potential with a new backend. For the voice interface, if some form of Alexa support becomes desirable, it can potentially be brought back for adaptation if required. - Disable compilation of the remaining interfaces for now. Some like map, pbap, and mediaplayer are very likely to be used as the basis for updating their associated applications, so keeping the code for the planned iterative development seems easier. - Updated copyright lines in all touched files. Bug-AGL: SPEC-4182 Signed-off-by: Scott Murray Change-Id: Ib717ac8ac68ec457eaee74755dcf9d4f36b79d12 --- voice/voice.cpp | 210 -------------------------------------------------------- 1 file changed, 210 deletions(-) delete mode 100644 voice/voice.cpp (limited to 'voice/voice.cpp') diff --git a/voice/voice.cpp b/voice/voice.cpp deleted file mode 100644 index 396984a..0000000 --- a/voice/voice.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (C) 2019, 2020 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include - -#include "callmessage.h" -#include "responsemessage.h" -#include "eventmessage.h" -#include "messagefactory.h" -#include "messageengine.h" -#include "messageenginefactory.h" -#include "voiceagentregistry.h" -#include "voice.h" - -Voice::Voice (QUrl &url, QQmlContext *context, QObject *parent) : - QObject(parent) -{ - m_loop = MessageEngineFactory::getInstance().getMessageEngine(url); - m_var = new VoiceAgentRegistry(this, context, parent); - - QObject::connect(m_loop.get(), &MessageEngine::connected, - this, &Voice::onConnected); - QObject::connect(m_loop.get(), &MessageEngine::disconnected, - this, &Voice::onDisconnected); - QObject::connect(m_loop.get(), &MessageEngine::messageReceived, - this, &Voice::onMessageReceived); -} - -Voice::~Voice() -{ - delete m_var; -} - -void Voice::scan() -{ - std::unique_ptr msg = MessageFactory::getInstance().createOutboundMessage(MessageId::Call); - if (!msg) - return; - - CallMessage *vmsg = static_cast(msg.get()); - QJsonObject parameter; - - vmsg->createRequest("vshl-core", "enumerateVoiceAgents", parameter); - m_loop->sendMessage(std::move(msg)); -} - -void Voice::getCBLpair(QString id) -{ - triggerCBLProcess(id); -} - -void Voice::subscribeAgentToVshlEvents(QString id) -{ - std::unique_ptr msg = MessageFactory::getInstance().createOutboundMessage(MessageId::Call); - if (!msg) - return; - - CallMessage *vmsg = static_cast(msg.get()); - QJsonArray events = QJsonArray::fromStringList(vshl_events); - QJsonObject parameter; - - parameter.insert("va_id", id); - parameter.insert("events", events); - vmsg->createRequest("vshl-core", "subscribe", parameter); - m_loop->sendMessage(std::move(msg)); -} - -void Voice::unsubscribeAgentFromVshlEvents(QString id) -{ - std::unique_ptr msg = MessageFactory::getInstance().createOutboundMessage(MessageId::Call); - if (!msg) - return; - - CallMessage *vmsg = static_cast(msg.get()); - QJsonArray events = QJsonArray::fromStringList(vshl_events); - QJsonObject parameter; - - parameter.insert("va_id", id); - parameter.insert("events", events); - vmsg->createRequest("vshl-core", "unsubscribe", parameter); - m_loop->sendMessage(std::move(msg)); -} - -void Voice::triggerCBLProcess(QString id) -{ - std::unique_ptr msg = MessageFactory::getInstance().createOutboundMessage(MessageId::Call); - if (!msg) - return; - - CallMessage *vmsg = static_cast(msg.get()); - QJsonArray events; - QJsonObject parameter; - - parameter.insert("va_id", id); - parameter.insert("events", events); - vmsg->createRequest("vshl-core", "subscribeToLoginEvents", parameter); - m_loop->sendMessage(std::move(msg)); -} - -void Voice::parseAgentsList(QJsonArray agents) -{ - for (auto value : agents) { - QJsonObject a = value.toObject(); - QString id = m_var->addAgent(a); - subscribeAgentToVshlEvents(id); - } -} - - - -void Voice::processEvent(std::shared_ptr msg) -{ - std::shared_ptr emsg = std::static_pointer_cast(msg); - QString eapi = emsg->eventApi(); - - if (eapi != "vshl-core") - return; - - QString ename = emsg->eventName(); - QJsonObject data = emsg->eventData(); - QString agentId = data.value("va_id").toString(); - QString state = data.value("state").toString(); - - if (ename.contains("voice_authstate_event")) { - m_var->setAuthState( - agentId, - static_cast( - m_var->stringToEnum(state, "ServiceAuthState"))); - - return; - } - else if (ename.contains("voice_connectionstate_event")) { - m_var->setConnectionState( - agentId, - static_cast( - m_var->stringToEnum(state, "AgentConnectionState"))); - return; - } - else if (ename.contains("voice_dialogstate_event")) { - m_var->setDialogState( - agentId, - static_cast( - m_var->stringToEnum(state, "VoiceDialogState"))); - return; - } - else if (ename.contains("cbl")) { - QJsonObject payload = data.value("payload").toObject(); - QString url = payload.value("url").toString(); - QString code = payload.value("code").toString(); - if (ename.contains("expired")) - m_var->updateLoginData(agentId, code, url, true); - else if (ename.contains("received")) { - m_var->updateLoginData(agentId, code, url, false); - } else - qWarning() << "Unknown cbl event"; - return; - } - - qWarning() << "Unknown vshl event:" << ename; -} - -void Voice::processReply(std::shared_ptr msg) -{ - std::shared_ptr rmsg = std::static_pointer_cast(msg); - QString verb = rmsg->requestVerb(); - QJsonObject data = rmsg->replyData(); - if (rmsg->replyStatus() == "failed") { - qWarning() << "Reply Failed received for verb:" << verb; - } else if (verb == "enumerateVoiceAgents") { - parseAgentsList(data.value("agents").toArray()); - m_var->setDefaultId(data.value("default").toString()); - } else - qDebug() << "discarding reply received for verb:" << verb; -} - -void Voice::onConnected() -{ - scan(); -} - -void Voice::onDisconnected() -{ - QStringList mvarlist = m_var->getAgentsListById(); - QStringList::iterator it; - for (it = mvarlist.begin(); it != mvarlist.end(); ++it) - unsubscribeAgentFromVshlEvents(*it); -} - -void Voice::onMessageReceived(std::shared_ptr msg) -{ - if (msg->isEvent()) { - processEvent(msg); - } else if (msg->isReply()) { - processReply(msg); - } else - qWarning() << "Received invalid inbound message"; -} -- cgit 1.2.3-korg