4#include <QLoggingCategory>
5#include <QRegularExpression>
11#include "BackendFileTransfer.h"
12#include "OperateFileTransfer.h"
14#include "DlgFileTransfer.h"
16static Q_LOGGING_CATEGORY(log,
"Plugin.FileTransfer.Operate")
19 , m_frmFileTransfer(
nullptr)
22 qDebug(log) << Q_FUNC_INFO;
25 emit this->sigUpdateParameters(
this);
30COperateFileTransfer::~COperateFileTransfer()
32 qDebug(log) << Q_FUNC_INFO;
52 return m_frmFileTransfer;
62 if(m_pActionSettings) {
63 m_Menu.addSeparator();
64 m_Menu.addAction(m_pActionSettings);
68 if(m_frmFileTransfer) {
69 bool check = connect(m_frmFileTransfer, SIGNAL(sigCopyUrlToClipboard(
const QString&)),
70 this, SLOT(slotCopyUrlToClipboard(
const QString&)));
80 if(m_frmFileTransfer) {
81 m_frmFileTransfer->deleteLater();
82 m_frmFileTransfer =
nullptr;
93 qCritical(log) <<
"new CBackendThread fail";
114 m_Parameter.SetGlobalParameters(pPara);
125 if(m_frmFileTransfer)
126 m_frmFileTransfer->Load(set);
127 return m_Parameter.
Load(set);
132 if(m_frmFileTransfer)
133 m_frmFileTransfer->Save(set);
134 return m_Parameter.
Save(set);
141 switch((CParameterFileTransfer::Protocol)m_Parameter.GetProtocol()) {
142 case CParameterFileTransfer::Protocol::SFTP:
143 pNet = &m_Parameter.m_SSH.m_Net;
145 case CParameterFileTransfer::Protocol::FTP:
146 pNet = &m_Parameter.m_Net;
149 if(!pNet->GetHost().isEmpty()) {
153 szName += pNet->GetHost()
154 +
":" + QString::number(pNet->GetPort());
163 QString szDescription;
164 if(!
Name().isEmpty())
165 szDescription = tr(
"Name: ") +
Name() +
"\n";
168 szDescription += tr(
"Type: ") +
GetTypeName() +
"\n";
171 szDescription += tr(
"Protocol: ") +
Protocol();
173 if(!
GetPlugin()->DisplayName().isEmpty())
176 szDescription +=
"\n";
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";
184 if(GetSecurityLevel() != SecurityLevel::No)
185 szDescription += tr(
"Security level: ") + GetSecurityLevelString() +
"\n";
190 return szDescription;
195 switch(m_Parameter.GetProtocol()) {
196 case CParameterFileTransfer::Protocol::FTP:
198 case CParameterFileTransfer::Protocol::SFTP:
208 switch(m_Parameter.GetProtocol()) {
209 case CParameterFileTransfer::Protocol::SFTP:
210 pNet = &m_Parameter.m_SSH.m_Net;
212 case CParameterFileTransfer::Protocol::FTP:
213 pNet = &m_Parameter.m_Net;
218 if(pNet && !pNet->GetHost().isEmpty())
219 szId +=
"_" + pNet->GetHost()
220 +
"_" + QString::number(pNet->GetPort());
222 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
223 szId = szId.replace(exp,
"_");
227void COperateFileTransfer::slotCopyUrlToClipboard(
const QString &szPath)
232 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::SFTP) {
233 pNet = &m_Parameter.m_SSH.m_Net;
234 if(pNet->GetHost().isEmpty()) {
237 url.setScheme(
"sftp");
239 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::FTP) {
240 pNet = &m_Parameter.m_Net;
241 if(pNet->GetHost().isEmpty()) {
244 url.setScheme(
"ftp");
247 url.setUserName(pNet->
m_User.GetUser());
249 url.setHost(pNet->GetHost());
250 url.setPort(pNet->GetPort());
251 QClipboard* pClipboard = QApplication::clipboard();
252 pClipboard->setText(url.toString());
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
File transfer operate interface
virtual const QString Protocol() const override
Protocol
virtual int Stop() override
关闭
virtual int Initial() override
Initial parameters and resource
virtual const QString Id() override
Identity
virtual int Save(QSettings &set) override
保存参数
virtual const QString Description() override
Description
virtual const QString Name() override
Name
virtual int Load(QSettings &set) override
加载参数
virtual QWidget * GetViewer() override
得到显示视图
virtual int Clean() override
Clean parameters and resource
virtual int Start() override
开始
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
应用插件全局参数
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual Q_INVOKABLE CBackend * InstanceBackend()
新建后端实例。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual const qint16 Version() const override
Version
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
virtual Q_INVOKABLE int SetGlobalParameters(CParameterPlugin *pPara)=0
应用插件全局参数
virtual Q_INVOKABLE int Clean()
Clean parameters and resource
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
virtual const QString Name()
Name
virtual const QString Id()
Identity
virtual const QString GetTypeName() const
Get type name
网络连接参数接口。此类仅在插件内有效。 其界面为 CParameterNetUI
CParameterUser m_User
[Instance user]
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
virtual int Save(QString szFile=QString(), bool bForce=true)
Save to file
void sigChanged()
当参数改变时,触发 通常如果需要,则相应的参数会对应一个改变事件。
virtual int Load(QString szFile=QString())
Load from file
virtual const QString Version() const =0
Version
virtual const QString DisplayName() const
在界面上显示的名称
virtual const QString Description() const =0
描述