玉兔远程控制 0.1.0-bate9
载入中...
搜索中...
未找到
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,
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.SetPluginParameters(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.GetPluginParameters()
151 && m_Parameter.GetPluginParameters()->GetNameStyles() == CParameterPlugin::NameStyle::Protocol)
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
185 if(!(GetSecurityLevel() & CSecurityLevel::Level::No)) {
186 szDescription += tr("Security level: ");
187 if(!sl.GetUnicodeIcon().isEmpty())
188 szDescription += sl.GetUnicodeIcon() + " ";
189 szDescription += sl.GetString() + "\n";
190 }
191
192 if(!GetPlugin()->Description().isEmpty())
193 szDescription += tr("Description: ") + GetPlugin()->Description();
194
195 return szDescription;
196}
197
199{
200 switch(m_Parameter.GetProtocol()) {
201 case CParameterFileTransfer::Protocol::FTP:
202 return "FTP";
203 case CParameterFileTransfer::Protocol::SFTP:
204 return "SFTP";
205 }
206 return QString();
207}
208
210{
211 QString szId = COperate::Id();
212 CParameterNet* pNet = nullptr;
213 switch(m_Parameter.GetProtocol()) {
214 case CParameterFileTransfer::Protocol::SFTP:
215 pNet = &m_Parameter.m_SSH.m_Net;
216 break;
217 case CParameterFileTransfer::Protocol::FTP:
218 pNet = &m_Parameter.m_Net;
219 break;
220 default:
221 break;
222 }
223 if(pNet && !pNet->GetHost().isEmpty())
224 szId += "_" + pNet->GetHost()
225 + "_" + QString::number(pNet->GetPort());
226
227 static QRegularExpression exp("[-@:/#%!^&* \\.]");
228 szId = szId.replace(exp, "_");
229 return szId;
230}
231
232void COperateFileTransfer::slotCopyUrlToClipboard(const QString &szPath)
233{
234 QUrl url;
235 url.setPath(szPath);
236 CParameterNet* pNet = nullptr;
237 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::SFTP) {
238 pNet = &m_Parameter.m_SSH.m_Net;
239 if(pNet->GetHost().isEmpty()) {
240 return;
241 }
242 url.setScheme("sftp");
243 }
244 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::FTP) {
245 pNet = &m_Parameter.m_Net;
246 if(pNet->GetHost().isEmpty()) {
247 return;
248 }
249 url.setScheme("ftp");
250 }
251 if(!pNet) return;
252 url.setUserName(pNet->m_User.GetUser());
253 //url.setPassword(pNet->m_User.GetPassword());
254 url.setHost(pNet->GetHost());
255 url.setPort(pNet->GetPort());
256 QClipboard* pClipboard = QApplication::clipboard();
257 pClipboard->setText(url.toString());
258 // QMimeData* d = new QMimeData();
259 // d->setUrls(QList<QUrl>() << QUrl(url));
260 // pClipboard->setMimeData(d);
261}
The backend thread
virtual void quit()
Quit
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
Definition Backend.h:42
File transfer operate interface
virtual const QString Protocol() const override
协议
virtual int Stop() override
关闭
virtual int Initial() override
Initial parameters and resource
virtual int SetPluginParameters(CParameterPlugin *pPara) override
应用插件全局参数
virtual const QString Id() override
标识
virtual int Save(QSettings &set) override
保存参数
virtual const QString Description() override
描述
virtual const QString Name() override
名称
virtual int Load(QSettings &set) override
加载参数
virtual QWidget * GetViewer() override
得到显示视图
virtual int Clean() override
Clean parameters and resource
virtual int Start() override
开始
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual Q_INVOKABLE CBackend * InstanceBackend()
新建后端实例。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual const qint16 Version() const override
版本
操作接口。
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()
名称
Definition Operate.cpp:46
virtual const QString Id()
标识
Definition Operate.cpp:36
virtual const QString GetTypeName() const
类型名
Definition Operate.cpp:86
网络连接参数接口。此类仅在插件内有效。 其界面为 CParameterNetUI
CParameterUser m_User
[Instance user]
CParameterPlugin * GetPluginParameters()
Get CParameterPlugin
插件的全局参数。
virtual int Save(QString szFile=QString(), bool bForce=true)
Save to file
Definition Parameter.cpp:47
void sigChanged()
当参数改变时,触发 通常如果需要,则相应的参数会对应一个改变事件。
virtual int Load(QString szFile=QString())
Load from file
Definition Parameter.cpp:35
插件接口
Definition Plugin.h:15
virtual const QString Version() const =0
Version
virtual const QString DisplayName() const
在界面上显示的名称
Definition Plugin.cpp:76
virtual const QString Description() const =0
描述
安全级别
Definition Stats.h:79