Rabbit Remote Control 0.1.0-bate10
Loading...
Searching...
No Matches
PluginWakeOnLan.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#ifdef HAVE_PCAPPLUSPLUS
4 #include "PcapPlusPlusVersion.h"
5 #include "PcapDevice.h"
6 #include <Logger.h>
7 #include <QLoggingCategory>
8 static Q_LOGGING_CATEGORY(logPcpp, "WOL.PCPP")
9 void Pcpp_Logger(pcpp::Logger::LogLevel logLevel,
10 const std::string& logMessage,
11 const std::string& file,
12 const std::string& method,
13 const int line)
14 {
15 switch(logLevel)
16 {
17 case pcpp::Logger::LogLevel::Debug:
18 qDebug(logPcpp) << logMessage.c_str();
19 break;
20 case pcpp::Logger::LogLevel::Info:
21 qInfo(logPcpp) << logMessage.c_str();
22 break;
23 case pcpp::Logger::LogLevel::Error:
24 qCritical(logPcpp) << logMessage.c_str();
25 break;
26 default:
27 break;
28 }
29 }
30#endif
31
32#include <QLoggingCategory>
33#include <QDir>
34
35#include "RabbitCommonTools.h"
36#include "PluginWakeOnLan.h"
37#include "OperateWakeOnLan.h"
38
39static Q_LOGGING_CATEGORY(log, "WakeOnLan.Plugin")
40CPluginWakeOnLan::CPluginWakeOnLan(QObject *parent)
41 : CPlugin{parent}
42 , m_pOperate(nullptr)
43{
44#ifdef HAVE_PCAPPLUSPLUS
45 pcpp::Logger::getInstance().setLogPrinter(Pcpp_Logger);
46 pcpp::Logger::getInstance().setAllModulesToLogLevel(
47 pcpp::Logger::LogLevel::Debug);
48 // suppressing errors to avoid cluttering stdout
49 pcpp::Logger::getInstance().enableLogs();
50 pcpp::Logger::getInstance().setLogLevel(
51 pcpp::LogModule::PcapLogModuleLiveDevice, pcpp::Logger::LogLevel::Info);
52#endif
53}
54
55CPluginWakeOnLan::~CPluginWakeOnLan()
56{
57 qDebug(log) << "CPluginWakeOnLan::~CPluginWakeOnLan()";
58}
59
60const CPlugin::TYPE CPluginWakeOnLan::Type() const
61{
62 return TYPE::NetworkTools;
63}
64
65const QString CPluginWakeOnLan::Name() const
66{
67 return "WakeOnLan";
68}
69
70const QString CPluginWakeOnLan::DisplayName() const
71{
72 return tr("Wake on lan");
73}
74
75const QString CPluginWakeOnLan::Description() const
76{
77 return tr("Wake on lan");
78}
79
80const QIcon CPluginWakeOnLan::Icon() const
81{
82 return QIcon::fromTheme("lan");
83}
84
85const QString CPluginWakeOnLan::Version() const
86{
87 return PluginWakeOnLan_VERSION;
88}
89
90const QString CPluginWakeOnLan::Details() const
91{
92 QString szDetails;
93 szDetails += "- " + tr("Dependency libraries") + "\n";
94#ifdef HAVE_PCAPPLUSPLUS
95 szDetails += " - PcapPlusPlus";
96 szDetails += "\n";
97 szDetails += " - " + tr("version: ")
98 + pcpp::getPcapPlusPlusVersionFull().c_str();
99 szDetails += "\n";
100 szDetails += " - " + tr("Pcap lib version info: ")
101 + pcpp::PcapLiveDevice::getPcapLibVersionInfo().c_str();
102#endif
103 return szDetails;
104}
105
107{
108 if(!m_pOperate) {
109 QStringList permissions;
110 permissions << "android.permission.CHANGE_WIFI_STATE"
111 << "android.permission.ACCESS_WIFI_STATE"
112 << "android.permission.ACCESS_NETWORK_STATE"
113 << "android.permission.CHANGE_NETWORK_STATE";
114 RabbitCommon::CTools::AndroidRequestPermission(permissions);
115
116 m_pOperate = CPlugin::CreateOperate(szId, para);
117 if(!m_pOperate) return m_pOperate;
118
119 QString szFile = m_pOperate->GetSettingsFile();
120 QDir d(szFile);
121 if(!d.exists(szFile)) return m_pOperate;
122 int nRet = false;
123 //bRet = m_pOperate->Load(szFile);
124 bool bRet = QMetaObject::invokeMethod(
125 m_pOperate,
126 "Load",
127 Qt::DirectConnection,
128 Q_RETURN_ARG(int, nRet),
129 Q_ARG(QString, szFile));
130 if(!bRet) {
131 qCritical(log) << "Call" << m_pOperate->metaObject()->className()
132 + QString("::") + "Load(QString szFile) fail." << szFile;
133 return nullptr;
134 }
135 if(nRet) {
136 qCritical(log) << "Load parameter fail" << nRet;
137 DeleteOperate(m_pOperate);
138 return nullptr;
139 }
140 }
141 return m_pOperate;
142}
143
144COperate* CPluginWakeOnLan::OnCreateOperate(const QString &szId)
145{
146 qDebug(log) << Q_FUNC_INFO;
147 if(Id() == szId)
148 {
149 return new COperateWakeOnLan(this);
150 }
151 return nullptr;
152}
153
155{
156 qDebug(log) << Q_FUNC_INFO;
157 Q_ASSERT(m_pOperate == p);
158 m_pOperate = nullptr;
159 return CPlugin::DeleteOperate(p);
160}
161
162const QString CPluginWakeOnLan::Protocol() const
163{
164 return QString();
165}
Wake on lan operate interface.
Operate interface.
Definition Operate.h:51
Global parameters of plugins.
virtual const QString Details() const override
Display more information in About dialog or log.
virtual const QString Protocol() const override
Plugin Protocol.
virtual int DeleteOperate(COperate *p) override
Delete COperate.
virtual const QString DisplayName() const override
The plugin display name.
virtual const QString Name() const override
This name must be the same as the project name (${PROJECT_NAME}). The translation file (${PROJECT_NAM...
virtual const QString Version() const override
Version.
virtual const QString Description() const override
Plugin description.
virtual COperate * CreateOperate(const QString &szId, CParameterPlugin *para) override
New COperate instance.
Plugin interface.
Definition Plugin.h:15
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate.
Definition Plugin.cpp:124
virtual const QString Id() const
ID. Default: Type() + ":" + Protocol() + ":" + Name()
Definition Plugin.cpp:71
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
New COperate instance.
Definition Plugin.cpp:82