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,
70 SIGNAL(sigCopyUrlToClipboard(
const QString&)),
71 this, SLOT(slotCopyUrlToClipboard(
const QString&)));
81 if(m_frmFileTransfer) {
82 m_frmFileTransfer->deleteLater();
83 m_frmFileTransfer =
nullptr;
94 qCritical(log) <<
"new CBackendThread fail";
115 return m_Parameter.SetPluginParameters(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()) {
151 && m_Parameter.
GetPluginParameters()->GetNameStyles() == CParameterPlugin::NameStyle::Protocol)
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";
186 szDescription += tr(
"Security level: ");
187 if(!sl.GetUnicodeIcon().isEmpty())
188 szDescription += sl.GetUnicodeIcon() +
" ";
189 szDescription += sl.GetString() +
"\n";
195 return szDescription;
200 switch(m_Parameter.GetProtocol()) {
201 case CParameterFileTransfer::Protocol::FTP:
203 case CParameterFileTransfer::Protocol::SFTP:
213 switch(m_Parameter.GetProtocol()) {
214 case CParameterFileTransfer::Protocol::SFTP:
215 pNet = &m_Parameter.m_SSH.m_Net;
217 case CParameterFileTransfer::Protocol::FTP:
218 pNet = &m_Parameter.m_Net;
223 if(pNet && !pNet->GetHost().isEmpty())
224 szId +=
"_" + pNet->GetHost()
225 +
"_" + QString::number(pNet->GetPort());
227 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
228 szId = szId.replace(exp,
"_");
232void COperateFileTransfer::slotCopyUrlToClipboard(
const QString &szPath)
237 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::SFTP) {
238 pNet = &m_Parameter.m_SSH.m_Net;
239 if(pNet->GetHost().isEmpty()) {
242 url.setScheme(
"sftp");
244 if(m_Parameter.GetProtocol() == CParameterFileTransfer::Protocol::FTP) {
245 pNet = &m_Parameter.m_Net;
246 if(pNet->GetHost().isEmpty()) {
249 url.setScheme(
"ftp");
252 url.setUserName(pNet->
m_User.GetUser());
254 url.setHost(pNet->GetHost());
255 url.setPort(pNet->GetPort());
256 QClipboard* pClipboard = QApplication::clipboard();
257 pClipboard->setText(url.toString());
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
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
版本
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
virtual Q_INVOKABLE int Clean()
Clean parameters and resource
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
virtual const QString Name()
名称
virtual const QString Id()
标识
virtual const QString GetTypeName() const
类型名
网络连接参数接口。此类仅在插件内有效。 其界面为 CParameterNetUI
CParameterUser m_User
[Instance user]
CParameterPlugin * GetPluginParameters()
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
描述