Else, if we reconfigure when the folder is syncing, it may be impossible to
sync again.
This happens for example when changing the password when the folder is
syncing
If the file is changed between chunk, it is easy and we can just retry as the
file has not been changed on the server.
But if the file is changed after it has been updated on the server, we must still
update the database with the etag. (and possibly delete the partial file)
Relates to issue #1002
All public function must lock the mutex. And therefore none of the journal
function may call public function because the mutex is already locked.
So have a public commit that lock the mutex, and a private commitInternal
that assume the mutex is locked
Such as:
Error opening the db: "Driver not loaded Driver not loaded"
or
QSqlDatabasePrivate::removeDatabase: connection '...' is still in use, all queries will cease to wor
We need to clear the QSqlDatabase _db handle before calling removeDatabase.
And we also need to give a different name to different folder database, just to be sure
Normally, the fileid comes with the PUT or the GET.
If it did not comes with the PUT, it means the server do not support
fileid, we should not query it with a useless HEAD.
Also, in case the fileid changes (which it should not) update anyway
to the new fileid in the db
We don't want to fetch the file id in the propagator.
Revert "Put item member variable to base class."
This reverts commit f7aa2aa348.
Revert "Add isValidFileId and getFileIdPropget methods."
This reverts commit ccd254abba.
This is required for the fix for #713
Since the module properties are shared in global variables shared by
every folders, removing another folder may clean the proxy settings.
So we need to restore them at every sync
"Fake conflicts" happen when the etag changes on the server, and the
mtime changes on the client, but the actual file is still exactly
the same. We correctly detect them as false conflict and we do not
generate the conflict file for them.
But we should also update the local mtime to the server mtime so future
sync don't get confused.
Those are files that were detected as "resolved conflict".
They should have been a conflict because they both were new, or both
had their local mtime or remote etag modified, but the size and mtime
is the same on the server. This typically happen when the database is removed.
Nothing will be done for those file, but we still need to update the database.
Add different classes of error failures.
Fatal error means the sync should be stopped.
SoftErrors are not to be displayed to the user.
We still need to make a classification of the errors.
The entries should be sorted chronogically. But now the QTreeWidget can
only sort them alphabetically by the time, which is not what we want.
Disalbe the sorting, and always insert the elements in the reverse
order.
Fix#890
Before, we saved the geometry in the closeEvent which is only called if
the user press the [x] in the title bar. But it is not called when the
user accept the dialog (by pressing the close button or the enter key)
So save the geometry in the destructor of the dialog instead.
One also must call delete from the Application destructor because it was
leaking
If the user really want to have those entries excluded it can add them
manually.
But one cannot change the default so if user want the .bak files synced,
he would not be able to do it
As shown on this backtrace:
=13334== Invalid read of size 8
QCoreApplication::postEvent(QObject*,QEvent*, int)
Mirall::ownCloudInfo::slotReplyFinished()
[...]
==13334== Address 0x1afb91d8 is 8 bytes inside a block of size 16 free'd
operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
QNetworkAccessManager::~QNetworkAccessManager()
Mirall::MirallAccessManager::~MirallAccessManager()
[...]
Mirall::ownCloudInfo::setNetworkAccessManager(QNetworkAccessManager*)
Mirall::ownCloudInfo::setCustomConfigHandle(QString const&)
Mirall::OwncloudSetupWizard::slotAssistantFinished(int)
[...]
Mirall::OwncloudWizard::basicSetupFinished(int)
Mirall::OwncloudWizard::slotCurrentPageChanged(int)
[...]
QWizard::currentIdChanged(int) (in
Mirall::OwncloudWizard::successfulStep()
Mirall::OwncloudSetupWizard::finalizeSetup(bool)
Mirall::OwncloudSetupWizard::slotAuthCheckReply(QString const&,
[...]
Mirall::ownCloudInfo::ownCloudDirExists(QString const&, QNetworkReply*)
Mirall::ownCloudInfo::slotReplyFinished()
The QNetworkManager was destroyed in a slot connected to a signal emited
by slotReplyFinished, but we did not finish with the QNetworkReply yet.
Fix the crash by using QueuedConnection so the QNetworkAccessManager is
not destroyed before slotReplyFinished has completed.