* Fix various spaces vs tabs issues
* Rewrite
- to use instance variables consistently
- to not make shared state explicit instead of relying on
class variables of a common base
* Fix reconnecting to an oC client.
Occasionally on Windows ~DiscoveryMainThread() triggered a crash.
Probably because the QMutableLinkedListIterator was destroyed after
it's underlying data had been removed (from the map).
Cleaning up the map and lists was redundant anyway, so the
destructor is changed to only explicitly destroy the vio_file_stat
objects.
The _listeners list is destroyed before the _localServer.
And since _localServer is the parent of all generated QLocalSockets,
they get destroyed in turn - which triggers onLostConnection() and
thus accessed the destroyed _listeners list.
To avoid that, delete all active QLocalSockets in SocketApi before
its members are destructed.
We also now delete sockets when we're done with them. I think
disconnected sockets would otherwise linger until SocketApi destruction.
Otherwise we run into "can't upload because it's too recent" issues
when the folder watcher triggers a sync.
We used to do this, but my recent refactoring started counting the
time since the last sync against this minimum delay, leading to
1ms delays in practice. This fixes the regression.
* When folder config is used, other folder definitions are always
removed.
* Fix a bug with the wizard becoming stuck when 'skip folder config'
is used.
* Use a shared pointer to Account everywhere to ensure
the instance stays alive long enough for a sync to terminate
* Folder is now tied to an AccountState
* SyncEngine and OwncloudPropagator tie to an Account and use that
for all jobs they run
Issue: Since the setup wizard currently always replaces the
account, it will always wipe all folder definitions, even when
the actual changes to the account were minor.
This allows all the account state information to live in gui
while the sync-relevant data stays in libsync.
I also moved quotainfo to gui since it depends on the account state.
The account state is now managed mostly by the Account itself
instead of through Application. The gui can still control whether
an account is signed out or not.
* Stop the quota job from having an effect on account status
as it can sometimes take a long time to reply. See #2485 and
owncloud/core#12744.
* Instead of indirectly using the quota job, use the connection
validator to regularly ping the server with a basic PROPFIND for
'getlastmodified' on /.
This request was usually fast for users even when the quota PROPFIND
was slow.
Previously when a sync failed, we'd retry very soon (30s) no matter how
often a sync had failed before. After this change we'll retry twice and
then back off to the regular 5min interval.
In e5269a4151 I moved the reset calls to
before the first bindValue() because we didn't consistently reset()
after exec().
However, some queries may keep a lock on the database so it is necessary
to reset() as soon as the data is read. This commit reintroduces these
reset() calls.
There also was a bug in syncjournaldb: in some error conditions the
sql query wasn't reset properly. We now always reset a query before
calling bindValue.
* If a 416 is returned and we used a Range header, try again
from scratch.
* The direct URL logic was also inconsistent for resumed downloads:
it sent the Range header but didn't check the returned
Content-Range header correctly. Now resuming is disabled for
direct URL downloads.
If lastEtag was null, a force sync was triggered. Force syncs
don't update the etag. The etag retrieval job would only run if
lastEtag was not null. So it could never become non-null.
Use the right check to determine whether a file has a blacklist entry,
SyncFileItem::FileIgnored was incorrect because that denotes files from
the ignore list or blacklisted files with no retries left.
The blacklistedInDb flag does the right thing. Rename it to
hasBlacklistEntry to be more explicit.
In some owncloud server setups multiple concurrent connections for the
same session are not supported: owncloud/core#11153
This causes issues with multiple uploads and downloads. A usual symptom
is the quota job failing and the sync aborting.
This workaround lets activity on the propagator's GET and PUT jobs
reset the timeout of all network jobs. That way, queries like the quota
job would not time out while a large up/download is in progress.