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