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