Ejemplo n.º 1
0
PushoverSettings::PushoverSettings(Snore::SnorePlugin *plugin, QWidget *parent) :
    Snore::PluginSettingsWidget(plugin, parent),
    m_emailLineEdit(new QLineEdit(this)),
    m_passwordLineEdit(new QLineEdit(this)),
    m_deviceLineEdit(new QLineEdit(this)),
    m_registerButton(new QPushButton(this)),
    m_errorMessageLabel(new QLabel(this))
{
    m_passwordLineEdit->setEchoMode(QLineEdit::Password);
    addRow(tr("Email Address:"), m_emailLineEdit);
    addRow(tr("Password:"******"Device Name:"), m_deviceLineEdit);
    addRow(QString(), m_registerButton);
    addRow(tr("Status"), m_errorMessageLabel);
    addRow(QString(), new QLabel(this));
    addRow(QString(), new QLabel(tr("If you don't have an account yet please register at <a href=\"https://pushover.net\">Pushover.net</a>"), this));

    m_emailLineEdit->setEnabled(false);
    m_passwordLineEdit->setEnabled(false);
    m_deviceLineEdit->setEnabled(false);
    m_registerButton->setEnabled(false);

    QPointer<PushoverClient> pushover = plugin->constHints().value("client").value<QPointer<PushoverClient>>();
    Q_ASSERT_X(pushover, Q_FUNC_INFO, "Failed to retrieve PushoverClient.");

    if (pushover) {

        m_errorMessageLabel->setText(pushover->errorMessage());

        connect(pushover, &PushoverClient::loggedInChanged, this, &PushoverSettings::slotUpdateLoginState);
        connect(pushover, &PushoverClient::error, [this](const QString & message) {
            m_errorMessageLabel->setText(message);
        });

        slotUpdateLoginState(pushover->isLoggedIn());

        connect(m_registerButton, &QPushButton::clicked, [pushover, this]() {
            m_registerButton->setEnabled(false);
            if (pushover->isLoggedIn() != PushoverClient::LoggedIn) {
                pushover->login(m_emailLineEdit->text(), m_passwordLineEdit->text(), m_deviceLineEdit->text());
            } else {
                pushover->logOut();
            }
        });

    }

}