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