* Add missing element of shared folder DB tie values to idsFaked when using --dry-run
* Ensure that bad entries of '.*' are not added for 'skip_dir' to align to 'skip_file'
* Update application messaging on what configuration option to use to skip .files and .folders
* fix: database inconsistency due to unassigned variable
* fix: more debug logging, setting sharedByFolderName to Email as fallback
---------
Co-authored-by: Daniel Schiffner <d.schiffner@dipf.de>
Co-authored-by: abraunegg <alex.braunegg@gmail.com>
* Fix application crash after deleting file locally by removing a TOCTTOU (Time-of-check to time-of-use) race condition when deleting a file.
* Improve inotify removal messaging when exiting application to avoid confusion
Newer libcurl releases (8.12.x and above) default to HTTP/2 via ALPN, causing the WebSocket RFC6455 handshake to fail with "code:3, message: Bad request".
This change forces HTTP/1.1 and disables ALPN/NPN on WebSocket connections, restoring correct 101 Switching Protocols behaviour.
* Add option to remove source folders when using --upload-only --remove-source-files
* Parental path will only be removed if path is empty - that is, no other folders or files present
* Force DNS Timeout when forcing a libcurl fresh connection which will force DNS resolution as stale cache internally in curl is not being released
* Fix that 'online' state is correctly set if Internet access is not available at startup when using --monitor
* Curl 8.14.1 (or maybe earlier) has changed output messaging when curl exceptions are raised. This has caused the curl exception handling / retry handling to fail due to unable to match error log output.
* Add an exception fallback to ensure retry interval is enforced in case of unknown CurlException event
* Update calculateBackoff() function to prevent integer overflow
* OneDrive Personal and Business supports the relocation of Shared Folder links to other folders. Fix the support of relocated shared folders for OneDrive Personal
* If the file is a very short lived file, and exists when an initial exists() check is done, but then is removed shortly thereafter, we need to catch this as a filesystem exception
* Ensure that post successful download, the resumable offset point is reset to avoid `HTTP request returned status code 416 (Requested Range Not Satisfiable)` if the offset point is not reset and curl engine reused for another download
* Implement resumable downloads (FR #2576) by using a state JSON file to track download progress and resuming the download from that offset, post validation of:
* offset point is where the local point is at
* hash has not changed online, thus file has not changed online in-between failed download
* Clarify caution message about using bad curl versions to remove ambiguity and clarify that other bugs, not related to HTTP/2 will still impact operational use of this client
* Add new 'sync_list' rule test to evaluate only inclusion rules
* Test path against inclusion rules
* When scanning for new data, before traversing to that directory ensure that the directory is actually included when using 'sync_list' rules
* Handle the local scanning of new data when 'anywhere' sync_list rules exist
* Only traverse into local directories to test if these should be included for monitoring, if parent path is excluded but 'include anywhere' rules exist
* Add a check for a paging token error due to potentially data changing online?
* Add missing lowercase conversion from Issue #3336
* Ensure that items that are 'matched' via 'sync_list' - ensure that these if they are a directory, are added to the database so that paths can be built
* If a JSON object is a 'remote' item, ensure the Shared Folder DB entries are created as early as possible so that paths can be built
* Update calculation of ETA values to guard against incorrect Unix Epoch / time skew impacting calculation outcome.
* Use common function for ETA string calculation for upload|download operations to avoid negative values
* Fix foreign key issue when performing a --resync due to a missed conversion of driveId to lowercase values (#3336) and path is covered by 'sync_list' entries
* Handle inconsistent OneDrive Personal driveId casing across multiple Microsoft Graph API Endpoints by ensuring that where ever there is a use of a driveId for a comparison, ensure the value to compare has been transformed to 'lowercase' to avoid the situation where Microsoft Graph API sends the driveId as 'lowercase' in one API response and 'UPPERCASE' in other responses.
* Revert back to v2.5.5 performSessionFileUpload() and apply minimal change for upload session offset handling to prevent desynchronisation on large files
* Add specific 403 handler for when the upload session URL itself expires
* Add 'file_fragment_size'
* Clean up debug logging output
* Add 'tempauth' to spelling words
* Update documentation URL's
* Ensure that on each fragment upload, whilst the application is using the 'tempauth' for session upload, the global OAuth2 token needs to be checked for validity and refreshed if required
* Add limit check for 'file_fragment_size' option
* Add to default 'config' file
* Update documentation for 'file_fragment_size'
* Add 'file_fragment_size' to --display-config output
* Add --file-fragment-size option to enable use via Docker option
* Add to manpage
* Update Docker entrypoint
* Update Docker | Podman documentation
* Update logging output to include connection method to URL
* Update Upload Session URL expiry update to include UTC and LocalTime values
* Update comment which was dropped / missed
* Clarify that this is the OAuth2 Access Token
* Clarify that the expiry timestamp is localTime
* Update PR with dynamic use of fragment size if fileSize > 100MiB
* Enforce multiple 320KiB for fragment size to align to Microsoft documentation
* Fix Docker entrypoint and confirm working for ONEDRIVE_FILE_FRAGMENT_SIZE
* Change 'defaultMaxFileFragmentSize' to 60
* Revise fragmentSize calculation to be as close to 60 MiB as possible without breaching Microsoft documented threshold
* Fix that when searching for a parent object online, if the object cannot be found, handle the 404 error response.
* If a 404 response is generated, we have no response JSON to process