mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-25 22:05:53 +03:00
Make the setup wizard compile again
- introduces more jobs - needs more cleaning up
This commit is contained in:
parent
aa2baa45fb
commit
a91799a11c
16 changed files with 314 additions and 330 deletions
|
@ -212,14 +212,14 @@ set(mirall_SRCS
|
||||||
mirall/folderwizard.cpp
|
mirall/folderwizard.cpp
|
||||||
mirall/folderstatusmodel.cpp
|
mirall/folderstatusmodel.cpp
|
||||||
mirall/protocolwidget.cpp
|
mirall/protocolwidget.cpp
|
||||||
# wizard/owncloudwizard.cpp
|
wizard/owncloudwizard.cpp
|
||||||
# wizard/owncloudsetuppage.cpp
|
wizard/owncloudsetuppage.cpp
|
||||||
# wizard/owncloudhttpcredspage.cpp
|
wizard/owncloudhttpcredspage.cpp
|
||||||
# wizard/owncloudwizardresultpage.cpp
|
wizard/owncloudwizardresultpage.cpp
|
||||||
# wizard/owncloudwizardcommon.cpp
|
wizard/owncloudwizardcommon.cpp
|
||||||
# wizard/owncloudshibbolethcredspage.cpp
|
wizard/owncloudshibbolethcredspage.cpp
|
||||||
# wizard/owncloudadvancedsetuppage.cpp
|
wizard/owncloudadvancedsetuppage.cpp
|
||||||
# mirall/owncloudsetupwizard.cpp
|
mirall/owncloudsetupwizard.cpp
|
||||||
mirall/updatedetector.cpp
|
mirall/updatedetector.cpp
|
||||||
mirall/occinfo.cpp
|
mirall/occinfo.cpp
|
||||||
mirall/sslerrordialog.cpp
|
mirall/sslerrordialog.cpp
|
||||||
|
@ -237,14 +237,14 @@ set(mirall_HEADERS
|
||||||
mirall/application.h
|
mirall/application.h
|
||||||
mirall/systray.h
|
mirall/systray.h
|
||||||
mirall/folderwizard.h
|
mirall/folderwizard.h
|
||||||
# mirall/owncloudsetupwizard.h
|
mirall/owncloudsetupwizard.h
|
||||||
# wizard/owncloudwizard.h
|
wizard/owncloudwizard.h
|
||||||
# wizard/owncloudsetuppage.h
|
wizard/owncloudsetuppage.h
|
||||||
# wizard/owncloudhttpcredspage.h
|
wizard/owncloudhttpcredspage.h
|
||||||
# wizard/owncloudwizardresultpage.h
|
wizard/owncloudwizardresultpage.h
|
||||||
# wizard/owncloudwizardcommon.h
|
wizard/owncloudwizardcommon.h
|
||||||
# wizard/owncloudshibbolethcredspage.h
|
wizard/owncloudshibbolethcredspage.h
|
||||||
# wizard/owncloudadvancedsetuppage.h
|
wizard/owncloudadvancedsetuppage.h
|
||||||
mirall/folderstatusmodel.h
|
mirall/folderstatusmodel.h
|
||||||
mirall/updatedetector.h
|
mirall/updatedetector.h
|
||||||
mirall/sslerrordialog.h
|
mirall/sslerrordialog.h
|
||||||
|
|
|
@ -48,13 +48,14 @@ AccountManager *AccountManager::instance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Account::Account(QObject *parent)
|
Account::Account(AbstractSslErrorHandler *sslErrorHandler, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, _am(0)
|
, _am(0)
|
||||||
, _credentials(0)
|
, _credentials(0)
|
||||||
, _treatSslErrorsAsFailure(false)
|
, _treatSslErrorsAsFailure(false)
|
||||||
, _sslErrorHandler(0)
|
, _sslErrorHandler(0)
|
||||||
{
|
{
|
||||||
|
setSslErrorHandler(sslErrorHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Account::save(QSettings &settings)
|
void Account::save(QSettings &settings)
|
||||||
|
@ -112,11 +113,9 @@ void Account::setCredentials(AbstractCredentials *cred)
|
||||||
SLOT(slotHandleErrors(QNetworkReply*,QList<QSslError>)));
|
SLOT(slotHandleErrors(QNetworkReply*,QList<QSslError>)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char WEBDAV_PATH[] = "remote.php/webdav/";
|
|
||||||
|
|
||||||
QUrl Account::davUrl() const
|
QUrl Account::davUrl() const
|
||||||
{
|
{
|
||||||
return concatUrlPath(url(), WEBDAV_PATH);
|
return concatUrlPath(url(), davPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QNetworkCookie> Account::lastAuthCookies() const
|
QList<QNetworkCookie> Account::lastAuthCookies() const
|
||||||
|
@ -124,17 +123,36 @@ QList<QNetworkCookie> Account::lastAuthCookies() const
|
||||||
return _am->cookieJar()->cookiesForUrl(_url);
|
return _am->cookieJar()->cookiesForUrl(_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QNetworkReply *Account::headRequest(const QString &relPath)
|
||||||
|
{
|
||||||
|
return headRequest(concatUrlPath(url(), relPath));
|
||||||
|
}
|
||||||
|
|
||||||
|
QNetworkReply *Account::headRequest(const QUrl &url)
|
||||||
|
{
|
||||||
|
QNetworkRequest request(url);
|
||||||
|
return _am->head(request);
|
||||||
|
}
|
||||||
|
|
||||||
QNetworkReply *Account::getRequest(const QString &relPath)
|
QNetworkReply *Account::getRequest(const QString &relPath)
|
||||||
{
|
{
|
||||||
QNetworkRequest request(concatUrlPath(url(), relPath));
|
return getRequest(concatUrlPath(url(), relPath));
|
||||||
// ### error handling
|
}
|
||||||
|
|
||||||
|
QNetworkReply *Account::getRequest(const QUrl &url)
|
||||||
|
{
|
||||||
|
QNetworkRequest request(url);
|
||||||
return _am->get(request);
|
return _am->get(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *Account::davRequest(const QByteArray &verb, const QString &relPath, QNetworkRequest req, QIODevice *data)
|
QNetworkReply *Account::davRequest(const QByteArray &verb, const QString &relPath, QNetworkRequest req, QIODevice *data)
|
||||||
{
|
{
|
||||||
req.setUrl(concatUrlPath(davUrl(), relPath));
|
return davRequest(verb, concatUrlPath(davUrl(), relPath), req, data);
|
||||||
// ### error handling
|
}
|
||||||
|
|
||||||
|
QNetworkReply *Account::davRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data)
|
||||||
|
{
|
||||||
|
req.setUrl(url);
|
||||||
return _am->sendCustomRequest(req, verb, data);
|
return _am->sendCustomRequest(req, verb, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +185,7 @@ QUrl Account::concatUrlPath(const QUrl &url, const QString &concatPath)
|
||||||
{
|
{
|
||||||
QUrl tmpUrl = url;
|
QUrl tmpUrl = url;
|
||||||
QString path = tmpUrl.path();
|
QString path = tmpUrl.path();
|
||||||
if (!path.endsWith('/')) {
|
if (!path.endsWith('/') || !concatPath.startsWith('/')) {
|
||||||
path += QLatin1Char('/');
|
path += QLatin1Char('/');
|
||||||
}
|
}
|
||||||
path += concatPath;
|
path += concatPath;
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
Account *account() { return _account; }
|
Account *account() { return _account; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AccountManager() {}
|
AccountManager() : _account(0) {}
|
||||||
Account *_account;
|
Account *_account;
|
||||||
static AccountManager *_instance;
|
static AccountManager *_instance;
|
||||||
};
|
};
|
||||||
|
@ -59,7 +59,9 @@ public:
|
||||||
class Account : public QObject {
|
class Account : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Account(QObject *parent = 0);
|
static QString davPath() { return "remote.php/webdav/"; }
|
||||||
|
|
||||||
|
Account(AbstractSslErrorHandler *sslErrorHandler = 0, QObject *parent = 0);
|
||||||
/**
|
/**
|
||||||
* Saves the account to a given settings file
|
* Saves the account to a given settings file
|
||||||
*/
|
*/
|
||||||
|
@ -69,6 +71,14 @@ public:
|
||||||
* Creates an account object from from a given settings file.
|
* Creates an account object from from a given settings file.
|
||||||
*/
|
*/
|
||||||
static Account* restore(QSettings &settings);
|
static Account* restore(QSettings &settings);
|
||||||
|
/**
|
||||||
|
* @brief Creates a minimal account object
|
||||||
|
*
|
||||||
|
* This will set up a ssl error handler
|
||||||
|
*
|
||||||
|
* @return A new Account object
|
||||||
|
*/
|
||||||
|
static Account* create(const QUrl &url);
|
||||||
|
|
||||||
/** Holds the accounts credentials */
|
/** Holds the accounts credentials */
|
||||||
AbstractCredentials* credentials() const;
|
AbstractCredentials* credentials() const;
|
||||||
|
@ -87,8 +97,12 @@ public:
|
||||||
|
|
||||||
QList<QNetworkCookie> lastAuthCookies() const;
|
QList<QNetworkCookie> lastAuthCookies() const;
|
||||||
|
|
||||||
|
QNetworkReply* headRequest(const QString &relPath);
|
||||||
|
QNetworkReply* headRequest(const QUrl &url);
|
||||||
QNetworkReply* getRequest(const QString &relPath);
|
QNetworkReply* getRequest(const QString &relPath);
|
||||||
|
QNetworkReply* getRequest(const QUrl &url);
|
||||||
QNetworkReply* davRequest(const QByteArray &verb, const QString &relPath, QNetworkRequest req, QIODevice *data = 0);
|
QNetworkReply* davRequest(const QByteArray &verb, const QString &relPath, QNetworkRequest req, QIODevice *data = 0);
|
||||||
|
QNetworkReply* davRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data = 0);
|
||||||
|
|
||||||
/** The certificates of the account */
|
/** The certificates of the account */
|
||||||
QList<QSslCertificate> certificateChain() const { return _certificateChain; }
|
QList<QSslCertificate> certificateChain() const { return _certificateChain; }
|
||||||
|
@ -101,7 +115,7 @@ public:
|
||||||
|
|
||||||
static QUrl concatUrlPath(const QUrl &url, const QString &concatPath);
|
static QUrl concatUrlPath(const QUrl &url, const QString &concatPath);
|
||||||
|
|
||||||
private slots:
|
protected slots:
|
||||||
void slotHandleErrors(QNetworkReply*,QList<QSslError>);
|
void slotHandleErrors(QNetworkReply*,QList<QSslError>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -174,8 +174,7 @@ void AccountSettings::slotFolderWizardRejected()
|
||||||
void AccountSettings::slotOpenAccountWizard()
|
void AccountSettings::slotOpenAccountWizard()
|
||||||
{
|
{
|
||||||
this->topLevelWidget()->close();
|
this->topLevelWidget()->close();
|
||||||
// ### TODO
|
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), 0);
|
||||||
//OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountSettings::slotAddFolder( Folder *folder )
|
void AccountSettings::slotAddFolder( Folder *folder )
|
||||||
|
|
|
@ -117,8 +117,10 @@ Application::Application(int &argc, char **argv) :
|
||||||
MirallConfigFile cfg;
|
MirallConfigFile cfg;
|
||||||
QSettings settings(cfg.configFile(), QSettings::IniFormat);
|
QSettings settings(cfg.configFile(), QSettings::IniFormat);
|
||||||
Account *account = Account::restore(settings);
|
Account *account = Account::restore(settings);
|
||||||
|
if (account) {
|
||||||
account->setSslErrorHandler(new SslDialogErrorHandler);
|
account->setSslErrorHandler(new SslDialogErrorHandler);
|
||||||
AccountManager::instance()->setAccount(account);
|
AccountManager::instance()->setAccount(account);
|
||||||
|
}
|
||||||
|
|
||||||
FolderMan::instance()->setSyncEnabled(false);
|
FolderMan::instance()->setSyncEnabled(false);
|
||||||
|
|
||||||
|
|
|
@ -88,20 +88,19 @@ void ConnectionValidator::checkConnection()
|
||||||
{
|
{
|
||||||
if( AccountManager::instance()->account() ) {
|
if( AccountManager::instance()->account() ) {
|
||||||
CheckServerJob *checkJob = new CheckServerJob(_account, false, this);
|
CheckServerJob *checkJob = new CheckServerJob(_account, false, this);
|
||||||
connect(checkJob, SIGNAL(instanceFound(QVariantMap)), SLOT(slotStatusFound(QVariantMap)));
|
connect(checkJob, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotStatusFound(QUrl,QVariantMap)));
|
||||||
connect(checkJob, SIGNAL(networkError(QNetworkReply::NetworkError,QString)),
|
connect(checkJob, SIGNAL(networkError(QNetworkReply*)), SLOT(slotNoStatusFound(QNetworkReply*)));
|
||||||
SLOT(slotNoStatusFound(QNetworkReply::NetworkError,QString)));
|
|
||||||
} else {
|
} else {
|
||||||
_errors << tr("No ownCloud account configured");
|
_errors << tr("No ownCloud account configured");
|
||||||
emit connectionResult( NotConfigured );
|
emit connectionResult( NotConfigured );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionValidator::slotStatusFound( const QVariantMap &info )
|
void ConnectionValidator::slotStatusFound(const QUrl&url, const QVariantMap &info)
|
||||||
{
|
{
|
||||||
// status.php was found.
|
// status.php was found.
|
||||||
qDebug() << "** Application: ownCloud found: "
|
qDebug() << "** Application: ownCloud found: "
|
||||||
<< _account->url() << " with version "
|
<< url << " with version "
|
||||||
<< CheckServerJob::versionString(info)
|
<< CheckServerJob::versionString(info)
|
||||||
<< "(" << CheckServerJob::version(info) << ")";
|
<< "(" << CheckServerJob::version(info) << ")";
|
||||||
// now check the authentication
|
// now check the authentication
|
||||||
|
@ -117,12 +116,12 @@ void ConnectionValidator::slotStatusFound( const QVariantMap &info )
|
||||||
}
|
}
|
||||||
|
|
||||||
// status.php could not be loaded.
|
// status.php could not be loaded.
|
||||||
void ConnectionValidator::slotNoStatusFound(QNetworkReply::NetworkError error, const QString &errStr)
|
void ConnectionValidator::slotNoStatusFound(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
// ### TODO
|
// ### TODO
|
||||||
_errors.append(tr("Unable to connect to %1").arg(_account->url().toString()));
|
_errors.append(tr("Unable to connect to %1").arg(_account->url().toString()));
|
||||||
_errors.append( errStr );
|
_errors.append( reply->errorString() );
|
||||||
_networkError = (error != QNetworkReply::NoError);
|
_networkError = (reply->error() != QNetworkReply::NoError);
|
||||||
emit connectionResult( StatusNotFound );
|
emit connectionResult( StatusNotFound );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -133,22 +132,21 @@ void ConnectionValidator::slotCheckAuthentication()
|
||||||
// continue in slotAuthCheck here :-)
|
// continue in slotAuthCheck here :-)
|
||||||
PropfindJob *propFind = new PropfindJob(_account, "/", QList<QByteArray>() << "getlastmodified", this);
|
PropfindJob *propFind = new PropfindJob(_account, "/", QList<QByteArray>() << "getlastmodified", this);
|
||||||
connect(propFind, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess()));
|
connect(propFind, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess()));
|
||||||
connect(propFind, SIGNAL(networkError(QNetworkReply::NetworkError, QString)),
|
connect(propFind, SIGNAL(networkError(QNetworkReply*)), SLOT(slotAuthFailed(QNetworkReply*)));
|
||||||
SLOT(slotAuthFailed(QNetworkReply::NetworkError, QString)));
|
|
||||||
qDebug() << "# checking for authentication settings.";
|
qDebug() << "# checking for authentication settings.";
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionValidator::slotAuthFailed(QNetworkReply::NetworkError error, const QString& errString)
|
void ConnectionValidator::slotAuthFailed(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
Status stat = StatusNotFound;
|
Status stat = StatusNotFound;
|
||||||
|
|
||||||
if( error == QNetworkReply::AuthenticationRequiredError ||
|
if( reply->error() == QNetworkReply::AuthenticationRequiredError ||
|
||||||
error == QNetworkReply::OperationCanceledError ) { // returned if the user is wrong.
|
reply->error() == QNetworkReply::OperationCanceledError ) { // returned if the user is wrong.
|
||||||
qDebug() << "******** Password is wrong!";
|
qDebug() << "******** Password is wrong!";
|
||||||
_errors << tr("The provided credentials are not correct");
|
_errors << tr("The provided credentials are not correct");
|
||||||
stat = CredentialsWrong;
|
stat = CredentialsWrong;
|
||||||
} else if( error != QNetworkReply::NoError ) {
|
} else if( reply->error() != QNetworkReply::NoError ) {
|
||||||
_errors << errString;
|
_errors << reply->errorString();
|
||||||
}
|
}
|
||||||
|
|
||||||
emit connectionResult( stat );
|
emit connectionResult( stat );
|
||||||
|
|
|
@ -58,11 +58,11 @@ signals:
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void slotStatusFound( const QVariantMap &info );
|
void slotStatusFound(const QUrl&url, const QVariantMap &info);
|
||||||
void slotNoStatusFound(QNetworkReply::NetworkError error, const QString& errString);
|
void slotNoStatusFound(QNetworkReply *reply);
|
||||||
|
|
||||||
void slotCheckAuthentication();
|
void slotCheckAuthentication();
|
||||||
void slotAuthFailed(QNetworkReply::NetworkError error, const QString& errString);
|
void slotAuthFailed(QNetworkReply *reply);
|
||||||
void slotAuthSuccess();
|
void slotAuthSuccess();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -206,8 +206,7 @@ void FolderWizardTargetPage::slotCreateRemoteFolder(QString folder)
|
||||||
MkColJob *job = new MkColJob(AccountManager::instance()->account(), folder, this);
|
MkColJob *job = new MkColJob(AccountManager::instance()->account(), folder, this);
|
||||||
/* check the owncloud configuration file and query the ownCloud */
|
/* check the owncloud configuration file and query the ownCloud */
|
||||||
connect(job, SIGNAL(finished()), SLOT(slotCreateRemoteFolderFinished()));
|
connect(job, SIGNAL(finished()), SLOT(slotCreateRemoteFolderFinished()));
|
||||||
connect(job, SIGNAL(networkError(QNetworkReply::NetworkError,QString)),
|
connect(job, SIGNAL(networkError(QNetworkReply*)), SLOT(slotHandleNetworkError(QNetworkReply*)));
|
||||||
SLOT(slotHandleNetworkError(QNetworkReply::NetworkError,QString)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderWizardTargetPage::slotCreateRemoteFolderFinished()
|
void FolderWizardTargetPage::slotCreateRemoteFolderFinished()
|
||||||
|
@ -217,9 +216,9 @@ void FolderWizardTargetPage::slotCreateRemoteFolderFinished()
|
||||||
slotRefreshFolders();
|
slotRefreshFolders();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderWizardTargetPage::slotHandleNetworkError(QNetworkReply::NetworkError, const QString& error)
|
void FolderWizardTargetPage::slotHandleNetworkError(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
qDebug() << "** webdav mkdir request failed:" << error;
|
qDebug() << "** webdav mkdir request failed:" << reply->error();
|
||||||
showWarn(tr("Failed to create the folder on %1.<br/>Please check manually.")
|
showWarn(tr("Failed to create the folder on %1.<br/>Please check manually.")
|
||||||
.arg(Theme::instance()->appNameGUI()));
|
.arg(Theme::instance()->appNameGUI()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ protected slots:
|
||||||
void slotAddRemoteFolder();
|
void slotAddRemoteFolder();
|
||||||
void slotCreateRemoteFolder(QString);
|
void slotCreateRemoteFolder(QString);
|
||||||
void slotCreateRemoteFolderFinished();
|
void slotCreateRemoteFolderFinished();
|
||||||
void slotHandleNetworkError(QNetworkReply::NetworkError, const QString& error);
|
void slotHandleNetworkError(QNetworkReply*);
|
||||||
void slotUpdateDirectories(QStringList);
|
void slotUpdateDirectories(QStringList);
|
||||||
void slotRefreshFolders();
|
void slotRefreshFolders();
|
||||||
void slotItemExpanded(QTreeWidgetItem*);
|
void slotItemExpanded(QTreeWidgetItem*);
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QNetworkRequest>
|
||||||
#include <QSslConfiguration>
|
#include <QSslConfiguration>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
|
@ -28,6 +30,8 @@
|
||||||
#include "mirall/networkjobs.h"
|
#include "mirall/networkjobs.h"
|
||||||
#include "mirall/account.h"
|
#include "mirall/account.h"
|
||||||
|
|
||||||
|
#include "creds/credentialsfactory.h"
|
||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
AbstractNetworkJob::AbstractNetworkJob(Account *account, const QString &path, QObject *parent)
|
AbstractNetworkJob::AbstractNetworkJob(Account *account, const QString &path, QObject *parent)
|
||||||
|
@ -40,16 +44,12 @@ AbstractNetworkJob::AbstractNetworkJob(Account *account, const QString &path, QO
|
||||||
|
|
||||||
void AbstractNetworkJob::setReply(QNetworkReply *reply)
|
void AbstractNetworkJob::setReply(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
|
if (_reply) {
|
||||||
|
_reply->deleteLater();
|
||||||
|
}
|
||||||
_reply = reply;
|
_reply = reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *AbstractNetworkJob::takeReply()
|
|
||||||
{
|
|
||||||
QNetworkReply *reply = _reply;
|
|
||||||
_reply = 0;
|
|
||||||
return reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractNetworkJob::setAccount(Account *account)
|
void AbstractNetworkJob::setAccount(Account *account)
|
||||||
{
|
{
|
||||||
_account = account;
|
_account = account;
|
||||||
|
@ -63,18 +63,15 @@ void AbstractNetworkJob::setPath(const QString &path)
|
||||||
void AbstractNetworkJob::slotError()
|
void AbstractNetworkJob::slotError()
|
||||||
{
|
{
|
||||||
qDebug() << metaObject()->className() << "Error:" << _reply->errorString();
|
qDebug() << metaObject()->className() << "Error:" << _reply->errorString();
|
||||||
emit networkError(_reply->error(), _reply->errorString());
|
emit networkError(_reply);
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractNetworkJob::setupConnections(QNetworkReply *reply)
|
void AbstractNetworkJob::setupConnections(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
connect( reply, SIGNAL( finished()), SLOT(slotFinished()) );
|
connect(reply, SIGNAL(finished()), SLOT(slotFinished()));
|
||||||
connect( reply, SIGNAL(error(QNetworkReply::NetworkError)),
|
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
|
||||||
this, SLOT(slotError()));
|
this, SLOT(slotError()));
|
||||||
|
|
||||||
// connect( reply, SIGNAL(error(QNetworkReply::NetworkError)),
|
|
||||||
// ownCloudInfo::instance(), SLOT(slotError(QNetworkReply::NetworkError)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply* AbstractNetworkJob::davRequest(const QByteArray &verb, const QString &relPath,
|
QNetworkReply* AbstractNetworkJob::davRequest(const QByteArray &verb, const QString &relPath,
|
||||||
|
@ -83,11 +80,31 @@ QNetworkReply* AbstractNetworkJob::davRequest(const QByteArray &verb, const QStr
|
||||||
return _account->davRequest(verb, relPath, req, data);
|
return _account->davRequest(verb, relPath, req, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QNetworkReply *AbstractNetworkJob::davRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data)
|
||||||
|
{
|
||||||
|
return _account->davRequest(verb, url, req, data);
|
||||||
|
}
|
||||||
|
|
||||||
QNetworkReply* AbstractNetworkJob::getRequest(const QString &relPath)
|
QNetworkReply* AbstractNetworkJob::getRequest(const QString &relPath)
|
||||||
{
|
{
|
||||||
return _account->getRequest(relPath);
|
return _account->getRequest(relPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QNetworkReply *AbstractNetworkJob::getRequest(const QUrl &url)
|
||||||
|
{
|
||||||
|
return _account->getRequest(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
QNetworkReply *AbstractNetworkJob::headRequest(const QString &relPath)
|
||||||
|
{
|
||||||
|
return _account->headRequest(relPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
QNetworkReply *AbstractNetworkJob::headRequest(const QUrl &url)
|
||||||
|
{
|
||||||
|
return _account->headRequest(url);
|
||||||
|
}
|
||||||
|
|
||||||
AbstractNetworkJob::~AbstractNetworkJob() {
|
AbstractNetworkJob::~AbstractNetworkJob() {
|
||||||
_reply->deleteLater();
|
_reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
@ -161,9 +178,7 @@ MkColJob::MkColJob(Account *account, const QString &path, QObject *parent)
|
||||||
|
|
||||||
void MkColJob::slotFinished()
|
void MkColJob::slotFinished()
|
||||||
{
|
{
|
||||||
// ### useful error handling?
|
emit finished(reply()->error());
|
||||||
// QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
|
|
||||||
emit finished();
|
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,7 +237,7 @@ void LsColJob::slotFinished()
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
CheckServerJob::CheckServerJob(Account *account, bool followRedirect, QObject *parent)
|
CheckServerJob::CheckServerJob(Account *account, bool followRedirect, QObject *parent)
|
||||||
: AbstractNetworkJob(account, QLatin1String("/status.php") , parent)
|
: AbstractNetworkJob(account, QLatin1String("status.php") , parent)
|
||||||
, _followRedirects(followRedirect)
|
, _followRedirects(followRedirect)
|
||||||
, _redirectCount(0)
|
, _redirectCount(0)
|
||||||
{
|
{
|
||||||
|
@ -251,7 +266,7 @@ void CheckServerJob::slotFinished()
|
||||||
// ### this should no longer be needed
|
// ### this should no longer be needed
|
||||||
if( reply()->error() == QNetworkReply::NoError && reply()->size() == 0 ) {
|
if( reply()->error() == QNetworkReply::NoError && reply()->size() == 0 ) {
|
||||||
// This seems to be a bit strange behaviour of QNetworkAccessManager.
|
// This seems to be a bit strange behaviour of QNetworkAccessManager.
|
||||||
// It calls the finised slot multiple times but only the first read wins.
|
// It calls the finished slot multiple times but only the first read wins.
|
||||||
// That happend when the code connected the finished signal of the manager.
|
// That happend when the code connected the finished signal of the manager.
|
||||||
// It did not happen when the code connected to the reply finish signal.
|
// It did not happen when the code connected to the reply finish signal.
|
||||||
qDebug() << "WRN: NetworkReply with not content but also no error! " << reply();
|
qDebug() << "WRN: NetworkReply with not content but also no error! " << reply();
|
||||||
|
@ -270,12 +285,10 @@ void CheckServerJob::slotFinished()
|
||||||
if (requestedUrl.scheme() == QLatin1String("https") &&
|
if (requestedUrl.scheme() == QLatin1String("https") &&
|
||||||
redirectUrl.scheme() == QLatin1String("http")) {
|
redirectUrl.scheme() == QLatin1String("http")) {
|
||||||
qDebug() << Q_FUNC_INFO << "HTTPS->HTTP downgrade detected!";
|
qDebug() << Q_FUNC_INFO << "HTTPS->HTTP downgrade detected!";
|
||||||
} else if (requestedUrl == redirectUrl || _redirectCount >= MAX_REDIRECTS) {
|
} else if (requestedUrl == redirectUrl || _redirectCount >= maxRedirects()) {
|
||||||
qDebug() << Q_FUNC_INFO << "Redirect loop detected!";
|
qDebug() << Q_FUNC_INFO << "Redirect loop detected!";
|
||||||
} else {
|
} else {
|
||||||
takeReply()->deleteLater();
|
setReply(getRequest(redirectUrl));
|
||||||
// ### FIXME
|
|
||||||
//setReply(getRequest(redirectUrl));
|
|
||||||
setupConnections(reply());
|
setupConnections(reply());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -292,7 +305,7 @@ void CheckServerJob::slotFinished()
|
||||||
if( status.contains("installed")
|
if( status.contains("installed")
|
||||||
&& status.contains("version")
|
&& status.contains("version")
|
||||||
&& status.contains("versionstring") ) {
|
&& status.contains("versionstring") ) {
|
||||||
emit instanceFound(status);
|
emit instanceFound(reply()->url(), status);
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "No proper answer on " << requestedUrl;
|
qDebug() << "No proper answer on " << requestedUrl;
|
||||||
}
|
}
|
||||||
|
@ -366,4 +379,16 @@ void PropfindJob::slotFinished()
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EntityExistsJob::EntityExistsJob(Account *account, const QString &path, QObject *parent)
|
||||||
|
: AbstractNetworkJob(account, path, parent)
|
||||||
|
{
|
||||||
|
setReply(headRequest(path));
|
||||||
|
setupConnections(reply());
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityExistsJob::slotFinished()
|
||||||
|
{
|
||||||
|
emit exists(reply());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Mirall
|
} // namespace Mirall
|
||||||
|
|
|
@ -17,14 +17,15 @@
|
||||||
#define NETWORKJOBS_H
|
#define NETWORKJOBS_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QNetworkRequest>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
|
|
||||||
class QNetworkReply;
|
|
||||||
class QUrl;
|
class QUrl;
|
||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
class Account;
|
class Account;
|
||||||
|
class AbstractSslErrorHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The AbstractNetworkJob class
|
* @brief The AbstractNetworkJob class
|
||||||
|
@ -42,17 +43,23 @@ public:
|
||||||
|
|
||||||
void setReply(QNetworkReply *reply);
|
void setReply(QNetworkReply *reply);
|
||||||
QNetworkReply* reply() const { return _reply; }
|
QNetworkReply* reply() const { return _reply; }
|
||||||
QNetworkReply* takeReply(); // for redirect handling
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void networkError(QNetworkReply::NetworkError, const QString& errorString);
|
void networkError(QNetworkReply *reply);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setupConnections(QNetworkReply *reply);
|
void setupConnections(QNetworkReply *reply);
|
||||||
QNetworkReply* davRequest(const QByteArray& verb, const QString &relPath,
|
QNetworkReply* davRequest(const QByteArray& verb, const QString &relPath,
|
||||||
QNetworkRequest req = QNetworkRequest(),
|
QNetworkRequest req = QNetworkRequest(),
|
||||||
QIODevice *data = 0);
|
QIODevice *data = 0);
|
||||||
|
QNetworkReply* davRequest(const QByteArray& verb, const QUrl &url,
|
||||||
|
QNetworkRequest req = QNetworkRequest(),
|
||||||
|
QIODevice *data = 0);
|
||||||
QNetworkReply* getRequest(const QString &relPath);
|
QNetworkReply* getRequest(const QString &relPath);
|
||||||
|
QNetworkReply* getRequest(const QUrl &url);
|
||||||
|
QNetworkReply* headRequest(const QString &relPath);
|
||||||
|
QNetworkReply* headRequest(const QUrl &url);
|
||||||
|
|
||||||
|
int maxRedirects() const { return 10; }
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
virtual void slotFinished() = 0;
|
virtual void slotFinished() = 0;
|
||||||
|
@ -64,6 +71,20 @@ private:
|
||||||
QString _path;
|
QString _path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The EntityExistsJob class
|
||||||
|
*/
|
||||||
|
class EntityExistsJob : public AbstractNetworkJob {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit EntityExistsJob(Account *account, const QString &path, QObject* parent = 0);
|
||||||
|
signals:
|
||||||
|
void exists(QNetworkReply*);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
virtual void slotFinished();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The LsColJob class
|
* @brief The LsColJob class
|
||||||
*/
|
*/
|
||||||
|
@ -74,7 +95,6 @@ public:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void directoryListing(const QStringList &items);
|
void directoryListing(const QStringList &items);
|
||||||
void networkError();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
virtual void slotFinished();
|
virtual void slotFinished();
|
||||||
|
@ -106,8 +126,7 @@ public:
|
||||||
explicit MkColJob(Account *account, const QString &path, QObject *parent = 0);
|
explicit MkColJob(Account *account, const QString &path, QObject *parent = 0);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void finished();
|
void finished(QNetworkReply::NetworkError);
|
||||||
void networkError();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
virtual void slotFinished();
|
virtual void slotFinished();
|
||||||
|
@ -126,8 +145,7 @@ public:
|
||||||
static bool installed(const QVariantMap &info);
|
static bool installed(const QVariantMap &info);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void instanceFound(const QVariantMap &info);
|
void instanceFound(const QUrl&url, const QVariantMap &info);
|
||||||
void networkError();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
virtual void slotFinished();
|
virtual void slotFinished();
|
||||||
|
@ -135,8 +153,6 @@ private slots:
|
||||||
private:
|
private:
|
||||||
bool _followRedirects;
|
bool _followRedirects;
|
||||||
bool _redirectCount;
|
bool _redirectCount;
|
||||||
|
|
||||||
static const int MAX_REDIRECTS = 10;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,7 @@ bool ownCloudGui::checkConfigExists(bool openSettings)
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "No configured folders yet, starting setup wizard";
|
qDebug() << "No configured folders yet, starting setup wizard";
|
||||||
//### TODO
|
OwncloudSetupWizard::runWizard(this, SLOT(slotownCloudWizardDone(int)));
|
||||||
//OwncloudSetupWizard::runWizard(this, SLOT(slotownCloudWizardDone(int)));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,9 @@
|
||||||
#include "mirall/mirallaccessmanager.h"
|
#include "mirall/mirallaccessmanager.h"
|
||||||
#include "mirall/account.h"
|
#include "mirall/account.h"
|
||||||
#include "mirall/networkjobs.h"
|
#include "mirall/networkjobs.h"
|
||||||
|
#include "mirall/sslerrordialog.h"
|
||||||
|
|
||||||
|
#include "creds/credentialsfactory.h"
|
||||||
#include "creds/abstractcredentials.h"
|
#include "creds/abstractcredentials.h"
|
||||||
#include "creds/dummycredentials.h"
|
#include "creds/dummycredentials.h"
|
||||||
|
|
||||||
|
@ -36,11 +38,8 @@ namespace Mirall {
|
||||||
|
|
||||||
OwncloudSetupWizard::OwncloudSetupWizard(QObject* parent) :
|
OwncloudSetupWizard::OwncloudSetupWizard(QObject* parent) :
|
||||||
QObject( parent ),
|
QObject( parent ),
|
||||||
|
_account(0),
|
||||||
_ocWizard(new OwncloudWizard),
|
_ocWizard(new OwncloudWizard),
|
||||||
_mkdirRequestReply(),
|
|
||||||
_checkInstallationRequest(),
|
|
||||||
_checkRemoteFolderRequest(),
|
|
||||||
_configHandle(),
|
|
||||||
_remoteFolder()
|
_remoteFolder()
|
||||||
{
|
{
|
||||||
connect( _ocWizard, SIGNAL(determineAuthType(const QString&)),
|
connect( _ocWizard, SIGNAL(determineAuthType(const QString&)),
|
||||||
|
@ -80,24 +79,15 @@ void OwncloudSetupWizard::runWizard(QObject* obj, const char* amember, QWidget *
|
||||||
|
|
||||||
void OwncloudSetupWizard::startWizard()
|
void OwncloudSetupWizard::startWizard()
|
||||||
{
|
{
|
||||||
// Set useful default values.
|
|
||||||
MirallConfigFile cfgFile;
|
|
||||||
|
|
||||||
Account *account = AccountManager::instance()->account();
|
Account *account = AccountManager::instance()->account();
|
||||||
|
if (!account) {
|
||||||
_ocWizard->setConfigExists( account != 0 );
|
account = new Account(new SslDialogErrorHandler);
|
||||||
// Fill the entry fields with existing values.
|
account->setCredentials(CredentialsFactory::create("dummy"));
|
||||||
QString url = account->url();
|
|
||||||
//QString user = cfgFile.ownCloudUser();
|
|
||||||
bool configExists = !( url.isEmpty()/* || user.isEmpty()*/ );
|
|
||||||
|
|
||||||
if( !url.isEmpty() ) {
|
|
||||||
_ocWizard->setOCUrl( url );
|
|
||||||
}
|
}
|
||||||
|
_ocWizard->setAccount(account);
|
||||||
|
|
||||||
_remoteFolder = Theme::instance()->defaultServerFolder();
|
_remoteFolder = Theme::instance()->defaultServerFolder();
|
||||||
// remoteFolder may be empty, which means /
|
// remoteFolder may be empty, which means /
|
||||||
|
|
||||||
QString localFolder = Theme::instance()->defaultClientFolder();
|
QString localFolder = Theme::instance()->defaultClientFolder();
|
||||||
|
|
||||||
// if its a relative path, prepend with users home dir, otherwise use as absolute path
|
// if its a relative path, prepend with users home dir, otherwise use as absolute path
|
||||||
|
@ -118,184 +108,62 @@ void OwncloudSetupWizard::startWizard()
|
||||||
_ocWizard->raise();
|
_ocWizard->raise();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotDetermineAuthType(const QString& serverUrl)
|
// also checks if an installation is valid and determines auth type in a second step
|
||||||
|
void OwncloudSetupWizard::slotDetermineAuthType(const QString &urlString)
|
||||||
{
|
{
|
||||||
QString url(serverUrl);
|
QString fixedUrl = urlString;
|
||||||
qDebug() << "Connect to url: " << url;
|
QUrl url = QUrl::fromUserInput(fixedUrl);
|
||||||
_ocWizard->setField(QLatin1String("OCUrl"), url );
|
// fromUserInput defaults to http, not http if no scheme is specified
|
||||||
_ocWizard->appendToConfigurationLog(tr("Trying to connect to %1 at %2 to determine authentication type...")
|
if (!fixedUrl.startsWith("http://") || !fixedUrl.startsWith("https://")) {
|
||||||
.arg( Theme::instance()->appNameGUI() ).arg(url) );
|
url.setScheme("https");
|
||||||
// write a temporary config.
|
|
||||||
QDateTime now = QDateTime::currentDateTime();
|
|
||||||
|
|
||||||
// remove a possibly existing custom config.
|
|
||||||
if( ! _configHandle.isEmpty() ) {
|
|
||||||
// remove the old config file.
|
|
||||||
MirallConfigFile oldConfig( _configHandle );
|
|
||||||
oldConfig.cleanupCustomConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
_configHandle = now.toString(QLatin1String("MMddyyhhmmss"));
|
|
||||||
|
|
||||||
MirallConfigFile cfgFile( _configHandle, true );
|
|
||||||
if( url.isEmpty() ) return;
|
|
||||||
if( !( url.startsWith(QLatin1String("https://")) || url.startsWith(QLatin1String("http://"))) ) {
|
|
||||||
qDebug() << "url does not start with a valid protocol, assuming https.";
|
|
||||||
url.prepend(QLatin1String("https://"));
|
|
||||||
// FIXME: give a hint about the auto completion
|
|
||||||
_ocWizard->setOCUrl(url);
|
|
||||||
}
|
|
||||||
cfgFile.writeOwncloudConfig( Theme::instance()->appName(),
|
|
||||||
url,
|
|
||||||
new DummyCredentials);
|
|
||||||
|
|
||||||
ownCloudInfo* info = ownCloudInfo::instance();
|
|
||||||
info->setCustomConfigHandle( _configHandle );
|
|
||||||
if( info->isConfigured() ) {
|
|
||||||
// reset the SSL Untrust flag to let the SSL dialog appear again.
|
|
||||||
info->resetSSLUntrust();
|
|
||||||
connect(info, SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
|
||||||
SLOT(slotOwnCloudFoundAuth(QString,QString,QString,QString)));
|
|
||||||
connect(info, SIGNAL(noOwncloudFound(QNetworkReply*)),
|
|
||||||
SLOT(slotNoOwnCloudFoundAuth(QNetworkReply*)));
|
|
||||||
_checkInstallationRequest = info->checkInstallation();
|
|
||||||
} else {
|
|
||||||
qDebug() << " ownCloud seems not to be configured, can not start test connect.";
|
|
||||||
}
|
}
|
||||||
|
Account *account = _ocWizard->account();
|
||||||
|
account->setUrl(url);
|
||||||
|
CheckServerJob *job = new CheckServerJob(_ocWizard->account(), false, this);
|
||||||
|
connect(job, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotOwnCloudFoundAuth(QUrl,QVariantMap)));
|
||||||
|
connect(job, SIGNAL(networkError(QNetworkReply*)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotOwnCloudFoundAuth( const QString& url, const QString& infoString, const QString& version, const QString& )
|
void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl& url, const QVariantMap &info)
|
||||||
{
|
{
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
|
||||||
this, SLOT(slotOwnCloudFoundAuth(QString,QString,QString,QString)));
|
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)),
|
|
||||||
this, SLOT(slotNoOwnCloudFoundAuth(QNetworkReply*)));
|
|
||||||
|
|
||||||
_ocWizard->appendToConfigurationLog(tr("<font color=\"green\">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/>")
|
_ocWizard->appendToConfigurationLog(tr("<font color=\"green\">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/>")
|
||||||
.arg( url ).arg(Theme::instance()->appNameGUI()).arg(infoString).arg(version));
|
.arg(url.toString())
|
||||||
|
.arg(Theme::instance()->appNameGUI())
|
||||||
|
.arg(CheckServerJob::versionString(info))
|
||||||
|
.arg(CheckServerJob::version(info)));
|
||||||
|
|
||||||
MirallAccessManager* nm = new MirallAccessManager(this);
|
DetermineAuthTypeJob *job = new DetermineAuthTypeJob(_ocWizard->account(), this);
|
||||||
// TODO: We should get this path from owncloud info.
|
connect(job, SIGNAL(authType(WizardCommon::AuthType)),
|
||||||
QNetworkReply* reply = nm->get (QNetworkRequest (url + "/remote.php/webdav/"));
|
_ocWizard, SLOT(setAuthType(WizardCommon::AuthType)));
|
||||||
|
|
||||||
connect (reply, SIGNAL(finished()),
|
|
||||||
this, SLOT(slotAuthCheckReplyFinished()));
|
|
||||||
|
|
||||||
nm->setProperty ("mirallRedirs", QVariant (0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotAuthCheckReplyFinished()
|
void OwncloudSetupWizard::slotNoOwnCloudFoundAuth(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
QNetworkReply* reply = qobject_cast< QNetworkReply* > (sender ());
|
_ocWizard->displayError(tr("Failed to connect to %1 at %2:<br/>%3")
|
||||||
QUrl redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
.arg(Theme::instance()->appNameGUI())
|
||||||
QNetworkAccessManager* nm = reply->manager ();
|
.arg(reply->url().toString())
|
||||||
const int redirCount = nm->property ("mirallRedirs").toInt();
|
.arg(reply->errorString()));
|
||||||
|
|
||||||
if (redirCount > 10) {
|
|
||||||
redirection.clear ();
|
|
||||||
}
|
|
||||||
|
|
||||||
disconnect (reply, SIGNAL(finished()),
|
|
||||||
this, SLOT(slotAuthCheckReplyFinished()));
|
|
||||||
if ((reply->error () == QNetworkReply::AuthenticationRequiredError) || redirection.isEmpty()) {
|
|
||||||
reply->deleteLater();
|
|
||||||
nm->deleteLater();
|
|
||||||
_ocWizard->setAuthType (WizardCommon::HttpCreds);
|
|
||||||
} else if (redirection.toString().endsWith ("/remote.php/webdav/")) {
|
|
||||||
QNetworkReply* newReply = nm->get (QNetworkRequest(redirection));
|
|
||||||
|
|
||||||
connect (newReply, SIGNAL(error(QNetworkReply::NetworkError)),
|
|
||||||
this, SLOT(slotAuthCheckReplyError(QNetworkReply::NetworkError)));
|
|
||||||
connect (newReply, SIGNAL(finished()),
|
|
||||||
this, SLOT(slotAuthCheckReplyFinished(QNetworkReply::NetworkError)));
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
nm->setProperty ("mirallRedirs", QVariant(redirCount + 1));
|
|
||||||
} else {
|
|
||||||
QRegExp shibbolethyWords ("SAML|wayf");
|
|
||||||
|
|
||||||
shibbolethyWords.setCaseSensitivity (Qt::CaseInsensitive);
|
|
||||||
if (redirection.toString ().contains (shibbolethyWords)) {
|
|
||||||
_ocWizard->setAuthType(WizardCommon::Shibboleth);
|
|
||||||
} else {
|
|
||||||
// TODO: Send an error.
|
|
||||||
// eh?
|
|
||||||
_ocWizard->setAuthType (WizardCommon::HttpCreds);
|
|
||||||
}
|
|
||||||
reply->deleteLater();
|
|
||||||
nm->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotNoOwnCloudFoundAuth( QNetworkReply *err )
|
|
||||||
{
|
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
|
||||||
this, SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)),
|
|
||||||
this, SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
|
||||||
|
|
||||||
_ocWizard->displayError(tr("Failed to connect to %1:<br/>%2").
|
|
||||||
arg(Theme::instance()->appNameGUI()).arg(err->errorString()));
|
|
||||||
|
|
||||||
// remove the config file again
|
|
||||||
MirallConfigFile cfgFile( _configHandle );
|
|
||||||
cfgFile.cleanupCustomConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotConnectToOCUrl( const QString& url )
|
void OwncloudSetupWizard::slotConnectToOCUrl( const QString& url )
|
||||||
{
|
{
|
||||||
qDebug() << "Connect to url: " << url;
|
qDebug() << "Connect to url: " << url;
|
||||||
|
_ocWizard->account()->setCredentials(_ocWizard->getCredentials());
|
||||||
_ocWizard->setField(QLatin1String("OCUrl"), url );
|
_ocWizard->setField(QLatin1String("OCUrl"), url );
|
||||||
_ocWizard->appendToConfigurationLog(tr("Trying to connect to %1 at %2...")
|
_ocWizard->appendToConfigurationLog(tr("Trying to connect to %1 at %2...")
|
||||||
.arg( Theme::instance()->appNameGUI() ).arg(url) );
|
.arg( Theme::instance()->appNameGUI() ).arg(url) );
|
||||||
|
|
||||||
testOwnCloudConnect();
|
testOwnCloudConnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::testOwnCloudConnect()
|
void OwncloudSetupWizard::testOwnCloudConnect()
|
||||||
{
|
{
|
||||||
// write a temporary config.
|
ValidateDavAuthJob *job = new ValidateDavAuthJob(_ocWizard->account(), this);
|
||||||
QDateTime now = QDateTime::currentDateTime();
|
connect(job, SIGNAL(authResult(QNetworkReply*)), SLOT(slotConnectionCheck(QNetworkReply*)));
|
||||||
|
|
||||||
if( _configHandle.isEmpty() ) {
|
|
||||||
_configHandle = now.toString(QLatin1String("MMddyyhhmmss"));
|
|
||||||
}
|
|
||||||
|
|
||||||
MirallConfigFile cfgFile( _configHandle, true );
|
|
||||||
QString url = _ocWizard->field(QLatin1String("OCUrl")).toString();
|
|
||||||
if( url.isEmpty() ) return;
|
|
||||||
if( !( url.startsWith(QLatin1String("https://")) || url.startsWith(QLatin1String("http://"))) ) {
|
|
||||||
qDebug() << "url does not start with a valid protocol, assuming https.";
|
|
||||||
url.prepend(QLatin1String("https://"));
|
|
||||||
// FIXME: give a hint about the auto completion
|
|
||||||
_ocWizard->setOCUrl(url);
|
|
||||||
}
|
|
||||||
cfgFile.writeOwncloudConfig( Theme::instance()->appName(),
|
|
||||||
url,
|
|
||||||
_ocWizard->getCredentials());
|
|
||||||
|
|
||||||
ownCloudInfo* info(ownCloudInfo::instance());
|
|
||||||
info->setCustomConfigHandle( _configHandle );
|
|
||||||
// If there is already a config, take its proxy config.
|
|
||||||
if( info->isConfigured() ) {
|
|
||||||
MirallConfigFile prevCfg;
|
|
||||||
cfgFile.setProxyType( prevCfg.proxyType(), prevCfg.proxyHostName(), prevCfg.proxyPort(),
|
|
||||||
prevCfg.proxyNeedsAuth(), prevCfg.proxyUser(), prevCfg.proxyPassword() );
|
|
||||||
}
|
|
||||||
|
|
||||||
connect( info,SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
|
||||||
this,SLOT(slotConnectionCheck(QString,QNetworkReply*)));
|
|
||||||
|
|
||||||
qDebug() << "# checking for authentication settings.";
|
|
||||||
_checkRemoteFolderRequest = info->getWebDAVPath(_remoteFolder ); // this call needs to be authenticated.
|
|
||||||
// continue in slotConnectionCheck
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotConnectionCheck(const QString&, QNetworkReply* reply)
|
void OwncloudSetupWizard::slotConnectionCheck(QNetworkReply* reply)
|
||||||
{
|
{
|
||||||
// disconnect from ownCloud Info signals
|
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
|
||||||
this, SLOT(slotConnectionCheck(QString,QNetworkReply*)));
|
|
||||||
|
|
||||||
switch (reply->error()) {
|
switch (reply->error()) {
|
||||||
case QNetworkReply::NoError:
|
case QNetworkReply::NoError:
|
||||||
case QNetworkReply::ContentNotFoundError:
|
case QNetworkReply::ContentNotFoundError:
|
||||||
|
@ -312,8 +180,6 @@ void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString& localFo
|
||||||
{
|
{
|
||||||
qDebug() << "Setup local sync folder for new oC connection " << localFolder;
|
qDebug() << "Setup local sync folder for new oC connection " << localFolder;
|
||||||
const QDir fi( localFolder );
|
const QDir fi( localFolder );
|
||||||
// FIXME: Show problems with local folder properly.
|
|
||||||
bool localFolderOk = true;
|
|
||||||
|
|
||||||
if( fi.exists() ) {
|
if( fi.exists() ) {
|
||||||
// there is an existing local folder. If its non empty, it can only be synced if the
|
// there is an existing local folder. If its non empty, it can only be synced if the
|
||||||
|
@ -325,38 +191,20 @@ void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString& localFo
|
||||||
Utility::setupFavLink( localFolder );
|
Utility::setupFavLink( localFolder );
|
||||||
// FIXME: Create a local sync folder.
|
// FIXME: Create a local sync folder.
|
||||||
res += tr("ok");
|
res += tr("ok");
|
||||||
|
EntityExistsJob *job = new EntityExistsJob(_ocWizard->account(), remoteFolder, this);
|
||||||
|
connect(job, SIGNAL(exists(QNetworkReply*)), SLOT(slotAuthCheckReply(QNetworkReply*)));
|
||||||
} else {
|
} else {
|
||||||
res += tr("failed.");
|
res += tr("failed.");
|
||||||
qDebug() << "Failed to create " << fi.path();
|
qDebug() << "Failed to create " << fi.path();
|
||||||
localFolderOk = false;
|
|
||||||
_ocWizard->displayError(tr("Could not create local folder %1").arg(localFolder));
|
_ocWizard->displayError(tr("Could not create local folder %1").arg(localFolder));
|
||||||
}
|
}
|
||||||
_ocWizard->appendToConfigurationLog( res );
|
_ocWizard->appendToConfigurationLog( res );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( localFolderOk ) {
|
|
||||||
checkRemoteFolder(remoteFolder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::checkRemoteFolder(const QString& remoteFolder)
|
// ### TODO move into EntityExistsJob once we decide if/how to return gui strings from jobs
|
||||||
|
void OwncloudSetupWizard::slotAuthCheckReply(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
ownCloudInfo* info(ownCloudInfo::instance());
|
|
||||||
connect( info,SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
|
||||||
this,SLOT(slotAuthCheckReply(QString,QNetworkReply*)));
|
|
||||||
|
|
||||||
qDebug() << "# checking for existence of remote folder.";
|
|
||||||
info->setCustomConfigHandle(_configHandle);
|
|
||||||
_checkRemoteFolderRequest = info->getWebDAVPath(remoteFolder); // this call needs to be authenticated.
|
|
||||||
// continue in slotAuthCheckReply
|
|
||||||
}
|
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotAuthCheckReply( const QString&, QNetworkReply *reply )
|
|
||||||
{
|
|
||||||
// disconnect from ownCloud Info signals
|
|
||||||
disconnect( ownCloudInfo::instance(),SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
|
||||||
this,SLOT(slotAuthCheckReply(QString,QNetworkReply*)));
|
|
||||||
|
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
QString error;
|
QString error;
|
||||||
QNetworkReply::NetworkError errId = reply->error();
|
QNetworkReply::NetworkError errId = reply->error();
|
||||||
|
@ -364,11 +212,11 @@ void OwncloudSetupWizard::slotAuthCheckReply( const QString&, QNetworkReply *rep
|
||||||
if( errId == QNetworkReply::NoError ) {
|
if( errId == QNetworkReply::NoError ) {
|
||||||
qDebug() << "******** Remote folder found, all cool!";
|
qDebug() << "******** Remote folder found, all cool!";
|
||||||
} else if( errId == QNetworkReply::ContentNotFoundError ) {
|
} else if( errId == QNetworkReply::ContentNotFoundError ) {
|
||||||
if( createRemoteFolder() ) {
|
if( _remoteFolder.isEmpty() ) {
|
||||||
return; // Finish here, the mkdir request will go on.
|
error = tr("No remote folder specified!");
|
||||||
} else {
|
|
||||||
error = tr("The remote folder could not be accessed!");
|
|
||||||
ok = false;
|
ok = false;
|
||||||
|
} else {
|
||||||
|
createRemoteFolder();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error = tr("Error: %1").arg(reply->errorString());
|
error = tr("Error: %1").arg(reply->errorString());
|
||||||
|
@ -382,25 +230,19 @@ void OwncloudSetupWizard::slotAuthCheckReply( const QString&, QNetworkReply *rep
|
||||||
finalizeSetup( ok );
|
finalizeSetup( ok );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OwncloudSetupWizard::createRemoteFolder()
|
void OwncloudSetupWizard::createRemoteFolder()
|
||||||
{
|
{
|
||||||
if( _remoteFolder.isEmpty() ) return false;
|
|
||||||
|
|
||||||
_ocWizard->appendToConfigurationLog( tr("creating folder on ownCloud: %1" ).arg( _remoteFolder ));
|
_ocWizard->appendToConfigurationLog( tr("creating folder on ownCloud: %1" ).arg( _remoteFolder ));
|
||||||
ownCloudInfo* info(ownCloudInfo::instance());
|
|
||||||
connect(info, SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
|
||||||
this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
|
||||||
|
|
||||||
_mkdirRequestReply = info->mkdirRequest( _remoteFolder );
|
MkColJob *job = new MkColJob(_ocWizard->account(), _remoteFolder, this);
|
||||||
|
connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||||
return (_mkdirRequestReply != NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotCreateRemoteFolderFinished( QNetworkReply::NetworkError error )
|
void OwncloudSetupWizard::slotCreateRemoteFolderFinished( QNetworkReply::NetworkError error )
|
||||||
{
|
{
|
||||||
qDebug() << "** webdav mkdir request finished " << error;
|
qDebug() << "** webdav mkdir request finished " << error;
|
||||||
disconnect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
// disconnect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||||
this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
// this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||||
|
|
||||||
bool success = true;
|
bool success = true;
|
||||||
|
|
||||||
|
@ -459,7 +301,7 @@ void OwncloudSetupWizard::finalizeSetup( bool success )
|
||||||
// accept the custom config to be the main one if Accepted.
|
// accept the custom config to be the main one if Accepted.
|
||||||
void OwncloudSetupWizard::slotAssistantFinished( int result )
|
void OwncloudSetupWizard::slotAssistantFinished( int result )
|
||||||
{
|
{
|
||||||
MirallConfigFile cfg( _configHandle );
|
MirallConfigFile cfg;
|
||||||
FolderMan *folderMan = FolderMan::instance();
|
FolderMan *folderMan = FolderMan::instance();
|
||||||
|
|
||||||
if( result == QDialog::Rejected ) {
|
if( result == QDialog::Rejected ) {
|
||||||
|
@ -535,29 +377,63 @@ void OwncloudSetupWizard::slotAssistantFinished( int result )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear the custom config handle
|
// // clear the custom config handle
|
||||||
_configHandle.clear();
|
// _configHandle.clear();
|
||||||
ownCloudInfo::instance()->setCustomConfigHandle( QString::null );
|
// ownCloudInfo::instance()->setCustomConfigHandle( QString::null );
|
||||||
|
|
||||||
// notify others.
|
// notify others.
|
||||||
emit ownCloudWizardDone( result );
|
emit ownCloudWizardDone( result );
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotClearPendingRequests()
|
DetermineAuthTypeJob::DetermineAuthTypeJob(Account *account, QObject *parent)
|
||||||
|
: AbstractNetworkJob(account, QString(), parent)
|
||||||
|
, _redirects(0)
|
||||||
{
|
{
|
||||||
qDebug() << "Pending request: " << _mkdirRequestReply;
|
QNetworkReply *reply = getRequest(Account::davPath());
|
||||||
if( _mkdirRequestReply && _mkdirRequestReply->isRunning() ) {
|
setReply(reply);
|
||||||
qDebug() << "ABORTing pending mkdir request.";
|
setupConnections(reply);
|
||||||
_mkdirRequestReply->abort();
|
}
|
||||||
|
|
||||||
|
void DetermineAuthTypeJob::slotFinished()
|
||||||
|
{
|
||||||
|
QUrl redirection = reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
||||||
|
if (_redirects >= maxRedirects()) {
|
||||||
|
redirection.clear();
|
||||||
}
|
}
|
||||||
if( _checkInstallationRequest && _checkInstallationRequest->isRunning() ) {
|
if ((reply()->error() == QNetworkReply::AuthenticationRequiredError) || redirection.isEmpty()) {
|
||||||
qDebug() << "ABORTing pending check installation request.";
|
emit authType(WizardCommon::HttpCreds);
|
||||||
_checkInstallationRequest->abort();
|
} else if (redirection.toString().endsWith(Account::davPath())) {
|
||||||
|
// do a new run
|
||||||
|
_redirects++;
|
||||||
|
setReply(getRequest(redirection));
|
||||||
|
setupConnections(reply());
|
||||||
|
} else {
|
||||||
|
QRegExp shibbolethyWords("SAML|wayf");
|
||||||
|
|
||||||
|
shibbolethyWords.setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
|
if (redirection.toString().contains(shibbolethyWords)) {
|
||||||
|
emit authType(WizardCommon::Shibboleth);
|
||||||
|
} else {
|
||||||
|
// TODO: Send an error.
|
||||||
|
// eh?
|
||||||
|
emit authType(WizardCommon::HttpCreds);
|
||||||
}
|
}
|
||||||
if( _checkRemoteFolderRequest && _checkRemoteFolderRequest->isRunning() ) {
|
|
||||||
qDebug() << "ABORTing pending remote folder check request.";
|
|
||||||
_checkRemoteFolderRequest->abort();
|
|
||||||
}
|
}
|
||||||
|
deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
ValidateDavAuthJob::ValidateDavAuthJob(Account *account, QObject *parent)
|
||||||
|
: AbstractNetworkJob(account, QString(), parent)
|
||||||
|
{
|
||||||
|
QNetworkReply *reply = getRequest(Account::davPath());
|
||||||
|
setReply(reply);
|
||||||
|
setupConnections(reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ValidateDavAuthJob::slotFinished()
|
||||||
|
{
|
||||||
|
emit authResult(reply());
|
||||||
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // ns Mirall
|
} // ns Mirall
|
||||||
|
|
|
@ -22,10 +22,37 @@
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
|
||||||
#include "mirall/theme.h"
|
#include "mirall/theme.h"
|
||||||
|
#include "mirall/networkjobs.h"
|
||||||
|
|
||||||
|
#include "wizard/owncloudwizardcommon.h"
|
||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
class OwncloudWizard;
|
class OwncloudWizard;
|
||||||
|
class Account;
|
||||||
|
|
||||||
|
class ValidateDavAuthJob : public AbstractNetworkJob {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ValidateDavAuthJob(Account* account, QObject *parent = 0);
|
||||||
|
signals:
|
||||||
|
void authResult(QNetworkReply*);
|
||||||
|
private slots:
|
||||||
|
void slotFinished();
|
||||||
|
};
|
||||||
|
|
||||||
|
class DetermineAuthTypeJob : public AbstractNetworkJob {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DetermineAuthTypeJob(Account *account, QObject *parent = 0);
|
||||||
|
signals:
|
||||||
|
void authType(WizardCommon::AuthType);
|
||||||
|
private slots:
|
||||||
|
void slotFinished();
|
||||||
|
private:
|
||||||
|
int _redirects;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class OwncloudSetupWizard : public QObject
|
class OwncloudSetupWizard : public QObject
|
||||||
{
|
{
|
||||||
|
@ -40,18 +67,16 @@ signals:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotDetermineAuthType(const QString&);
|
void slotDetermineAuthType(const QString&);
|
||||||
void slotOwnCloudFoundAuth(const QString&, const QString&, const QString&, const QString&);
|
void slotOwnCloudFoundAuth(const QUrl&, const QVariantMap&);
|
||||||
void slotAuthCheckReplyFinished();
|
void slotNoOwnCloudFoundAuth(QNetworkReply *reply);
|
||||||
void slotNoOwnCloudFoundAuth(QNetworkReply*);
|
|
||||||
|
|
||||||
void slotConnectToOCUrl(const QString&);
|
void slotConnectToOCUrl(const QString&);
|
||||||
void slotConnectionCheck(const QString&, QNetworkReply*);
|
void slotConnectionCheck(QNetworkReply*);
|
||||||
|
|
||||||
void slotCreateLocalAndRemoteFolders(const QString&, const QString&);
|
void slotCreateLocalAndRemoteFolders(const QString&, const QString&);
|
||||||
void slotAuthCheckReply(const QString&, QNetworkReply*);
|
void slotAuthCheckReply(QNetworkReply*);
|
||||||
void slotCreateRemoteFolderFinished(QNetworkReply::NetworkError);
|
void slotCreateRemoteFolderFinished(QNetworkReply::NetworkError);
|
||||||
void slotAssistantFinished( int );
|
void slotAssistantFinished( int );
|
||||||
void slotClearPendingRequests();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit OwncloudSetupWizard(QObject *parent = 0 );
|
explicit OwncloudSetupWizard(QObject *parent = 0 );
|
||||||
|
@ -59,16 +84,13 @@ private:
|
||||||
|
|
||||||
void startWizard();
|
void startWizard();
|
||||||
void testOwnCloudConnect();
|
void testOwnCloudConnect();
|
||||||
void checkRemoteFolder(const QString& remoteFolder);
|
void createRemoteFolder();
|
||||||
bool createRemoteFolder();
|
|
||||||
void finalizeSetup( bool );
|
void finalizeSetup( bool );
|
||||||
|
|
||||||
|
Account* _account;
|
||||||
OwncloudWizard* _ocWizard;
|
OwncloudWizard* _ocWizard;
|
||||||
QPointer<QNetworkReply> _mkdirRequestReply;
|
|
||||||
QPointer<QNetworkReply> _checkInstallationRequest;
|
|
||||||
QPointer<QNetworkReply> _checkRemoteFolderRequest;
|
|
||||||
QString _configHandle;
|
|
||||||
QString _remoteFolder;
|
QString _remoteFolder;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,9 +14,11 @@
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "wizard/owncloudwizard.h"
|
#include "mirall/account.h"
|
||||||
#include "mirall/mirallconfigfile.h"
|
#include "mirall/mirallconfigfile.h"
|
||||||
#include "mirall/theme.h"
|
#include "mirall/theme.h"
|
||||||
|
|
||||||
|
#include "wizard/owncloudwizard.h"
|
||||||
#include "wizard/owncloudsetuppage.h"
|
#include "wizard/owncloudsetuppage.h"
|
||||||
#include "wizard/owncloudhttpcredspage.h"
|
#include "wizard/owncloudhttpcredspage.h"
|
||||||
#include "wizard/owncloudshibbolethcredspage.h"
|
#include "wizard/owncloudshibbolethcredspage.h"
|
||||||
|
@ -77,6 +79,16 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
||||||
setSubTitleFormat(Qt::RichText);
|
setSubTitleFormat(Qt::RichText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OwncloudWizard::setAccount(Account *account)
|
||||||
|
{
|
||||||
|
_account = account;
|
||||||
|
}
|
||||||
|
|
||||||
|
Account *OwncloudWizard::account() const
|
||||||
|
{
|
||||||
|
return _account;
|
||||||
|
}
|
||||||
|
|
||||||
void OwncloudWizard::setMultipleFoldersExist(bool exist)
|
void OwncloudWizard::setMultipleFoldersExist(bool exist)
|
||||||
{
|
{
|
||||||
_advancedSetupPage->setMultipleFoldersExist(exist);
|
_advancedSetupPage->setMultipleFoldersExist(exist);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
|
class Account;
|
||||||
class OwncloudSetupPage;
|
class OwncloudSetupPage;
|
||||||
class OwncloudHttpCredsPage;
|
class OwncloudHttpCredsPage;
|
||||||
class OwncloudShibbolethCredsPage;
|
class OwncloudShibbolethCredsPage;
|
||||||
|
@ -43,6 +44,8 @@ public:
|
||||||
|
|
||||||
OwncloudWizard(QWidget *parent = 0);
|
OwncloudWizard(QWidget *parent = 0);
|
||||||
|
|
||||||
|
void setAccount(Account *account);
|
||||||
|
Account* account() const;
|
||||||
void setOCUrl( const QString& );
|
void setOCUrl( const QString& );
|
||||||
|
|
||||||
void setupCustomMedia( QVariant, QLabel* );
|
void setupCustomMedia( QVariant, QLabel* );
|
||||||
|
@ -56,10 +59,10 @@ public:
|
||||||
void setConfigExists( bool );
|
void setConfigExists( bool );
|
||||||
bool configExists();
|
bool configExists();
|
||||||
void successfulStep();
|
void successfulStep();
|
||||||
void setAuthType(WizardCommon::AuthType type);
|
|
||||||
AbstractCredentials* getCredentials() const;
|
AbstractCredentials* getCredentials() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void setAuthType(WizardCommon::AuthType type);
|
||||||
void setRemoteFolder( const QString& );
|
void setRemoteFolder( const QString& );
|
||||||
void appendToConfigurationLog( const QString& msg, LogType type = LogParagraph );
|
void appendToConfigurationLog( const QString& msg, LogType type = LogParagraph );
|
||||||
void slotCurrentPageChanged( int );
|
void slotCurrentPageChanged( int );
|
||||||
|
@ -73,6 +76,7 @@ signals:
|
||||||
void basicSetupFinished( int );
|
void basicSetupFinished( int );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Account* _account;
|
||||||
OwncloudSetupPage* _setupPage;
|
OwncloudSetupPage* _setupPage;
|
||||||
OwncloudHttpCredsPage* _httpCredsPage;
|
OwncloudHttpCredsPage* _httpCredsPage;
|
||||||
OwncloudShibbolethCredsPage* _shibbolethCredsPage;
|
OwncloudShibbolethCredsPage* _shibbolethCredsPage;
|
||||||
|
|
Loading…
Reference in a new issue