Rabbit Remote Control 0.1.0-alpha
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
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, SIGNAL(sigCopyUrlToClipboard(const QString&)),
70 this, SLOT(slotCopyUrlToClipboard(const QString&)));
71 Q_ASSERT(check);
72 }
73
74 return nRet;
75}
76
78{
79 int nRet = 0;
80 if(m_frmFileTransfer) {
81 m_frmFileTransfer->deleteLater();
82 m_frmFileTransfer = nullptr;
83 }
84 nRet = COperate::Clean();
85 return nRet;
86}
87
89{
90 int nRet = 0;
91 m_pThread = new CBackendThread(this);
92 if(!m_pThread) {
93 qCritical(log) << "new CBackendThread fail";
94 return -2;
95 }
96 m_pThread->start();
97 return nRet;
98}
99
101{
102 int nRet = 0;
103 if(m_pThread)
104 {
105 m_pThread->quit();
106 //Don't delete m_pThread, See CBackendThread
107 m_pThread = nullptr;
108 }
109 return nRet;
110}
111
113{
114 m_Parameter.SetGlobalParameters(pPara);
115 return COperate::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
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
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 const QString Protocol() const override
Protocol.
virtual int Stop() override
Stop.
virtual int Initial() override
Initial parameters and resource.
virtual const QString Id() override
Identity.
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.
virtual const qint16 Version() const override
Version.
Operate interface.
Definition Operate.h:51
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
Definition Operate.cpp:230
virtual Q_INVOKABLE int SetGlobalParameters(CParameterPlugin *pPara)=0
Apply the global parameters of the plug-in.
Definition Operate.cpp:264
virtual Q_INVOKABLE int Clean()
Clean parameters and resource.
Definition Operate.cpp:247
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
Definition Operate.cpp:259
virtual const QString Name()
Name.
Definition Operate.cpp:41
virtual const QString Id()
Identity.
Definition Operate.cpp:33
virtual const QString GetTypeName() const
Get type name.
Definition Operate.cpp:76
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:46
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:73
virtual const QString Description() const =0
Plugin description.