Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
OperateFileTransfer.cpp
1// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2// Author: Kang Lin <kl222@126.com>
3
4#include <QLoggingCategory>
5#include <QRegularExpression>
6#include <QClipboard>
7#include <QApplication>
8#include <QMimeData>
9#include <QUrl>
10
11#include "BackendFileTransfer.h"
12#include "OperateFileTransfer.h"
13#include "Plugin.h"
14#include "DlgFileTransfer.h"
15
16static Q_LOGGING_CATEGORY(log, "Plugin.FileTransfer.Operate")
17
19 , m_frmFileTransfer(nullptr)
20 , m_pThread(nullptr)
21{
22 qDebug(log) << Q_FUNC_INFO;
23 bool check = connect(&m_Parameter, &CParameter::sigChanged,
24 this, [&](){
25 emit this->sigUpdateParameters(this);
26 });
27 Q_ASSERT(check);
28}
29
30COperateFileTransfer::~COperateFileTransfer()
31{
32 qDebug(log) << Q_FUNC_INFO;
33}
34
39
40CParameterFileTransfer* COperateFileTransfer::GetParameter()
41{
42 return &m_Parameter;
43}
44
45const qint16 COperateFileTransfer::Version() const
46{
47 return GetPlugin()->Version().toInt();
48}
49
51{
52 return m_frmFileTransfer;
53}
54
56{
57 int nRet = 0;
58 nRet = COperate::Initial();
59 if(nRet)
60 return nRet;
61
62 if(m_pActionSettings) {
63 m_Menu.addSeparator();
64 m_Menu.addAction(m_pActionSettings);
65 }
66
67 m_frmFileTransfer = new CFrmFileTransfer();
68 if(m_frmFileTransfer) {
69 bool check = connect(m_frmFileTransfer,
70 SIGNAL(sigCopyUrlToClipboard(const QString&)),
71 this, SLOT(slotCopyUrlToClipboard(const QString&)));
72 Q_ASSERT(check);
73 }
74
75 return nRet;
76}
77
79{
80 int nRet = 0;
81 if(m_frmFileTransfer) {
82 m_frmFileTransfer->deleteLater();
83 m_frmFileTransfer = nullptr;
84 }
85 nRet = COperate::Clean();
86 return nRet;
87}
88
90{
91 int nRet = 0;
92 m_pThread = new CBackendThread(this);
93 if(!m_pThread) {
94 qCritical(log) << "new CBackendThread fail";
95 return -2;
96 }
97 m_pThread->start();
98 return nRet;
99}
100
102{
103 int nRet = 0;
104 if(m_pThread)
105 {
106 m_pThread->quit();
107 //Don't delete m_pThread, See CBackendThread
108 m_pThread = nullptr;
109 }
110 return nRet;
111}
112
114{
115 return m_Parameter.SetGlobalParameters(pPara);
116}
117
119{
120 return new CDlgFileTransfer(&m_Parameter, parent);
121}
122
123int COperateFileTransfer::Load(QSettings &set)
124{
125 if(m_frmFileTransfer)
126 m_frmFileTransfer->Load(set);
127 return m_Parameter.Load(set);
128}
129
130int COperateFileTransfer::Save(QSettings &set)
131{
132 if(m_frmFileTransfer)
133 m_frmFileTransfer->Save(set);
134 return m_Parameter.Save(set);
135}
136
138{
139 QString szName;
140 CParameterNet* pNet = nullptr;
141 switch((CParameterFileTransfer::Protocol)m_Parameter.GetProtocol()) {
142 case CParameterFileTransfer::Protocol::SFTP:
143 pNet = &m_Parameter.m_SSH.m_Net;
144 break;
145 case CParameterFileTransfer::Protocol::FTP:
146 pNet = &m_Parameter.m_Net;
147 break;
148 }
149 if(!pNet->GetHost().isEmpty()) {
150 if(m_Parameter.GetGlobalParameters()
151 && m_Parameter.GetGlobalParameters()->GetShowProtocolPrefix())
152 szName = Protocol() + ":";
153 szName += pNet->GetHost()
154 + ":" + QString::number(pNet->GetPort());
155 }
156 if(szName.isEmpty())
157 szName = COperate::Name();
158 return szName;
159}
160
162{
163 QString szDescription;
164 if(!Name().isEmpty())
165 szDescription = tr("Name: ") + Name() + "\n";
166
167 if(!GetTypeName().isEmpty())
168 szDescription += tr("Type: ") + GetTypeName() + "\n";
169
170 if(!Protocol().isEmpty()) {
171 szDescription += tr("Protocol: ") + Protocol();
172#ifdef DEBUG
173 if(!GetPlugin()->DisplayName().isEmpty())
174 szDescription += " - " + GetPlugin()->DisplayName();
175#endif
176 szDescription += "\n";
177 }
178
179 auto &net = m_Parameter.m_Net;
180 if(!net.GetHost().isEmpty())
181 szDescription += tr("Server address: ") + net.GetHost()
182 + ":" + QString::number(net.GetPort()) + "\n";
183
184 if(GetSecurityLevel() != SecurityLevel::No)
185 szDescription += tr("Security level: ") + GetSecurityLevelString() + "\n";
186
187 if(!GetPlugin()->Description().isEmpty())
188 szDescription += tr("Description: ") + GetPlugin()->Description();
189
190 return szDescription;
191}
192
193const QString COperateFileTransfer::Protocol() const
194{
195 switch(m_Parameter.GetProtocol()) {
196 case CParameterFileTransfer::Protocol::FTP:
197 return "FTP";
198 case CParameterFileTransfer::Protocol::SFTP:
199 return "SFTP";
200 }
201 return QString();
202}
203
204const QString COperateFileTransfer::Id()
205{
206 QString szId = COperate::Id();
207 CParameterNet* pNet = nullptr;
208 switch(m_Parameter.GetProtocol()) {
209 case CParameterFileTransfer::Protocol::SFTP:
210 pNet = &m_Parameter.m_SSH.m_Net;
211 break;
212 case CParameterFileTransfer::Protocol::FTP:
213 pNet = &m_Parameter.m_Net;
214 break;
215 default:
216 break;
217 }
218 if(pNet && !pNet->GetHost().isEmpty())
219 szId += "_" + pNet->GetHost()
220 + "_" + QString::number(pNet->GetPort());
221
222 static QRegularExpression exp("[-@:/#%!^&* \\.]");
223 szId = szId.replace(exp, "_");
224 return szId;
225}
226
227void COperateFileTransfer::slotCopyUrlToClipboard(const QString &szPath)
228{
229 QUrl url;
230 url.setPath(szPath);
231 CParameterNet* pNet = nullptr;
232 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::SFTP) {
233 pNet = &m_Parameter.m_SSH.m_Net;
234 if(pNet->GetHost().isEmpty()) {
235 return;
236 }
237 url.setScheme("sftp");
238 }
239 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::FTP) {
240 pNet = &m_Parameter.m_Net;
241 if(pNet->GetHost().isEmpty()) {
242 return;
243 }
244 url.setScheme("ftp");
245 }
246 if(!pNet) return;
247 url.setUserName(pNet->m_User.GetUser());
248 //url.setPassword(pNet->m_User.GetPassword());
249 url.setHost(pNet->GetHost());
250 url.setPort(pNet->GetPort());
251 QClipboard* pClipboard = QApplication::clipboard();
252 pClipboard->setText(url.toString());
253 // QMimeData* d = new QMimeData();
254 // d->setUrls(QList<QUrl>() << QUrl(url));
255 // pClipboard->setMimeData(d);
256}
The backend thread.
virtual void quit()
Quit.
Backend interface.
Definition Backend.h:42
File transfer operate interface.
virtual int Stop() override
Stop.
virtual int Initial() override
Initial parameters and resource.
virtual int Save(QSettings &set) override
Save parameters.
virtual const QString Description() override
Description.
virtual const QString Name() override
Name.
virtual int Load(QSettings &set) override
Load parameters.
virtual QWidget * GetViewer() override
Get Viewer.
virtual int Clean() override
Clean parameters and resource.
virtual int Start() override
Start.
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
Apply the global parameters of the plug-in.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
virtual Q_INVOKABLE CBackend * InstanceBackend()
New CBackend.
Operate interface.
Definition Operate.h:51
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level.
Definition Operate.cpp:129
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
Definition Operate.cpp:190
virtual Q_INVOKABLE int Clean()
Clean parameters and resource.
Definition Operate.cpp:207
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
Definition Operate.cpp:219
virtual const QString Name()
Name.
Definition Operate.cpp:46
Basic network parameters.
CParameterUser m_User
[Instance user]
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin.
Global parameters of plugins.
virtual int Save(QString szFile=QString(), bool bForce=true)
Save to file.
Definition Parameter.cpp:47
void sigChanged()
emit when the parameter changes Usually if required, the corresponding parameter corresponds to a cha...
virtual int Load(QString szFile=QString())
Load from file.
Definition Parameter.cpp:35
Plugin interface.
Definition Plugin.h:15
virtual const QString Version() const =0
Version.
virtual const QString DisplayName() const
The plugin display name.
Definition Plugin.cpp:76
virtual const QString Description() const =0
Plugin description.