pin support

This commit is contained in:
2026-04-28 12:01:35 +08:00
parent 2556c2db83
commit 7c884a2185
9 changed files with 324 additions and 2 deletions

View File

@@ -37,6 +37,8 @@ void AppController::initialize()
emit serverRunningChanged();
}
m_server->setReceivePin(m_settings->receivePin());
connect(m_discovery, &LocalSend::DiscoveryManager::deviceDiscovered,
this, &AppController::onDeviceDiscovered);
connect(m_discovery, &LocalSend::DiscoveryManager::deviceLost,
@@ -60,6 +62,10 @@ void AppController::initialize()
this, &AppController::onPrepareUploadResponse);
connect(m_httpClient, &LocalSend::HttpClient::prepareUploadError,
this, &AppController::onPrepareUploadError);
connect(m_httpClient, &LocalSend::HttpClient::prepareUploadPinRequired,
this, &AppController::onPrepareUploadPinRequired);
connect(m_httpClient, &LocalSend::HttpClient::prepareUploadTooManyAttempts,
this, &AppController::onPrepareUploadTooManyAttempts);
connect(m_httpClient, &LocalSend::HttpClient::uploadProgress,
this, &AppController::onUploadProgress);
connect(m_httpClient, &LocalSend::HttpClient::uploadCompleted,
@@ -379,6 +385,20 @@ bool AppController::hasPendingFiles() const
return !m_pendingFilesList.isEmpty();
}
QString AppController::receivePin() const
{
return m_settings->receivePin();
}
void AppController::setReceivePin(const QString& pin)
{
if (m_settings->receivePin() != pin) {
m_settings->setReceivePin(pin);
m_server->setReceivePin(pin);
emit receivePinChanged();
}
}
void AppController::addFiles(const QStringList& filePaths)
{
QMimeDatabase mimeDb;
@@ -449,6 +469,7 @@ void AppController::sendFiles(const QString& deviceFingerprint, const QStringLis
m_pendingSendPaths = filePaths;
m_currentFileIndex = 0;
m_sendProgress = 0.0;
m_pinFirstAttempt = true;
emit sendingChanged();
emit sendProgressChanged();
@@ -552,6 +573,55 @@ void AppController::onPrepareUploadError(const QString& error)
emit sendingChanged();
}
void AppController::onPrepareUploadPinRequired()
{
qDebug() << "[AppController] onPrepareUploadPinRequired, firstAttempt:" << m_pinFirstAttempt;
emit pinRequired(m_pinFirstAttempt);
m_pinFirstAttempt = false;
}
void AppController::onPrepareUploadTooManyAttempts()
{
qWarning() << "[AppController] onPrepareUploadTooManyAttempts";
emit sendError(QStringLiteral("Too many PIN attempts"));
m_currentSendSessionId.clear();
emit sendingChanged();
}
void AppController::retryWithPin(const QString& pin)
{
if (m_currentSendDeviceFingerprint.isEmpty() || !m_devices.contains(m_currentSendDeviceFingerprint)) {
m_currentSendSessionId.clear();
emit sendingChanged();
return;
}
LocalSend::Device target = m_devices[m_currentSendDeviceFingerprint];
QMap<QString, LocalSend::FileDto> files;
QMimeDatabase mimeDb;
for (int i = 0; i < m_pendingSendPaths.size(); ++i) {
QFileInfo info(m_pendingSendPaths[i]);
if (!info.exists()) {
continue;
}
LocalSend::FileDto fileDto;
fileDto.id = QString::number(i);
fileDto.fileName = info.fileName();
fileDto.size = info.size();
fileDto.fileType = mimeDb.mimeTypeForFile(info).name();
files.insert(fileDto.id, fileDto);
}
LocalSend::PrepareUploadRequestDto request;
request.info = buildRegisterDto();
request.files = files;
qDebug() << "[AppController] Retrying prepare-upload with PIN to" << target.ip;
m_httpClient->prepareUpload(target, request, pin);
}
void AppController::onUploadProgress(qint64 sent, qint64 total)
{
if (total > 0) {