init commit
This commit is contained in:
151
src/app/AppController.cpp
Normal file
151
src/app/AppController.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "AppController.h"
|
||||
#include <QJsonArray>
|
||||
|
||||
AppController::AppController(QObject* parent)
|
||||
: QObject(parent)
|
||||
, m_settings(new LocalSend::Settings(this))
|
||||
, m_security(new LocalSend::SecurityContext(this))
|
||||
, m_discovery(new LocalSend::DiscoveryManager(this))
|
||||
, m_server(new LocalSend::HttpServer(this))
|
||||
, m_sessions(new LocalSend::SessionManager(this))
|
||||
{
|
||||
}
|
||||
|
||||
AppController::~AppController()
|
||||
{
|
||||
stopDiscovery();
|
||||
}
|
||||
|
||||
void AppController::initialize()
|
||||
{
|
||||
m_security->initialize();
|
||||
|
||||
LocalSend::InfoDto info = buildInfoDto();
|
||||
m_server->setLocalInfo(info, m_security->fingerprint());
|
||||
m_discovery->setLocalInfo(info, m_security->fingerprint(), m_settings->port(),
|
||||
m_settings->https() ? LocalSend::ProtocolType::Https : LocalSend::ProtocolType::Http);
|
||||
|
||||
if (m_server->start(m_settings->port(), m_settings->https())) {
|
||||
emit serverRunningChanged();
|
||||
}
|
||||
|
||||
connect(m_discovery, &LocalSend::DiscoveryManager::deviceDiscovered,
|
||||
this, &AppController::onDeviceDiscovered);
|
||||
connect(m_discovery, &LocalSend::DiscoveryManager::deviceLost,
|
||||
this, &AppController::onDeviceLost);
|
||||
connect(m_server, &LocalSend::HttpServer::prepareUploadRequest,
|
||||
this, &AppController::onPrepareUploadRequest);
|
||||
|
||||
startDiscovery();
|
||||
}
|
||||
|
||||
LocalSend::InfoDto AppController::buildInfoDto() const
|
||||
{
|
||||
LocalSend::InfoDto info;
|
||||
info.alias = m_settings->alias();
|
||||
info.version = m_settings->version();
|
||||
info.deviceModel = m_settings->deviceModel();
|
||||
info.deviceType = m_settings->deviceType();
|
||||
info.download = false;
|
||||
return info;
|
||||
}
|
||||
|
||||
QString AppController::alias() const
|
||||
{
|
||||
return m_settings->alias();
|
||||
}
|
||||
|
||||
void AppController::setAlias(const QString& alias)
|
||||
{
|
||||
if (m_settings->alias() != alias) {
|
||||
m_settings->setAlias(alias);
|
||||
emit aliasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
quint16 AppController::port() const
|
||||
{
|
||||
return m_settings->port();
|
||||
}
|
||||
|
||||
void AppController::setPort(quint16 port)
|
||||
{
|
||||
if (m_settings->port() != port) {
|
||||
m_settings->setPort(port);
|
||||
emit portChanged();
|
||||
}
|
||||
}
|
||||
|
||||
QVariantList AppController::devices() const
|
||||
{
|
||||
QVariantList result;
|
||||
for (const LocalSend::Device& device : m_devices) {
|
||||
QVariantMap map;
|
||||
map[QStringLiteral("ip")] = device.ip;
|
||||
map[QStringLiteral("port")] = device.port;
|
||||
map[QStringLiteral("alias")] = device.alias;
|
||||
map[QStringLiteral("fingerprint")] = device.fingerprint;
|
||||
map[QStringLiteral("deviceModel")] = device.deviceModel;
|
||||
map[QStringLiteral("deviceType")] = LocalSend::deviceTypeToString(device.deviceType);
|
||||
result.append(map);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool AppController::serverRunning() const
|
||||
{
|
||||
return m_server->isRunning();
|
||||
}
|
||||
|
||||
void AppController::startDiscovery()
|
||||
{
|
||||
m_discovery->start();
|
||||
}
|
||||
|
||||
void AppController::stopDiscovery()
|
||||
{
|
||||
m_discovery->stop();
|
||||
}
|
||||
|
||||
void AppController::refreshDevices()
|
||||
{
|
||||
m_discovery->startScan();
|
||||
}
|
||||
|
||||
void AppController::onDeviceDiscovered(const LocalSend::Device& device)
|
||||
{
|
||||
m_devices.insert(device.fingerprint, device);
|
||||
emit devicesChanged();
|
||||
}
|
||||
|
||||
void AppController::onDeviceLost(const QString& fingerprint)
|
||||
{
|
||||
m_devices.remove(fingerprint);
|
||||
emit devicesChanged();
|
||||
}
|
||||
|
||||
void AppController::onPrepareUploadRequest(const LocalSend::PrepareUploadRequestDto& dto,
|
||||
const QHostAddress& sender)
|
||||
{
|
||||
LocalSend::Device device;
|
||||
device.ip = sender.toString();
|
||||
device.alias = dto.info.alias;
|
||||
device.fingerprint = dto.info.fingerprint;
|
||||
device.deviceModel = dto.info.deviceModel;
|
||||
device.deviceType = dto.info.deviceType;
|
||||
device.version = dto.info.version;
|
||||
|
||||
QString sessionId = m_sessions->createReceiveSession(device, dto.files);
|
||||
|
||||
QVariantList filesList;
|
||||
for (auto it = dto.files.constBegin(); it != dto.files.constEnd(); ++it) {
|
||||
QVariantMap file;
|
||||
file[QStringLiteral("id")] = it.key();
|
||||
file[QStringLiteral("fileName")] = it.value().fileName;
|
||||
file[QStringLiteral("size")] = it.value().size;
|
||||
file[QStringLiteral("fileType")] = it.value().fileType;
|
||||
filesList.append(file);
|
||||
}
|
||||
|
||||
emit receiveRequest(sessionId, dto.info.alias, filesList);
|
||||
}
|
||||
Reference in New Issue
Block a user