Rabbit Remote Control 0.0.35
Loading...
Searching...
No Matches
ConnecterWakeOnLan.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 "RabbitCommonTools.h"
12#include "PluginClient.h"
13
14#include "ParameterWakeOnLanUI.h"
15#include "ConnecterWakeOnLan.h"
16
17static Q_LOGGING_CATEGORY(log, "WakeOnLan.Connecter")
19 : CConnecterConnect(plugin)
20 , m_pView(nullptr)
21 , m_pModel(nullptr)
22 , m_pParameterClient(nullptr)
23{
24 qDebug(log) << Q_FUNC_INFO;
25}
26
27CConnecterWakeOnLan::~CConnecterWakeOnLan()
28{
29 qDebug(log) << Q_FUNC_INFO;
30}
31
33{
34 return 0;
35}
36
38{
39 int nRet = CConnecter::Initial();
40 if(nRet) return nRet;
41 qDebug(log) << Q_FUNC_INFO;
42 bool check = false;
43 CPluginClient* plugin = GetPlugClient();
44 m_pModel = new CWakeOnLanModel(this);
45 if(!m_pModel)
46 return -1;
47 m_pView = new CFrmWakeOnLan(m_pModel);
48 if(!m_pView) return -2;
49 m_pView->setWindowTitle(plugin->Name());
50 check = connect(m_pView, SIGNAL(sigViewerFocusIn(QWidget*)),
51 this, SIGNAL(sigViewerFocusIn(QWidget*)));
52 Q_ASSERT(check);
53 check = connect(m_pView, &CFrmWakeOnLan::customContextMenuRequested,
54 this, [&](const QPoint &pos){
55 m_Menu.exec(m_pView->mapToGlobal(pos));
56 });
57 Q_ASSERT(check);
58
59 m_Menu.addAction(QIcon::fromTheme("list-add"), tr("Add"),
60 this, SLOT(slotAdd()));
61 m_Menu.addAction(QIcon::fromTheme("document-edit"), tr("Edit"),
62 this, [&](){
63 QSharedPointer<CParameterWakeOnLan> para
64 = m_pModel->GetData(m_pView->GetCurrentIndex());
65 if(!para) {
66 QMessageBox::information(
67 nullptr,
68 tr("Information"),
69 tr("Please select a item"));
70 return;
71 }
73 dlg.SetParameter(para.data());
74 RC_SHOW_WINDOW(&dlg);
75 });
76 m_Menu.addAction(QIcon::fromTheme("list-remove"), tr("Remove"),
77 m_pView, SLOT(slotRemoveRow()));
78
79 m_Menu.addAction(QIcon::fromTheme("view-refresh"), tr("Refresh"),
80 this, [&](){
81 foreach(auto p, m_pModel->m_Data)
82 m_Arp.GetMac(p);
83 });
84 m_Menu.addAction(
85 QIcon::fromTheme("mac"), tr("Get mac address"),
86 this, [&](){
87 if(!m_pModel || !m_pView)
88 return;
89 foreach(auto index, m_pView->GetSelect()) {
90 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
91 if(!p) continue;
92 if(m_Arp.GetMac(p))
93 p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
94 }
95 });
96
97 m_Menu.addAction(
98 QIcon::fromTheme("lan"), tr("Wake on lan"),
99 this, [&](){
100 if(!m_pModel || !m_pView)
101 return;
102 foreach(auto index, m_pView->GetSelect()) {
103 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
104 if(!p) continue;
105 if(!m_Arp.WakeOnLan(p))
106 p->SetHostState(CParameterWakeOnLan::HostState::WakeOnLan);
107 }
108 });
109
110 return 0;
111}
112
114{
115 qDebug(log) << Q_FUNC_INFO;
116 if(m_pView)
117 delete m_pView;
118 if(m_pModel)
119 delete m_pModel;
120 return 0;
121}
122
124{
125 return m_pView;
126}
127
129{
130 return nullptr;
131}
132
134{
135 QString szId = Protocol() + "_" + GetPlugClient()->Name();
136 return szId;
137}
138
140{
141 QString szName;
142 if(GetParameter() && GetParameter()->GetParameterClient()
143 && GetParameter()->GetParameterClient()->GetShowProtocolPrefix())
144 szName = Protocol() + ":";
145 szName += GetPlugClient()->Name();
146 return szName;
147}
148
149int CConnecterWakeOnLan::Connect()
150{
151#if defined(Q_OS_UNIX)
152 if(!RabbitCommon::CTools::HasAdministratorPrivilege()
153 && m_pParameterClient->GetPromptAdministratorPrivilege())
154 {
155 static bool bShow = false;
156 if(!bShow) {
157 bShow = true;
158 int nRet = 0;
159 QMessageBox msg(
160 QMessageBox::Warning, tr("Warning"),
161 tr("There are no administrator privileges, "
162 "and some functions(Get mac address) are restricted. "
163 "Please restart the program with administrative privileges."),
164 QMessageBox::Yes | QMessageBox::No);
165 msg.setCheckBox(new QCheckBox(tr("Always shown"), &msg));
166 msg.checkBox()->setCheckable(true);
167 nRet = msg.exec();
168 msg.checkBox()->setChecked(
169 m_pParameterClient->GetPromptAdministratorPrivilege());
170 if(QMessageBox::Yes == nRet) {
171 RabbitCommon::CTools::Instance()->StartWithAdministratorPrivilege(true);
172 }
173 if(m_pParameterClient->GetPromptAdministratorPrivilege()
174 != msg.checkBox()->isChecked()) {
175 m_pParameterClient->SetPromptAdministratorPrivilege(
176 msg.checkBox()->isChecked());
177 // TODO: save settings
178 //SaveSettings();
179 }
180 }
181 }
182#endif
183 emit sigConnected();
184 return 0;
185}
186
187int CConnecterWakeOnLan::DisConnect()
188{
189 emit sigDisconnected();
190 return 0;
191}
192
194{
195 return nullptr;
196}
197
199{
200 m_pParameterClient = pPara;
201 return 0;
202}
203
204int CConnecterWakeOnLan::Load(QSettings &set)
205{
206 if(!m_pModel) return -1;
207 return m_pModel->Load(set, m_pParameterClient);
208}
209
210int CConnecterWakeOnLan::Save(QSettings &set)
211{
212 if(!m_pModel) return -1;
213 return m_pModel->Save(set);
214}
215
216void CConnecterWakeOnLan::slotAdd()
217{
218 QSharedPointer<CParameterWakeOnLan> para(new CParameterWakeOnLan());
219 para->SetParameterClient(m_pParameterClient);
221 dlg.SetParameter(para.data());
222 int nRet = RC_SHOW_WINDOW(&dlg);
223 if(QDialog::Accepted == nRet)
224 m_pModel->AddItem(para);
225}
Connect interface.
Definition Connect.h:45
The connector interface of the plug-in, which is only used by the plug-in.
virtual CParameterBase * GetParameter()
Get parameter.
virtual CConnect * InstanceConnect() override
New connect.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
virtual int Clean() override
Clean parameters and resource.
virtual const QString Name() override
Display order:
virtual int Save(QSettings &set) override
Save parameters.
virtual int Load(QSettings &set) override
Load parameters.
virtual QWidget * GetViewer() override
Get Viewer.
virtual int Initial() override
Initial parameters and resource.
virtual const QString Id() override
Identity.
virtual int SetParameterClient(CParameterClient *pPara) override
Set CParameterClient.
virtual qint16 Version() override
Version.
void sigConnected()
Successful connection signal.
void sigDisconnected()
Successful disconnection signal.
virtual const QString Protocol() const
Protocol.
Definition Connecter.cpp:61
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
void sigViewerFocusIn(QWidget *pView)
The view is focus.
The parameters of client.
The wake on lan parameters UI.
int SetParameter(CParameter *pParameter)
Set the parameters and initialize the user interface.
The wake on lan parameters.
The plugin interface.
virtual const QString Name() const =0
This name must be the same as the project name (${PROJECT_NAME}). The translation file (${PROJECT_NAM...