#include "webviewpage.h" #include #include #include #include #include #include "owncloudwizard.h" #include "creds/webflowcredentials.h" #include "webview.h" #include "account.h" namespace OCC { Q_LOGGING_CATEGORY(lcWizardWebiewPage, "nextcloud.gui.wizard.webviewpage", QtInfoMsg) WebViewPage::WebViewPage(QWidget *parent) : AbstractCredentialsWizardPage() { _ocWizard = qobject_cast(parent); qCInfo(lcWizardWebiewPage()) << "Time for a webview!"; _webView = new WebView(this); auto *layout = new QVBoxLayout(this); layout->setMargin(0); layout->addWidget(_webView); setLayout(layout); connect(_webView, &WebView::urlCatched, this, &WebViewPage::urlCatched); //_useSystemProxy = QNetworkProxyFactory::usesSystemConfiguration(); } WebViewPage::~WebViewPage() = default; //{ // QNetworkProxyFactory::setUseSystemConfiguration(_useSystemProxy); //} void WebViewPage::initializePage() { //QNetworkProxy::setApplicationProxy(QNetworkProxy::applicationProxy()); QString url; if (_ocWizard->registration()) { url = "https://nextcloud.com/register"; } else { url = _ocWizard->ocUrl(); if (!url.endsWith('/')) { url += "/"; } url += "index.php/login/flow"; } qCInfo(lcWizardWebiewPage()) << "Url to auth at: " << url; _webView->setUrl(QUrl(url)); _originalWizardSize = _ocWizard->size(); resizeWizard(); } void WebViewPage::resizeWizard() { // The webview needs a little bit more space auto wizardSizeChanged = tryToSetWizardSize(_originalWizardSize.width() * 2, _originalWizardSize.height() * 2); if (!wizardSizeChanged) { wizardSizeChanged = tryToSetWizardSize(static_cast(_originalWizardSize.width() * 1.5), static_cast(_originalWizardSize.height() * 1.5)); } if (wizardSizeChanged) { _ocWizard->centerWindow(); } } bool WebViewPage::tryToSetWizardSize(int width, int height) { const auto window = _ocWizard->window(); const auto screenGeometry = QGuiApplication::screenAt(window->pos())->geometry(); const auto windowWidth = screenGeometry.width(); const auto windowHeight = screenGeometry.height(); if (width < windowWidth && height < windowHeight) { _ocWizard->resize(width, height); return true; } return false; } void WebViewPage::cleanupPage() { _ocWizard->resize(_originalWizardSize); _ocWizard->centerWindow(); } int WebViewPage::nextId() const { return WizardCommon::Page_AdvancedSetup; } bool WebViewPage::isComplete() const { return false; } AbstractCredentials* WebViewPage::getCredentials() const { return new WebFlowCredentials(_user, _pass, _ocWizard->_clientSslCertificate, _ocWizard->_clientSslKey); } void WebViewPage::setConnected() { qCInfo(lcWizardWebiewPage()) << "YAY! we are connected!"; } void WebViewPage::urlCatched(QString user, QString pass, QString host) { qCInfo(lcWizardWebiewPage()) << "Got user: " << user << ", server: " << host; _user = user; _pass = pass; AccountPtr account = _ocWizard->account(); account->setUrl(host); qCInfo(lcWizardWebiewPage()) << "URL: " << field("OCUrl").toString(); emit connectToOCUrl(host); } }