Skip to content

Commit b163aef

Browse files
committed
Plugins: Add ftp server
1 parent 422c958 commit b163aef

70 files changed

Lines changed: 1603 additions & 247 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/vcpkg.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ jobs:
2222
VCPKG_DEFAULT_TRIPLET: ${{matrix.VCPKG_TARGET_TRIPLET}}
2323
VCPKG_PLATFORM_TOOLSET: ${{matrix.VCPKG_PLATFORM_TOOLSET}}
2424
VCPKG_INSTALLED_DIR: ${{github.workspace}}\.cache\install
25+
VCPKG_DEFAULT_BUILDTREES_ROOT: D:/bt
26+
VCPKG_DEFAULT_BINARY_CACHE: D:/bc
2527
RabbitRemoteControl_VERSION: v0.0.36
2628
BUILD_DIR: ${{github.workspace}}\build
2729
SOURCE_DIR: ${{github.workspace}}\.cache\source

App/Client/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ int main(int argc, char *argv[])
107107
app.setOrganizationName(QObject::tr("Kang Lin Studio"));
108108

109109
#ifdef HAVE_UPDATE
110-
QSharedPointer<CFrmUpdater> pUpdate;
110+
CFrmUpdater* pUpdate;
111111
// Check update version
112112
if(qEnvironmentVariable("SNAP").isEmpty()
113113
&& qEnvironmentVariable("FLATPAK_ID").isEmpty()) {
114-
pUpdate = QSharedPointer<CFrmUpdater>(new CFrmUpdater());
114+
pUpdate = new CFrmUpdater();
115115
if(pUpdate) {
116116
QIcon icon = QIcon::fromTheme("app");
117117
if(!icon.isNull())

Authors.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ See: https://github.com/KangLin/RabbitRemoteControl/graphs/contributors
4444
- [OPTIONAL] FFMPEG: [https://ffmpeg.org/](https://ffmpeg.org/) Multimedia capabilities required
4545
- [OPTIONAL] qtkeychain: [https://github.com/KangLin/qtkeychain](https://github.com/KangLin/qtkeychain)
4646
- [OPTIONAL] libcurl: [https://curl.se](https://curl.se)
47+
- [OPTIONAL] QFtpServer: https://github.com/sashoalm/QFtpServer

Authors_zh_CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@
4646
- [可选] FFMPEG: [https://ffmpeg.org/](https://ffmpeg.org/) 多媒体功能需要
4747
- [可选] qtkeychain: [https://github.com/KangLin/qtkeychain](https://github.com/KangLin/qtkeychain)
4848
- [可选] libcurl: [https://curl.se](https://curl.se)
49+
- [可选] QFtpServer: https://github.com/sashoalm/QFtpServer

Plugins/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ if(WITH_QTERMWIDGET)
9696
endif()
9797
endif()
9898

99+
## Server
100+
option(BUILD_FTP_SERVER "Build ftp server" ON)
101+
if(BUILD_FTP_SERVER)
102+
add_subdirectory(FtpServer)
103+
endif()
104+
99105
message(STATUS "BUILD_RABBITVNC: ${BUILD_RABBITVNC}")
100106
message(STATUS "BUILD_TigerVNC: ${BUILD_TigerVNC}")
101107
message(STATUS "BUILD_LibVNCServer: ${BUILD_LibVNCServer}")
@@ -108,3 +114,5 @@ message(STATUS "BUILD_TERMINAL_TELNET: ${BUILD_TERMINAL_TELNET}")
108114
message(STATUS "BUILD_TERMINAL_SSH: ${BUILD_TERMINAL_SSH}")
109115
message(STATUS "BUILD_FILE_TRANSFER: ${BUILD_FILE_TRANSFER}")
110116
message(STATUS "BUILD_WEB_BROWSER: ${BUILD_WEB_BROWSER}; Qt${QT_VERSION_MAJOR}WebEngineWidgets: ${Qt${QT_VERSION_MAJOR}WebEngineWidgets_FOUND}")
117+
118+
message(STATUS "BUILD_FTP_SERVER: ${BUILD_FTP_SERVER}")
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2+
// Author: Kang Lin <kl222@126.com>
3+
4+
#include <QLoggingCategory>
5+
#include "BackendFtpServer.h"
6+
#include "OperateFtpServer.h"
7+
static Q_LOGGING_CATEGORY(log, "FtpServer.Backend")
8+
CBackendFtpServer::CBackendFtpServer(COperate *pOperate) : CBackend(pOperate)
9+
, m_pServer(nullptr)
10+
{
11+
qDebug(log) << Q_FUNC_INFO;
12+
m_Para = ((COperateFtpServer*)pOperate)->GetParameter();
13+
}
14+
15+
CBackendFtpServer::~CBackendFtpServer()
16+
{
17+
qDebug(log) << Q_FUNC_INFO;
18+
}
19+
20+
CBackend::OnInitReturnValue CBackendFtpServer::OnInit()
21+
{
22+
qDebug(log) << Q_FUNC_INFO;
23+
if(m_pServer) {
24+
qCritical(log) << "Server is exist";
25+
return OnInitReturnValue::Fail;
26+
}
27+
m_pServer = new FtpServer(this, m_Para->GetRoot(), m_Para->GetPort(),
28+
m_Para->GetUser(), m_Para->GetPassword(),
29+
m_Para->GetReadOnly(), m_Para->GetAnonymousLogin());
30+
if(m_pServer->isListening()) {
31+
qInfo(log) << "The ftp server listen in" << m_Para->GetPort();
32+
emit sigRunning();
33+
} else {
34+
QString szErr = tr("The ftp server is not listening in %1").arg(m_Para->GetPort());
35+
emit sigError(-1, szErr);
36+
}
37+
return OnInitReturnValue::NotUseOnProcess;
38+
}
39+
40+
int CBackendFtpServer::OnClean()
41+
{
42+
qDebug(log) << Q_FUNC_INFO;
43+
44+
if(m_pServer)
45+
delete m_pServer;
46+
47+
return 0;
48+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2+
// Author: Kang Lin <kl222@126.com>
3+
4+
#pragma once
5+
6+
#include "Backend.h"
7+
#include "ftpserver.h"
8+
#include "ParameterFtpServer.h"
9+
10+
class CBackendFtpServer : public CBackend
11+
{
12+
Q_OBJECT
13+
14+
public:
15+
explicit CBackendFtpServer(COperate *pOperate = nullptr);
16+
~CBackendFtpServer() override;
17+
18+
protected:
19+
virtual OnInitReturnValue OnInit() override;
20+
virtual int OnClean() override;
21+
22+
private:
23+
FtpServer* m_pServer;
24+
QSharedPointer<CParameterFtpServer> m_Para;
25+
};

Plugins/FtpServer/CMakeLists.txt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Author: Kang Lin <kl222@126.com>
2+
3+
project(FtpServer
4+
DESCRIPTION "Ftp service plugin"
5+
)
6+
7+
find_package(QFtpServerLib)
8+
if(NOT QFtpServerLib_FOUND)
9+
return()
10+
endif()
11+
12+
option(INSTALL_QFtpServer "Install QFtpServer libraries" OFF)
13+
if(INSTALL_QFtpServer)
14+
INSTALL_TARGETS(TARGETS QFtpServerLib)
15+
endif()
16+
17+
SET(FtpServer_PRIVATE_LIBS Plugin QFtpServerLib)
18+
SET(SOURCE_FILES
19+
PluginFtpServer.cpp
20+
OperateFtpServer.cpp
21+
BackendFtpServer.cpp
22+
DlgSettings.cpp
23+
ParameterFtpServer.cpp
24+
FrmMain.cpp
25+
)
26+
27+
SET(HEADER_FILES
28+
PluginFtpServer.h
29+
OperateFtpServer.h
30+
BackendFtpServer.h
31+
DlgSettings.h
32+
ParameterFtpServer.h
33+
FrmMain.h
34+
)
35+
36+
SET(RCC_FILES DlgSettings.ui)
37+
if(WITH_GUI)
38+
39+
endif()
40+
41+
set(FtpServer_QT_COMPONENTS Network)
42+
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ${FtpServer_QT_COMPONENTS})
43+
if(Qt${QT_VERSION_MAJOR}_FOUND)
44+
FOREACH(_COMPONENT ${FtpServer_QT_COMPONENTS})
45+
list(APPEND FtpServer_PRIVATE_LIBS Qt${QT_VERSION_MAJOR}::${_COMPONENT})
46+
ENDFOREACH()
47+
endif()
48+
49+
ADD_PLUGIN_TARGET(NAME PluginService${PROJECT_NAME}
50+
ISPLUGIN
51+
SOURCE_FILES ${SOURCE_FILES} ${HEADER_FILES} ${RCC_FILES}
52+
PRIVATE_LIBS ${FtpServer_PRIVATE_LIBS}
53+
PRIVATE_INCLUDE_DIRS ${FtpServer_INCLUDE_DIR} ${WinPR_INCLUDE_DIR}
54+
PRIVATE_DEFINITIONS FtpServer_VERSION_MAJOR=${FtpServer_MAJOR}
55+
PRIVATE_OPTIONS ${FtpServer_OPTIONS}
56+
INSTALL_DIR ${PLUGIN_PATH}
57+
OUTPUT_DIR ${CMAKE_BINARY_DIR}/${PLUGIN_PATH}
58+
INSTALL_RPATH ${INSTALL_RPATH}
59+
VERSION ${RabbitRemoteControl_VERSION}
60+
)

Plugins/FtpServer/DlgSettings.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2+
// Author: Kang Lin <kl222@126.com>
3+
4+
#include <QFileDialog>
5+
#include "DlgSettings.h"
6+
#include "ui_DlgSettings.h"
7+
8+
CDlgSettings::CDlgSettings(QSharedPointer<CParameterFtpServer> para, QWidget *parent)
9+
: QDialog(parent)
10+
, ui(new Ui::CDlgSettings)
11+
, m_Para(para)
12+
{
13+
ui->setupUi(this);
14+
Q_ASSERT(m_Para);
15+
16+
ui->sbPort->setValue(m_Para->GetPort());
17+
ui->leUser->setText(m_Para->GetUser());
18+
ui->lePassword->setText(m_Para->GetPassword());
19+
ui->leRoot->setText(m_Para->GetRoot());
20+
ui->cbAnonmousLogin->setChecked(m_Para->GetAnonymousLogin());
21+
ui->cbReadOnly->setChecked(m_Para->GetReadOnly());
22+
}
23+
24+
CDlgSettings::~CDlgSettings()
25+
{
26+
delete ui;
27+
}
28+
29+
void CDlgSettings::on_pbRoot_clicked()
30+
{
31+
QString szDir = QFileDialog::getExistingDirectory(this, QString(), ui->leRoot->text());
32+
if(szDir.isEmpty())
33+
return;
34+
ui->leRoot->setText(szDir);
35+
}
36+
37+
void CDlgSettings::accept()
38+
{
39+
m_Para->SetPort(ui->sbPort->value());
40+
m_Para->SetUser(ui->leUser->text());
41+
m_Para->SetPassword(ui->lePassword->text());
42+
m_Para->SetRoot(ui->leRoot->text());
43+
m_Para->SetAnonymousLogin(ui->cbAnonmousLogin->isChecked());
44+
m_Para->SetReadOnly(ui->cbReadOnly->isChecked());
45+
QDialog::accept();
46+
}

Plugins/FtpServer/DlgSettings.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2+
// Author: Kang Lin <kl222@126.com>
3+
4+
#pragma once
5+
#include <QDialog>
6+
#include "ParameterFtpServer.h"
7+
8+
namespace Ui {
9+
class CDlgSettings;
10+
}
11+
12+
class CDlgSettings : public QDialog
13+
{
14+
Q_OBJECT
15+
16+
public:
17+
explicit CDlgSettings(QSharedPointer<CParameterFtpServer> para, QWidget *parent = nullptr);
18+
~CDlgSettings();
19+
20+
public slots:
21+
virtual void accept() override;
22+
private slots:
23+
void on_pbRoot_clicked();
24+
25+
private:
26+
Ui::CDlgSettings *ui;
27+
QSharedPointer<CParameterFtpServer> m_Para;
28+
};

0 commit comments

Comments
 (0)