OwncloudOAuthCredsPage::OwncloudOAuthCredsPage()
: AbstractCredentialsWizardPage()
- , _afterInitialSetup(false)
-
{
+ _ui.setupUi(this);
+
+ Theme *theme = Theme::instance();
+ _ui.topLabel->hide();
+ _ui.bottomLabel->hide();
+ QVariant variant = theme->customMedia(Theme::oCSetupTop);
+ WizardCommon::setupCustomMedia(variant, _ui.topLabel);
+ variant = theme->customMedia(Theme::oCSetupBottom);
+ WizardCommon::setupCustomMedia(variant, _ui.bottomLabel);
+
+ WizardCommon::initErrorLabel(_ui.errorLabel);
+
+ setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(Theme::instance()->appNameGUI())));
+ setSubTitle(WizardCommon::subTitleTemplate().arg(tr("Login in your browser")));
+
+ connect(_ui.openLinkButton, &QCommandLinkButton::clicked, [this] {
+ _ui.errorLabel->hide();
+ if (_asyncAuth)
+ _asyncAuth->openBrowser();
+ });
}
-void OwncloudOAuthCredsPage::setVisible(bool visible)
+void OwncloudOAuthCredsPage::initializePage()
{
- if (!_afterInitialSetup) {
- QWizardPage::setVisible(visible);
- return;
- }
+ OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
+ Q_ASSERT(ocWizard);
+ ocWizard->account()->setCredentials(CredentialsFactory::create("http"));
+ _asyncAuth.reset(new OAuth(ocWizard->account().data(), this));
+ connect(_asyncAuth.data(), &OAuth::result, this, &OwncloudOAuthCredsPage::asyncAuthResult, Qt::QueuedConnection);
+ _asyncAuth->start();
+ wizard()->hide();
+}
- if (isVisible() == visible) {
- return;
- }
- if (visible) {
- OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
- Q_ASSERT(ocWizard);
- ocWizard->account()->setCredentials(CredentialsFactory::create("http"));
- _asyncAuth.reset(new OAuth(ocWizard->account().data(), this));
- connect(_asyncAuth.data(), SIGNAL(result(OAuth::Result, QString, QString, QString)),
- this, SLOT(asyncAuthResult(OAuth::Result, QString, QString, QString)));
- _asyncAuth->start();
- wizard()->hide();
- } else {
- // The next or back button was activated, show the wizard again
- wizard()->show();
- }
+void OCC::OwncloudOAuthCredsPage::cleanupPage()
+{
+ // The next or back button was activated, show the wizard again
+ wizard()->show();
+ _asyncAuth.reset();
}
void OwncloudOAuthCredsPage::asyncAuthResult(OAuth::Result r, const QString &user,
const QString &token, const QString &refreshToken)
{
switch (r) {
- case OAuth::NotSupported:
+ case OAuth::NotSupported: {
+ /* OAuth not supported (can't open browser), fallback to HTTP credentials */
+ OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
+ ocWizard->back();
+ ocWizard->setAuthType(WizardCommon::HttpCreds);
+ break;
+ }
case OAuth::Error:
- qWarning() << "FIXME!!!";
+ /* Error while getting the access token. (Timeout, or the server did not accept our client credentials */
+ _ui.errorLabel->show();
+ wizard()->show();
break;
case OAuth::LoggedIn: {
_token = token;
}
}
-void OwncloudOAuthCredsPage::initializePage()
-{
- _afterInitialSetup = true;
-}
-
int OwncloudOAuthCredsPage::nextId() const
{
return WizardCommon::Page_AdvancedSetup;
ocWizard->_clientSslCertificate, ocWizard->_clientSslKey);
}
+bool OwncloudOAuthCredsPage::isComplete() const
+{
+ return false; /* We can never go forward manually */
+}
+
} // namespace OCC
#include "accountfwd.h"
#include "creds/oauth.h"
+#include "ui_owncloudoauthcredspage.h"
+
+
namespace OCC {
AbstractCredentials *getCredentials() const Q_DECL_OVERRIDE;
void initializePage() Q_DECL_OVERRIDE;
+ void cleanupPage() override;
int nextId() const Q_DECL_OVERRIDE;
void setConnected();
+ bool isComplete() const override;
public Q_SLOTS:
- void setVisible(bool visible) Q_DECL_OVERRIDE;
void asyncAuthResult(OAuth::Result, const QString &user, const QString &token,
const QString &reniewToken);
signals:
void connectToOCUrl(const QString &);
-private:
- bool _afterInitialSetup;
-
public:
QString _user;
QString _token;
QString _refreshToken;
QScopedPointer<OAuth> _asyncAuth;
+ Ui_OwncloudOAuthCredsPage _ui;
};
} // namespace OCC
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OwncloudOAuthCredsPage</class>
+ <widget class="QWidget" name="OwncloudOAuthCredsPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>424</width>
+ <height>373</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="topLabel">
+ <property name="text">
+ <string notr="true">TextLabel</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Please switch to your browser to proceed.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="errorLabel">
+ <property name="text">
+ <string>An error occured while connecting. Please try again.</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCommandLinkButton" name="openLinkButton">
+ <property name="text">
+ <string>Re-open Browser</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>127</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="bottomLabel">
+ <property name="text">
+ <string notr="true">TextLabel</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>