mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-04 12:11:33 +02:00
Compare commits
29 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc1121ef00 | ||
|
|
6f9938a2b2 | ||
|
|
a650dce17f | ||
|
|
7ddd3a36c7 | ||
|
|
c46f1aba89 | ||
|
|
2ab19b23d7 | ||
|
|
d770f9cc1a | ||
|
|
9d3b09159e | ||
|
|
819cb74cc3 | ||
|
|
2407469104 | ||
|
|
c1faff513e | ||
|
|
e5b4438d5c | ||
|
|
7ec43e9f36 | ||
|
|
c4dabe7ed2 | ||
|
|
6b4f11f4aa | ||
|
|
1edf3dd503 | ||
|
|
1daf9bc80b | ||
|
|
b7a91a6998 | ||
|
|
69dffc8882 | ||
|
|
e17243bc1f | ||
|
|
0e45dd7a3d | ||
|
|
65f313f1b4 | ||
|
|
da4958c716 | ||
|
|
653b8494f5 | ||
|
|
6ed6f84f6e | ||
|
|
ff0ba56bc3 | ||
|
|
e795d04f30 | ||
|
|
8d3806b080 | ||
|
|
5597ebe455 |
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -3,4 +3,4 @@
|
|||||||
url = https://github.com/owncloud/documentation
|
url = https://github.com/owncloud/documentation
|
||||||
[submodule "src/3rdparty/qtmacgoodies"]
|
[submodule "src/3rdparty/qtmacgoodies"]
|
||||||
path = src/3rdparty/qtmacgoodies
|
path = src/3rdparty/qtmacgoodies
|
||||||
url = git://github.com/shadone/qtmacgoodies.git
|
url = git://github.com/guruz/qtmacgoodies.git
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
ChangeLog
|
ChangeLog
|
||||||
=========
|
=========
|
||||||
|
version 1.6.3 (release 2014-09-03)
|
||||||
|
* Fixed updater on OS X
|
||||||
|
* Fixed memory leak in SSL button that could lead to quick memory draining
|
||||||
|
* Fixed upload problem with files >4 GB
|
||||||
|
* MacOSX, Linux: Bring Settings window to front properly
|
||||||
|
* Branded clients: If no configuration is detected, try to import the data
|
||||||
|
from a previously configured community edition.
|
||||||
|
|
||||||
version 1.6.2 (release 2014-07-28 )
|
version 1.6.2 (release 2014-07-28 )
|
||||||
* Limit the HTTP buffer size when downloading to limit memory consumption.
|
* Limit the HTTP buffer size when downloading to limit memory consumption.
|
||||||
* Another small mem leak fixed in HTTP Credentials.
|
* Another small mem leak fixed in HTTP Credentials.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 1 )
|
set( MIRALL_VERSION_MAJOR 1 )
|
||||||
set( MIRALL_VERSION_MINOR 6 )
|
set( MIRALL_VERSION_MINOR 6 )
|
||||||
set( MIRALL_VERSION_PATCH 2 )
|
set( MIRALL_VERSION_PATCH 3 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use LWP::UserAgent;
|
|||||||
use LWP::Protocol::https;
|
use LWP::Protocol::https;
|
||||||
use HTTP::Request::Common qw( POST GET DELETE );
|
use HTTP::Request::Common qw( POST GET DELETE );
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
use POSIX qw/strftime/;
|
||||||
|
|
||||||
use Encode qw(from_to);
|
use Encode qw(from_to);
|
||||||
use utf8;
|
use utf8;
|
||||||
@@ -128,8 +129,9 @@ sub initTesting(;$)
|
|||||||
# $d->DebugLevel(3);
|
# $d->DebugLevel(3);
|
||||||
$prefix = "t1" unless( defined $prefix );
|
$prefix = "t1" unless( defined $prefix );
|
||||||
|
|
||||||
my $dirId = sprintf("%#.3o", rand(1000));
|
my $dirId = sprintf("%02d", rand(100));
|
||||||
my $dir = sprintf( "%s-%s/", $prefix, $dirId );
|
my $dateTime = strftime('%Y%m%d%H%M%S',localtime);
|
||||||
|
my $dir = sprintf( "%s-%s-%s/", $prefix, $dateTime, $dirId );
|
||||||
|
|
||||||
$localDir = $dir;
|
$localDir = $dir;
|
||||||
$localDir .= "/" unless( $localDir =~ /\/$/ );
|
$localDir .= "/" unless( $localDir =~ /\/$/ );
|
||||||
|
|||||||
2
src/3rdparty/qtmacgoodies
vendored
2
src/3rdparty/qtmacgoodies
vendored
Submodule src/3rdparty/qtmacgoodies updated: cf09d34dc7...fa06775714
@@ -45,6 +45,7 @@ if (APPLE)
|
|||||||
list(APPEND 3rdparty_SRC
|
list(APPEND 3rdparty_SRC
|
||||||
3rdparty/qtmacgoodies/src/macpreferenceswindow.mm
|
3rdparty/qtmacgoodies/src/macpreferenceswindow.mm
|
||||||
3rdparty/qtmacgoodies/src/macstandardicon.mm
|
3rdparty/qtmacgoodies/src/macstandardicon.mm
|
||||||
|
3rdparty/qtmacgoodies/src/macwindow.mm
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -82,6 +83,7 @@ set(libsync_SRCS
|
|||||||
mirall/folderman.cpp
|
mirall/folderman.cpp
|
||||||
mirall/folder.cpp
|
mirall/folder.cpp
|
||||||
mirall/folderwatcher.cpp
|
mirall/folderwatcher.cpp
|
||||||
|
mirall/authenticationdialog.cpp
|
||||||
mirall/syncresult.cpp
|
mirall/syncresult.cpp
|
||||||
mirall/mirallconfigfile.cpp
|
mirall/mirallconfigfile.cpp
|
||||||
mirall/syncengine.cpp
|
mirall/syncengine.cpp
|
||||||
@@ -105,6 +107,7 @@ set(libsync_SRCS
|
|||||||
mirall/clientproxy.cpp
|
mirall/clientproxy.cpp
|
||||||
mirall/syncrunfilelog.cpp
|
mirall/syncrunfilelog.cpp
|
||||||
mirall/cookiejar.cpp
|
mirall/cookiejar.cpp
|
||||||
|
mirall/accountmigrator.cpp
|
||||||
creds/dummycredentials.cpp
|
creds/dummycredentials.cpp
|
||||||
creds/abstractcredentials.cpp
|
creds/abstractcredentials.cpp
|
||||||
creds/credentialsfactory.cpp
|
creds/credentialsfactory.cpp
|
||||||
@@ -124,7 +127,6 @@ else()
|
|||||||
creds/shibbolethcredentials.cpp
|
creds/shibbolethcredentials.cpp
|
||||||
creds/shibboleth/shibbolethwebview.cpp
|
creds/shibboleth/shibbolethwebview.cpp
|
||||||
creds/shibboleth/shibbolethrefresher.cpp
|
creds/shibboleth/shibbolethrefresher.cpp
|
||||||
creds/shibboleth/authenticationdialog.cpp
|
|
||||||
creds/shibboleth/shibbolethuserjob.cpp
|
creds/shibboleth/shibbolethuserjob.cpp
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
@@ -246,7 +248,7 @@ else()
|
|||||||
install(TARGETS ${synclib_NAME} DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS)
|
install(TARGETS ${synclib_NAME} DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS)
|
||||||
if (SPARKLE_FOUND)
|
if (SPARKLE_FOUND)
|
||||||
install(DIRECTORY "${SPARKLE_LIBRARY}"
|
install(DIRECTORY "${SPARKLE_LIBRARY}"
|
||||||
DESTINATION "${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks")
|
DESTINATION "${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks" USE_SOURCE_PERMISSIONS)
|
||||||
endif (SPARKLE_FOUND)
|
endif (SPARKLE_FOUND)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "creds/shibbolethcredentials.h"
|
#include "creds/shibbolethcredentials.h"
|
||||||
#include "creds/shibboleth/authenticationdialog.h"
|
|
||||||
#include "creds/shibboleth/shibbolethwebview.h"
|
#include "creds/shibboleth/shibbolethwebview.h"
|
||||||
#include "creds/shibboleth/shibbolethrefresher.h"
|
#include "creds/shibboleth/shibbolethrefresher.h"
|
||||||
#include "creds/shibbolethcredentials.h"
|
#include "creds/shibbolethcredentials.h"
|
||||||
@@ -173,8 +172,6 @@ QNetworkAccessManager* ShibbolethCredentials::getQNAM() const
|
|||||||
QNetworkAccessManager* qnam(new MirallAccessManager);
|
QNetworkAccessManager* qnam(new MirallAccessManager);
|
||||||
connect(qnam, SIGNAL(finished(QNetworkReply*)),
|
connect(qnam, SIGNAL(finished(QNetworkReply*)),
|
||||||
this, SLOT(slotReplyFinished(QNetworkReply*)));
|
this, SLOT(slotReplyFinished(QNetworkReply*)));
|
||||||
connect(qnam, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
|
|
||||||
SLOT(slotHandleAuthentication(QNetworkReply*,QAuthenticator*)));
|
|
||||||
return qnam;
|
return qnam;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,23 +316,6 @@ void ShibbolethCredentials::invalidateAndFetch(Account* account)
|
|||||||
job->start();
|
job->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShibbolethCredentials::slotHandleAuthentication(QNetworkReply *reply, QAuthenticator *authenticator)
|
|
||||||
{
|
|
||||||
Q_UNUSED(reply)
|
|
||||||
QUrl url = reply->url();
|
|
||||||
// show only scheme, host and port
|
|
||||||
QUrl reducedUrl;
|
|
||||||
reducedUrl.setScheme(url.scheme());
|
|
||||||
reducedUrl.setHost(url.host());
|
|
||||||
reducedUrl.setPort(url.port());
|
|
||||||
|
|
||||||
AuthenticationDialog dialog(authenticator->realm(), reducedUrl.toString());
|
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
|
||||||
authenticator->setUser(dialog.user());
|
|
||||||
authenticator->setPassword(dialog.password());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShibbolethCredentials::slotInvalidateAndFetchInvalidateDone(QKeychain::Job* job)
|
void ShibbolethCredentials::slotInvalidateAndFetchInvalidateDone(QKeychain::Job* job)
|
||||||
{
|
{
|
||||||
Account *account = qvariant_cast<Account*>(job->property("account"));
|
Account *account = qvariant_cast<Account*>(job->property("account"));
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ public:
|
|||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void invalidateAndFetch(Account *account);
|
void invalidateAndFetch(Account *account);
|
||||||
void slotHandleAuthentication(QNetworkReply*,QAuthenticator*);
|
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onShibbolethCookieReceived(const QNetworkCookie&, Account*);
|
void onShibbolethCookieReceived(const QNetworkCookie&, Account*);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "mirall/mirallconfigfile.h"
|
#include "mirall/mirallconfigfile.h"
|
||||||
#include "mirall/mirallaccessmanager.h"
|
#include "mirall/mirallaccessmanager.h"
|
||||||
#include "mirall/quotainfo.h"
|
#include "mirall/quotainfo.h"
|
||||||
|
#include "mirall/owncloudtheme.h"
|
||||||
#include "creds/abstractcredentials.h"
|
#include "creds/abstractcredentials.h"
|
||||||
#include "creds/credentialsfactory.h"
|
#include "creds/credentialsfactory.h"
|
||||||
|
|
||||||
@@ -27,6 +28,8 @@
|
|||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
#include <QSslSocket>
|
#include <QSslSocket>
|
||||||
#include <QNetworkCookieJar>
|
#include <QNetworkCookieJar>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@@ -36,6 +39,7 @@ static const char urlC[] = "url";
|
|||||||
static const char authTypeC[] = "authType";
|
static const char authTypeC[] = "authType";
|
||||||
static const char userC[] = "user";
|
static const char userC[] = "user";
|
||||||
static const char httpUserC[] = "http_user";
|
static const char httpUserC[] = "http_user";
|
||||||
|
static const char caCertsKeyC[] = "CaCertificates";
|
||||||
|
|
||||||
AccountManager *AccountManager::_instance = 0;
|
AccountManager *AccountManager::_instance = 0;
|
||||||
|
|
||||||
@@ -71,6 +75,7 @@ Account::Account(AbstractSslErrorHandler *sslErrorHandler, QObject *parent)
|
|||||||
, _treatSslErrorsAsFailure(false)
|
, _treatSslErrorsAsFailure(false)
|
||||||
, _state(Account::Disconnected)
|
, _state(Account::Disconnected)
|
||||||
, _davPath("remote.php/webdav/")
|
, _davPath("remote.php/webdav/")
|
||||||
|
, _wasMigrated(false)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<Account*>("Account*");
|
qRegisterMetaType<Account*>("Account*");
|
||||||
}
|
}
|
||||||
@@ -98,25 +103,66 @@ void Account::save()
|
|||||||
}
|
}
|
||||||
settings->sync();
|
settings->sync();
|
||||||
|
|
||||||
// ### TODO port away from MirallConfigFile
|
// Save accepted certificates.
|
||||||
MirallConfigFile cfg;
|
settings->beginGroup(QLatin1String("General"));
|
||||||
qDebug() << "Saving " << approvedCerts().count() << " unknown certs.";
|
qDebug() << "Saving " << approvedCerts().count() << " unknown certs.";
|
||||||
QByteArray certs;
|
QByteArray certs;
|
||||||
Q_FOREACH( const QSslCertificate& cert, approvedCerts() ) {
|
Q_FOREACH( const QSslCertificate& cert, approvedCerts() ) {
|
||||||
certs += cert.toPem() + '\n';
|
certs += cert.toPem() + '\n';
|
||||||
}
|
}
|
||||||
if (!certs.isEmpty()) {
|
if (!certs.isEmpty()) {
|
||||||
cfg.setCaCerts( certs );
|
settings->setValue( QLatin1String(caCertsKeyC), certs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Account* Account::restore()
|
Account* Account::restore()
|
||||||
{
|
{
|
||||||
|
// try to open the correctly themed settings
|
||||||
QScopedPointer<QSettings> settings(settingsWithGroup(Theme::instance()->appName()));
|
QScopedPointer<QSettings> settings(settingsWithGroup(Theme::instance()->appName()));
|
||||||
|
|
||||||
|
Account *acc = 0;
|
||||||
|
bool migratedCreds = false;
|
||||||
|
|
||||||
|
// if the settings file could not be opened, the childKeys list is empty
|
||||||
|
if( settings->childKeys().isEmpty() ) {
|
||||||
|
// Now try to open the original ownCloud settings to see if they exist.
|
||||||
|
QString oCCfgFile = QDir::fromNativeSeparators( settings->fileName() );
|
||||||
|
// replace the last two segments with ownCloud/owncloud.cfg
|
||||||
|
oCCfgFile = oCCfgFile.left( oCCfgFile.lastIndexOf('/'));
|
||||||
|
oCCfgFile = oCCfgFile.left( oCCfgFile.lastIndexOf('/'));
|
||||||
|
oCCfgFile += QLatin1String("/ownCloud/owncloud.cfg");
|
||||||
|
|
||||||
|
qDebug() << "Migrate: checking old config " << oCCfgFile;
|
||||||
|
|
||||||
|
QFileInfo fi( oCCfgFile );
|
||||||
|
if( fi.isReadable() ) {
|
||||||
|
QSettings *oCSettings = new QSettings(oCCfgFile, QSettings::IniFormat);
|
||||||
|
oCSettings->beginGroup(QLatin1String("ownCloud"));
|
||||||
|
|
||||||
|
// Check the theme url to see if it is the same url that the oC config was for
|
||||||
|
QString overrideUrl = Theme::instance()->overrideServerUrl();
|
||||||
|
if( !overrideUrl.isEmpty() ) {
|
||||||
|
if (overrideUrl.endsWith('/')) { overrideUrl.chop(1); }
|
||||||
|
QString oCUrl = oCSettings->value(QLatin1String(urlC)).toString();
|
||||||
|
if (oCUrl.endsWith('/')) { oCUrl.chop(1); }
|
||||||
|
|
||||||
|
// in case the urls are equal reset the settings object to read from
|
||||||
|
// the ownCloud settings object
|
||||||
|
qDebug() << "Migrate oC config if " << oCUrl << " == " << overrideUrl << ":"
|
||||||
|
<< (oCUrl == overrideUrl ? "Yes" : "No");
|
||||||
|
if( oCUrl == overrideUrl ) {
|
||||||
|
migratedCreds = true;
|
||||||
|
settings.reset( oCSettings );
|
||||||
|
} else {
|
||||||
|
delete oCSettings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!settings->childKeys().isEmpty()) {
|
if (!settings->childKeys().isEmpty()) {
|
||||||
Account *acc = new Account;
|
acc = new Account;
|
||||||
MirallConfigFile cfg;
|
|
||||||
acc->setApprovedCerts(QSslCertificate::fromData(cfg.caCerts()));
|
|
||||||
acc->setUrl(settings->value(QLatin1String(urlC)).toUrl());
|
acc->setUrl(settings->value(QLatin1String(urlC)).toUrl());
|
||||||
acc->setCredentials(CredentialsFactory::create(settings->value(QLatin1String(authTypeC)).toString()));
|
acc->setCredentials(CredentialsFactory::create(settings->value(QLatin1String(authTypeC)).toString()));
|
||||||
|
|
||||||
@@ -128,6 +174,11 @@ Account* Account::restore()
|
|||||||
continue;
|
continue;
|
||||||
acc->_settingsMap.insert(key, settings->value(key));
|
acc->_settingsMap.insert(key, settings->value(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now the cert, it is in the general group
|
||||||
|
settings->beginGroup(QLatin1String("General"));
|
||||||
|
acc->setApprovedCerts(QSslCertificate::fromData(settings->value(caCertsKeyC).toByteArray()));
|
||||||
|
acc->setMigrated(migratedCreds);
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -364,4 +415,14 @@ void Account::slotHandleErrors(QNetworkReply *reply , QList<QSslError> errors)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Account::wasMigrated()
|
||||||
|
{
|
||||||
|
return _wasMigrated;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Account::setMigrated(bool mig)
|
||||||
|
{
|
||||||
|
_wasMigrated = mig;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Mirall
|
} // namespace Mirall
|
||||||
|
|||||||
@@ -108,6 +108,13 @@ public:
|
|||||||
/** Returns webdav entry URL, based on url() */
|
/** Returns webdav entry URL, based on url() */
|
||||||
QUrl davUrl() const;
|
QUrl davUrl() const;
|
||||||
|
|
||||||
|
/** set and retrieve the migration flag: if an account of a branded
|
||||||
|
* client was migrated from a former ownCloud Account, this is true
|
||||||
|
*/
|
||||||
|
void setMigrated(bool mig);
|
||||||
|
bool wasMigrated();
|
||||||
|
|
||||||
|
|
||||||
QList<QNetworkCookie> lastAuthCookies() const;
|
QList<QNetworkCookie> lastAuthCookies() const;
|
||||||
|
|
||||||
QNetworkReply* headRequest(const QString &relPath);
|
QNetworkReply* headRequest(const QString &relPath);
|
||||||
@@ -166,6 +173,7 @@ private:
|
|||||||
int _state;
|
int _state;
|
||||||
static QString _configFileName;
|
static QString _configFileName;
|
||||||
QString _davPath; // default "remote.php/webdav/";
|
QString _davPath; // default "remote.php/webdav/";
|
||||||
|
bool _wasMigrated;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
89
src/mirall/accountmigrator.cpp
Normal file
89
src/mirall/accountmigrator.cpp
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mirall/accountmigrator.h"
|
||||||
|
#include "mirall/mirallconfigfile.h"
|
||||||
|
#include "mirall/folderman.h"
|
||||||
|
#include "mirall/theme.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
namespace Mirall {
|
||||||
|
|
||||||
|
// The purpose of this class is to migrate an existing account that
|
||||||
|
// was set up with an unbranded client to an branded one.
|
||||||
|
// The usecase is: Usually people try first with the community client,
|
||||||
|
// later they maybe switch to a branded client. When they install the
|
||||||
|
// branded client first, it should automatically pick the information
|
||||||
|
// from the already configured account.
|
||||||
|
|
||||||
|
AccountMigrator::AccountMigrator()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// the list of folder definitions which are files in the directory "folders"
|
||||||
|
// underneath the ownCloud configPath (with ownCloud as a last segment)
|
||||||
|
// need to be copied to the themed path and adjusted.
|
||||||
|
|
||||||
|
QStringList AccountMigrator::migrateFolderDefinitons()
|
||||||
|
{
|
||||||
|
MirallConfigFile cfg;
|
||||||
|
QStringList re;
|
||||||
|
|
||||||
|
QString themePath = cfg.configPath();
|
||||||
|
// create the original ownCloud config path out of the theme path
|
||||||
|
// by removing the theme folder and append ownCloud.
|
||||||
|
QString oCPath = themePath;
|
||||||
|
if( oCPath.endsWith(QLatin1Char('/')) ) {
|
||||||
|
oCPath.truncate( oCPath.length()-1 );
|
||||||
|
}
|
||||||
|
oCPath = oCPath.left( oCPath.lastIndexOf('/'));
|
||||||
|
|
||||||
|
themePath += QLatin1String( "folders");
|
||||||
|
oCPath += QLatin1String( "/ownCloud/folders" );
|
||||||
|
|
||||||
|
qDebug() << "Migrator: theme-path: " << themePath;
|
||||||
|
qDebug() << "Migrator: ownCloud path: " << oCPath;
|
||||||
|
|
||||||
|
// get a dir listing of the ownCloud folder definitions and copy
|
||||||
|
// them over to the theme dir
|
||||||
|
QDir oCDir(oCPath);
|
||||||
|
oCDir.setFilter( QDir::Files );
|
||||||
|
QStringList files = oCDir.entryList();
|
||||||
|
|
||||||
|
foreach( const QString& file, files ) {
|
||||||
|
QString escapedAlias = FolderMan::instance()->escapeAlias(file);
|
||||||
|
QString themeFile = themePath + QDir::separator() + file;
|
||||||
|
QString oCFile = oCPath+QDir::separator()+file;
|
||||||
|
if( QFile::copy( oCFile, themeFile ) ) {
|
||||||
|
re.append(file);
|
||||||
|
qDebug() << "Migrator: Folder definition migrated: " << file;
|
||||||
|
|
||||||
|
// fix the connection entry of the folder definition
|
||||||
|
QSettings settings(themeFile, QSettings::IniFormat);
|
||||||
|
settings.beginGroup( escapedAlias );
|
||||||
|
settings.setValue(QLatin1String("connection"), Theme::instance()->appName());
|
||||||
|
settings.sync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return re;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
38
src/mirall/accountmigrator.h
Normal file
38
src/mirall/accountmigrator.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ACCOUNTMIGRATOR_H
|
||||||
|
#define ACCOUNTMIGRATOR_H
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
namespace Mirall {
|
||||||
|
|
||||||
|
class AccountMigrator {
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AccountMigrator();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief migrateFolderDefinitons - migrate the folder definition files
|
||||||
|
* @return the list of migrated folder definitions
|
||||||
|
*/
|
||||||
|
QStringList migrateFolderDefinitons();
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // ACCOUNTMIGRATOR_H
|
||||||
@@ -713,7 +713,7 @@ void AccountSettings::slotIgnoreFilesEditor()
|
|||||||
_ignoreEditor->setAttribute( Qt::WA_DeleteOnClose, true );
|
_ignoreEditor->setAttribute( Qt::WA_DeleteOnClose, true );
|
||||||
_ignoreEditor->open();
|
_ignoreEditor->open();
|
||||||
} else {
|
} else {
|
||||||
Utility::raiseDialog(_ignoreEditor);
|
ownCloudGui::raiseDialog(_ignoreEditor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mirall/folderman.h"
|
#include "mirall/folderman.h"
|
||||||
|
#include "mirall/account.h"
|
||||||
|
|
||||||
#include "mirall/mirallconfigfile.h"
|
#include "mirall/mirallconfigfile.h"
|
||||||
#include "mirall/folder.h"
|
#include "mirall/folder.h"
|
||||||
#include "mirall/syncresult.h"
|
#include "mirall/syncresult.h"
|
||||||
#include "mirall/theme.h"
|
#include "mirall/theme.h"
|
||||||
|
#include "mirall/accountmigrator.h"
|
||||||
|
|
||||||
#include <neon/ne_socket.h>
|
#include <neon/ne_socket.h>
|
||||||
|
|
||||||
@@ -147,6 +150,15 @@ int FolderMan::setupFolders()
|
|||||||
dir.setFilter(QDir::Files | QDir::Hidden);
|
dir.setFilter(QDir::Files | QDir::Hidden);
|
||||||
QStringList list = dir.entryList();
|
QStringList list = dir.entryList();
|
||||||
|
|
||||||
|
if( list.count() == 0 ) {
|
||||||
|
// maybe the account was just migrated.
|
||||||
|
Account *acc = AccountManager::instance()->account();
|
||||||
|
if ( acc && acc->wasMigrated() ) {
|
||||||
|
AccountMigrator accMig;
|
||||||
|
list = accMig.migrateFolderDefinitons();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach ( const QString& alias, list ) {
|
foreach ( const QString& alias, list ) {
|
||||||
Folder *f = setupFolderFromConfigFile( alias );
|
Folder *f = setupFolderFromConfigFile( alias );
|
||||||
if( f ) {
|
if( f ) {
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ public:
|
|||||||
void removeMonitorPath( const QString& alias, const QString& path );
|
void removeMonitorPath( const QString& alias, const QString& path );
|
||||||
void addMonitorPath( const QString& alias, const QString& path );
|
void addMonitorPath( const QString& alias, const QString& path );
|
||||||
|
|
||||||
|
QString escapeAlias( const QString& ) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
/**
|
||||||
* signal to indicate a folder named by alias has changed its sync state.
|
* signal to indicate a folder named by alias has changed its sync state.
|
||||||
@@ -130,7 +132,6 @@ private:
|
|||||||
|
|
||||||
// Escaping of the alias which is used in QSettings AND the file
|
// Escaping of the alias which is used in QSettings AND the file
|
||||||
// system, thus need to be escaped.
|
// system, thus need to be escaped.
|
||||||
QString escapeAlias( const QString& ) const;
|
|
||||||
QString unescapeAlias( const QString& ) const;
|
QString unescapeAlias( const QString& ) const;
|
||||||
|
|
||||||
void removeFolder( const QString& );
|
void removeFolder( const QString& );
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
#include <QNetworkReply>
|
||||||
#include <QNetworkProxy>
|
#include <QNetworkProxy>
|
||||||
#include <QAuthenticator>
|
#include <QAuthenticator>
|
||||||
#include <QSslConfiguration>
|
#include <QSslConfiguration>
|
||||||
@@ -19,6 +20,8 @@
|
|||||||
#include "mirall/cookiejar.h"
|
#include "mirall/cookiejar.h"
|
||||||
#include "mirall/mirallaccessmanager.h"
|
#include "mirall/mirallaccessmanager.h"
|
||||||
#include "mirall/utility.h"
|
#include "mirall/utility.h"
|
||||||
|
#include "mirall/authenticationdialog.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Mirall
|
namespace Mirall
|
||||||
{
|
{
|
||||||
@@ -33,8 +36,11 @@ MirallAccessManager::MirallAccessManager(QObject* parent)
|
|||||||
setProxy(proxy);
|
setProxy(proxy);
|
||||||
#endif
|
#endif
|
||||||
setCookieJar(new CookieJar);
|
setCookieJar(new CookieJar);
|
||||||
QObject::connect(this, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
connect(this, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
||||||
this, SLOT(slotProxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
|
this, SLOT(slotProxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
|
||||||
|
connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
|
||||||
|
this, SLOT(slotAuthenticationRequired(QNetworkReply*,QAuthenticator*)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply* MirallAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest& request, QIODevice* outgoingData)
|
QNetworkReply* MirallAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest& request, QIODevice* outgoingData)
|
||||||
@@ -60,5 +66,27 @@ void MirallAccessManager::slotProxyAuthenticationRequired(const QNetworkProxy &p
|
|||||||
authenticator->setPassword(proxy.password());
|
authenticator->setPassword(proxy.password());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void MirallAccessManager::slotAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
|
||||||
|
{
|
||||||
|
// do not handle 401 created by the networkjobs. We may want
|
||||||
|
// to eventually exempt some, but for now we need
|
||||||
|
// it only for other things, e.g. the browser. Would we handle
|
||||||
|
// network jobs, this would break the wizard logic
|
||||||
|
if (reply->property("doNotHandleAuth").toBool()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QUrl url = reply->url();
|
||||||
|
// show only scheme, host and port
|
||||||
|
QUrl reducedUrl;
|
||||||
|
reducedUrl.setScheme(url.scheme());
|
||||||
|
reducedUrl.setHost(url.host());
|
||||||
|
reducedUrl.setPort(url.port());
|
||||||
|
|
||||||
|
AuthenticationDialog dialog(authenticator->realm(), reducedUrl.toString());
|
||||||
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
|
authenticator->setUser(dialog.user());
|
||||||
|
authenticator->setPassword(dialog.password());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // ns Mirall
|
} // ns Mirall
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ protected:
|
|||||||
QNetworkReply* createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest& request, QIODevice* outgoingData = 0);
|
QNetworkReply* createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest& request, QIODevice* outgoingData = 0);
|
||||||
protected slots:
|
protected slots:
|
||||||
void slotProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
|
void slotProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
|
||||||
|
void slotAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // ns Mirall
|
} // ns Mirall
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ void AbstractNetworkJob::setReply(QNetworkReply *reply)
|
|||||||
if (_reply) {
|
if (_reply) {
|
||||||
_reply->deleteLater();
|
_reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
reply->setProperty("doNotHandleAuth", true);
|
||||||
_reply = reply;
|
_reply = reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "mirall/owncloudsetupwizard.h"
|
#include "mirall/owncloudsetupwizard.h"
|
||||||
#if defined(Q_OS_MAC)
|
#if defined(Q_OS_MAC)
|
||||||
# include "mirall/settingsdialogmac.h"
|
# include "mirall/settingsdialogmac.h"
|
||||||
|
# include "macwindow.h" // qtmacgoodies
|
||||||
#else
|
#else
|
||||||
# include "mirall/settingsdialog.h"
|
# include "mirall/settingsdialog.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -33,6 +34,10 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QSignalMapper>
|
#include <QSignalMapper>
|
||||||
|
|
||||||
|
#if defined(Q_OS_X11)
|
||||||
|
#include <QX11Info>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
ownCloudGui::ownCloudGui(Application *parent) :
|
ownCloudGui::ownCloudGui(Application *parent) :
|
||||||
@@ -111,6 +116,14 @@ void ownCloudGui::slotTrayClicked( QSystemTrayIcon::ActivationReason reason )
|
|||||||
if( reason == QSystemTrayIcon::Trigger ) {
|
if( reason == QSystemTrayIcon::Trigger ) {
|
||||||
slotOpenSettingsDialog(true); // start settings if config is existing.
|
slotOpenSettingsDialog(true); // start settings if config is existing.
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// On Mac, if the settings dialog is already visible but hidden
|
||||||
|
// by other applications, this will bring it to the front.
|
||||||
|
if( reason == QSystemTrayIcon::Trigger ) {
|
||||||
|
if (!_settingsDialog.isNull() && _settingsDialog->isVisible()) {
|
||||||
|
slotShowSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,7 +488,7 @@ void ownCloudGui::slotShowSettings()
|
|||||||
_settingsDialog->show();
|
_settingsDialog->show();
|
||||||
}
|
}
|
||||||
_settingsDialog->setGeneralErrors( _startupFails );
|
_settingsDialog->setGeneralErrors( _startupFails );
|
||||||
Utility::raiseDialog(_settingsDialog.data());
|
ownCloudGui::raiseDialog(_settingsDialog.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ownCloudGui::slotShowSyncProtocol()
|
void ownCloudGui::slotShowSyncProtocol()
|
||||||
@@ -503,7 +516,7 @@ void ownCloudGui::slotToggleLogBrowser()
|
|||||||
if (_logBrowser->isVisible() ) {
|
if (_logBrowser->isVisible() ) {
|
||||||
_logBrowser->hide();
|
_logBrowser->hide();
|
||||||
} else {
|
} else {
|
||||||
Utility::raiseDialog(_logBrowser);
|
ownCloudGui::raiseDialog(_logBrowser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,5 +532,35 @@ void ownCloudGui::slotHelp()
|
|||||||
QDesktopServices::openUrl(QUrl(Theme::instance()->helpUrl()));
|
QDesktopServices::openUrl(QUrl(Theme::instance()->helpUrl()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ownCloudGui::raiseDialog( QWidget *raiseWidget )
|
||||||
|
{
|
||||||
|
if( raiseWidget && raiseWidget->parentWidget() == 0) {
|
||||||
|
// Qt has a bug which causes parent-less dialogs to pop-under.
|
||||||
|
raiseWidget->showNormal();
|
||||||
|
raiseWidget->raise();
|
||||||
|
raiseWidget->activateWindow();
|
||||||
|
}
|
||||||
|
#if defined(Q_OS_MAC)
|
||||||
|
// viel hilft viel ;-)
|
||||||
|
MacWindow::bringToFront(raiseWidget);
|
||||||
|
#endif
|
||||||
|
#if defined(Q_OS_X11)
|
||||||
|
WId wid = widget->winId();
|
||||||
|
NETWM::init();
|
||||||
|
|
||||||
|
XEvent e;
|
||||||
|
e.xclient.type = ClientMessage;
|
||||||
|
e.xclient.message_type = NETWM::NET_ACTIVE_WINDOW;
|
||||||
|
e.xclient.display = QX11Info::display();
|
||||||
|
e.xclient.window = wid;
|
||||||
|
e.xclient.format = 32;
|
||||||
|
e.xclient.data.l[0] = 2;
|
||||||
|
e.xclient.data.l[1] = QX11Info::appTime();
|
||||||
|
e.xclient.data.l[2] = 0;
|
||||||
|
e.xclient.data.l[3] = 0l;
|
||||||
|
e.xclient.data.l[4] = 0l;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ public:
|
|||||||
|
|
||||||
bool checkAccountExists(bool openSettings);
|
bool checkAccountExists(bool openSettings);
|
||||||
|
|
||||||
|
static void raiseDialog( QWidget *raiseWidget );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void setupProxy();
|
void setupProxy();
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,16 @@ QPixmap ownCloudTheme::wizardHeaderLogo() const
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QString ownCloudTheme::appName() const
|
||||||
|
{
|
||||||
|
return QLatin1String("ownCloud");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ownCloudTheme::appNameGUI() const
|
||||||
|
{
|
||||||
|
return QLatin1String("ownCloud");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public:
|
|||||||
QIcon trayFolderIcon( const QString& ) const;
|
QIcon trayFolderIcon( const QString& ) const;
|
||||||
QIcon folderDisabledIcon() const;
|
QIcon folderDisabledIcon() const;
|
||||||
QIcon applicationIcon() const;
|
QIcon applicationIcon() const;
|
||||||
|
QString appName() const;
|
||||||
|
QString appNameGUI() const;
|
||||||
|
|
||||||
|
|
||||||
QVariant customMedia(CustomMediaType type);
|
QVariant customMedia(CustomMediaType type);
|
||||||
QString helpUrl() const;
|
QString helpUrl() const;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
namespace Mirall {
|
namespace Mirall {
|
||||||
|
|
||||||
static uint chunkSize() {
|
static qint64 chunkSize() {
|
||||||
static uint chunkSize;
|
static uint chunkSize;
|
||||||
if (!chunkSize) {
|
if (!chunkSize) {
|
||||||
chunkSize = qgetenv("OWNCLOUD_CHUNK_SIZE").toUInt();
|
chunkSize = qgetenv("OWNCLOUD_CHUNK_SIZE").toUInt();
|
||||||
@@ -229,7 +229,7 @@ void PropagateUploadFileQNAM::startNextChunk()
|
|||||||
currentChunkSize = chunkSize();
|
currentChunkSize = chunkSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
device = new ChunkDevice(_file, chunkSize() * sendingChunk, currentChunkSize);
|
device = new ChunkDevice(_file, chunkSize() * quint64(sendingChunk), currentChunkSize);
|
||||||
} else {
|
} else {
|
||||||
device = _file;
|
device = _file;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,13 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
|
|||||||
{
|
{
|
||||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||||
_ui->setupUi(this);
|
_ui->setupUi(this);
|
||||||
|
|
||||||
|
// People perceive this as a Window, so also make Ctrl+W work
|
||||||
|
QAction *closeWindowAction = new QAction(this);
|
||||||
|
closeWindowAction->setShortcut(QKeySequence("Ctrl+W"));
|
||||||
|
connect(closeWindowAction, SIGNAL(triggered()), SLOT(accept()));
|
||||||
|
addAction(closeWindowAction);
|
||||||
|
|
||||||
setObjectName("Settings"); // required as group for saveGeometry call
|
setObjectName("Settings"); // required as group for saveGeometry call
|
||||||
|
|
||||||
setWindowTitle(tr("%1").arg(Theme::instance()->appNameGUI()));
|
setWindowTitle(tr("%1").arg(Theme::instance()->appNameGUI()));
|
||||||
|
|||||||
@@ -30,8 +30,13 @@ SettingsDialogMac::SettingsDialogMac(ownCloudGui *gui, QWidget *parent)
|
|||||||
|
|
||||||
|
|
||||||
// Emulate dialog behavior: Escape means close
|
// Emulate dialog behavior: Escape means close
|
||||||
|
QAction *closeDialogAction = new QAction(this);
|
||||||
|
closeDialogAction->setShortcut(QKeySequence(Qt::Key_Escape));
|
||||||
|
connect(closeDialogAction, SIGNAL(triggered()), SLOT(close()));
|
||||||
|
addAction(closeDialogAction);
|
||||||
|
// People perceive this as a Window, so also make Ctrl+W work
|
||||||
QAction *closeWindowAction = new QAction(this);
|
QAction *closeWindowAction = new QAction(this);
|
||||||
closeWindowAction->setShortcut(QKeySequence(Qt::Key_Escape));
|
closeWindowAction->setShortcut(QKeySequence("Ctrl+W"));
|
||||||
connect(closeWindowAction, SIGNAL(triggered()), SLOT(close()));
|
connect(closeWindowAction, SIGNAL(triggered()), SLOT(close()));
|
||||||
addAction(closeWindowAction);
|
addAction(closeWindowAction);
|
||||||
|
|
||||||
|
|||||||
@@ -176,6 +176,11 @@ void SslButton::updateAccountInfo(Account *account)
|
|||||||
} else {
|
} else {
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
|
if(QMenu *oldMenu = menu()) {
|
||||||
|
oldMenu->hide(); // Need to be hidden because the QToolButton would be left in invalid state if the menu is deleted while it is visible
|
||||||
|
setMenu(0);
|
||||||
|
oldMenu->deleteLater(); // setMenu do not delete the previous menu.
|
||||||
|
}
|
||||||
if (account->url().scheme() == QLatin1String("https")) {
|
if (account->url().scheme() == QLatin1String("https")) {
|
||||||
setIcon(QIcon(QPixmap(":/mirall/resources/lock-https.png")));
|
setIcon(QIcon(QPixmap(":/mirall/resources/lock-https.png")));
|
||||||
QSslCipher cipher = account->sslConfiguration().sessionCipher();
|
QSslCipher cipher = account->sslConfiguration().sessionCipher();
|
||||||
@@ -212,7 +217,6 @@ void SslButton::updateAccountInfo(Account *account)
|
|||||||
} else {
|
} else {
|
||||||
setIcon(QIcon(QPixmap(":/mirall/resources/lock-http.png")));
|
setIcon(QIcon(QPixmap(":/mirall/resources/lock-http.png")));
|
||||||
setToolTip(tr("This connection is NOT secure as it is not encrypted.\n"));
|
setToolTip(tr("This connection is NOT secure as it is not encrypted.\n"));
|
||||||
setMenu(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -164,18 +164,6 @@ QByteArray Utility::userAgentString()
|
|||||||
.toLatin1();
|
.toLatin1();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Utility::raiseDialog( QWidget *raiseWidget )
|
|
||||||
{
|
|
||||||
#ifndef TOKEN_AUTH_ONLY
|
|
||||||
if( raiseWidget && raiseWidget->parentWidget() == 0) {
|
|
||||||
// Qt has a bug which causes parent-less dialogs to pop-under.
|
|
||||||
raiseWidget->showNormal();
|
|
||||||
raiseWidget->raise();
|
|
||||||
raiseWidget->activateWindow();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Utility::hasLaunchOnStartup(const QString &appName)
|
bool Utility::hasLaunchOnStartup(const QString &appName)
|
||||||
{
|
{
|
||||||
return hasLaunchOnStartup_private(appName);
|
return hasLaunchOnStartup_private(appName);
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ namespace Utility
|
|||||||
OWNCLOUDSYNC_EXPORT QString octetsToString( qint64 octets );
|
OWNCLOUDSYNC_EXPORT QString octetsToString( qint64 octets );
|
||||||
OWNCLOUDSYNC_EXPORT QString platform();
|
OWNCLOUDSYNC_EXPORT QString platform();
|
||||||
OWNCLOUDSYNC_EXPORT QByteArray userAgentString();
|
OWNCLOUDSYNC_EXPORT QByteArray userAgentString();
|
||||||
OWNCLOUDSYNC_EXPORT void raiseDialog(QWidget *);
|
|
||||||
OWNCLOUDSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName);
|
OWNCLOUDSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName);
|
||||||
OWNCLOUDSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString& guiName, bool launch);
|
OWNCLOUDSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString& guiName, bool launch);
|
||||||
OWNCLOUDSYNC_EXPORT qint64 freeDiskSpace(const QString &path, bool *ok = 0);
|
OWNCLOUDSYNC_EXPORT qint64 freeDiskSpace(const QString &path, bool *ok = 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user