Support multiple PIN Entries

This commit is contained in:
Florian Märkl 2019-08-25 16:38:13 +02:00
commit d668423775
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
10 changed files with 81 additions and 13 deletions

View file

@ -36,7 +36,7 @@ class LoginPINDialog : public QDialog
void UpdateButtons();
public:
explicit LoginPINDialog(QWidget *parent = nullptr);
explicit LoginPINDialog(bool incorrect, QWidget *parent = nullptr);
QString GetPIN() { return pin; }
};

View file

@ -105,7 +105,7 @@ class StreamSession : public QObject
signals:
void CurrentImageUpdated();
void SessionQuit(ChiakiQuitReason reason, const QString &reason_str);
void LoginPINRequested();
void LoginPINRequested(bool incorrect);
private slots:
void UpdateGamepads();

View file

@ -47,7 +47,7 @@ class StreamWindow: public QMainWindow
private slots:
void SessionQuit(ChiakiQuitReason reason, const QString &reason_str);
void LoginPINRequested();
void LoginPINRequested(bool incorrect);
void ToggleFullscreen();
};

View file

@ -23,16 +23,22 @@
#include <QPushButton>
#include <QRegularExpression>
#include <QRegularExpressionValidator>
#include <QLabel>
#define PIN_LENGTH 4
static const QRegularExpression pin_re(QString("[0-9]").repeated(PIN_LENGTH));
LoginPINDialog::LoginPINDialog(QWidget *parent) : QDialog(parent)
LoginPINDialog::LoginPINDialog(bool incorrect, QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("Console Login PIN"));
auto layout = new QVBoxLayout(this);
setLayout(layout);
if(incorrect)
layout->addWidget(new QLabel(tr("Entered PIN was incorrect!"), this));
pin_edit = new QLineEdit(this);
pin_edit->setPlaceholderText(tr("Login PIN"));
pin_edit->setValidator(new QRegularExpressionValidator(pin_re, pin_edit));

View file

@ -30,6 +30,7 @@
#include <QAudioOutput>
#include <cstring>
#include <chiaki/session.h>
StreamSessionConnectInfo::StreamSessionConnectInfo()
{
@ -332,7 +333,7 @@ void StreamSession::Event(ChiakiEvent *event)
emit SessionQuit(event->quit.reason, event->quit.reason_str ? QString::fromUtf8(event->quit.reason_str) : QString());
break;
case CHIAKI_EVENT_LOGIN_PIN_REQUEST:
emit LoginPINRequested();
emit LoginPINRequested(event->login_pin_request.pin_incorrect);
break;
}
}

View file

@ -104,9 +104,9 @@ void StreamWindow::SessionQuit(ChiakiQuitReason reason, const QString &reason_st
close();
}
void StreamWindow::LoginPINRequested()
void StreamWindow::LoginPINRequested(bool incorrect)
{
auto dialog = new LoginPINDialog(this);
auto dialog = new LoginPINDialog(incorrect, this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
connect(dialog, &QDialog::finished, this, [this, dialog](int result) {
grabKeyboard();