/src/dialogs/ReCaptcha.cpp

https://github.com/mujx/nheko · C++ · 64 lines · 50 code · 14 blank · 0 comment · 0 complexity · 5b7238005c9ec21462e7649ba7422100 MD5 · raw file

  1. #include <QDesktopServices>
  2. #include <QLabel>
  3. #include <QPushButton>
  4. #include <QUrl>
  5. #include <QVBoxLayout>
  6. #include "dialogs/ReCaptcha.h"
  7. #include "Config.h"
  8. #include "MatrixClient.h"
  9. using namespace dialogs;
  10. ReCaptcha::ReCaptcha(const QString &session, QWidget *parent)
  11. : QWidget(parent)
  12. {
  13. setAutoFillBackground(true);
  14. setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
  15. setWindowModality(Qt::WindowModal);
  16. setAttribute(Qt::WA_DeleteOnClose, true);
  17. auto layout = new QVBoxLayout(this);
  18. layout->setSpacing(conf::modals::WIDGET_SPACING);
  19. layout->setMargin(conf::modals::WIDGET_MARGIN);
  20. auto buttonLayout = new QHBoxLayout();
  21. buttonLayout->setSpacing(8);
  22. buttonLayout->setMargin(0);
  23. openCaptchaBtn_ = new QPushButton("Open reCAPTCHA", this);
  24. cancelBtn_ = new QPushButton(tr("Cancel"), this);
  25. confirmBtn_ = new QPushButton(tr("Confirm"), this);
  26. confirmBtn_->setDefault(true);
  27. buttonLayout->addStretch(1);
  28. buttonLayout->addWidget(openCaptchaBtn_);
  29. buttonLayout->addWidget(cancelBtn_);
  30. buttonLayout->addWidget(confirmBtn_);
  31. QFont font;
  32. font.setPointSizeF(font.pointSizeF() * conf::modals::LABEL_MEDIUM_SIZE_RATIO);
  33. auto label = new QLabel(tr("Solve the reCAPTCHA and press the confirm button"), this);
  34. label->setFont(font);
  35. layout->addWidget(label);
  36. layout->addLayout(buttonLayout);
  37. connect(openCaptchaBtn_, &QPushButton::clicked, [session]() {
  38. const auto url = QString("https://%1:%2/_matrix/client/r0/auth/m.login.recaptcha/"
  39. "fallback/web?session=%3")
  40. .arg(QString::fromStdString(http::client()->server()))
  41. .arg(http::client()->port())
  42. .arg(session);
  43. QDesktopServices::openUrl(url);
  44. });
  45. connect(confirmBtn_, &QPushButton::clicked, this, [this]() {
  46. emit confirmation();
  47. emit close();
  48. });
  49. connect(cancelBtn_, &QPushButton::clicked, this, &dialogs::ReCaptcha::close);
  50. }