"Your socket connection to the server was not read from or written to
within the timeout period."
I can't reproduce these reliably, so this is fairly untested, but it
seems to work. It backs off exponentially when the error occurs, and
halves the delay on successful requests.
Eventually all 50x file sync errors should also be retried
automatically, but that can't really happen in 4.0.
OS.File doesn't seem to work reliably before Firefox 23, so older
versions will continue to do mod time checking on the main thread.
Zotero.Sync.Storage.checkForUpdatedFiles() now returns a promise.
Deleted files are purged at the end of every sync, without any delay.
(If there's a conflict, it will be resolved before the file is deleted.)
Orphaned files are deleted once every 10 days, since it's a potentially
expensive operation for the server.
- New promise-based architecture
- Library-specific file sync queues, allowing other libraries to
continue if there's an error in one library
- Library-specific sync errors, with error icons next to each library
- Changed file uploading in on-demand download mode, which had been missing
- On-demand download progress indicator in middle pane
- More accurate progress indicator
- Various tweaks and bug fixes
- Various future tweaks and bug fixes
Can choose to download files "at sync time" or "as needed"
On-demand defaults to on, but remains off for existing users
To-do:
- Handling of local and remote file changes on on-demand download
(currently if a file exists it isn't downloaded, which means a
remotely modified file won't be redownloaded in on-demand mode)
- Additional control over file downloading and retention
Other changes:
- Overhauled entire file syncing architecture
- Replaced numAttachments column with Note and Attachment columns with
dynamic icons to indicate status
- Double-clicking a parent with a missing best attachment and on-demand
downloading off no longer loads the parent URL
- Bugs
- Reenable WebDAV orphaned file purging (currently once every ten days)
Also:
- Create pref of appropriate type automatically in Zotero.Prefs.set() if one doesn't exist
- Zotero.Utilities is now a singleton
- Zotero.Utilities.HTTP is now Zotero.HTTP
- Zotero.Utilities.md5 and Zotero.Utilities.Base64 are now located under Zotero.Utilities.Internal
- Zotero.Utilities.AutoComplete has been eliminated
This needs testing to make sure there is no associated breakage.