1 /*!
2 * \copyright Copyright (c) 2016-2021 Governikus GmbH & Co. KG, Germany
3 */
4
5 #include "UIPlugInJson.h"
6
7 #include "context/AuthContext.h"
8 #include "context/ChangePinContext.h"
9 #include "messages/MsgTypes.h"
10 #include "ReaderManager.h"
11
12 #include <QLoggingCategory>
13 #include <QMetaMethod>
14
15 Q_DECLARE_LOGGING_CATEGORY(json)
16
17 using namespace governikus;
18
UIPlugInJson()19 UIPlugInJson::UIPlugInJson()
20 : UIPlugIn()
21 , mMessageDispatcher()
22 , mEnabled(false)
23 {
24 }
25
26
setEnabled(bool pEnable)27 void UIPlugInJson::setEnabled(bool pEnable)
28 {
29 mEnabled = pEnable;
30 const auto readerManager = Env::getSingleton<ReaderManager>();
31
32 if (mEnabled)
33 {
34 connect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJson::onReaderEvent);
35 connect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJson::onReaderEvent);
36 connect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJson::onReaderEvent);
37 connect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJson::onReaderEvent);
38 connect(readerManager, &ReaderManager::fireCardRetryCounterChanged, this, &UIPlugInJson::onReaderEvent);
39 }
40 else
41 {
42 disconnect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJson::onReaderEvent);
43 disconnect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJson::onReaderEvent);
44 disconnect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJson::onReaderEvent);
45 disconnect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJson::onReaderEvent);
46 disconnect(readerManager, &ReaderManager::fireCardRetryCounterChanged, this, &UIPlugInJson::onReaderEvent);
47 }
48 }
49
50
isEnabled() const51 bool UIPlugInJson::isEnabled() const
52 {
53 return mEnabled;
54 }
55
56
callFireMessage(const QByteArray & pMsg,bool pLogging)57 void UIPlugInJson::callFireMessage(const QByteArray& pMsg, bool pLogging)
58 {
59 if (!pMsg.isEmpty())
60 {
61 if (Q_LIKELY(pLogging))
62 {
63 qCDebug(json).noquote() << "Fire message:" << pMsg;
64 }
65 Q_EMIT fireMessage(pMsg);
66 }
67 }
68
69
onWorkflowStarted(QSharedPointer<WorkflowContext> pContext)70 void UIPlugInJson::onWorkflowStarted(QSharedPointer<WorkflowContext> pContext)
71 {
72 if (!mEnabled)
73 {
74 return;
75 }
76
77 if (pContext.objectCast<AuthContext>() || pContext.objectCast<ChangePinContext>())
78 {
79 connect(pContext.data(), &WorkflowContext::fireStateChanged, this, &UIPlugInJson::onStateChanged);
80 }
81
82 callFireMessage(mMessageDispatcher.init(pContext));
83 }
84
85
onWorkflowFinished(QSharedPointer<WorkflowContext>)86 void UIPlugInJson::onWorkflowFinished(QSharedPointer<WorkflowContext>)
87 {
88 if (!mEnabled)
89 {
90 mMessageDispatcher.reset();
91 return;
92 }
93
94 callFireMessage(mMessageDispatcher.finish());
95 }
96
97
onReaderEvent(const ReaderInfo & pInfo)98 void UIPlugInJson::onReaderEvent(const ReaderInfo& pInfo)
99 {
100 callFireMessage(mMessageDispatcher.createMsgReader(pInfo));
101 }
102
103
onStateChanged(const QString & pNewState)104 void UIPlugInJson::onStateChanged(const QString& pNewState)
105 {
106 callFireMessage(mMessageDispatcher.processStateChange(pNewState));
107 }
108
109
doMessageProcessing(const QByteArray & pMsg)110 void UIPlugInJson::doMessageProcessing(const QByteArray& pMsg)
111 {
112 if (!mEnabled)
113 {
114 return;
115 }
116
117 const auto& msg = mMessageDispatcher.processCommand(pMsg);
118 callFireMessage(msg, msg != MsgType::LOG);
119 }
120
121
doShutdown()122 void UIPlugInJson::doShutdown()
123 {
124 }
125