Rabbit Remote Control 0.1.0-de
Loading...
Searching...
No Matches
OperateWakeOnLan.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include <QHBoxLayout>
5#include <QVBoxLayout>
6#include <QRegularExpression>
7#include <QPushButton>
8#include <QCheckBox>
9#include <QtGlobal>
10#include <QCoreApplication>
11#include <QClipboard>
12#include <QApplication>
13#include "RabbitCommonTools.h"
14#include "Plugin.h"
15
16#include "ParameterWakeOnLanUI.h"
17#include "OperateWakeOnLan.h"
18
19static Q_LOGGING_CATEGORY(log, "WakeOnLan")
21 : COperate(plugin)
22 , m_pView(nullptr)
23 , m_pModel(nullptr)
24 , m_pParameterPlugin(nullptr)
25{
26 qDebug(log) << Q_FUNC_INFO;
27}
28
29COperateWakeOnLan::~COperateWakeOnLan()
30{
31 qDebug(log) << Q_FUNC_INFO;
32}
33
34const qint16 COperateWakeOnLan::Version() const
35{
36 return 0;
37}
38
40{
41 int nRet = COperate::Initial();
42 if(nRet) return nRet;
43 qDebug(log) << Q_FUNC_INFO;
44 bool check = false;
45 CPlugin* plugin = GetPlugin();
46 m_pModel = new CWakeOnLanModel(this);
47 if(!m_pModel)
48 return -1;
49 m_pView = new CFrmWakeOnLan(m_pModel);
50 if(!m_pView) return -2;
51 m_pView->setWindowTitle(plugin->Name());
52 check = connect(m_pView, SIGNAL(sigViewerFocusIn(QWidget*)),
53 this, SIGNAL(sigViewerFocusIn(QWidget*)));
54 Q_ASSERT(check);
55 check = connect(m_pView, &CFrmWakeOnLan::customContextMenuRequested,
56 this, [&](const QPoint &pos){
57 m_Menu.exec(m_pView->mapToGlobal(pos));
58 });
59 Q_ASSERT(check);
60
61 m_Menu.addAction(QIcon::fromTheme("edit-copy"), tr("Copy ip address to clipbord"),
62 this, [&](){
63 if(!m_pModel || !m_pView)
64 return;
65 foreach(auto index, m_pView->GetSelect()) {
66 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
67 if(!p) continue;
68 QString szIp = p->m_Net.GetHost();
69 if(szIp.isEmpty()) continue;
70 QApplication::clipboard()->setText(szIp);
71 }
72 });
73 m_Menu.addSeparator();
74
75 m_Menu.addAction(QIcon::fromTheme("view-refresh"), tr("Refresh"),
76 this, [&](){
77 foreach(auto p, m_pModel->m_Data)
78 m_Arp.GetMac(p);
79 });
80 m_Menu.addAction(
81 QIcon::fromTheme("mac"), tr("Get mac address"),
82 this, [&](){
83 if(!m_pModel || !m_pView)
84 return;
85 foreach(auto index, m_pView->GetSelect()) {
86 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
87 if(!p) continue;
88 if(m_Arp.GetMac(p))
89 p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
90 }
91 });
92 m_Menu.addAction(
93 QIcon::fromTheme("lan"), tr("Wake on lan"),
94 this, [&](){
95 if(!m_pModel || !m_pView)
96 return;
97 foreach(auto index, m_pView->GetSelect()) {
98 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
99 if(!p) continue;
100 if(!m_Arp.WakeOnLan(p))
101 p->SetHostState(CParameterWakeOnLan::HostState::WakeOnLan);
102 }
103 });
104 m_Menu.addSeparator();
105
106 m_Menu.addAction(QIcon::fromTheme("list-add"), tr("Add"),
107 this, SLOT(slotAdd()));
108 m_Menu.addAction(QIcon::fromTheme("document-edit"), tr("Edit"),
109 this, [&](){
110 QSharedPointer<CParameterWakeOnLan> para
111 = m_pModel->GetData(m_pView->GetCurrentIndex());
112 if(!para) {
113 QMessageBox::information(
114 nullptr,
115 tr("Information"),
116 tr("Please select a item"));
117 return;
118 }
120 dlg.SetParameter(para.data());
121 RC_SHOW_WINDOW(&dlg);
122 });
123 m_Menu.addAction(QIcon::fromTheme("list-remove"), tr("Remove"),
124 m_pView, SLOT(slotRemoveRow()));
125
126 return 0;
127}
128
130{
131 qDebug(log) << Q_FUNC_INFO;
132 if(m_pView)
133 delete m_pView;
134 if(m_pModel)
135 delete m_pModel;
136 return 0;
137}
138
140{
141 return m_pView;
142}
143
145{
146 return nullptr;
147}
148
150{
151 QString szId = Protocol() + "_" + GetPlugin()->Name();
152 return szId;
153}
154
156{
157 QString szName;
158 if(m_pParameterPlugin && m_pParameterPlugin->GetShowProtocolPrefix())
159 szName = Protocol() + ":";
160 szName += GetPlugin()->DisplayName();
161 return szName;
162}
163
164int COperateWakeOnLan::Start()
165{
166#if defined(Q_OS_UNIX)
167 if(!RabbitCommon::CTools::HasAdministratorPrivilege()
168 && m_pParameterPlugin->GetPromptAdministratorPrivilege())
169 {
170 static bool bShow = false;
171 if(!bShow) {
172 bShow = true;
173 int nRet = 0;
174 QMessageBox msg(
175 QMessageBox::Warning, tr("Warning"),
176 tr("There are no administrator privileges, "
177 "and some functions(Get mac address) are restricted. "
178 "Please restart the program with administrative privileges."),
179 QMessageBox::Yes | QMessageBox::No);
180 msg.setCheckBox(new QCheckBox(tr("Always shown"), &msg));
181 msg.checkBox()->setCheckable(true);
182 nRet = msg.exec();
183 msg.checkBox()->setChecked(
184 m_pParameterPlugin->GetPromptAdministratorPrivilege());
185 if(QMessageBox::Yes == nRet) {
186 RabbitCommon::CTools::Instance()->StartWithAdministratorPrivilege(true);
187 }
188 if(m_pParameterPlugin->GetPromptAdministratorPrivilege()
189 != msg.checkBox()->isChecked()) {
190 m_pParameterPlugin->SetPromptAdministratorPrivilege(
191 msg.checkBox()->isChecked());
192 // TODO: save settings
193 //SaveSettings();
194 }
195 }
196 }
197#endif
198 emit sigRunning();
199 return 0;
200}
201
202int COperateWakeOnLan::Stop()
203{
204 emit sigFinished();
205 return 0;
206}
207
209{
210 m_pParameterPlugin = pPara;
211 return 0;
212}
213
214int COperateWakeOnLan::Load(QSettings &set)
215{
216 if(!m_pModel) return -1;
217 return m_pModel->Load(set, m_pParameterPlugin);
218}
219
220int COperateWakeOnLan::Save(QSettings &set)
221{
222 if(!m_pModel) return -1;
223 return m_pModel->Save(set);
224}
225
226void COperateWakeOnLan::slotAdd()
227{
228 QSharedPointer<CParameterWakeOnLan> para(new CParameterWakeOnLan());
229 para->SetGlobalParameters(m_pParameterPlugin);
231 dlg.SetParameter(para.data());
232 int nRet = RC_SHOW_WINDOW(&dlg);
233 if(QDialog::Accepted == nRet)
234 m_pModel->AddItem(para);
235}
Wake on lan operate interface.
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
Apply the global parameters of the plug-in.
virtual int Load(QSettings &set) override
Load parameters.
virtual int Clean() override
Clean parameters and resource.
virtual const QString Id() override
Identity.
virtual const qint16 Version() const override
Version.
virtual QWidget * GetViewer() override
Get Viewer.
virtual const QString Name() override
Name.
virtual int Save(QSettings &set) override
Save parameters.
virtual int Initial() override
Initial parameters and resource.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
Operate interface.
Definition Operate.h:51
void sigFinished()
Successful disconnection signal.
void sigRunning()
Start success signal.
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
Definition Operate.cpp:230
virtual const QString Protocol() const
Protocol.
Definition Operate.cpp:71
void sigViewerFocusIn(QWidget *pView)
The view is focus.
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
Definition Operate.cpp:259
Global parameters of plugins.
The wake on lan parameters UI.
int SetParameter(CParameter *pParameter)
Set the parameters and initialize the user interface.
The wake on lan parameters.
Plugin interface.
Definition Plugin.h:15
virtual const QString Name() const =0
This name must be the same as the project name (${PROJECT_NAME}). The translation file (${PROJECT_NAM...
virtual const QString DisplayName() const
The plugin display name.
Definition Plugin.cpp:73