Skip to content

Commit 3ea018e

Browse files
committed
Plugins::FileTransfer: create and delete directory
1 parent 73030f5 commit 3ea018e

File tree

5 files changed

+64
-9
lines changed

5 files changed

+64
-9
lines changed

Plugins/FileTransfer/BackendFieTransfer.cpp

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,18 @@ bool CBackendFieTransfer::event(QEvent *event)
5757
if(event->type() == QEvent::Type::User) {
5858
CFileTransferEvent* pEvent = (CFileTransferEvent*)event;
5959
switch(pEvent->m_Command) {
60+
case CFileTransferEvent::Command::MakeDir:
61+
if(m_pSFTP)
62+
m_pSFTP->MakeDir(pEvent->m_szSourcePath);
63+
break;
64+
case CFileTransferEvent::Command::RemoveDir:
65+
if(m_pSFTP)
66+
m_pSFTP->RemoveDir(pEvent->m_szSourcePath);
67+
break;
6068
case CFileTransferEvent::Command::GetDir:
6169
{
62-
if(m_pSFTP) {
70+
if(m_pSFTP)
6371
m_pSFTP->slotGetDir(pEvent->m_pRemoteFileSystem);
64-
}
6572
break;
6673
}
6774
case CFileTransferEvent::Command::Upload:
@@ -112,6 +119,12 @@ int CBackendFieTransfer::SetConnect(COperateFileTransfer *pOperate)
112119
check = connect(this, SIGNAL(sigGetDir(CRemoteFileSystem*, QVector<QSharedPointer<CRemoteFileSystem> >, bool)),
113120
pForm, SIGNAL(sigGetDir(CRemoteFileSystem*, QVector<QSharedPointer<CRemoteFileSystem> >, bool)));
114121
Q_ASSERT(check);
122+
check = connect(pForm, SIGNAL(sigMakeDir(const QString&)),
123+
this, SLOT(slotMakeDir(const QString&)));
124+
Q_ASSERT(check);
125+
check = connect(pForm, SIGNAL(sigRemoveDir(const QString&)),
126+
this, SLOT(slotRemoveDir(const QString&)));
127+
Q_ASSERT(check);
115128
return nRet;
116129
}
117130

@@ -129,6 +142,24 @@ CBackendFieTransfer::OnInitReturnValue CBackendFieTransfer::InitSFTP()
129142
return OnInitReturnValue::UseOnProcess;
130143
}
131144

145+
void CBackendFieTransfer::slotMakeDir(const QString &szDir)
146+
{
147+
if(szDir.isEmpty()) return;
148+
CFileTransferEvent* pEvent = new CFileTransferEvent(
149+
CFileTransferEvent::Command::MakeDir, szDir);
150+
QCoreApplication::postEvent(this, pEvent);
151+
WakeUp();
152+
}
153+
154+
void CBackendFieTransfer::slotRemoveDir(const QString &szDir)
155+
{
156+
if(szDir.isEmpty()) return;
157+
CFileTransferEvent* pEvent = new CFileTransferEvent(
158+
CFileTransferEvent::Command::RemoveDir, szDir);
159+
QCoreApplication::postEvent(this, pEvent);
160+
WakeUp();
161+
}
162+
132163
void CBackendFieTransfer::slotGetDir(CRemoteFileSystem *p)
133164
{
134165
if(!p || p->GetPath().isEmpty())

Plugins/FileTransfer/BackendFieTransfer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class CBackendFieTransfer : public CBackend
2424
virtual int OnProcess() override;
2525

2626
private Q_SLOTS:
27+
void slotMakeDir(const QString& szDir);
28+
void slotRemoveDir(const QString& szDir);
2729
void slotGetDir(CRemoteFileSystem*);
2830
Q_SIGNALS:
2931
void sigGetDir(CRemoteFileSystem*, QVector<QSharedPointer<CRemoteFileSystem> > contents, bool bEnd);

Plugins/FileTransfer/ChannelSFTP.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ int CChannelSFTP::MakeDir(const QString &dir)
187187
{
188188
qCritical(log) << "Can't create directory:" << nRet
189189
<< ssh_get_error(m_Session);
190-
}
190+
} else
191+
qDebug(log) << "Create directory:" << dir;
191192
}
192193
return nRet;
193194
}
@@ -201,8 +202,9 @@ int CChannelSFTP::RemoveDir(const QString &dir)
201202
if (nRet != SSH_OK)
202203
{
203204
qCritical(log) << "Can't remove directory:" << nRet
204-
<< ssh_get_error(m_Session);
205-
}
205+
<< ssh_get_error(m_Session) << dir;
206+
} else
207+
qDebug(log) << "Remove directory:" << dir;
206208
return nRet;
207209
}
208210

Plugins/FileTransfer/FrmFileTransfer.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
2424
{
2525
bool check = false;
2626
ui->setupUi(this);
27-
27+
2828
m_pModelLocalDir = new QFileSystemModel(this);
2929
m_pModelLocalDir->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
3030
m_pModelLocalDir->setReadOnly(false);
@@ -54,7 +54,7 @@ CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
5454
ui->tabLocal->verticalHeader()->hide();
5555
ui->tabLocal->horizontalHeader()->setSectionResizeMode(
5656
QHeaderView::ResizeToContents);
57-
57+
5858
m_pModelRemoteDir = new CRemoteFileSystemModel(this);
5959
check = connect(m_pModelRemoteDir, SIGNAL(sigGetDir(CRemoteFileSystem*)),
6060
this, SIGNAL(sigGetDir(CRemoteFileSystem*)));
@@ -366,10 +366,27 @@ void CFrmFileTransfer::slotTreeRemoteAddToList()
366366

367367
void CFrmFileTransfer::slotTreeRemoteNew()
368368
{
369+
QString szName = QInputDialog::getText(
370+
this, tr("New folder"), tr("Folder name:"));
371+
if(szName.isEmpty()) return;
372+
auto idx = ui->treeRemote->currentIndex();
373+
if(idx.isValid()) {
374+
auto p = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(idx);
375+
if(p && !p->GetPath().isEmpty()) {
376+
QString szPath = p->GetPath() + "/" + szName;
377+
emit sigMakeDir(szPath);
378+
}
379+
}
369380
}
370381

371382
void CFrmFileTransfer::slotTreeRemoteDelete()
372383
{
384+
auto idx = ui->treeRemote->currentIndex();
385+
if(idx.isValid()) {
386+
auto p = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(idx);
387+
if(p && !p->GetPath().isEmpty())
388+
emit sigRemoveDir(p->GetPath());
389+
}
373390
}
374391

375392
void CFrmFileTransfer::slotTreeRemoteRename()

Plugins/FileTransfer/FrmFileTransfer.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ class CFrmFileTransfer : public QWidget
2323

2424
Q_SIGNALS:
2525
void sigUpload(const QString& source, const QString& destination);
26+
27+
void sigGetDir(CRemoteFileSystem*);
2628
void sigGetDir(CRemoteFileSystem*,
2729
QVector<QSharedPointer<CRemoteFileSystem> > contents,
2830
bool bEnd);
29-
Q_SIGNALS:
30-
void sigGetDir(CRemoteFileSystem*);
31+
32+
void sigMakeDir(const QString &szPath);
33+
void sigRemoveDir(const QString &szPath);
3134

3235
private:
3336
//! Set local root path

0 commit comments

Comments
 (0)