-
Notifications
You must be signed in to change notification settings - Fork 131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rename: thumbnail glitches #141
Comments
Related? owncloud/core#31268 |
I've been looking at this and:
- (BOOL)requestImageForSize:(CGSize)requestedMaximumSizeInPoints scale:(CGFloat)scale withCompletionHandler:(void(^)(OCItemThumbnail *thumbnail, NSError *error, CGSize maximumSizeInPoints, UIImage *image))completionHandler So there is no thumbnail image for this image. Also, I've taken a look at the implementation and the this is the call sequence the app does to get the thumbnail from the SDK: if item.thumbnailAvailability != .none {
_ = core!.retrieveThumbnail(for: item, maximumSize: self.thumbnailSize, scale: 0, retrieveHandler: { (error, _, _, thumbnail, _, _) in
_ = thumbnail?.requestImage(for: self.thumbnailSize, scale: 0, withCompletionHandler: { [weak self] (thumbnail, error, _, image) in
if error == nil,
image != nil,
item.itemVersionIdentifier == thumbnail?.itemVersionIdentifier {
OnMainThread {
self?.thumbnailImageView.image = image
}
}
})
})
}
I've checked if there is some core!.retrieveThumbnail(for: item, maximumSize: self.thumbnailSize, scale: 0, retrieveHandler: { (error, _, _, thumbnail, _, _) in and there is no signal of error, even the thumbnail is not nil. I'm missing something here or doing the wrong calls @felix-schwarz ? |
Maybe related: I've seen old iOS app and Android app show thumbnail of already downloaded |
- Adding extensive logging around thumbnail code utilizing tags - Fixing app issue owncloud/ios-app#141
Fixed from the SDK side as of owncloud/ios-sdk@1c59788 Fix for aspect ratio on the app side still missing. |
As of 4ce416e, the aspect ratio is fixed in the app, too. |
- Adding extensive logging around thumbnail code utilizing tags - Fixing app issue owncloud/ios-app#141
Tested with the latest App's master and SDK's develop branches and it's fixed. |
Current not compiling together |
@felix-schwarz what should be used? |
@jesmrec @michaelstingl Yes, the develop branch contains breaking changes as of a few hours ago. If you want to test against the current Alternatively, you can try with |
Fixed in |
…ugfixes (#200) * - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Switching to fix/sdkUpdates branch * Version Bump to 91 * Delete unneeded workspace file ownCloud.xcworkspace/xcshareddata/ * Version Bump to 92 * Version Bump to 93 * - Update ios-sdk to latest ios-sdk master
* - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Switching ios-sdk to updated master branch
* - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Switching ios-sdk to updated master branch
* - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Switching ios-sdk to updated master branch
* Added UIViewController extension allowing to swap tabBar for toolbar * Hiding ‘more’ button when cell is configured for edit mode * Laid down the foundation for multi-selection and related actions * Multi-selection works with “Move” and “Delete” actions * Re-added upload button * Exchanging tab-bar with toolbar not animated * Fixed margins for devices with safe area guides (iPhoneX etc.) * Avoiding visual glitches by adding a toolbar in a proper position in the view hierarchy * Showing upload button only when appropriate * exclude app ownCloudTests from lint rules (#186) * Add notification to update version numbers on oc.org/download (#201) * [feature/fp-series-2] File Provider improvements (#167) * - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Switching ios-sdk to updated master branch * Version Bump to 99 * [tx] updated from transifex * Added several languages (#231) * Added the languages cs_CZ de de_DE en_GB ko mk nb_NO nn_NO pt_BR pt_PT ru sq th_TH zh_CN * Fixed a compilation issue because CZ file * Updated the commit of the SDK * [tx] updated from transifex * Version Bump to 100 * Copy action (#207) * - Made the Copy action. - Fix some UI Color scheme inconsistencies. * - Made the 'Copy here' button respect the original title * - SDK Update * - Fix for a lint warning * Offline behaviour in Open In Action (#227) * -Add proper message when no connection and user tries to make the open in action * - Localize the error message. * - Made the name of the app to be the app's name in the bundle * - Changed the three dots bar button in the file list to a '+'. (#206) - Made UISegmentedControll to be Themeable. * Version Bump to 101 * [tx] updated from transifex * [tx] updated from transifex * Laid down the foundation for multi-selection and related actions * Multi-selection works with “Move” and “Delete” actions * [feature/fp-series-2] File Provider improvements (#167) * - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Switching ios-sdk to updated master branch * - Added th-TH to the .tx config (#241) - Updated the th translations pushed recently to the right folder - Updated the commit of the library * Added the tx link to contribute on trnslations (#245) * Version Bump to 102 * Laid down the foundation for multi-selection and related actions * Multi-selection works with “Move” and “Delete” actions
* - Minor memory optimizations - Updated to latest SDK * - Save changes prior to merge with master * - Convert to Swift 4.2 * - Further Swift 4.2 changes * - Update to latest SDK develop commit * - Adapting APP to latest SDK changes - maintenance mode support - replacing uses of reachability monitor with OCCore.connectionStatus * - Added back ownCloudUI.framework to copy phase of ownCloud target - Updated to latest SDK * - Add support for OCLogToggle in Settings - App now logs current log settings at launch * - Fix issues in ClientQueryViewController related to UITableView not reloading when its view controller is not "visible": - no longer uses items from table view cells to initiate actions - detects if UITableView.reloadData is set to do nothing and repeats the call in viewWillAppear - The fixed issue was causing #178 and possibly others * - Remove last traces of OCMocking.framework from ownCloud app target, make sure it's only built, linked to and copied in the ownCloudTests target * - Fix EarlGrey/CocoaPods workspace / build errors * - Adopt new OCLogger tags APIs in Log.swift and FileProviderExtension * - Update SDK * - Remove superfluous [FP] from log message * - Make sure DisplayViewController uses the updated version of an item after downloading it instead of the (now) outdated original version * - Update to latest SDK * - Fixing thumbnail aspect ratio and removing duplicate code in NamingViewController (#141) * - Update SDK * - Exit editing mode in the server list when the user selects an existing or adds a new bookmark (as reported by @mneuwert) * - Adapt app code base to change in OCError Swift conversion (following OCErrorAuthorizationCancelled typo correction) * - Fix #152: if the user cancels OAuth2, an error is no longer shown (and errors are better to read with recent SDK updates) * - Update to latest SDK * - Make ProgressSummarizer only consider Progress objects with descriptions, resolving "ghost" progress bars without any information in them * - Adapt to change of name of OCConnectionIssue to OCIssue * - Update to latest SDK - ConnectionIssueViewController - added option to provide a block to be called when dismissal has finished - normalize code formatting - UIAlertController+OCIssue - added option to provide a completionHandler that's called when the user made a choice - ClientRootViewController - switched issue and alert presentation to use a AsyncSequentialQueue to present them in order and not on top of each other - fixed a bug where a UIViewController that's in the process of being dismissed led to a failure to present alerts and issues * - Make DisplayViewController use OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable and fix a typo (#179) * - Added priority summaries to ProgressSummarizer - Fixed a crash bug in ImageDisplayViewController - Removed core connection status interpretation from ClientQueryViewController - Added core connection status tracking to ClientRootViewController and utilize priority summaries to display offline or server in maintenance mode status messages * - Fix an issue where "Offline." was shortly shown when logging in - Switch to utilizing short connection status descriptions coming straight from the SDK's connection signal providers - Adapt Localizable.strings accordingly * - Add *.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist to .gitignore * - Updated ios-sdk * - Made FileProviderEnumerator use an OCQuery that includes the root item (fixes #203) - Made FileProviderExtension observe the domain property and trigger an initial query of the root directory when none has even been done before (fixes #205) * - Adapted to latest round of nullability additions in the SDK - Fixing potential crash bugs in DisplayHostViewController, ConnectionIssueViewController, SortMethod and others - Update actions - make use of .completed() instead of calling the completionHandler directly - fixing multi-item support for several actions (completionHandler would previously get executed once for every item instead of once) - ClientDirectoryPickerViewController now calls the completinHandler even on cancelation - Cleaned up OCIssue+Extension and OCItem+Extension - Replacing AsyncSequentialQueue with OCAsyncSequentialQueue * - Update SDK * - Updated ios-sdk * - Update ios-sdk with IPC fixes * - Adapt tests to SDK changes (all tests pass) - Stop CocoaPods from sending statistics by adding a line to the Podfile turning this off * - Present cache contents while waiting for a reply from the server - Updated SDK fixing a lot of issues * - Replacing DispatchQueue.main.async* with OnMainThread and a newly added OnMainThread(after: timeInterval) * - Add verbose logging to FileProviderExtension to track the commands received by iOS and the results that were returned * - Temporary workaround: make importFileFromURL: not return directly with the placeholder, but only when upload has completed - and then return the final item * - Updated to latest SDK with OCLocalID support - Updated FileProvider to use OCItem.localID and OCItem.localParentID instead of the fileID equivalents - Updated importFile method to take advantage of localID staying the same even across placeholder -> item on the server transition - creating new documents is now possible without Internet connection and waiting for the upload to finish - progress information can again be made available to iOS * - UI test update - decrease fragility of most tests - minor reorganization of source code - added new utility methods to EarlGrey to wait until an element appears or disappears before proceeding * - Update SDK to latest * - Adding libzip 1.5.1 - external/libzip/update-libzip.sh allows simple updates - external/libzip/libzip.xcodeproj wraps libzip into a standard Xcode framework project that's reusable across extensions and the app - added license text to acknowledgments in the app - Adding ClientActivityViewController - new tab in ClientRootViewController - POC-level display of activity information - Fileprovider - supports on-the-fly compression of Pages and Keynote documents moved to ownCloud File Provider from iCloud (#235) - rejects import of any other bundle documents - prevent use of the broken "Duplicate" action in the Files app * - Added ClientActivityCell - Updated ClientRootViewController to properly support Themeing - Added progressColors to ThemeCollection - Added ProgressView for circular display of indeterminate progress, progress info and cancellation - Added UIColor.greyscale() method * - Client Query View improvements - inline download and upload progress indicators - tapping an item no longer immediately opens the viewer - instead, tapping an item now triggers a download - when multiple items are tapped in quick succession, only the last one's file is shown when the download finishes - added inline cloud status badges for cloud-only and local-only to indicate file status - Switch from Swift-KVO to legacy-KVO in ProgressView due to https://bugs.swift.org/browse/SR-6795 :'( - removed SwiftLint rule - Latest SDK * Included the ownCloudTests shared scheme * Fixed the test testCheckURLBasicAuthWarningIssueCertificateDisplayInfo * - added design resource - updated SDK - various fixes to make progress observation in ProgressView and ProgressSummarizer thread-safe * Modified the test testCheckURLBasicAuthWarningIssueCertificateDisplayInfo * Remove the test testCheckURLBasicAuthWarningIssueCertificateDisplayInfo * - Make general-purpose version of EarlGrey.waitForElement extension that allows waiting not just for elements with accessibilityIdentifiers - Re-add CreateBookmarkTests.testCheckURLBasicAuthWarningIssueCertificateDisplayInfo() - Fix CreateBookmarkTests.testCheckURLBasicAuthWarningIssueCertificateDisplayInfo() using EarlGrey.waitForElement to address the timing issues that made it fail * - Updated SDK - Improved "double-tap" behaviour: if an item is tapped, it starts downloading. If it is tapped again while still downloading, the viewer is only opened once. * - If a file is not immediately available and can't be downloaded either, the DisplayViewController is now shown anyway for error feedback * - cleaned up DisplayHostViewController - cleaned up DisplayViewController and improved its error handling - updated DisplayViewController to use a single-item OCQuery to update its contents dynamically - minor code cleanups and adaptions to DisplayViewController changes in other places * - Update SDK * - ProgressView resumes animation after removing and readding the view, and after switching away and back to the app - Fixed broken German localizations I noticed * - Clarify name of refreshControl in ClientQueryViewController - Block drag-to-refresh if the core status is not .online - Fixed an issue in DisplayViewController that prevented updates after the file was moved remotely * - Add libzip to THIRD_PARTY.txt - Switch to updated ios-sdk master * - Fix visual glitch in progress reporting
* - Added OCBookmark.userName convenience method - Added privacy-masking-sensitive "Host" and "User" tags to OCConnectionQueue - Added test coverage for OCBookmark.userName * - Regrouping Thumbnail code into OCCore+Thumbnails - Adding extensive logging around thumbnail code utilizing tags - Fixing app issue https://github.com/owncloud/ios-app/issues/141 * - Fix OCErrorAuthorizationCancelled typo (which happens to also remove "error" from all Swift conversions) * - Add additional OAuth2 debug logging and log tag support * - Add OCSyncAction.localizedDescription and OCSyncAction.actionEventType so that OCSyncRecord can populate its progress object with a description right from the start - Add descriptions and event type information to all Core Actions - Add OCAuthenticationMethodOAuth2 support for mocking the OAuth2 web UI via the ownCloudMocking.framework * - Revert access change to OA2 internal data - Add description to OCSyncAction - Make OCSyncRecord no longer attach the action's description to the NSProgress object automatically * - Rename OCConnectionIssue* to OCIssue* * - Separate OCIssue from OCConnection on a file basis * - Add OCSyncIssue and OCSyncIssueChoice - Extend OCSyncAction with OCSyncIssue APIs - Start OCSyncRecordStatus class * - Reorganizing Core source files - Adding OCIssue+SyncIssue to create OCIssue instances from OCSyncIssues - Added syncRecordID and metaData to OCSyncIssue - Added nullability annotations to OCSyncRecord - Added convenience methods to OCSyncAction to create and throw OCSyncIssues in one go - Added resolveIssue:withChoice:context: method to OCSyncAction to handle user choices and implement default implementation for cancel and retry - Added resolveSyncIssue:withChoice:completionHandler: method to OCCore Sync Engine to handle user choices - Added resolvedSyncIssue: method to OCSyncContext * - Adding OCProcessManager and OCProcessSession as a way to determine the status of other processes in the same app group (=> helping identify stuck sync records down the road) - Added OCErrorSyncRecordNotFound - Added OCSyncContext.issueResolutionContextWith: - Added SyncEngine performOnSyncRecordID:operation:compeltionHandler: API - Added OCBlockingReason classes - Started reworking OCSyncRecord around the concept of opaque blocking reasons rather than trying to manually check if all kinds of blocking reasons still apply inside the Sync Engine itself * - OCConnection improvements - draft for OCConnectionJobID based request tracking (OCConnection+Jobs) - NSProgress extension to transport OCConnectionJobIDs - OCEvent improvements - userInfo dictionary is now OCEventUserInfoKey-typed - adding OCEventUserInfoKeys that are frequently used - new API to create raw events - OCCore - clarify ItemUpdate terminology and block types - Logging - new OCLogPrivacyMasking protocol to allow classes to provide a custom, privacy-masked description when wrapped in OCLogPrivate - Sync Engine - evolve the OCBlockingReason concept into OCWaitCondition - evolve OCEvent handling - make event delivery an integral part of the engine - now queued and delivered as part of the sync record processing - allow for arbitrary event routing inside OCSyncActions - OCWaitConditions can listen, modify and catch OCEvents destined for their OCSyncActions - OCCoreSyncInstruction allow more SyncActions to direct Sync Engine routing - used for scheduling, event and result handling - ability to express: - continue processing - stop processing - repeat processing - delete the processed sync record and continue - continue processing with next record - remove allowsRescheduling as its no longer needed - evolved OCSyncRecord state tracking - clarified naming - added additional states - state transitions are almost exclusively controlled by OCSyncActions now, allowing more flexible processing graphs - OCSyncIssue - allow persisting issues - wrapped in an OCWaitCondition - takes care of presenting the issue or picking a solution (for UI-less apps) - repeats presentation if the app last presenting the issue is no longer present and no choice was made - OCSyncAction - new method for handling issue choices - new method for handling the user cancelling the action - OCSyncRecord and OCSyncContext improvements - helper methods to simplify state transitions - ability to queue and merge new OCWaitConditions on state transitions - resultHandler calling now handled by new methods that also ensure the resultHandler isn't called twice (doing away with confusing invokeResultHandler-parameters) - OCCore+SyncEngine - reorganized and rewrote a lot of code and changed the processing flow to structurally support and carry the improvements - new -processWithContext:block: method for uniform, reusable support of OCSyncContext features across the various OCSyncAction methods - API changes designed to encourage - adapted all OCSyncActions to use new features and flow - cleaned up and consolidated various APIs - fixing various bugs - OCDatabase - new scheme for OCEvent persistance to increase crash resistance (usage by OCCore TBD) - new scheme for keeping track of OCConnectionRequests to increase crash resistance and cross-process integrity (usage by OCConnection TBD) - enhanced SELECT query builder with LIMIT support - new, more efficient iterative API for traversing sync records - OCSQLite - keeps track of statements and frees their resources before closing (fixing a sporadic crash) - improved tests with calls to close the database (fixing sporadic crashes) * - Add debug message about undelivered events if Sync Engine has finished processing while any events are still undelivered and no processing is scheduled yet - OCCore.processSyncRecordsIfNeeded now registers an activity - Fix incorrect handling of issue resolution results by the Sync Engine - Correct several nullability annotations - Fix several potential crash bugs found through static analysis - Removing OCWaitConditionPendingUserInteraction - Removing unused, commented-out code * - OCCore is now longer sending a nil error and nil issue to the delegate upon successful connection * - Add OCCoreOptionReturnImmediatelyIfOfflineOrUnavailable support to OCSyncActionDownload - When specified, OCSyncActionDownload returns with error OCErrorItemNotAvailableOffline if the connection != online and a local copy doesn't exist * - Added signal mechanism to the OCConnection system - signals are simple strings of type OCConnectionSignalID - turning them on and off triggers request scheduling in all OCConnectionQueues of an OCConnection - OCConnectionRequests can require that a set of signals must be on before scheduling the request - a set of signals to be used for all actions can be provided to OCConnection via its actionSignals property - clean and efficient way for OCCore to inform OCConnection about connection status changes - can change order of execution of requests. Exception: when using group IDs, order is preserved. - Added instruction mechanism to OCConnection and OCConnectionQueue - provides the ability for delegates to react to finished requests - currently supported instructions: deliver (=> as before), reschedule (=> re-insert the request into the queue without result handling) - OCCore now uses the signal and instruction mechanism to detect maintenance mode across all requests and efficiently reschedule requests for actions as needed - Other changes - request/response logging no longer consumes resources when logLevel is not debug - clarified OCConnectionRequest.downloadedFileIsTemporary - added support for rescheduling to OCConnectionRequest - fixed typos - fixing an issue in OCSyncActionDownload that led to database entries not getting updated - new type for OCWaitCondition options: OCWaitConditionOptions - made OCWaitCondition a top-level SDK item as it may be useful other purposes in the future * - Adding OCCoreNetworkPathMonitorSignalProvider to replace OCCoreReachabilityConnectionStatusSignalProvider on iOS 12+ - Regrouping signal providers and moving everything ReachabilityMonitor-related into one folder (for easier removal in the future) - Add support for allowing/disallowing cellular data usage: - property OCConnection.allowCellular provides easy read/write access to the setting - new "connection.allow-cellular" MDM/ClassSettings option - New OCCore.connectionStatusShortDescription property - a property to provide a short, more precise/verbose description of the current state of the signal provider (f.ex. distinguish between "offline" (no network) and "offline (no WiFi connection)" when cellular is not allowed) - based on extension of OCCoreConnectionStatusSignalProvider with .shortDescription - Fix a potential bug in OCCoreManager.requestCoreForBookmark - Update CONFIGURATION.md * - Added OCTypedCast macro to check a type before casting and assigning it - disabled OCCore.automaticItemListUpdatesEnabled for all tests in CoreSyncTests to speed up execution (previously, it would wait for the last auto-update request to finish$ - made sure the credentialsStorage, cache and cookie storage for both background and ephermal sessions are turned off via NSURLSessionConfiguration - added OCEvent persistance - new events are persisted to the SQLite database before delivery - added new methods to OCDatabase - revised and included schema for events table - added databaseID to OCEvent so events track their row in the table - added NSSecureCoding compliance to classes delivered in OCEvents like OCHTTPStatus, OCImage, OCItemThumbnail - a cached copy of the OCEvents is memory to preserve ephermal elements - on crash or app termination, persisted events are delivered on next login and eternal Sync Journal blocking is prevented * - Fix request body debug logging (now logs the body) * - Added -[OCCore renameDirectoryFromItem:forItem:adjustLocalMetadata:] to migrate existing local copies from placeholders to real items after creation on the server - Fixed several OCEvent-related warnings with OCTypedCast - Added OCItem.previousPlaceholderFileID property for handling item replacement with dependant sync actions in the future - Added -[OCItem copyFilesystemMetadataFrom:] and -[OCItem copyMetadataFrom:item except:] for streamlined creation of item copies / cloning of fs metadata properties - Updated OCSyncActionCopyMove - added preflight support for immediate updates - now providing placeholder items as needed - now performs renames and cloning of local copies as needed - added deschedule support for cleaning up in case of errors - OCSyncActionDelete now deletes local copies, too - Added support for OCItem.previousPlaceholderFileID to OCSyncActionCreateFolder and OCSyncActionUpload - Add TODO to OCSyncActionUpload regarding usage of new OCCore API * - Add code to NSURL+OCURLNormalization to remove multiple trailing slashes - Complete first implementation of cross-process change notification and handling - Improve error handling in -[OCDatabase retrieveCacheItemsAtPath:itemOnly:completionHandler:] * - Ensure OCEvents are - if possible - handled in the process they originated from: - Updated events table schema to version 2 - added new processSession column to track the originating process - added loss-less migrator from v1->v2 - Updated OCDatabase event interface - -[OCDatabase queueEvent:forSyncRecordID:completionHandler:] saves processSession alongside OCEvent - extended -[OCDatabase nextEventForSyncRecordID:afterEventID:] method to - check if event originated in process - check if originating process - or a new instance thereof - is still running - return the next event in the queue if so - Added new method to OCProcessManager to return the latest session for a provided process - Added convenience methods to serialize/deserialize OCProcessSessions * - added OCCore.setupSyncEngine/OCCore.shutdownSyncEngine as hooks for use during starting and stopping of an OCCore - currently used to add and remove an IPC notification observer that triggers sync record processing across processes - added [OCProcessManager isSessionWithCurrentProcessBundleIdentifier:] and [OCProcessManager isAnyInstanceOfSessionProcessRunning:] and documentation comments to standardize detection of same process and if a process with a particular bundle ID is running - added OCSyncRecord.originProcessSession - adapted sync record processing so that sync records are executed on their originating process whenever possible, triggering processing across processes using notifications if necessary * - [OCConnectionRequest.scrubForRescheduling] now also removes downloaded files (NSURLSession wouldn't overwrite existing files!). Solves issues like this: - Navigate to download - Switch on maintenance mode - Start download while mm is not yet detected => downloaded error message to file - Switch off maintenance mode - File is downloaded but not used, because the file already exists * - Added OCCore.vaultInitializedForBookmark and OCCore.rootURLForUUID to detect if a vault already exists * - Added OCAsyncSequentialQueue (+ unit tests) - Added nullability annotations to - OCKeychain - OCCertificate - OCCoreManager - OCIssue - OCFile - OCEvent - OCEventTarget - OCVault - OCQuery - OCItem - OCBookmarkManager unit tests - OCBookmarkManager now removes all bookmarks from memory if loading bookmark fails - OCCoreManager unit tests - OCConnection no longer requests "D:quota-available-bytes" and "D:quota-used-bytes" in PROPFINDs to achieve smaller responses - all item list retrievals are now using the background queue - fixed a bug in background queue item list retrieval error handling - major changes to item list tasks - now scheduled on an async sequential queue so only one is executed at a time - background auto-update now uses regular item list tasks instead of their homegrown, parallel flavor of them - detection of changed directories now encompasses all item list tasks, not just the ones scheduled by background auto-update - item list tasks are now queued and coalesced ahead of scheduling if possible - OCCoreItemListTask now performs inline cache updates if possible to avoid re-requesting a PROPFIND that's already up-to-date - Adding missing completionHandler calls to OCSyncActionCopyMove - OCSyncActionUpload now registers upload progress with the OCCore - Add debug logging to the OCIPNotificationCenter - Fix issue in [OCCertificateDetailsNode certificateDetailsViewNodesForCertificate:withValidationCompletionHandler:] where the validationCompletionHandler would be called twice - Add convenience methods to OCTestTarget to create user and admin bookmarks - Fixed bug in [CoreSyncTests testSyncAnchorQueryUpdates] test - Add test coverage for fixed "trailing slashes" bug - Uploads now support setting the modification date of the uploaded item * - Add OCWaitForCompletionWithTimeout() macro - Fix issue where OCConnection.serverLongProductVersionString returned a string even if no information was available - OCCore+ItemList: if duplicate item list tasks are detected, they are no longer reported as bugs. Instead, the queries attached to them are updated immediately. - OCCore+ItemList: background update checks are now properly registered as activity, fixing NULL database bugs when stopping an OCCore with autoupdates enabled - Test updates - OCConnection - added test for status request and parsing - OCCore - disable automatic updates for most tests to speed them up - adding test for overlapping OCQueries, ensuring they're handled correctly - adding test for item updates (incl. verification by PROPFIND!) covering favoriting/unfavoriting an item * - The OCItem.removed property is now recovered for items requested via -[OCDatabase retrieveCacheItemsUpdatedSinceSyncAnchor:..], fixing a major glitch in IPC change propagation - IPC change notification are now sent only after the transaction has settled * - [OCCore _replayChangesSinceSyncAnchor:] now detects items that were moved from one folder to another and adds a .previousPath to the OCItem accordingly, fixing an cross-process update issue when moving files between folders * - Added concept of "non-critical requests" - new APIs: - on the request level: OCConnectionRequest.isNonCritial - on the queue level: OCConnectionQueue.cancelNonCriticalRequests - on the connection level: OCConnection.cancelNonCriticalRequests - on the connection option level: OCConnectionOptionIsNonCriticalKey - non-critical requests are requests where - if they aren't executed at all - nothing breaks - allows connection to cancel certain scheduled requests to allow for faster shutdown - Setting priority of PROPFIND and action requests to high to make faster scheduling by iOS more likely - Thumbnails are now request with default priority (instead of "low") - Improve error handling in -[OCConnection prepareForSetupWithOptions:completionHandler:] when receiving a 200 response that's not JSON (fixing several unit tests broken by goo.gl changes) - Added more metadata to debug log output in OCConnectionQueue to help debug taskID issues - Added proper error logging to OCKeyValueStore (previously just failed silently) - Added debug capabilities around -[OCCore beginActivity:] and -[OCCore endActivity:]. Calling endActivity more often than beginActivity will now log an error. - OCCore now takes advantage of OCConnection.cancelNonCriticalRequests for faster shutdowns - IPC change notifications are now coalesced and dispatched only after both the OCCore queue task and current database task have ended. Also cleaned up the code around OCCore.postIPCChangeNotification. - Fixed a bug in -[OCCore renameDirectoryFromItem:toItem:adjustLocalMetadata:]: if the name didn't change, existing data on local copies was not transferred over - Fixed a bug in OCCore+ItemUpdates where the skipDatabase-flag wasn't properly passed on - Added missing IPC change notification calls to OCCore+ItemUpdates so that changes that originate outside a sync action are also propagated to other processes - Cleaned up OCCore+ItemList and removed activity begin/end calls as the requests originating here will be terminated automatically on shutdown thanks to being tagged as non-critical requests - Fixed an issue in OCSyncActionCopyMove where issues would not be presented immediately, but only after logging out and in again - Add additional delays to CoreManagerTests to allow the autorelease pools to flush * - OCCoreManager will now wait for previous instances to fully shut down before creating new OCCore instances for the same bookmark - Added CoreManagerTests.testConcurrentReturnAndRequest to validate the change with a unit test - Fixed an issue with activity tracking in OCCore being postponed that could lead to premature shutdowns - Added additional debug logging to OCCore start/stop methods - Made sure background updates are no longer scheduled when the OCCore is in the process of shutting down - Re-added tracking of background updates as activities - Added reachability unit tests for pre-iOS 12 devices * - Introducing OCLocalID - an ID issues locally by the SDK for every item that does not change for the lifetime of the item (including transitions from placeholder to item on the server) - added OCItem.localID and OCItem.parentLocalID properties (+ serialization/deserialization) - added +[OCItem generateNewLocalID] for the generation of new localIDs - updated OCSyncActions - greatly simplified OCSyncActionUpload as files no longer need to be moved when transitioning from placeholder to item on the server - updated OCDatabase - updated metadata table schema with localID column - updated syncRecords table schema with localID column - updated methods accordingly - new OCDatabase.itemFilter API to run on all items as they are added, updated and removed from the database - updated CoreTests and CoreSyncTests - added localID sanitizer to the OCDatabase of all tests (using new OCDatabase.itemFilter feature) - updated all tests to verify that localIDs stay intact across actions and queries - update OCCoreItemList to also offer sets and dictionaries of items by localID - drafted new API for OCSyncAction to alllow coalescing of unexecuted sync records using the localID as connecting element - upgraded query updates to detect moved files using the localID of an updated item - changed FileProvider-related methods to use the localID instead of the fileID as NSFileProviderItemIdentifier * - Make OCBookmarkManager.bookmarks a non-mutable array * - Fix duplicate item issue (placeholder + item from server) in case of copying a folder while a query retrieves the copied file briefl before copying returns - Switched OCSyncExec / OCSyncExecDone to semaphores for increased efficiency - Extended TestTools.databaseSanityCheckFilter with dumping the creation history stacktrace of items raising an error * - New activity tracking subsystem - OCActivityManager - keeps track of activities - coalesces updates for maximum performance - relays activity information to main thread - OCActivity - describes an activity with description, status message, progress - provides cancel option - can contain an OCIssue for error resolution - OCActivityUpdate - encapsulates activity update information - allows publishing and unpublishing activities - allows update of individual activity properties - simplified creation of OCActivity objects and updates via the OCActivitySource protocol - OCConnection - trying to upload a non-existant file now results in an error - extended internal error checks in uploadFileFromURL: - OCCore+ItemList - experimental supply of activity information for background updates - OCCore+LocalImport - addition of a import transformations - used by the FileProvider to transform select bundle document formats into ZIP archives on the fly - OCSyncRecord - adding OCActivitySource conformance * - OCActivity - fill API gaps - implement missing pieces of OCSyncRecordActivity - OCCoreItemListTask now is an OCActivitySource, OCCore+ItemList now emits activity updates - OCCore - use localID instead of fileID to track progress on a per-item basis - now posts OCCoreItemBeginsHavingProgress and OCCoreItemStopsHavingProgress notifications when an item starts having progress, and when the last progress has completed for an item - add localID property to NSProgress - Sync Engine - OCSyncAction now properly serialized/deserializes the localizedDescription - gated access to OCDatabase for adding, updating and removing SyncRecords, used to emit activity updates * - Add OCItem.cloudStatus computed property indicating the cloud status of the item - Fix OCCore progress tracking bugs * - OCCore - fixed order in which progress is removed and the observers on progress are removed - made sure observers aren't removed from inside -observeValueForKeyPath: - OCSyncActionDownload and OCSyncActionUpload - now registered the sync record's progress instead of the connection's * - Sync Engine - changed cancellable flag of NSProgress objects for all actions, so that only up- and downloads are cancellable until the other actions fully support that - sync engine now blocks the OCCore queue while running - added sync journal dumps before and after entering processing, and after the processing of every journal entry (debug log-level only) - Upgraded most table schemas - especially metaData and syncJournal - from "INTEGER PRIMARY KEY" to "INTEGER PRIMARY KEY AUTOINCREMENT" to avoid the reuse of IDs by SQLite (including migrations) * - OCCore+ItemList - preserve LocalID (and local copies) when files are moved on the server by looking up the fileID of supposedly new items (previously would create a new localID for the moved item) - new OCDatabase method for retrieving items with a particular fileID, even it is was previously marked as deleted (quite common with certain move operations on the server) - OCCore+ItemUpdates - fixes for single-item queries - single-item queries now also use LocalID in addition to the path - Bookmarks - OCBookmark: new OCBookmarkUpdatedNotification notification so any part of the SDK can request that a particular bookmark's data be persisted if necessary - OCBookmarkManager: now listens for OCBookmarkUpdatedNotification and saves the bookmark if it receives a notification for a bookmark it manages - OCConnection: posts OCBookmarkUpdatedNotification if users approve a changed certificate so the changes are persisted * - OCCoreServerStatusSignalProvider - new name for OCCoreMaintenanceModeStatusSignalProvider - added handling and automatic recovery from "Connection refused" errors with custom status message - OCConnection - extension of delegate method for connection request instructions - OCCore - check for "connection refused" errors, reporting and automatic recovery using OCCoreServerStatusSignalProvider * - Single item queries: take into account that if items are moved on the server, and they haven't come into view at their new location yet, they may temporarily appear as removed * - Add nullability information to OCSQLite classes and blocks * - Added support for cross-process sync record activity reporting - Removing unused OCConnectionQueueTrustAction - Beginning implementation of OCConnectionPipeline * - New OCProgress class for restorable progress information * - Refactor OCConnectionRequest -> OCHTTPRequest - Advances in OCConnectionPipeline -> OCHTTPPipeline * - Background activity fix for OCConnectionQueue scheduling timed requests - Removing OCJobID - Advanding OCHTTP - dedicated response object OCHTTPResponse - OCHTTPPipelineTask to keep track of OCHTTPRequests (=> pending cleanup) - OCHTTPPipelineBackend to persist scheduled requests and responses - OCSQLite - new executeOperationSync-method (use with caution) to synchronously run SQLite operations - new OCSQLiteNullProtect() and OCSQLiteNullResolved() macros to simplify SQLite request and response handling * - OCHTTP - add completionHandlers for attaching and detaching - add block-queuing method to avoid locking as much as possible - implement task scheduler in pipeline - add support for more operations to OCHTTPPipelineBackend - move OCHTTPPipelineTaskState to OCHTTPTypes - OCProcessManager - added new -[OCProcessManager findLatestSessionForProcessWithBundleIdentifier:] to find OCProcessSession by bundleID - OCSQLite - added nextRowDictionaryWithError method for more flexible traversion of the result set * - Move X-Request-ID option from OCConnection to OCHTTPPipeline - interim, OCConnectionQueue uses OCHTTPRequest.identifier as X-Request-ID - OCHTTPPipeline will exclusively handle X-Request-ID going forward, and may also use it to identify OCHTTPPipelineTasks for NSURLSessionTask - update CONFIGURATION.md accordingly - OCHTTPPipeline - allow partitions to provide an error to fail requests with when they don't meet signal requirements - added mocking support to delegate similar to OCConnectionHostSimulator - added comment with proposal for OCHTTPPolicy to clean up authentication, certificate validation and response error handling and make it independent from OCConnection and OCConnectionAuthenticationMethod. Not for now, but had to save the idea for future refactors - added initial OCProgressResolver, OCClassSettingsSupport, OCLogTagging support - added method to destroy a partition for removing all data and requests associated with it (=> for destruction of bookmarks) - added "requiredSignals" support and updated group handling to account for this - initial implementation of -scheduleTask: method - added finishedRequest:withResponse: method, underlining the new concept of a separate response object - new OCHTTPPipelineTaskCache can keep a cached copy of pipeline tasks in memory - now used by OCHTTPBackend to boost performance and achieve lower memory overhead - OCHTTPRequest - cleaned up OCHTTPDAVRequest and OCHTTPRequest instance variables and properties - added .requestProgress property that takes and persists a OCProgress object - removed unused .bookmarkUUID - marked .urlSessionTask and urlSessionTaskIdentifier with TO-REMOVE - clean-up of OCHTTPRequest method parameters - OCHTTPResponse - new init methods clarify usage - OCProgress - add .userInfo for storing custom information that helps an OCProgressResolver provide the NSProgress object - added additional init method to create one from a path and progress * - OCHTTPPipeline "1.0" - OCHTTPPipelineManager - manages access to the pipelines, starts and stops them as needed - handles requests from the OS to finish URL sessions - full implementation of the class including features like: - isolation of requests by partitioning - support for grouping - signal requirements - conditional rescheduling - certificate caching - "final" requests that can be scheduled at any time - shared backend storage and cache - fully managed NSURLSession, incl. - automatic detection of dropped requests - progress-recovery - background URLSession event handling - OCHTTPRequest / OCHTTPResponse upgrades - clear separation of request and response objects - removed NSURLSession internals - now using OCProgress to make progress info recoverable - removed system activity - ephermal result handler for OCHTTPRequest gains pipeline-level support (previously managed by OCConnection) - extensive test coverage - Removed OCMockTestClass from ownCloudMocking.framework (now only in test target) - Progress tracking advances - OCConnection now returns OCProgress objects instead of NSProgress objects - switch OCSyncRecord's progress tracking from NSProgress to OCProgress to make it persistable and recoverable - implemented support for OCProgress recovery to OCCore, OCCoreManager, OCHTTPPipelineManager - added standardized progress restoration / registration support to OCSyncAction - progress for items and activities is now restored after a relaunch of the app - new OCProgressManager acts as a central OCProgress resolver - added cancellation support to OCProgress - Revised OCConnection connectivity model using these pipelines: - ephermal: for requests whose response is only interesting for the instance making them (f.ex. login, status, PROPFINDs) - command: for requests whose response is important across instances (f.ex. commands like move, delete) - long-lived: for requests whose response may take a while (like uploads, downloads) or that may not be dropped - not even temporarily - Refactored classes for the structural OCHTTPRequest/OCHTTPResponse upgrades, OCConnectionQueue removal and replacement with OCHTTPPipeline - OCAuthenticationMethod - OCAuthenticationMethodBasicAuth - OCAuthenticationMethodOAuth2 - OCConnection - OCConnection+Authentication - OCConnection+Setup - OCConnection+Signals - OCConnection+Users - OCCore+ConnectionStatus - OCCore+FileProvider - OCHostSimulator - OCSyncActions (all) - OCVault - all tests - Removed OCConnectionQueue and OCConnectionQueue+BackgroundSessionRecovery (fully replaced by OCHTTPPipeline) - Fix OCActivity nullability annotations - Fix OCAppIdentity.keychain crash - Added OCSQLiteDB.runLoopThreadName attribute to allow sharing one runloop thread across OCSQliteDB instances - OCQuery gains KVO-observation support for hasChangesAvailable - Eased OCCoreManager locking a bit - Update OCSyncRecordActivity for OCProgress - Foundational changes * - Add missing fields to OCHTTPRequest serialization/deserialization - Add OCVault.temporaryDownloadURL since NSTemporaryDirectory() may vanish/change between relaunches - Make OCSyncActionDownload use OCVault.temporaryDownloadURL for downloads => all together fixes issue where file finished download after restart, but was then lost - Increase waiting time from 20 seconds to 120 seconds to HTTPPipeline tests (adapting to much slower CI) * - OCCoreManager: slimmer, simplified internal design and requestCore API to address occassional dead-locks - Adding missing completionHandler calls in OCCoreManager.scheduleOfflineOperation calls - Adapting ownCloudMocking and tests to the change - Added OCHTTPPipelineManager.setupPersistentPipelines to allow keeping pipelines open for the lifetime of the process - Add pipelineID to OCHTTPPipeline log tags for more clarity * - OCHTTPRequest no longer creates high-priority NSURLRequests (=> this led to very fast timeouts) - OCHTTPPipelineTask requestData and responseData are now read-only, as they don't need to be written to in practice - Made HTTPPipelineTasks more resilient against slow test system performance / network (longer delays, higher-performance demo download URLs) * - Removed OCKeyValueStore as it is no longer used - Further adaptions of HTTPPipelineTests for low-performance CIs * - OCConnection changes - changed pipeline attachment from "as early as possible" to "lazily" and "manual" - avoids dispatch of events before the recipients are ready to consume them - new methods spinUpPipelines, attachToPipelines and detachFromPipelinesWithCompletionHandler - proper handling of upload cancellations - removed OCConnection+Jobs (cleanup) - OCCore+ItemList - background check for updates no longer registers an OCCore activity - speeds up shutdown - OCSyncActionDelete - OCErrorItemNotFound no longer brings up an issue - OCSyncActionUpload - proper handling of cancellations - Progress tracking - new OCProxyProgress helper class allows reuse of NSProgress (previously crashed with an exception when trying to add a NSURLSessionTask.progress object as child of another NSProgress more than once) - Fixed crash due to OCSyncContext.refreshPaths being an "assign" instead of a "strong" property - Security - use of NSFileProtectionCompleteUntilFirstUserAuthentication to protect user data until first user authentication - Logging - "weakSelf" variant of OCTLog macros: OCTWLog * - Prevent OCVault usage while vault is closing * - Extend SQLDB.maxBusyRetryTimeInterval in testCounterPrimitiveHighDistributedConcurrency test to not time out as easily in slow CI environments * - Authentication improvements and fixes - moved authentication availability handling from OCHTTPPipeline to OCConnection, using the new OCConnectionSignalIDAuthenticationAvailable signal as vehicle - removed OCHTTPRequest.skipAuthorization. Going forward, if a request should be authenticated, it needs to require the OCConnectionSignalIDAuthenticationAvailable signal - fixed -[OCConnection URLForEndpointPath:] bug where the endpoint was always applied as absolute, not relative, fixing OAuth2 bookmark generation issues with servers located in subdirectories (fixing https://github.com/owncloud/ios-app/issues/274) - fixed issue in OCAuthenticationMethodOAuth2 where data returned by a token refresh was saved, but not used (the auth secret flush was missing) - added unit tests for OAuth2 - generation of OAuth2 bookmarkData - detection of expired OAuth2 token and multiple refresh - Fixed simulator bug in OCHTTPPipeline: requests handled by the simulator are now properly updated as "running" - Added new -finishPendingRequestsForPartitionID:withError:filter: call to OCHTTPPipeline to selectively finish requests with an error - application/x-www-form-urlencoded encoded bodies are now also included in full by OCHTTPRequest.requestDescription and OCHTTPResponse.responseDescription * - provide sharing information via OCItem - new properties: ownerDisplayName, shareTypesMask, isShareable, isSharedWithUser - adapted PROPFINDs and added parsing code to fill the sharing info into the OCItem - add sharing info to OCItem.description - OCXMLParserNode now supports multiple values for one key - during parsing, if more than one value is found for one key, the value is turned into an array of values - key-value enumeration calls the parseBlock once for every value a key has - now supports now automatically creates an array of values - new - memory: minor memory footprint improvement creating PROPFIND requests - beautification - turn OCCoreConnectionStatusSignal into a proper NS_OPTIONS bitfield - turn OCItemSyncActivity into a proper NS_OPTIONS bitfield - moving around code in OCItem to structure it better * - OCConnection support for retrieving shares - added date parser and formatter for compact UTC format (used in sharing) - XML parser for share information - addition of shares and remoteShares (federated) endpoints - addition of -[OCConnection retrieveSharesWithScope:forItem:options:completionHandler:] - single method to retrieve shares in different scopes: - shares for items shared by the user - shares for items shared with the user - pending cloud shares - accepted cloud shares - shares for the provided item itself (current user only) - shares for the provided item itself (all, not just current user) - shares for items contained in the provided (container) item - minor cleanup of DAV request creation code - addition of OCGroup and OCRecipient classes - OCUser nullability annotations and cleanup - expansion of OCShare class to account for all properties supported by a share - Property / ivar cleanup and extension if OCXMLParser with a userInfo dictionary - Started implementation of sharing retrieval test (for TDD) * - Add NSDate.compactUTCStringDateOnly and adjust NSDate.dateParsedFromCompactUTCString format string to no longer include a timezone (server always sends 00:00:00 for the time) - Added stubs and dev documentation for - [OCConnection retrieveShareWithID:options:] to retrieve known shares - [OCConnection createShare:options:resultTarget:] to create new shares - [OCConnection updateShare:afterPerformingChanges:resultTarget:] to conveniently update an existing share - [OCConnection deleteShare:resultTarget:] to delete a share - [OCConnection makeDecisionOnShare:accept:resultTarget:] to accept or reject a federated share - added new OCEventTypes for sharing-specific events - Implemented creation of shares via [OCConnection createShare:options:resultTarget:] - extended OCSharingResponseStatus to also provide access to any message from the server - created OCShareSingle parsing helper OCShare subclass - refactored share parsing to handle recurring error sources like response HTTP status, parse errors, etc. - refactored retrieveSharesWithScope - implemented retrieveShareWithID - added new OCError codes for sharing-specific errors - added password property to OCShare - added new constructors to OCShare helping with creating OCShare objects to pass in for creation - Added verbose debug descriptions for OCShare, OCRecipient, OCGroup, OCUser - Added unified identifier and displayName property to OCRecipient - Added additional accessors to OCUser to manage remote users (federation) * - Implemented updating shares (with auto-detection of changes and convenient auto-splitting in multiple updates) - Implemented deletion of shares - Implemented accepting and rejecting of federated shares - Added HTTP PUT body URL-encoding support to OCHTTPRequest - OCShare XML parsing: ensure itemPath conforms to OCPath convention that directories end with a "/" (share XML paths differ from PROPFIND paths in that regard) - Added federatedBookmark, federatedTargetURL, federatedLogin and federatedPassword to OCTestTarget - Added unit tests for creation, retrieval, updating and deleting public shares * - Add OCMocking support for - -[OCConnection connectWithCompletionHandler:] - -[OCConnection disconnectWithCompletionHandler:invalidate:] - Add additional server compatibility checks - improve detection of unsupported servers - increase minimum required server version to 10 * - Added extended -[OCConnection retrieveItemListAtPath:depth:notBefore:options:completionHandler] method to retrieve item lists with options - Added differentiation between query and background item list tasks to OCCore+ItemList and made it use the new group option - Added groupID property support to OCCoreItemListTask - Added OCRateLimitter to the Toolkit - OCCore now rate-limits IPC change notifications to max one per 0.1 seconds to reduce IPC load during initial scans of large accounts - OCLogger now only enables OCIPNotificationCenter logging if synchronous logging is turned off to avoid delays in execution - Added unit test for testRateLimitter and IPC flooding TDD test * - Fixed bug in OCHTTPPipelineBackend that occured when a NSURLSession re-used NSURLSessionTask.taskIdentifiers before the respective pipeline's queue was empty - retrieval by the unique requestID is now prioritized over retrieval by taskIdentifier alone to address this issue * - Extended OCHTTPPipelineBackend comment - Clarified OCConnectionShareScopeSharedWithUser - Added OCErrorWithDescription macro - Adapted OCShare+OCXMLObjectCreation for differing fields for federated/cloud shares - Added OCShare.mountPoint and OCShare.accepted - Implemented testFederatedSharing to test federated sharing * - Remove legacy draft -[OCConnection shareItem:options:resultTarget:] - Remove legacy draft OCShareOptions - Add OCConnection recipients endpoint OCConnectionEndpointIDRecipients - Add federated share support to -[OCConnection deleteShare:resultTarget:] - Fix -[OCConnection makeDecisionOnShare:accept:resultTarget:] resultHandlerAction - Prioritize provided NSLocalizedDescriptionKey for OCErrors (if provided, only the error code is appended) - Add demo account to OCTestTarget - Greatly increase sharing test coverage with additional and improved unit tests (now at > 91%) * - Add support for sending arrays of values as query parameters to OCHTTPRequest - Add OCConnection recipient search API and unit test covering it almost entirely - Extended OCRecipient with matchType property to indicate exact or additional matches - Made OCShare, OCRecipient, OCUser and OCGroup fully serializable - Sharing + Recipient API comment cleanup - Error message improvements - Simplify DAV error decoding via new OCHTTPResponse.bodyParsedAsDAVError method - Aid server-side error localization - Added support for sending "Accept-Language" headers to OCCore (OCCoreAddAcceptLanguageHeader, enabled by default) - Added OCConnection.staticHeaderFields property to allow adding header fields to every outgoing request - Create Dir action takes advantage of the aforementioned to produce more helpful errors - Improve reliability of MiscTests.testRateLimitter * - added sync engine concurrency concept notes - the item owner is now represented as OCUser - replaced OCItem.ownerDisplayName (NSString) with OCItem.owner (OCUser) - added OCUser instance caching/reuse mechanism to OCConnection + OCItem+OCXMLObjectCreation to minimize memory footprint - made OCUser, OCGroup, OCRecipient and OCShare types comparable and added a hash - implemented NSCopying support for OCUser, OCGroup and OCRecipient * - Introducing OCShareQuery - continuously updated query for shares of a specific scope - scheduled in OCCore - due to lack of alternatives, designed to work with polling in intervals - immediate update of relevant queries if shares are added, updated or removed through OCCore - Introducing OCRecipientSearchController - OCCore-integrated way of searching for recipients - app-friendly interface that does automatic rate limiting and notifies its delegate about start and end of activity and the availability of updates - [OCConnection makeDecisionOnShare:accept:resultTarget:] now returns an error directly if the passed share is not a remote share - Typo fixes in SYNCENGINE.md - Fix typo in OCRateLimiter name - Renaming OCConnectionShareScope to OCShareScope and moving it to OCShare.h * - Streamline OCCore query API: - new OCCoreQuery class is now superclass for all queries (OCQuery, OCShareQuery) - one set of startQuery/refreshQuery/stopQuery for all queries instead of different sets for different queries - Add OCShareQuery.changesAvailableNotificationHandler block-based API similar to that of OCQuery.changesAvailableNotificationHandler - Add OCShareQuery.queryWithScope:item: convenience initializer and related warning and error messages - Add NSCopying support to OCShare class - Add CoreSharingTests unit tests testing the new OCCore sharing APIs - Add convenience XCTWeakSelfAssert macro to OCTestTarget - Fix bugs in - OCConnection.deleteShare when trying to delete a federated share created by the user - OCConnection.updateShare: the share is now copied before invoking the block as to leave the original untouched - OCCore.startShareQuery: starting a share query also leads to it being scheduled for share retrieval - OCCore.makeDecisionOnShare: now properly removes/adds remote federated shares to the respective scope's queries - OCRecipientSearchController: protection about slow, older search results replacing more recent, faster search results - OCShareQuery.queryResults: fix negated if check - Minor code cleanups * - Fix owncloud.org certificate test * - Implement timed polling for updated sharing information - tied to and controlled by OCShareQuery.refreshInterval so that, if no OCShareQuery is running, no polling occurs - designed so that one poll request is sent fro two identical OCShareQuerys, even if they originally have different timing - Make timing for testReachabilityValidHost and testRateLimiter more generous to also pass on test systems under load - Add test coverage for archiving/dearchiving/comparison of OCGroup, OCUser, OCRecipient and OCShare classes - Added missing permissions info to OCShare archiving method * - Capabilities support - added OCConnection.retrieveCapabilitiesWithCompletionHandler API to retrieve capabilities - added capabilities retrieval to OCConnection.connectWithCompletionHandler - added OCCapabilities class to provide structured access to server capabilities (available after connecting from OCConnection.capabilities or OCCore.connection.capabilities) - OCCore now determines the checksum algorithm for uploads based on capabilities returned by the server - Integrated OCShareQuery polling with OCCore core activities, so the core waits for the polling to complete before shutting down - Fixed Static Analyzer warnings * - Fix accidential crash bug - Add OCConnection unit test with 100% coverage * - Support for custom queries - new OCQueryCondition - allows creating complex, nested conditions supporting - comparisons (greater than, less than, equal, not equal) - matching (contains, begins with, ends with) - logic (and, or) - sorting by a single property (sortBy, ascending/descending) - SQLBuilder translates query conditions into SQLite SELECT conditions - Item category translates query conditions into a newly introduced OCQueryFilter inputFilter that determines the relevance of item additions and updates for the query result - new OCQuery initializers that allow building custom queries from: - an OQueryCondition and (optional) OCQueryFilter (for optimized performance) - a OCQueryCustomSource for providing the query result on start and reload and an OCQueryFilter inputFilter to determine the relevance of item additions and updates for the query result - new OCQuery methods for subclassing to build even more customized queries: - provideFullQueryResultsForCore: provides full query results on start and reload - updateWithAddedItems:updatedItems:removedItems: receives all changes from the core to update the query results with - modifyFullQueryResults provides tools for efficient updates / merges (including a cached OCCoreItemList version of the fullQueryResults) - extended OCItemPropertyName with new properties for use with OCQueryCondition (supported OCItemPropertyNames are annotated accordingly) - OCDatabase support - new method can retrieve items from the metaData database for a OCQueryCondition - updated metaData database scheme with additional columns for new item properties - updated metaData database update/add methods to work with the new columns - Added OCItem.lastUsed property that's updated to the most recent date of being opened, saved or modified on the server - adapted sync actions to support the new property - Fixed bug in copy sync action where an existing local copy was cloned, but didn't update the placeholder item with the cloned copy (thanks @mneuwert) - OCCore.h and OCSQLiteResultSet.h nullability annotations improvements * - Add nullability annotations to OCConnection, OCAuthenticationMethodOAuth2, OCSyncContext and improve existing ones in other places (fix Xcode 10.2 warnings) - Increase verbosity of logging around NSURLSession usage - fix static analyzer warnings * - Correct some nullability annotations in OCConnection - Fix crash bug in -[OCCore retrieveLatestVersionOfItem:withError:] - Fix OCDatabase metaData insertion/update bug when no favorite information was set on OCItems - Fix issue in ConnectionTests.testConnectAndFavoriteFirstFile if more than one file is present in the root folder of the test server - Make CoreSyncTests.testCopy test log more verbose - Increase timeouts for some HTTPPipelineTests - Add nullability info to OCTestTarget * - Add compact overview for NSURLSessionTaskMetrics / NSURLSessionTaskTransactionMetrics that requires less space, shows ranges and durations and adds an additional "task creation to task resume" metric (startedAfter) * - Introducing Sync Lanes - enable concurrent actions in the Sync Engine - use Sync Lane Tags emitted by the Sync Actions to build a hierarchy of (in)dependant lanes to avoid conflicts and facilitate consistency - are automatically managed by the Sync Engine - Added Sync Lane Tag support to OCSyncActions and all existing actions - Updated OCDatabase to support creating, updating, deleting and retrieving Sync Lanes and retrieve Sync Records by Sync Lane ID - Various cleanups and bug fixes (including a nil-related crash bug in OCDatabase) * - Creating, updating and deleting a share via the OCCore will now prompt a PROPFIND on the shared item, so that resulting changes to OCItem.shareTypes and OCItem.permissions are propagated back to OCQuerys - Added unit test for the above * - Add OCShare.protectedByPassword property support (incl. test coverage) * - OCConnection: support for customizing PROPFIND signal requirements - OCCore: new "override-reachability-signal" and "override-availability-signal" configuration options to force reachability and availability flags to certain values - OCHTTPPipeline: remove "insert-x-request-id" configuration option as the X-Request-ID is now playing a critical role in correctly routing HTTP responses - update CONFIGURATION.md with the latest configuration option changes * added missing capabilities for public links * - Sync Engine + OCDatabase: fix possible time hole glitches when deleting a sync lane - NSProgress+OCEvent: convert getter/setter methods to properties - OCEvent: remove unused OCEventTypeCreateEmptyFile and adjust OCEvent.h accordingly as to not break existing records - Replace uses of [NSString stringWithFormat:] with [[NSString alloc] initWithFormat:] for quicker release of the created string by ARC - SharingTests: add additional unit test for OCSahre.protectedByPassword * - Introducing Sync Action Categories and Concurrency Budgets - every action belongs to one or more categories - all actions belong to the "all" category - all item actions (delete, move, ..) belong to the "actions" category - all transfer actions (upload, download) belong to the "transfer" category - upload and download actions also belong to "upload" and "download" categories respectively - concurrency budgets limit the number of concurrently executing actions in every category - the fact that actions can belong to more than one group allows flexible configuration of budgets, like f.ex. - a budget on the "transfer" category limits the total number of concurrent up- and downloads - a budget on the "upload" category limits only the number of concurrent uploads - a budget on the "all" category limits the total number of concurrent actions, including up- and downloads. A value of "1" would simulate the limitations of the Sync Engine before concurrency support was added - Added +[OCLogger logsForLevel:] method to make code checking for whether a certain log level is currently logged easier to write and read * - Fixing x-www-form-urlencoded encoding issue in OCHTTPRequest - Adding sharing test that depends on this encoding to work correctly * Adding compacting support: - OCDatabase - supporting multiple calls to open and close - new method to iterate over all items in the cache - OCVault - new method to retrieve the local folder for an item - new method to compact the vault * - Refactor File Provider info, manager & change notification code to reside in OCVault rather than OCCore, to enable update notifications to the Files app also from outside OCCore - Refactor OCCore ipChangeNotificationName to reside in OCBookmark instead - Add new -[OCCore performInRunningCore:withDescription:] method to give code outside of OCCore a way to increase the busy counter and prevent the core from being stopped too early * added additional info for sharing display name, if available * - Adding OCRecipient-support for searchResultName-property and adapt OCConnection+Recipients accordingly * - Sharing improvements - update sharing endpoints to v2 - improve share error message, error handling and add support for status code 200 - fix bugs and improve reliability of sharing unit tests - Add description on frequency/occassions where every endpoint is called * - Switch capabilities and user endpoints to v2.php - Add support for pending local shares: - connection.capabilities.sharingAutoAcceptShare provides info on whether local shares are auto-accepted - OCShare.state provides information on the state of local shares (whether they are pending, accepted or rejected) - an OCShare can be accepted and rejected via -[OCCore makeDecisionOnShare:accept:completionHandler:] (accepted shares can still be rejected by the user afterwards - and vice versa) - extended SharingTests accordingly to test user-to-user pending shares if the test server is using the feature - Fixed crash bugs in sharing methods when share.identifier is nil (now returns errors instead) * Add support for private links - OCConnection - OCConnectionAlwaysRequestPrivateLink option to control whether private links should be requested for all items with regular PROPFINDs (off by default) - new -[OCConnection retrievePrivateLinkForItem:completionHandler:] method - OCCore - new -[OCCore retrievePrivateLinkForItem:completionHandler:] method (only a passthrough to OCConnection for now) - OCItem - new privateLink property - Test coverage for the new feature * - Adding -[OCCore trackItemAtPath:trackingHandler:] to efficiently retrieve known and unknown items with minimized (often zero) network overhead - Added test for the new API * - added missing serialization/deserialization of archivedItemVersion for OCSyncActionUpdate - added numeric values of OCSharePermissionsMask members * - Take change of favorite attribute into account when merging database and server item lists * - Rewriting XML to be more compact, use namespaces better - Add initial implementation of OCConnection REPORT API - add new reportRequestWithURL method to OCHTTPDAVRequest - add new filterFilesWithRules method to OCConnection - add OCHTTPMethodREPORT * - Adding OCEventUserInfoKeySelector: - allow routing of events directly to selectors in OCCore - add -[OCCore _eventTargetWithCoreSelector:userInfo:ephermalUserInfo:] helper method - add CoreTests.testFavoriteRefresh unit test to test both additions and removals of favorite status to items - Adding OCCore+Favorites: - [OCCore refreshFavoritesWithCompletionHandler:] manually fetches the list of current favorites and updates the database + queries accordingly - Add favorite status to OCItem.description * - Make -[OCRecipientSearchController setSearchTerm:] correctly handle being passed nil * - Add OCItem.isRoot * - Turn OCPath.parentPath() into OCPath.parentPath - Add OCPath.isRootPath * - Initial commit * Implemented rotation of logs in SDK (#49) * Started implementation of log rotation * Log rotation implementation - Rotating up to 10 files - Log is switched on DISPATCH_VNODE_RENAME event - Right now logs can reach up to 24 hours in age - The rotation check is performed every 60 s - Moved writer queue to OCLogWriter to allow using it for rotation related dispatch sources * Split out a method allowing to get list of files * Changes required for log-rotation feature - Moved logs into a dedicated sub-folder within app group container - Added methods allowing to permanently pause logging (and resume later) * Done some refactoring for log-rotate - Move log record abstracting class to SDK - OCLogFileRecord - Log deletion in the SDK - Sorting of log records according to creation date * Done some code restructuring * Added notifications emitted when the logs are rotated / archived / deleted * Fixed review findings * Reworked OCLogRecord and simplified code for fetching records * - overhaul OCCore+ItemList - OCCoreDirectoryUpdateJob: new class to track item list task scheduling - OCDatabase: new update jobs table and methods to persist OCCoreDirectoryUpdateJob from background refresh / exploration, ensuring directories are fully traversed even if the app is closed before the initial or subsequent traversals have finished. - improved OCActivity behaviour: background refresh requests are now tracked by a single activity to enable a better UX - database-backed OCCoreDirectoryUpdateJob scheduling and tracking enables to detect when a background refresh is complete and the local metadata database should mirror the status quo on the server - OCLogger: change order that filters are added, so that env-variable-based filtering is performed last * - Add additional OCCore.beginActivity/.endActivity-safeguards for share query loads/reloads - Make OCCore ignore reloadQuery() requests unless the core is in running state - Change OCConnection+Sharing request tag requirements from .actionTags to .propFindTags, so they can be scheduled even if the core is shutting down or has bad connectivity. Previously, OCCore could wait indefinitely on share requests to finish before shutting down because the requests weren't scheduled due to the core shutting down. * - OCDatabase - standardize metadata table item selection SQL query prefix - remove duplicate code in the retrieval of items - add new retrieval method for recursively retrieving all items in a directory - OCSQLite - add NSString+OCSQLTools to escape parameters before building a LIKE condition with it (espacing "%") - OCCore - recursively mark items contained in remotely deleted folders as deleted * - OCSyncActionDelete - now also removes and manages any "associated" items (for directories that's everything contained in the directory) - OCItem - introducing syncActivityCounts, which keep count if the same syncActivity is performed more than once on an item - implemented in a way that additional memory/storage space is only needed to store this if there's more than one - introducing -[OCItem countOfSyncRecordsWithSyncActivity:] to determine the count for a specific sync activity * - OCCapabilities - handle capabilities JSON containing a string for files_sharing.public.expire_date.days by converting it to a number * - OCCore+Sharing: - fixed OCCore leak leading to lockup in poll for next shares - now scheduling PROPFINDs for added, removed or updated shares so queries reflect the changes quickly - fixed behaviour of declining cloud shares: when declining already accepted cloud shares, they are no longer re-added to the pending cloud share results - OCDatabase - fixed retain-cycle in OCDatabase+Schema.addOrUpdateSyncJournalSchema * - Correctly handle local user names starting with an "@" * - Correctly handle local user names ending with an "@" * - Add PKCE support - NSData+OCRandom and NSString+OCRandom to generate random data and random strings using a specific character set - create OCPKCE - adopt OCPKCE in OCAuthenticationMethodOAuth2 - adapt NSURL (OCURLQueryParameterExtensions) to simplify variadic queryString construction - Adapt OCAuthenticationMethodOAuth2 so that subclasses can inject their own endpoint/URI configuration - Extend OCAuthenticationMethodOAuth2 to retrieve user information from the OC server if the OAuth2 token endpoint didn't provide a "user_name" field in its response - Complete first implementation of OCAuthenticationMethodOpenIDConnect - New OCConnection method to retrieve loggedInUser information that supports request modification - Added OCHTTPResponse.contentType convenience accessor - Implement OpenID Connect detection test (disabled for now) * - OCCore - new -[OCCore fetchUpdatesWithCompletionHandler:] API to fetch updates and on completion run a completion handler with result information - OCKeychain - new convenience methods to archive/dearchive objects to/from the keychain using NSSecureCoding - OCProcessManager and OCProcessSession are now exported in the headers - Tests - fix OCTestTarget destinations - new testFetchChanges unit test for -[OCCore fetchUpdatesWithCompletionHandler:] * Name conflicts: resolution and prevention - NSString+NameConflicts: category to - detect duplicate naming styles: - copy: File.jpg, File copy.jpg, File copy 2.jpg, .. - copyLocalized: File.jpg, File Kopie.jpg, File Kopie 2.jpg, .. - bracketed: File.jpg, File (1).jpg, File (2).jpg, .. - numbered: Folder, Folder 2, Folder 3, .. - extract base name and duplicate number - compose new name based on base name, duplicate number and style - new tests covering the category - OCCore+NameConflicts: new method -[OCCore suggestUnusedNameBasedOn:..]: - suggests an unused name based on a given name - suggestions can be suppressed via a filter block - naming style auto-detect, based on - style provided as argument - actual style detected in provided name - returns suggestion and array of unused names - new tests covering the method - new OCCoreOptionAutomaticConflictResolutionNameStyle option - used when importing files, will automatically detect naming conflicts and resolve them using the provided naming style * - Add OCCore+DirectURL, implementing -[OCCore provideDirectURLForItem:allowFileURL:completionHandler] to provide URLs and authentication headers to stream content directly off the server - Extend and refactor OCAuthenticationMethod to allow isolated return of auth headers as dictionary - Make -[OCConnection pathForEndpoint:] return nil for OCConnectionEndpointIDWebDAVRoot if no user info is available - Add unit test for new OCCore+DirectURL method * - Fix hypothetical static analyzer issue * - Add OCCapabilities.longProductVersionString - Extend server version checks to work with server-side option `version.hide` - Adapt OCConnection server version and name methods to use capabilities info instead of status.php info whenever possible - Introduce additional server version check on capabilities during connect * #51 fixed a crash, when favorites will be loaded right after a bookmark (with a large file list) was added * [fix/unauthorized] Improve handling of unexpected 401 UNAUTHORIZED responses in OAuth2 (#53) - Improve handling of unexpected 401 UNAUTHORIZED responses in OAuth2, OCConnection and OCCore - Added OAuth2 token reset instructions to TESTING.md - Added nullability annotations to OCAuthenticationMethod and its subclasses - Turned OCAuthenticationMethod.type/.identifier/.name into real class properties fo…
The text was updated successfully, but these errors were encountered: