diff --git a/src/mirall/application.cpp b/src/mirall/application.cpp index cc827bcc01..c6c97f882d 100644 --- a/src/mirall/application.cpp +++ b/src/mirall/application.cpp @@ -72,7 +72,6 @@ Application::Application(int &argc, char **argv) : _networkMgr(new QNetworkConfigurationManager(this)), #endif _contextMenu(0), - _ocInfo(0), _updateDetector(0), _helpOnly(false) { @@ -91,12 +90,12 @@ Application::Application(int &argc, char **argv) : setupLogBrowser(); processEvents(); - QTranslator *qtTranslator = new QTranslator; + QTranslator *qtTranslator = new QTranslator(this); qtTranslator->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); installTranslator(qtTranslator); - QTranslator *mirallTranslator = new QTranslator; + QTranslator *mirallTranslator = new QTranslator(this); #ifdef Q_OS_LINUX // FIXME - proper path! mirallTranslator->load("mirall_" + QLocale::system().name(), QLatin1String("/usr/share/mirall/i18n/")); @@ -124,17 +123,16 @@ Application::Application(int &argc, char **argv) : _folderWizard = new FolderWizard( 0, _theme ); - _ocInfo = new ownCloudInfo( QString(), this ); - connect( _ocInfo,SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)), + connect( ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)), SLOT(slotOwnCloudFound(QString,QString,QString,QString))); - connect( _ocInfo,SIGNAL(noOwncloudFound(QNetworkReply*)), + connect( ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)), SLOT(slotNoOwnCloudFound(QNetworkReply*))); - connect( _ocInfo,SIGNAL(ownCloudDirExists(QString,QNetworkReply*)), + connect( ownCloudInfo::instance(),SIGNAL(ownCloudDirExists(QString,QNetworkReply*)), this,SLOT(slotAuthCheck(QString,QNetworkReply*))); - _owncloudSetupWizard = new OwncloudSetupWizard( _folderMan, _theme ); + _owncloudSetupWizard = new OwncloudSetupWizard( _folderMan, _theme, this ); connect( _owncloudSetupWizard, SIGNAL(ownCloudWizardDone(int)), SLOT(slotStartFolderSetup(int))); _statusDialog = new StatusDialog( _theme ); @@ -187,7 +185,6 @@ Application::~Application() delete _networkMgr; #endif delete _folderMan; - delete _ocInfo; delete _tray; } @@ -201,8 +198,8 @@ void Application::slotStartUpdateDetector() void Application::slotStartFolderSetup( int result ) { if( result == QDialog::Accepted ) { - if( _ocInfo->isConfigured() ) { - _ocInfo->checkInstallation(); + if( ownCloudInfo::instance()->isConfigured() ) { + ownCloudInfo::instance()->checkInstallation(); } else { QMessageBox::warning(0, tr("No ownCloud Configuration"), tr("

No server connection has been configured for this ownCloud client.

" @@ -247,7 +244,7 @@ void Application::slotNoOwnCloudFound( QNetworkReply* reply ) void Application::slotCheckAuthentication() { qDebug() << "# checking for authentication settings."; - _ocInfo->getRequest("/", true ); // this call needs to be authenticated. + ownCloudInfo::instance()->getRequest("/", true ); // this call needs to be authenticated. // simply GET the webdav root, will fail if credentials are wrong. // continue in slotAuthCheck here :-) } @@ -675,7 +672,7 @@ void Application::computeOverallSyncStatus() switch( syncStatus ) { case SyncResult::Undefined: if ( overallResult.status() != SyncResult::Error ) { - overallResult = SyncResult::Error; + overallResult.setStatus(SyncResult::Error); } folderMessage = tr( "Undefined State." ); break; diff --git a/src/mirall/application.h b/src/mirall/application.h index e66ee020c3..78566541fe 100644 --- a/src/mirall/application.h +++ b/src/mirall/application.h @@ -108,7 +108,6 @@ private: FolderMan *_folderMan; Theme *_theme; QSignalMapper *_folderOpenActionMapper; - ownCloudInfo *_ocInfo; UpdateDetector *_updateDetector; QMap _overallStatusStrings; LogBrowser *_logBrowser; diff --git a/src/mirall/folderwizard.cpp b/src/mirall/folderwizard.cpp index 783f74350c..27df00b278 100644 --- a/src/mirall/folderwizard.cpp +++ b/src/mirall/folderwizard.cpp @@ -173,11 +173,9 @@ FolderWizardTargetPage::FolderWizardTargetPage() _timer->setSingleShot( true ); connect( _timer, SIGNAL(timeout()), SLOT(slotTimerFires())); - _ownCloudDirCheck = new ownCloudInfo; - - connect( _ownCloudDirCheck, SIGNAL(ownCloudDirExists(QString,QNetworkReply*)), + connect( ownCloudInfo::instance(), SIGNAL(ownCloudDirExists(QString,QNetworkReply*)), SLOT(slotDirCheckReply(QString,QNetworkReply*))); - connect( _ownCloudDirCheck, SIGNAL(webdavColCreated(QNetworkReply::NetworkError)), + connect( ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)), SLOT(slotCreateRemoteFolderFinished( QNetworkReply::NetworkError ))); #if QT_Version >= 0x040700 @@ -205,7 +203,7 @@ void FolderWizardTargetPage::slotTimerFires() { const QString folder = _ui.OCFolderLineEdit->text(); qDebug() << "Querying folder " << folder; - _ownCloudDirCheck->getWebDAVPath( folder ); + ownCloudInfo::instance()->getWebDAVPath( folder ); } void FolderWizardTargetPage::slotDirCheckReply(const QString &url, QNetworkReply *reply) @@ -229,7 +227,7 @@ void FolderWizardTargetPage::slotCreateRemoteFolder() if( folder.isEmpty() ) return; qDebug() << "creating folder on ownCloud: " << folder; - _ownCloudDirCheck->mkdirRequest( folder ); + ownCloudInfo::instance()->mkdirRequest( folder ); } void FolderWizardTargetPage::slotCreateRemoteFolderFinished( QNetworkReply::NetworkError error ) @@ -249,7 +247,6 @@ void FolderWizardTargetPage::slotCreateRemoteFolderFinished( QNetworkReply::Netw FolderWizardTargetPage::~FolderWizardTargetPage() { - delete _ownCloudDirCheck; } bool FolderWizardTargetPage::isComplete() const @@ -286,7 +283,7 @@ void FolderWizardTargetPage::initializePage() showWarn(); /* check the owncloud configuration file and query the ownCloud */ - ownCloudInfo *ocInfo = new ownCloudInfo( QString(), this ); + ownCloudInfo *ocInfo = ownCloudInfo::instance(); if( ocInfo->isConfigured() ) { connect(ocInfo,SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),SLOT(slotOwnCloudFound(QString,QString,QString,QString))); connect(ocInfo,SIGNAL(noOwncloudFound(QNetworkReply*)),SLOT(slotNoOwnCloudFound(QNetworkReply*))); @@ -463,7 +460,6 @@ FolderWizard::FolderWizard( QWidget *parent, Theme *theme ) #ifdef Q_WS_MAC setWizardStyle( QWizard::ModernStyle ); #endif - _ocInfo = new ownCloudInfo; } void FolderWizard::setFolderMap( Folder::Map *fm) diff --git a/src/mirall/folderwizard.h b/src/mirall/folderwizard.h index 6d69250cdb..73b24ce7de 100644 --- a/src/mirall/folderwizard.h +++ b/src/mirall/folderwizard.h @@ -156,8 +156,6 @@ public: private: FolderWizardSourcePage *_folderWizardSourcePage; - - ownCloudInfo *_ocInfo; }; diff --git a/src/mirall/owncloudinfo.cpp b/src/mirall/owncloudinfo.cpp index f37a797a55..957d6aa1a1 100644 --- a/src/mirall/owncloudinfo.cpp +++ b/src/mirall/owncloudinfo.cpp @@ -28,30 +28,39 @@ namespace Mirall { -QNetworkAccessManager* ownCloudInfo::_manager = 0; -SslErrorDialog *ownCloudInfo::_sslErrorDialog = 0; -bool ownCloudInfo::_certsUntrusted = false; -int ownCloudInfo::_authAttempts = 0; -QHash ownCloudInfo::_configHandleMap; +ownCloudInfo *ownCloudInfo::_instance = 0; + +ownCloudInfo* ownCloudInfo::instance() +{ + static QMutex mutex; + if (!_instance) + { + mutex.lock(); + + if (!_instance) { + _instance = new ownCloudInfo; + + } + mutex.unlock(); + } + + return _instance; +} ownCloudInfo::ownCloudInfo( const QString& connectionName, QObject *parent ) : QObject(parent) { if( connectionName.isEmpty() ) - _connection = QString::fromLocal8Bit( "ownCloud"); + _connection = QLatin1String( "ownCloud"); else _connection = connectionName; - if( ! _manager ) { - qDebug() << "Creating static NetworkAccessManager"; - _manager = new QNetworkAccessManager; - } - + _manager = new QNetworkAccessManager; connect( _manager, SIGNAL( sslErrors(QNetworkReply*, QList)), - this, SLOT(slotSSLFailed(QNetworkReply*, QList)) ); + _instance, SLOT(slotSSLFailed(QNetworkReply*, QList)) ); connect( _manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), - SLOT(slotAuthentication(QNetworkReply*,QAuthenticator*))); + _instance, SLOT(slotAuthentication(QNetworkReply*,QAuthenticator*))); } ownCloudInfo::~ownCloudInfo() diff --git a/src/mirall/owncloudinfo.h b/src/mirall/owncloudinfo.h index cff9a2acc9..17ac671467 100644 --- a/src/mirall/owncloudinfo.h +++ b/src/mirall/owncloudinfo.h @@ -33,8 +33,8 @@ class ownCloudInfo : public QObject { Q_OBJECT public: - explicit ownCloudInfo( const QString& = QString(), QObject *parent = 0); - ~ownCloudInfo(); + + static ownCloudInfo *instance(); bool isConfigured(); @@ -96,20 +96,25 @@ protected slots: #endif private: + explicit ownCloudInfo( const QString& = QString(), QObject *parent = 0); + ~ownCloudInfo(); + void setupHeaders(QNetworkRequest &req, quint64 size ); #if QT46_IMPL #else QNetworkReply* davRequest(const QString&, QNetworkRequest&, QByteArray* ); #endif - static QNetworkAccessManager *_manager; + static ownCloudInfo *_instance; + + QNetworkAccessManager *_manager; QString _connection; QString _configHandle; QHash _directories; - static QHash _configHandleMap; - static SslErrorDialog *_sslErrorDialog; - static bool _certsUntrusted; - static int _authAttempts; + QHash _configHandleMap; + SslErrorDialog *_sslErrorDialog; + bool _certsUntrusted; + int _authAttempts; }; }; diff --git a/src/mirall/owncloudsetupwizard.cpp b/src/mirall/owncloudsetupwizard.cpp index 7fea70c6b4..38473385ab 100644 --- a/src/mirall/owncloudsetupwizard.cpp +++ b/src/mirall/owncloudsetupwizard.cpp @@ -28,7 +28,6 @@ class Theme; OwncloudSetupWizard::OwncloudSetupWizard( FolderMan *folderMan, Theme *theme, QObject *parent ) : QObject( parent ), - _ocInfo(0), _folderMan(folderMan) { _process = new QProcess( this ); @@ -71,15 +70,14 @@ OwncloudSetupWizard::OwncloudSetupWizard( FolderMan *folderMan, Theme *theme, QO _ocWizard->setWindowTitle( tr("%1 Connection Wizard").arg( theme ? theme->appName() : "Mirall" ) ); // create the ocInfo object - _ocInfo = new ownCloudInfo; - connect(_ocInfo,SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),SLOT(slotOwnCloudFound(QString,QString,QString,QString))); - connect(_ocInfo,SIGNAL(noOwncloudFound(QNetworkReply*)),SLOT(slotNoOwnCloudFound(QNetworkReply*))); - connect(_ocInfo,SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); + connect(ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),SLOT(slotOwnCloudFound(QString,QString,QString,QString))); + connect(ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)),SLOT(slotNoOwnCloudFound(QNetworkReply*))); + connect(ownCloudInfo::instance(),SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); } OwncloudSetupWizard::~OwncloudSetupWizard() { - delete _ocInfo; + } // Method executed when the user ends the wizard, either with 'accept' or 'reject'. @@ -114,7 +112,7 @@ void OwncloudSetupWizard::slotAssistantFinished( int result ) // clear the custom config handle _configHandle.clear(); - _ocInfo->setCustomConfigHandle( QString() ); + ownCloudInfo::instance()->setCustomConfigHandle( QString() ); // notify others. emit ownCloudWizardDone( result ); @@ -143,11 +141,11 @@ void OwncloudSetupWizard::testOwnCloudConnect() _ocWizard->field("PwdNoLocalStore").toBool() ); // now start ownCloudInfo to check the connection. - _ocInfo->setCustomConfigHandle( _configHandle ); - if( _ocInfo->isConfigured() ) { + ownCloudInfo::instance()->setCustomConfigHandle( _configHandle ); + if( ownCloudInfo::instance()->isConfigured() ) { // reset the SSL Untrust flag to let the SSL dialog appear again. - _ocInfo->resetSSLUntrust(); - _ocInfo->checkInstallation(); + ownCloudInfo::instance()->resetSSLUntrust(); + ownCloudInfo::instance()->checkInstallation(); } else { qDebug() << " ownCloud seems not to be configured, can not start test connect."; } @@ -389,7 +387,7 @@ bool OwncloudSetupWizard::createRemoteFolder( const QString& folder ) qDebug() << "creating folder on ownCloud: " << folder; - _ocInfo->mkdirRequest( folder ); + ownCloudInfo::instance()->mkdirRequest( folder ); return true; } diff --git a/src/mirall/owncloudsetupwizard.h b/src/mirall/owncloudsetupwizard.h index e5464ca283..bf7f8a6765 100644 --- a/src/mirall/owncloudsetupwizard.h +++ b/src/mirall/owncloudsetupwizard.h @@ -95,7 +95,6 @@ private: OwncloudWizard *_ocWizard; FolderMan *_folderMan; QProcess *_process; - ownCloudInfo *_ocInfo; QString _configHandle; QString _localFolder; diff --git a/src/mirall/statusdialog.cpp b/src/mirall/statusdialog.cpp index 9e54755edc..53e3af3f85 100644 --- a/src/mirall/statusdialog.cpp +++ b/src/mirall/statusdialog.cpp @@ -167,8 +167,7 @@ bool FolderViewDelegate::editorEvent ( QEvent * event, QAbstractItemModel * mode StatusDialog::StatusDialog( Theme *theme, QWidget *parent) : QDialog(parent), - _theme( theme ), - _ownCloudInfo(0) + _theme( theme ) { setupUi( this ); setWindowTitle( _theme->appName() + QString (" %1" ).arg( _theme->version() ) ); @@ -199,11 +198,9 @@ StatusDialog::StatusDialog( Theme *theme, QWidget *parent) : _ButtonInfo->setEnabled(false); _ButtonAdd->setEnabled(true); - _ownCloudInfo = new ownCloudInfo(); - - connect(_ownCloudInfo, SIGNAL(ownCloudInfoFound(const QString&, const QString&, const QString&, const QString&)), + connect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(const QString&, const QString&, const QString&, const QString&)), this, SLOT(slotOCInfo( const QString&, const QString&, const QString&, const QString& ))); - connect(_ownCloudInfo, SIGNAL(noOwncloudFound(QNetworkReply*)), + connect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)), this, SLOT(slotOCInfoFail(QNetworkReply*))); #if defined Q_WS_X11 @@ -220,7 +217,6 @@ StatusDialog::StatusDialog( Theme *theme, QWidget *parent) : StatusDialog::~StatusDialog() { - delete _ownCloudInfo; } void StatusDialog::slotFolderActivated( const QModelIndex& indx ) @@ -402,10 +398,10 @@ void StatusDialog::slotAddSync() void StatusDialog::slotCheckConnection() { - if( _ownCloudInfo->isConfigured() ) { + if( ownCloudInfo::instance()->isConfigured() ) { _ocUrlLabel->setText( tr("Checking ownCloud connection...")); qDebug() << "Check status.php from statusdialog."; - _ownCloudInfo->checkInstallation(); + ownCloudInfo::instance()->checkInstallation(); } else { // ownCloud is not yet configured. _ocUrlLabel->setText( tr("No ownCloud connection configured.")); diff --git a/src/mirall/statusdialog.h b/src/mirall/statusdialog.h index de0d777053..5db03a419d 100644 --- a/src/mirall/statusdialog.h +++ b/src/mirall/statusdialog.h @@ -108,8 +108,7 @@ private: QStandardItemModel *_model; QUrl _OCUrl; Theme *_theme; - ownCloudInfo *_ownCloudInfo; -}; }; +} #endif // STATUSDIALOG_H