Skip to content
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

[FEATURE REQUEST] Always send a language header in all requests #1193

Closed
9 tasks
michaelstingl opened this issue Mar 21, 2023 · 5 comments
Closed
9 tasks

[FEATURE REQUEST] Always send a language header in all requests #1193

michaelstingl opened this issue Mar 21, 2023 · 5 comments
Assignees
Labels
p3-medium Normal priority
Milestone

Comments

@michaelstingl
Copy link
Contributor

michaelstingl commented Mar 21, 2023

Is your feature request related to a problem? Please describe.

Latest oCIS notifications API (/ocs/v2.php/apps/notifications/api/v1/notifications?format=json) responds with translated content. Other endpoints will learn this too.

Describe the solution you'd like

iOS app should always send a language header in all requests which follows the Accept-Language spec:

Describe alternatives you've considered

No response

Additional context

Related:

TASKS

  • Research (if needed)
  • Create branch feature/feature_name
  • Development tasks
    • Implement whatever
    • ...
  • Code review and apply changes requested
  • Design test plan
  • QA
  • Merge branch feature/feature_name into master

PR

  • App
  • Library (if needed)
@michaelstingl
Copy link
Contributor Author

michaelstingl commented Mar 27, 2023

Should already work in the iOS app ✅

@jesmrec please test for v12.0.0 to make it aligned with the Android implementation.

@michaelstingl michaelstingl reopened this Mar 27, 2023
@michaelstingl michaelstingl added this to the 12.0.0-Next milestone Mar 27, 2023
@michaelstingl michaelstingl added the p3-medium Normal priority label Mar 27, 2023
felix-schwarz added a commit to owncloud/ios-sdk that referenced this issue Mar 27, 2023
@felix-schwarz
Copy link
Contributor

This is now fully implemented also for language codes with region/country variants and will be included in the next build.

@jesmrec
Copy link
Contributor

jesmrec commented Apr 4, 2023

last commit in feature/css branch includes the header. Some examples:

how is this set? i mean, i've tested with several languages and variants and i noticed

Language in device Accept-Language
English en
English (UK) en-gb,en
English (US) en
Spanish es
Spanish (AR) es
German de
German (SW) de
German (AUT) de

the variant is not set in all cases, does it depend only on the system language preference?

this is not a problem because all the responses are compliant with the spec, but it took my atention: English (UK) language shows the variant, whereas English (US), German or Spanish don't. @felix-schwarz

@felix-schwarz
Copy link
Contributor

felix-schwarz commented Apr 12, 2023

@jesmrec It depends on the system language preferences and which languages the app is localized in. The OS is asked for the intersection of preferred languages (in System Settings) and languages the app is localized in.

If f.ex. the user picks en-gb for the system - and the app is also specifically localized for en-gb, the Accept-Language header will contain en-gb.

If there is no en-gb variant app localization, the header will use the next best match - likely en.

If the app would not ship with any en localization, en would also not be included in the header.

The idea behind this is to use languages as consistently as possible - and not end up with a mix of languages in the UI.

@jesmrec
Copy link
Contributor

jesmrec commented Apr 12, 2023

That works totally for me. Approved

felix-schwarz added a commit to owncloud/ios-sdk that referenced this issue Jun 21, 2023
* - update CONFIGURATION.json with latest changes and additions

* - OCClassSettings+Metadata: fix sorting of possible values

* - OCHTTP:
	- clarify and extend redirection policies:
		- "forbidden" becomes "handle locally"
		- "validate connection" - triggering the connection validator - becomes the new default
	- extended redirection support in OCHTTPRequest:
		- new maximumRedirectionDepth property to indicate maximum number of redirections to follow
		- new redirectionHistory property keeping track of NSURLs queried as part of redirection handling
- OCConnection:
	- new status validation method +validateStatus:; replace all instances of checks for maintenance mode with it
	- add Connection Validator that kicks in if a HTTP Request with "ValidateConnection" redirection policy receives a redirection response
	- demote OCConnectionTransparentTemporaryRedirect option from "advanced" to "debug", turn off by default
- OCHostSimulator
	- move OCHostSimulator+CookieRedirect from ownCloudMocking to ownCloudSDK/OCHostSimulator+BuiltIn
	- add new "simple-apm" cookie redirection simulating APM Host Simulator Extension and rebuild documentation
- OCCore:
	- enable cookie support by default

* - OCAuthenticationMethod:
	- switch from detection URLs to detection requests
	- use Detection ID to consolidate requests prior to performing them
	- authentication methods now perform a PROPFIND rather than a GET request on the WebDAV endpoint
	- when contacting the bare WebDAV endpoint, the URL is now slash-terminated
- Connection Validator
	- new error code for failed validation
	- preparations for second stage of validation if first stage fails (but commented out for now as it's not clear that's needed and would complicate the implementation by multiplying the possible outcomes)
	- code comment describing how the Connection Validator works
	- handle failed validation like maintenance mode, but with custom error in status line
- add "recovering-apm" Host Simulator that makes bogus redirects for the first 30 seconds, then becomes a "simple-apm" that wants to set cookies

* - OCConnection: make Connection Validator more thread-safe, add rate limiter to avoid excessive retries

* - OCBookmark:
	- allow setting the internally tracked _lastUsername with new method

- OCAuthenticationMethodOAuth2 + OCAuthenticationMethodOpenIDConnect:
	- add headers to prefill user name where available and supported by the server
	- comment out support for OAuth2 due to crashes in the web view in Simulator and on device

* - OCConnection:
	- implement Connection Validator II - following the latest flow diagram
	- update code comments explaining the structure
	- factor out the Connection Validator to its own method

* - OCConnection: Connection Validator cleanup

* - OCConnection: Connection Validator comment clarifications

* - OCConnection + OCHTTPPipeline: add debug output for cancellation of non-critical requests
- OCProcessManager: add additional observation and debug output for tracking app/extension state

* - OCClassSettings: add "categoryTag" generation support

* - OCHTTP improvements
	- centralize management of X-Request-ID header in OCHTTPRequest
	- replace all header field strings with OCHTTPHeaderFieldNames
	- extended and more uniform log messages to make following a request through the OCHTTPPipeline much easier
	- move the majority of debug messages to the verbose level
	- log old and new X-Request-ID when recreating it, to allow connecting the dots
	- avoid requesting the full header dictionary when just interested in a single one
	- log type (Bearer, Basic, …) from Authorization header and only replace the actually confidential part with "[redacted]"
	- add debugging description to OCHTTPRequest
- OCHTTP bugfixes
	- ensure that only one representation (object or data) is kept in an OCHTTPPipelineTask at a time, to avoid inconsistencies
	- drop request data if requestID is changed
- OCLogger
	- migrate privacy mask and log level to OCClassSetting + observation
	- fix bug where log level changes didn't propagate across processes
- OCClassSettings
	- fix bugs related to change notifications timing
	- implement cross-process notifications for user settings
- General
	- move frequently logged debug messages that are very specific and aren't needed 98% of the time to the verbose logging level

* - Turn off HTTP request and response logging toggle by default

* - OCConnection:
	- limit connection validation to same host (fixes conflict with redirects / multi-tenancy)
	- increase security of "allow same host" redirect policy by also requiring same HTTP scheme
- OCCore: -trackItemAtPath:trackingHandler: no longer makes multiple nil calls if an item is not found
- OCLogger: avoid log.log-enabled-components validation error during logger startup
- OCUser: also archive/unarchive _forceIsRemote
- project: update env vars to take lack of http request/response logging into account
- unit tests:
	- fix failing tests
	- tag remaining tests that still fail

* - OCLogger: fix recursive possible values assignment for OCClassSettingsMetadataKeyPossibleValues
- OCHTTPPipeline: check signal requirements for final requests only if there are any signals actually required by the request - or the handler for the partition the request belongs to is around
- OCHostSimulator+BuiltIn: fix incorrect block passing resulting in requestWithCookiesHandler never being called
- unit tests:
	- fix remaining failing tests
	- comment out deactivated tests

* - additional unit test fixes / adaptions to Bitrise performance

* OAuth2:
- add new method -postProcessAuthenticationDataDict: to condense the stored token response to the needed essentials, saving space and steering clear of issues if the token response contains null values that make secret serialization to property list format fail
- factor out access to clientID and clientSecret into methods
- make -sendTokenRequestToConnection:… subclass able
- improved error handling if property list serialization fails

OIDC:
- add support for OpenID Connect Dynamic Client Registration
- on by default for servers offering the endpoint
- including support for expiration, preservation and caching
- add additional error code for client registration failure

HTTP Pipeline:
- factor out User-Agent template composition method to make it available
- extend OCHTTPRequest with JSON-specific method to easily instantiate POST requests with JSON payload

* Update CONFIGURATION.json with latest OIDC additions

* - Authentication: add new OCAuthenticationMethodRequiredUsernameKey option
- OAuth2 / OIDC: add support for new OCAuthenticationMethodRequiredUsernameKey option

* - OCClassSettings: fix crash that could occur if overrideSettings was mutated while being used

* Class Settings cleanup:
- remove "connection-" and "log-" in front of class setting names for OCConnection and OCLogger to avoid duplication like "connection.connection-.."
- update schemes to use the new names
- update CONFIGURATION.json with the changes
- replace configuration documentation in CONFIGURATION.md with a reference to the full documentation in the ios-app repository, as reference in CONFIGURATION.md is no longer updated

* - OCConnection: add dedicated handling for "403 Forbidden" responses to file download requests (enterprise#4338)
- NSError+OCError: add a new OCErrorWithDescriptionFromError macro that allows creating an OCError based on another error with custom description

* Add support for certificate comparisons:
- OCCertificate+OpenSSL:
	- add nullability annotations
	- extend API to compare certificates
- OCCertificateDetailsViewNode:
	- add nullability annotations
	- add support for different types of changes, supporting old and new values, old and new certificates (for certificate chains)
- OCCertificateViewController
	- add support for certificate comparisons, with a "+/- Show/Hide" toolbar button baked right in
	- highlight changes with colors and circled +/- signs

* OCCertificateViewController: only add "Done" navigation button if root view controller

* - provide clearer issue title for certificate changes

* OCHTTPPipeline: fix "UNKNOWN TASK" error for auto-resumed downloads/transfers
- resumable downloads occur when backgrounding the app
- resumable downloads would be rescheduled automatically to complete the download
- by rescheduling, the request got a new X-Request-ID, but that one was never used by iOS
- when iOS returned the response for the resumed download, it came back with the OLD X-Request-ID, resulting in the Pipeline not being able to recognize the request
- result was hung downloads at the pipeline level
- fixed: now avoids recreating the X-Request-ID for resumed requests

* - OCBookmark: add additional diagnostic action that overwrites the certificate with an empty data blob, prompting a certificate warning dialog on next connect

* OpenID Connect: for token refresh, use the client_id and client_secret used at the time the token was registered in the Authorization header, while using the latest registered client_id / client_secret as parameters

* ownCloudUI: show "Show ±" only for certificate diffs with actual differences

* [feature/mdm+branding] SDK version for MDM+Branding app branch (#78)

* - OCConnection+Setup:
	- remove support for auto-detection of OC installations in "owncloud" subfolder
	- no longer alert user of root redirects if they happen on the same host with the same scheme (http/https)
- OCClassSettings:
	- add new DictionaryArray and URLString types
	- add validation support for new types

* OCClassSettings+Metadata:
- also include registered metadata when determining available keys for a settings identifier

* - OIDC Dynamic Client Registration: add support for non-expiring client_id/client_secret pairs via convention

* Add 11.5 section to CHANGELOG.md

* - OCConnection+Setup: rewrite redirect handling during setup with full duplicate control and permanent removal of support for subfolder installs in `/owncloud/`.

* OCConnection:
- Connection Validator: infinite loops detection:
	- increments a counter for the URL whose response triggered a connection validation
	- decrements the counter when receiving a response from the same URL that no longer would trigger a connection validation (bringing it back to 0, ideally)
	- if the response to the URL triggered validation more than 3 times, the response is delivered instead of triggering validation
- Connection Setup:
	- count how often an URL was the target of a redirect during setup
	- if a URL was already targeted more than 0 times (adjustable), declare detection of the server root URL as failed
- HTTP Pipeline:
	- turn certificate missing log message from error into warning, since it is not handled as an error internally, either and can be confusing when debugging

* - OCConnection+Setup: only accept redirects with status 301 to other root folders, fail for all others

* - OCAuthenticationMethod: add additional userInfo key to redirection errors to indicate from where a redirection started
- OCAuthenticationMethodOpenIDConnect:
	- add redirection detection for .well-known/openid-configuration
	- improved error handling
- OCBookmark+Diagnostics: add "Use Origin URL as URL" action to reset multi-tenancy redirection info in bookmarks
- OCConnection:
	- fix recovery from answered redirection warning issues
	- add support for redirections to other hosts (previously a hard error)
- OCCore:
	- pick up certificate rejection errors from OCHTTPPolicyBookmark and present them to the user
	- remove unused attemptConnect method variant
- OCHTTPPolicyBookmark: improved description of errors where a certificate was changed but could not be auto-accepted
- OCCertificateDetailsViewNode: fix a crasher caused by unconverted object types stored in .previousValue

* - Ocean: adapt to SDK API changes, including unit tests
- OCConnection: add fallback option to extractBaseURLFromRedirectionTargetURL:… to return redirectionTargetURL in case no common base path could be found
- OCAuthenticationMethod: replace local fallback with above fallback

* - AuthenticationTests: additional test cases for redirection base discovery

* - OCConnection: support for cleaning up additional redirection target format (+ additional unit tests)

* Add OCLock set of APIs for expiring, coordinated cross-process locks (+ unit tests)

* - OCLock / OCLockManager: make keepAlive more opportunistic to optimize resource usage
- OCAuthenticationMethodOAuth2: use OCLock to secure token refreshs and avoid issue (3) reported in ios-app#886

* - OCHTTPStatus: new .name property to quickly get the name of a status
- OCHTTPPipeline: new HTSum-tagged brief one-line summary of HTTP requests and responses (to be extended)
- OCConnection+Setup: add base URL extraction call to redirection handling for status requests
- OCConnection: Connection Validator now also checks for the same port before it starts
- NSURL+OCURLNormalization: standardized URL port and scheme/host/port comparison additions, nullability annotations

* OCConnection and OCConnection+Setup: change from local comparison of host and scheme to NSURL+OCURLNormalization utility method.

* - OCLogger: fix migration of log level + privacy masking (broken following shortening of the identifiers earlier)

* - OCLogger: add migration path for user setting "log.log-level" to "log.level"

* - improve OCLogger migration code structure

* - NSDictionary+OCExpand
	- NSDictionary category to expand flat keys into hierarchies
	- implemented unit test in MiscTests
- OCClassSettingsFlatSourceManagedConfiguration
	- add detection of changes pushed via MDM and posting OCClassSettingsManagedSettingsChanged notification
	- utilize NSDictionary+OCExpand to support simplified notations of MDM configurations

* - OCBookmarkManager+ItemResolution: add new method to find the OCBookmark that contains a provided OCLocalID
- OCCoreManager+ItemResolution: add new method to request OCCore and OCItem for a provided OCLocalID (build upon OCBookmarkManager+ItemResolution)

* - OCCoreManager+ItemResolution: fix nullability annotation

* Add unit test for ItemRetrieval method(s).

* - OCConnection+Avatars: clarify the method name as it returns data, not the avatar itself
- OCResource
	- initial draft of a universal resource retrieval, caching and version management subsystem
	- design target is to also support local resource generation (like QuickLook thumbnails) and a unified memory + DB cache across all resource types
	- start README.md on this subsystem to create documentation about the concepts along the way

* - OCResource: add concept of a structure description (lesson from thumbnail caching)

* - change to reopen PR

* - Class Settings: add additional implementation check for settings snapshot
- OCLogger: use all OCClassSettings implementing classes when putting together summary

* - NSArray+ObjCRuntime: support additional ways to filter class list
- OCClassSettings: add new, optional includeInLogSnapshot method to opt into the log snapshot (part of log intro)
- OCClassSettings+Documentation: returning all classes that opted into snapshots via snapshotClasses
- OCLogger: use OCClassSettings.snapshotClasses as basis
- other classes: use opt-in macro

* - OCConnection: update OCConnectionRenewedCertificateAcceptanceRule to allow root certificate change from DST Root CA X3 / R3 to ISRG Root X1 / R3
- add unit tests for LetsEncrypt root certificate change

* - OCKeyValueStorage: add APIs for new semantics for shared instances based on URL + identifier and owner
- OCVault: uses new shared semantics to create its KVS, to avoid rapid recreation in contexts where OCVault is only used temporarily, to gain access to its KVS

* - extend changelog with changes for 11.6.1

* - fix crash that occurred on devices if classes were checked for protocol conformance using a regular method call, which triggered class initialization, which - especially for WebKit classes - led to a crash.
- update CONFIGURATION.json with latest changes

* - Change to keep PR open

* OCCore: add class setting to allow configuration of time interval between end of one scan for changes to the next scan for changes

* - OCDAVRawResponse: container for capturing raw WebDAV PROPFIND responses
- add update scan timing logging
- add support for update scan interval (and disable it for now)
- add support for infinite PROPFIND requests, introduce OCPropfindDepth
- OCSQLiteDB: add method to queue blocks on the DB thread
- OCXMLParser: add support for live processing of parsing results and add further abstraction for error and parse result handling
- OCBookmark, OCVault: add methods to prepopulate account databases from infinite PROPFIND responses
- various smaller improvements

* - OCCore+ItemList: scan for changes no longer uses the background URL session to avoid APM redirect issues

* Update CHANGELOG.md for 11.7

* - OCHTTP: add support for streaming responses as NSInputStream (+ prepare for more variants)
- OCConnection: add support for streaming PROPFIND responses
- OCVault+Prepopulation: add methods for streaming metadata and parsing the stream at the same time
- OCBookmark+Prepopulation: add method for streaming prepopulation

* - OCCapabilities: prepare support for new "supportsInfinitePropfind" capability
- OCHTTPStatus: correct spelling of Method Not Allowedc status code

* - add localizable strings for account prepopulation progress messages

* - OCClassSettings improvements
	- extend -keysForClass from documentation to --keysForClass:options: for wider use
	- settingsSnapshotForClasses now uses -keysForClass:options: instead of trying to compile a definitive list of keys itself
	- adapt calling code accordingly

* - fix DAVRawResponseTests comment error

* - support for custom poll interval for changes:
	- through capabilities: mirroring changes from https://github.com/owncloud/client/pull/8777
	- through MDM via `core.scan-for-changes-interval`
	- in milliseconds
	- defaulting to 10 seconds
	- enforcing (and logging a warning) for intervals below a minimum of 5 seconds
	- logging a warning for intervals greater than 60 seconds

* - improved configurable scan for changes poll interval
	- determine effective poll interval only once / initialized core
	- limit logging of warnings and errors to once / initialized core
	- improve wording and verbosity of log messages
	- clean up code

* - rename OCResourceCache to OCResourceStore and add retrieve/store method definiton
- fix build errors in OCConnection+Avatars
- add OCResourceMetadata type
- extend OCResource definition in preparation for storage/retrieval in OCResourceStore
- add resources table definition to OCDatabase
- outlook: plan is to limit resource subsystem to avatars at first, then eventually migrate thumbnails over

* - Browser Session Class: add AWBrowser to simplify configuration for AirWatch browser

* - no longer output "computed: '<null>'" entries for class settings in the LogIntro if it is the only entry for that MDM parameter

* - OCAuthenticationMethodOAuth2: use UUIDString instead of UUID description for lock name
- OCCore+FileProvider: add handling for edge case when the database is not available or not open, preventing a hang
- OCCore+ItemList: implement coordinated scan for changes
	- synchronizes scans for changes across processes
	- prioritizes scans, giving the app highest and the fileprovider second highest priority
	- consolidate related log messages under ScanChanges tag (including PollForChanges and UpdateScan)
- OCLock: add support for trying to acquire a lock and immediately returning with the result, with a new OCErrorLockInvalidated error code in case the lock couldn't be acquired
- OCDatabase: add .isOpened property
- OCSQLiteDB: disable statement caching in minimum memory configuration

* - change "refresh_token" to "refresh token" in English Localizable.strings.

* - OCLocale: modular localization system replacing direct system localization calls
	- OCLocaleFilter: layers that strings run through during localization to allow transformations
		- ClassSettings: allows overriding individual strings with replacements provided through a dictionary from class settings
		- Variables
			- allows replacing {{variables}} with values, or dynamic content from "variable sources"
			- shared instance allows addition of sources and changing variables at runtime
			- provides generally useful variables like app.name
- change OCLocalized() set of macros to call OCLocale, not NSLocalizedString/NSBundle directly

* - OCLocale:
	- fix bug when replacing placeholders with sources
	- add support for passing additional variables via options (+ OCLocalizedFormat macro)

* - OCLocaleFilterVariables: add missing "{{" and "}}" in search term for replacements

* - OCCapabilities: add support for dav > propfind > depth_infinity capability

* - OCItemPolicyProcessorVacuum: fix wrong metadata type for OCClassSettingsKeyItemPolicyVacuumSyncAnchorTTL (bool -> integer)

* - update CONFIGURATION.json
- OCAuthenticationMethodOAuth2: add support for passing username to OAuth2 page
- OCBookmark: add .serverLocationUserName property to aid with server location functionality, including re-authentication
- OCClassSettingsFlatSourceEnvironment: add support for JSON dictionary values
- OCServerLocator:
	- extensible layer that allows to locate the target server URL from a username
	- OCServerLocatorWebFinger: server location using web finger and custom relation http://webfinger.owncloud/rel/server-instance
	- OCServerLocatorLookupTable: server location using a lookup table and patterns
- OCHostSimulator:
	- add new "web-finger" simulator simulating a webfinger server providing server instance relation information
- OCConnection:
	- add OCConnectionSetupOptionKey type
	- allow to pass a username to -prepareForSetupWithOptions: via OCConnectionSetupOptionUserName
	- setup: add support for / integration with OCServerLocator
- OCHTTPRequest:
	- log application/jrd+json bodys in clear text

* - OCSQL:
    - add collation support via new OCSQLiteCollation class, making it as simple as possible to encapsulate and add collations, avoiding string conversions where possible
    - add collation OCSQLiteCollationLocalized (OCLOCALIZED) for "Finder-like" sorting
- OCDatabase+Schema: upgrade schema for metadata to use OCLOCALIZED for item name
- OCLogger: fix duplicate use of tags in _OC_RLOG macro

* - added authentication-oauth2.oidc-fallback-on-client-registration-failure, defaulting to true, to allow the automatic fallback to default client_id / client_secret if OpenID Connect Dynamic Client Registration fails with any error

* OAuth2:
- store token expiration timespan
- if stored token expiration timespan < (safetyMargin + 20) seconds, no longer preemptively refreshes the token within the safety margin

* - reset OCCapabilities to latest version

* - add NSError+OCErrorTools with new method to determine if an error is an authentication error
- OCConnection+Compatibility: improve error handling, adding handling for "Unauthorised" errors
- OCConnection: remove authenticated WebDAV request asking root WebDAV endpoint for D:supported-method-set, instead rely on capabilities to respond with an authentication error if auth credentials are not valid.
- AuthenticationTests: adjust for latest changes in OAuth2 and OCConnection connect

* - OCBookmark: add first-level support for access to the user.displayName with new property userDisplayName
- OCConnection: update .bookmark.userDisplayName (and save it unless it is a working copy with in-memory credentials storage) on every connect, if it was changed
- OCBookmarkManager: fix possible deadlock

* - Snapshot

* - snapshot

* - remove unused OCJobID from code

* OCCore+CommandLocalModification: no longer handle failure of -startAccessingSecurityScopedResource as an error, as that may indicate the inputFileURL is not actually security scoped, not that the file can't be accessed. Fixes enterprise#4934.

* - !! Snapshot !!
- overhaul of Resources concept
- implementation of OCResourceManager, addition of OCResourceManagerJob
- support for automatic (by deallocation) and manual removal and cancellation of OCResourceRequests
- add serialization/deserialization support to OCResource
- OCHTTP: extend documentation, fix sorting bug, add missing status code description

* - milestone: first functioning thumbnail implementation

* - Resources: database storage & retrieval of retrieved resources now working
- OCBookmarkManager deadlock bugfix

* - add OCPlatform
- add OCViewProvider + OCViewProviderContext
- add OCBookmark.avatar property serialized/deserializing to/from data, utilizing OCViewProvider for maximum flexibility, but ensuring OCBookmark can always be serialized/deserialized even if avatar can't be deserialized
- make OCAvatar a subclass of OCImage
- cleanup designed OCAvatar usages
- making progress, thumbnails and avatars now functional through OCResourceManager

* - OCResources
	- add new OCResourceSourceAvatarPlaceholders
	- add new OCResourceTextPlaceholder
	- add per-session and expiry triggers for avatars
	- add new error code OCErrorResourceDoesNotExist that forces clearing the cache and restart a resource manager job
	- add missing parts
- OCUser: add localizedInitials accessor and class method
- OCBookmark:
	- add .user property with a full copy of the OCUser instance from OCConnection.loggedInUser
	- provide fallback OCResourceTextPlaceholder for .avatar if none is set
- OCBookmarkManager: preserve existing OCBookmark instances on reload whenever possible
- OCConnection: keep bookmark.user up-to-date

* - OCBookmark: add more details to documentation regarding OCBookmark.userName
- OCConnection: build WebDAV root URL using loggedInUser, bookmark.user, only then bookmark.userName, addressing https://github.com/owncloud/enterprise/issues/4924

* - add OCBookmark.user property, storing the last retrieved version of OCConnection.loggedInUser
- use OCBookmark.user to compose WebDAV endpoint path (fixing https://github.com/owncloud/enterprise/issues/4924 )

* - OCCoreItemListTask: stop processing if core has shut down in the meantime

* - OCDatabase
	- Schemas: delete existing thumbnails from old thumbnails table
	- Versions: bump database version number to block repopulation of thumbnails table when using old versions
	- remove old thumbnails API
- OCCore: remove old thumbnails code

* - remove unused OCResourceSourceItemIcons

* - remove OCResourceSourceItemIcons.h from SDK header

* - OCCore: remove thumbnail APIs
- OCDatabase: remove thumbnail API
- OCItem: remove unused .thumbnail property
- OCResourceSourceAvatarPlaceholders: upgrade priority from local fallback to instant
- OCResourceManager: detect duplicate resource source additions
- OCResourceSourceItemThumbnails: utilize item.thumbnailAvailability information to avoid unnecessary requests

* - OCConnection+GraphAPI: start of graph API support
- OCConnection: add OCConnectionEndpointIDGraph
- OCGraph:
	- OCGraphContext: context to pass around during graph parsing
	- OCGraphData+Decoder: decodes graph JSON to graph model objects
	- OCGraphObject: protocol for graph model classes to follow
- ocapigen: YAML parser + code generator with advanced capabilities
	- no external dependencies
	- modular design allows implementation of different generators
		- initial implementation for Objective-C / ownCloudSDK
	- divides target files into segments, with support for:
		- locking segments
		- customizing code generation on a per-segment basis
- GraphAPI/GeneratedTypes: initial batch of model headers and implementations, auto-generated by ocapigen

* - use more distinct "namespace" prefix for Graph API model classes, switching from OCG to GA

* - fix typo in header

* - add OCDrive, OCQuota classes
- add OCDrive, OCDriveType and OCSeed types
- OCItem: add driveID
- OCDatabase:
	- add support for storing, updating, retrieving and deleting OCDrives into a new drives table
	- add driveID column to metaData / item table
- OCConnection+GraphAPI: fully implement drive list retrieval, based on GADrive and OCDrive
- OCRecipient: refactor as OCIdentity
- NSError+OCError: add new OCErrorGraphError code for packaging graph errors
- GAGraphData+Decoder: add NSString -> NSURL conversion, block file URLs
- code generator: also create NSSecureCoding en-/decoding code as well as a debug description implementation
- OCMacros: add new OCExpandVar macro to make meaningful debug descriptions easier to write

* - OCCapabilities: add support for spaces: enabled + version
- OCConnection:
	- turn server version + edition methods into properties
	- add new options OCConnectionEndpointURLOptionDriveID and OCConnectionOptionDriveID to pass driveID to endpoint and retrieveItems APIs
	- adopt new driveID options in almost all WebDAV-related methods
	- DirectURL: adopt new driveID option
	- Compatibility: add central drive switch .useDriveAPI
	- Tools: add support for DriveID-dependant WebDAV endpoint URL
	- OData:
		- new generalized support for requesting OData objects (and later to also create, update and delete them)
		- add stubs for a filter string builder for OCQueryCondition
	- GraphAPI: add methods to retrieve drive list and (cached) drives, use new OData APIs
- GraphAPI: fix issue decoding dates without fractional seconds
- OCHTTPDAVRequest: add driveID option to parsing
- OCLocation: new type that encapsulates bookmarkUUID, driveID and path
- OCItem: add .location property
- OCMacros: generalized macros to wrap/unwrap nil values into NSNull objects
- OCDatabase: add API to remove items for a particular driveID
- OCVault:
	- add drive related methods to erase local copies for a particular drive
	- add method to retrieve the root URL for files of a particular driveID
	- adapt existing methods to take an item's .driveID into account

* - add OCLocation comparison support + building tools
- change APIs and internal structures to use OCLocations instead of OCPaths
- adopt OCDriveID and OCLocation throughout core SDK types like OCShare, OCItem and more
- fix comparison with NULL values in generated SQLite WHERE clauses
- extend OCCoreItemList with drive selection

* - use GADrive instead of GDrive in OCDrive API name
- update types from latest yaml, add some "locked" parts in the headers that would otherwise be overwritten
- ocapigen: alphabetically sort forward declared types and includes so they don't change order and cause unnecessary changes

* - OCItem: add driveID to debug description
- OCDrive:
	- add isSubstantiallyDifferentFrom method to quickly determine if the drive description itself has changed in a substantial way (f.ex. id, type, name, davRootURL)
	- add rootLocation property returning the root folder (/) location
- OCDatabase:
	- add drive "seed" column
- OCCore:
	- replace polling of webDAV root for eTag changes with polling of drive list (+ eTag comparison)
- OCCore+CommandLocalImport: include driveID into placeholderItem
- OCSyncActionCopyMove: include driveID into placeholderItem
- OCSyncActionCreateFolder: include driveID into placeholderItem
- OCBookmark: add bookmark-capabilities support, feature flags that can be set, queried and removed
- OCConnection+GraphAPI: update .drives list every time a new, valid list is retrieved via -retrieveDriveListWithCompletionHandler:
- OCConnection+Compatibility: use bookmark capability OCBookmarkCapabilityDrives to determine .useDriveAPI property value
- OCConnection: set drives capability in bookmark during connect
- GADrive: change eTag from NSString to OCFileETag

* - update GA classes from latest libre-graph

* - OCDatabase: fix duplicate/multiple drive entries in OCDatabase
- OCDrive: add .rootETag property to return root eTag (both for flexibility and convenience)
- OCCore: use .rootETag from drives to trigger PROPFINDs on root folders of the spaces, including database-persistance (!)
- OCSQLiteQuery: add support for INSERT OR REPLACE query construction
- GADriveItem: use OCFileETag for .eTag rather than NSString directly

* - initial Data Sources implementation, including initial set of unit tests
- OCCore+ItemList: do not request updates from drives that do not have an ETag (assume a temporary malfunction)
- fix unit tests compilation errors: convert from OCPath-based APIs to OCLocation

* - NSArray+OCFiltering: utility category to filter arrays efficiently using a block
- Data Sources progress
	- CONCEPT.md: gives an overview over the thinking and structure behind data sources
	- OCCore+DataSources: APIs for core-provided data sources
	- OCDataItemPresentable: new container class storing an intermediate, presentable representation of an item
	- OCDataRenderer:
		- added "path finder" for auto-assembly of converters from one object type to another, using the smallest number of steps
		- added unit tests for path finding algorithm
	- OCDataSourceArray: implementation
	- OCDataSource: refine subscription API
	- OCDataSourceSubscription: add setNeedsUpdateHandling change aggregation pattern, allowing users to provide a dispatch queue to perform the change notification on
- OCDrive:
	- add OCDataItem and OCDataItemVersion suopport
	- add converter to OCDataItemPresentable

* - OCDataItemCellConfiguration: helper class that allows to temporarily attach additional information alongside OCDataItemReferences, where it can't be passed otherwise
- OCDataSource: add UUID property

* - OCDataItemCellConfiguration: add hostViewController property

* - remove OCDataCellConfiguration (replaced by CollectionViewCellConfiguration in ownCloudAppShared)

* - NSArray+OCFiltering: helper methods to quickly filter and find objects in arrays
- OCDataTypes: add types for filter and sort comparators on OCDataSourceItemReferences and OCDataItemRecords
- OCDataSourceArray: use same object for @synchronized internal state modification as OCDataSource
- OCDataSourceComposition:
	- new data source type that composes its content from one or more other OCDataSources
	- supports filtering and sorting
		- of every contributing data source individually
		- of the item set composed from all data sources
- GraphAPI type updates

* - OCResource
	- new request OCResourceRequestDriveItem and source OCResourceSourceDriveItems for DriveItems (from spaces)
	- new resource type: OCResourceTypeDriveItem
	- new resource: OCResourceText to store textual resources
- OCData
	- OCDataItemPresentable: add intermediate resources retrieval support (subject to change)
- OCDrive:
	- add support for providing OCDataItemPresentable resources for cover image and readme
	- add support for space description ("subtitle" in web UI)
	- add type for drive aliases
- Graph API
	- GADrive: add method to retrieve special items
	- GARemoteItem: use eTag type
	- GASpecialFolder: add GASpecialFolderName type and add GASpecialFolderNameReadme and GASpecialFolderNameImage

* - OCConnection+Avatars: use parsed content type
- OCConnection: remove .supportsPreviewAPI and support for thumbnail API
- OCCore+DataSources: clarify the data sources are read-only
- OCDataItemPresentable: change API to return requests to resources, rather than the resource themselves
- OCDrive: adapt to OCDataItemPresentable changes

* - OCItemVersionSeed: new value to allow quick detection of changes in items
	- OCItem: add new versionSeed property and associated methods to update the seed
	- OCCore: add support for updating versionSeed when changes occur
- OCItem+OCDataItem: make OCItem comply to OCDataItem and OCDataItemVersion (the latter using the new version seed)
- OCHTTPResponse: extend support for encoding-sensitive conversion of body data to NSStrings, with explicit fallback encoding
- OCResourceSourceDriveItems: make text resource encoding sensitive
- OCResourceText: make compliant to OCDataItem and OCDataItemVersion
- OCDrive: include readme and image in significant update detection, add support for subtitles/descriptions
- GAGraphData+Decoder: add support for unescaped URLs (https://github.com/owncloud/ocis/issues/3538)
- OCLocation: add .lastPathComponent utility property
- OCViewProviderContext: add initializer and context key for content mode
- OCQuery: add .queryResultsDataSource property providing an OCDataSource tracking the query's results (leaving room for future performance improvements)

* - OCConnection: only accept images in return to thumbnail requests (working around https://github.com/owncloud/ocis/issues/3558)
- OCCore: include virtual drives in hierarchicDrivesTopLevelItems
- OCResource subsystem:
	- fix bug that prevented retrieval of resources other than item thumbnail and avatars from cache
	- fix bug that could mix resources of different types that shared the same ID

* - OCConnection:
	- add virtual preview API endpoint
	- remove legacy thumbnail endpoint support
- OCImage: fix logical error that led to wrong/inferior resolutions being picked
- GAGraphContext: comment out designed methods for now, to avoid warnings

* - add enum annotations for Swift 5

* - additional Swift 5 enum adaptions
- OCConnection: return new OCErrorMissingDriveID + log a warning when a command without drive ID is attempted on a drive-based account

* - new class: OCVaultLocation
	- provides an abstract description of an item's location in a vault
	- can en- and decode OCVFSItemIDs
- OCVault
	- add support to map OCVaultLocations to NSURLs - and back
	- add additional class methods to retrieve specific container root URLs
	- add filesystem layout overview to header file
- OCVFS (WIP)
	- virtual file system implementation
	- supports virtual folders and mapping OCQuerys and OCLocations via OCVFSNodes
	- returns OCVFSContent to describe contents of a folder

* - OCItem: add .customIdentifier1 and .customIdentifier2 to temporarily store two references/IDs that aren't serialized
- OCVault: fix URL <-> OCVFSItemID conversion bugs
- OCVFS: make advances in implementation to drive a first File Provider implementation

* - OCVault:
	- add APIs to store, retrieve and track drives, including in a new detached state (for drives that were removed on the server)
	- add support for OCVFS ID conversion hooks
	- change File Provider signaling to adopt OCVFSItemID
	- add isVirtual flag to OCVaultLocation to allow referencing a drive root mapping to an OCVFSNode
- OCVFS
	- refine ID addressing scheme and implement support for it across OCVaultLocation and OCVFS
	- specify the OCVFSItem protocol and implement it for OCItem and OCVFSNode
	- differentiate auto-updating and self-updating OCVFSContent via .isSnapshot property
	- add methods to OCVFSCore to replace all nodes and request a drive root based on its OCLocation
- OCDrive: add properties for detached state tracking, make value comparisons in isSubstantiallyDifferentFrom nil-aware
- OCItem: replace customIdentifier1/2 with non-serialized .bookmarkUUID property
- OCDatabase: remove support and schema for drives table- NSArray+OCMapping: utility category that adds methods to transform arrays into sets and dictionaries
- OCCore+ItemList: switch to vault as source for drives to scan periodically
- OCCore: clean up drive APIs, make them pass through to OCVault
- OCConnection+Compatibility: add workaround for broken legacy version in ocis beta/nightly
- OCDataSourceKVO: new data source class that is updated via KVO observation of another object, with immediate filtering/conversion capabilities. Supports both regular data items and versioned data items.

* - ocapigen:
	- add support for primitive item types (=> i.e. strings) to resolve warnings and properly dearchive all properties
	- fix occurrences of "NSArray.class.class"
	- update GA types with fixes by running the generator against the latest yaml file
- OCVault.h: add info on subfolder used by TUS uploads

* - OCItem: add OCItemPropertyNameDriveID to allow custom queries targeting specific drives
- OCDatabase: add mapping for OCItemPropertyNameDriveID to driveID database column
- OCCore: add support for drive IDs to -[OCCore trackItemAtLocation:…]
- OCDrive:
	- turn OCDriveType into a string enum
	- add .isDeactivated property
- GADeleted: add type GADeletedState for .state
- OCHTTPRequest: add size of URL-based request body to debug output

* - OCAction: simple encapsulation class for actions that can originate from anywhere (SDK, app, …)
- OCDataTypes: add types for Message (TBD) and Action
- OCDataSource: add OCDataSourceState type as a simple way to convey the status of the underlying mechanism of a data source
- OCQuery: update .queryResultsDataSource.state from OCQuery.state

* - OCAction: extend with identifier, version and type (regular/destructive) properties for a richer representation and more flexibility to control updates
- OCAuthenticationMethod: add convenience class method localizedNameForAuthenticationMethodIdentifier to return the name of an authentication method
- OCAuthenticationMethodOpenIDConnect: add "select_account" to prompt to ensure the account switcher is shown for users that are already logged in
- Data sources:
	- rename OCDataItemVersion protocol to OCDataItemVersioning since Swift can't tell the protocol and the type apart otherwise
	- add new OCDataItemTypeView for views
	- add ordering detection to OCDataSourceSubscription and report it as change as well

* - OCLocation: add simple en-/decoding to/from data and UTI data type ID
- OCQuery: fix typo in .rootItem description

* - OCDataSourceComposition
	- new methods to add, insert and remove sources dynamically
	- new method to include/exclude added sources

* - OCDataSourceComposition: efficiency change: only update composition if include status of a source actually changed

* - NSArray+OCMapping: add method -arrayUsingMapper:
- NSDate+OCDateParser: add method -localizedStringWithTemplate:locale: for flexible localized date representations
- OCQueryCondition: add userInfo property to support adding additional meta data (such as by the ownCloudApp framework for UI purposes)

* Add app provider support
- OCAppProvider: encapsulates URLs, retrieved raw app lists, parsed apps and file types
- OCAppProviderApp: encapsulates apps and provides metadata, including the icon as URLItem resource
- OCAppProviderFileType: encapsulates file types and provides metadata, including the icon as URLItem resource
- OCCapabilities: support for on-demand parsing of  app_providers into OCAppProvider instances, convenience access to latest supported app provider version
- OCConnection:
	- support for the new app provider endpoints in the endpoint API
	- new methods to retrieve app list, create new documents and open documents in web apps
- OCCore: new KVO-observable, managed .appProvider property for convenience access to the latest supported app provider

New URLItem resource type:
- intended for caching remote, URL-based resources with variable caching intervals

Miscellaneous improvements:
- new OCMIMEType and OCFileExtension types
- fix DataSourceTests
- add ocis target to OCTestTarget and stub app provider endpoint test (needs server support to fully implement)

* - OCHTTPDAVRequest: implement support for "Prefer: return=minimal" to take advantage of https://github.com/cs3org/reva/pull/3222
- OCItem+OCTypeAlias: add support for (MIME) type aliases directly into the SDK
	- new OCTypeAlias type
	- new methods for conversion from OCMIMEType to OCTypeAlias
	- new OCItemPropertyNameTypeAlias and support in the SQL Builder
	- add new typeAlias column to metadata, implement v16 of the metaData table schema and an efficient migration with progress reporting
- OCSQLiteDB: add -dropTableSchemas method to release table schemas when they are no longer needed, allowing to free memory held by migration blocks in the schemas, take advantage in OCDatabase

* - OCConnection: add support for "open" app providers endpoint
- OCAppProviderApp: add type to support app provider view mode (view, read, write)
- OCConnection+AppProviders: add support for "open" endpoint, with mode support and returning a ready-to-use URL request
- NSError+OCISError: add support for parsing `{ code: "…", message: "…" }`-style ocis errors into NSError objects
- NSError+OCError: add new error codes to support NSError+OCISError
- NSDictionary+OCFormEncoding: factor out code to encode a dictionary of parameters as a PUT/POST body data

* - OCSyncActionDelete: fix potential crash bug

* - add new OCDataItemTypeSavedSearch data type

* - OCCore
	- add new data source .subscribedDrivesDataSource for subscribed drives
	- add support for deactivated drives
	- do not return a drive as subscribed when it was deactivated on the server
	- automatically reload custom queries if the list of subscribed drives changes
	- mark items of detached drives as deleted, change their detachedStatus from .new to .itemsRemoved
- OCDrive: better documentation of OCDriveDetachedStates and additional state OCDriveDetachedStateItemsRemoved
- OCMacros: add OCWaitOnCompletion to execute a block on completion of the OCWait
- OCDatabase: add methods to remove (mark as deleted) or purge (actually remove) the cache items for a whole drive
- OCVault:
	- add two new internal notifications for when the subscribed and detached drive lists change respectively
	- add new wipe mechanism
		- has wipeContainer locations inside .rootURL and .filesRootURL
		- fs items (files/folders) to be wiped are moved into these folders, then removed
		- all items inside wipeContainers are removed eventually (f.ex. on opening a bookmark, the app, etc.)
	- new method to erase a drive (both files + from cache in DB)

* - OCVault: improve error handling and fileop debug logging

* - fix wrong type warning in implementation

* - update GraphAPI to libre-grap-api v0.17.0

* - OCDrive: no longer pass through space type as presentable subtitle, only actual drive descriptions
- OCLogger: add new "replace-newline" option that replaces newlines with "\n" by default, disable (then unneeded) "single-lined" by default

* - OCHTTP: add support for 425 status
- OCItem:
	- add parsing support for 425 status multi-responses
	- add OCItemState signalling 425 status as .serverSideProcessing

* - OCHTTPStatus: add textual representation for 425 status

* - OCConnection+AppProviders: fix error pass through from HTTP to completion handler

* - OCCore+ItemList: add missing error handling when retrieving drive list; drives now no longer vanish when connections fail or are note possible

* - OCCore+ItemList: recognize OCItem.state changes as relevant change for updating the item and its versionSeed

* - add all missing German translations in Localizable.strings

* - OCConnection+Download: add error code + error message for files returning 425 on download

* - add missing localization of string "Retry"

* - OCCore+SyncEngine: avoid publishing the same sync activity twice

* - OCCore+ItemList:
	- FIX: add .previousPath to renamed items where that info was previously missing
	- FIX: ensure that recomposed paths after a move end in a "/" for folders
- OCCore+ItemUpdates: update OCQuery.queryLocation when the observed location is moved

* - OCVFSCore: guard nodes against enumeration during mutation (which could cause crashes)

* - OCCapabilities: add convenience accessor .federatedSharingSupported with temporary workaround for https://github.com/owncloud/ocis/issues/4788
- OCCore+Sharing: update share queries also in case of errors
- NSError+OCHTTPStatus: add method to quickly check if an error is a HTTP status code
- OCImage: use QOS_CLASS_DEFAULT instead of QOS_CLASS_USER_INITIATED

* - fix Xcode 14 warnings

* - OCShareRole: encapsulates information on sharing roles for display
- OCCore: add new APIs to retrieve available sharing roles for a location, as well as identify the one matching an OCShare
- OCSymbol: OCSymbolName type and class for accessing SF Symbols, adding an abstraction layer that simplifies access and allows centralized customization down the road
- OCLocation: new OCLocationType, also usable as mask, for file, folder, drive and account
- OCShare:
	- migrate from OCItemType to OCLocationType
	- add conversion for OCShareType<->OCShareTypesMask
	- XML parsing support for extracting drive ID information to form a complete OCLocation

* - OCStatistic:
	- new class to provide structured statistical data from the SDK to clients like the app
	- implements OCDataItem and OCDataItemVersioning, so could also be used in data sources as items in the future
- OCDataSource:
	- change implementation of .specialItemReferences to .specialItems, allowing to directly pass OCDataItems from source to subscribers
	- add new OCDataSourceSpecialItemFolderStatistics
- OCDrive: change type of .quota to GAQuota
- OCQuota: add missing OCQuotaState labels
- OCQuery: add .queryResultsDataSourceIncludesStatistics to request that statistics be provided through the query's data source

* - OCDrive: implement .name override for "Personal" and "Shares" spaces

* - OCSyncActionCopyMove: prevent copying and moving of items into themselves

* - OCConnection+AppProviders: add OCConnection.staticHeaderFields to the header fields used in the initial request when opening a web app in-app (typically adding "Accept-Language" to that request)
- OCConnection + OCHTTPRequest: use header field data type rather than different NSDictionary types

* - OCDrive:
	- add new property "specialType" to easily determine if the drive is the personal or shares jail space - or a regular project space
	- detect shares jail not by "virtual" type but by UUID
	- adapt .name to use .specialType to return hardcoded names

* - OCLocale+SystemLanguage: new category providing the "Accept-Language" string as well as the primary language of the user
- OCCore: replace local code with OCLocale+SystemLanguage to fill Accept Language static header field
- OCConnection+AppProviders: add "lang=" parameter if the primaryUserLanguage can be determined. Fixes the issue that the UI of web apps was always presented in English, irrespective of the user's system language.

* - OCConnection+AppProviders: return tailored error message and OCError code for 425 responses to open-web and open endpoint requests

* - NSError+OCISError: add support for code TOO_EARLY
- OCConnection+AppProvider: hardcode to always use the SDK's own 425 error rather than the error that may be returned from the server as JSON (=> which would not be localized)

* - Data Sources:
	- Types: add new item types for OCBookmark and OCLocation
	- Presentable: add .image property for easier rendering of small images (f.ex. for a toolbar)
	- OCDataSourceArray: provide convenience initializer method to pass content at initialization
	- OCDataSourceMapped: new kind of data sources that allows to map an input data source's items to any kind of items that are dynamically created, updated and removed to match the contents of the source datasource
- OCAuthenticationBrowserSessionCustomScheme: move workaround to open URLs from extensions to class-level method to make it generally available
- OCLocation: adopt OCDataItem + OCDataItemVersioning
- OCBookmark: adopt OCDataItem + OCDataItemVersioning
- OCBookmarkManager: provide a data source with the bookmarks
- OCAsyncSequentialQueue: add convenience initializer allowing to pass a dispatch queue to create an executor from

* - OCDataSource:
	- make OCDataSourceKVO available outside the SDK
	- call -terminateSubscription for all active subscriptions on deallocation
- OCQuery: change signal for setting data source state to Loading or Idle so empty folders no longer indicate Loading forever
- replace calls to [UIImage systemImageNamed:] with OCSymbol calls

* - OCAction: add support and a property for ActionProperties, clarify OCActionOption as OCActionRunOption
- OCDataSource: add method to signal updated items by reference efficiently

* - GAGroup: update to libre-graph-api spec v1.0.0

* - OCAction: new type .warning and closed extensibility attribute
- OCResourceManager: add support for status 425 (log and return error)
- OCDataSourceMapped: support changing source and, by setting it to nil, calling the destroyer on all mapped items

* - OCConnection: add support for cross-space COPYs
- OCCore:
	- add new async API to retrieve the cached item for an OCLoation
	- enrich OCLocation with .bookmarkUUID in more places
- OCUser: crash fix and fallback algorithm if the OS does not return initials for a name
- OCItem: return bookmarkUUID as part of the .location
- OCLocation: relax equal comparison: if the driveID is identical, but only one of the OCLocations has a bookmarkUUID, assume it is the same
- OCCertificateStore: store for certificates, preparing for future usage by OCBookmark

* - OCCertificateStore: complete implementation
- OCBookmark:
	- replace plain certificate property with OCCertificateStore and build migration path from existing bookmarks
	- add diagnostics support for multiple certificates
	- add new .primaryCertificate property that returns the certificate matching the bookmark's hostname - or - the only certificate in the store if there is only one
- OCConnection: adapt bookmark building to use OCCertificateStore
- OCHTTPPolicyBookmark:
	- add support for handling certificates for multiple hostnames using a bookmark's Certificate Store
	- implement option connection.associated-certificates-tracking-rule to opt-in certificates other than the server's main certificate into change tracking/recognition
- OCHTTPRequest: add property .hostname for quick access to .effectiveURL/.url hostname

* - OCDataSourceMapped: fix subscription leak on deallocation
- OCDataSource: add new subscription observer API allowing to dynamically start/stop updating content when there is or isn't demand

* - OCCore+DataSources:
	- make names of existing data sources clearer
	- add new data sources for: favorite, available offline item policies, available offline files
	- implement dynamic polling logic (currently used for favorites)
	- prepare for additional data sources for different sharing aspects
- OCItemPolicy:
	- add UUID with fallbacks
	- implement OCDataItem + OCDataItemVersioning support, including a small converter to OCDataItemTypePresentable
	- use .locationString instead of .path in conditions for collections
	- OCItemPolicyProcessorAvailableOffline: add support for drives/spaces
- OCDataTypes: add ItemPolicy type
- OCItem: add .locationString property
- OCDatabase: add new locationString column to metadata database, updating the schema

* - add missing headerfile OCItemPolicy+OCDataItem.h to target

* - OCBookmark: add Favorites capability
- OCCapabilities: add support for favorites support capability
- OCConnection: update bookmarks if its Favorites capability changed
- OCCore+DataSources:
	- clean up naming
	- add additional on-demand data sources for "sharedWithMe" OCShares
- OCShare:
	- rename OCShareStateRejected to OCShareStateDeclined to match wording used elsewhere
	- add OCDataItem + OCDataItemVersioning support
	- add support for composing FileID in Share Jail from ShareID
- OCDataTypes: add Share data type
- OCDataSource/Mapped/Composition: add content synchronization support via dispatch groups and different subscriptions types
- OCDrive: add MountPoint drive type
- libre-graph-api: add new classes and update existing classes via code generation

* - OCDataSourceArray: add internal tracking of OCDataItem versions to allow detecting changes to identical objects
- OCCore+OCDataSource: take advantage of OCDataSourceArray.trackItemVersions to detect changes to OCShares
- OCShare: include cloud share .accepted state into data item version

* - address Xcode 14 thread priority inversion warnings at runtime

* - OCConnection+Sharing:
	- add support for drives
	- add context in which an OCShare was received from the server (shared with me/shared by me)
- OCShare:
	- add .category property and OCShareCategory type
	- add support for grouping shares
	- further enhance Drive ID / File ID logic, describe difficulties with the current approach in https://github.com/owncloud/ocis/issues/5355
- OCCore+DataSources:
	- use the contents of the Shares Jail for "Accepted Shares" instead of the OCShares
	- implement on-demand data sources for sharedByMeDataSource and sharedByLinkDataSource
	- return grouped and sorted shares from all OCShare data sources
- OCDrive: add root ETag to debug output

* - OCCore+DataSources: add .shareJailQueryCustomizer to allow applying filtering and sorting options to the underlying OCQuery for shareWithMeAcceptedDataSource

* - upgrade project version to Xcode 14.2

* - add OCClassSettingsFlatSourcePostBuild to allow injection of post-build class settings

* - rename OCClassSettingsKeyPostBuildAllowedFlatIdentifiers to OCClassSettingsKeyPostBuildAllowedSettings

* - OCDataSourceMapped: fix curiosity crash bug where a weak var is initialized with nil during deallocation

* - OCDataSource:
	- fix auto-completion typo/error that lead to initial updates on subscriptions being ignored and the value of trackDifferences being used instead
	- fix performIntialUpdate -> performInitialUpdate typo

* - fix issue where OC10 accounts showed up empty in the File Provider

* - address static analyzer findings (potential crashes and memory leaks)

* - OCDrive: change label from Shares jail from "Shares" to "Shared with me"

* - OCClassSettingsFlatSourcePostBuild : fix type error leading to a crash

* - make OCResourceSourceURLItems and OCResourceRequestURLItem public API

* - OCLocation: also transfer .bookmarkUUID when creating a copy of an instance

* - OCBookmarkManager: reply on OCBookmark.dataItemVersion to trigger updates to bookmarksDatasource

* - OCAuthenticationMethod
	- broaden API to allow passing options in more methods
	- add additional option keys to
		- pass along a Web Finger Account Lookup URL
		- skip WebDAV-endpoint WWW-Authenticate based tests for authentication method availability (OCAuthenticationMethodSkipWWWAuthenticateChecksKey)
		- limit which authentication methods are allowed
	- BasicAuth + OAuth2: add support for OCAuthenticationMethodSkipWWWAuthenticateChecksKey
	- OIDC:implement alternative logic when OCAuthenticationMethodSkipWWWAuthenticateChecksKey is passed as option
- OCConnection
	- add support for option OCAuthenticationMethodAllowedMethods
	- add support for WebFinger as status.php alternative during account setup
	- add support for retrieving available OCServerInstances after authentication via authenticated WebFinger
	- add support passing back options in the -prepareForSetupWithOptions completionHandler
- OCServerInstance
	- new class to encapsulate server-instance specific information when creating new bookmarks / during account setup
	- convenience accessor for localized server title based on localized title dictionary retrieved from the server
	- OCBookmark+ServerInstance: convenience method to apply a server instance's content to an OCBookmark
- adapt tests to past bookmark.certificate API changes and recent authentication API changes

* - upgrade project from Xcode 13.3 to 14.2
- bring OCConnection+Setup webfinger + authenticated webfinger code in line with enterprise#5579
	- send hosts root URL as relation to webfinger in first request	- send acct:me@{host} as relation to webfinger in second request
	- add "Location:" header with URL of server pointing to IdP when requesting /.well-known/openid-configuration
- extend and clean up NSURL+OCURLQueryParameterExtensions

* - OCConnection+AppProviders: ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en")

* - OCBookmarkManager: ensure _bookmarksDatasource is updated after loading bookmarks

* - OCExtensionContext: in convenience initializer, create new instance from called class, not OCExtensionContext

* - OCConnection: Accept-Language now correctly formats language codes with region/country variant additions, addressing https://github.com/owncloud/ios-app/issues/1193

* - OCConnection:
	- add and implement new option OCAuthenticationMethodWebFingerAlternativeIDPKey to store and re-use information on an alternative IDP address
	- use OCAuthenticationMethodWebFingerAlternativeIDPKey with response returned from WebFinger
	- extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey
- OCAuthentictionMethod:
	- extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey
	- tolerate lack of user_id in token responses in context of WebFinger account lookup, as user_id may depend on the respective instance the user chooses
- OCBookmark: use _lastUsername as a fallback for auth method + auth data derived user_name

* - OCConnection+Setup: prevent erroneously triggering connection validation if a server doesn't support webfinger lookup

* - OCLocation: add new isDriveRoot property to determine if a location is a drive's root

Address https://github.com/owncloud/ios-app/issues/1188 with the following changes:
- OCSyncRecord:
	- add new .removed property to use instead of .recordID when removing a sync record
	- OCDatabase: change to cache sync records ONLY within the Sync Engine, to avoid any possible concurrency issues
- SyncEngine:
	- make use of OCSyncRecord.removed property
	- handle exceptions during processing
		- log sync action and exception in detail
		- send OCIssue to the UI informing the user
		- terminate and remove the action from the queue, so they can't disrupt the client further

* - OCCore: use vault to resolve identifiers to drives, remove internal _drivesByID variable, which was initialized from the vault, but then not kept up-to-date and caused issues

* - OCAuthenticationMethodOpenIDConnect: allow changes to "prompt" via class settings

* - NSDate+OCDateParser: add shared ISO8601 date formatters to parse/compose dates issued by/accepted by oCIS sharing
- OCConnection+Sharing: adapt date formatting for oCIS
- OCCore+DataSources: make OCShares shared by the user available as flat data source and as a data source of grouped OCShares
- OCCore+Sharing: fix bug preventing OCShareRoles from being setup
- OCRecipientSearchController: make recipients available as data source
- OCDataTypes: add item types for OCShareRole and OCIdentity
- OCIdentity: make OCDataItem + OCDataVersioning compatible
- OCShareRole: make OCDataItem + OCDataVersioning compatible

* - OCAppIdentity: add support for FileProviderUIExtension app component
- OCCore+DataSources: sort shared-by-me shares by location + recipient

* - OCItem: add .parentPath property
- OCDatabase: add SQLBuilder support for .parentPath

* - OCConnection+Sharing: return a descriptive error when a share create/modify/delete request fails due to a missing internet connection

* - OCConnection+Sharing: categorize item, item with reshares and subitems as "Shard By Me"
- OCCore+DataSources: add .sharesSortComparator for consistent OCShare sorting
- OCCore: remove unneeded item from matchingShareRoleFor: method
- OCShareQuery: add dataSource property to allow tracking OCShareQuery results via an OCDataSource

* - change wording from "internet connection" to "active connection"

* - OCCore+DataSources: neuter sharedWithMeAcceptedDataSource to return only share objects, to allow management in the face of https://github.com/owncloud/ocis/issues/5355 ; preserve working code for another timeline

* - OCShare: add "Internal" permission
- OCCore+Sharing, OCShareRole: add "Invited persons" role for drive-based servers

* - Xcode project: add GitTags and GitBranch info to Info.plist
- OCItem.h: add comment for experimental Deniable permission

* - OCConnection+Setup: add debug logging and avoid premature deallocation of instance

* - OCCore:
	- add .personalDrive property
	- add personalDrive.driveID to legacy root locations in OCQuerys when started on a drive-based account
- OCCore+Sharing: trigger update polls for accepted and pending cloud shares when accepting a share
- OCCore+DataSources:
	- convert sharedWithMe data source from array to composed data sources
	- add accepted and pending remote/federated shares to sharedWithMe and derived data sources
- OCShare: add .effectiveState to simplify accept/pending/declined handling across federated and local shares
- OCShareQuery: make .dataSource track item versions

* - OCMacros: add OCLocaliz…
felix-schwarz added a commit to owncloud/ios-sdk that referenced this issue Jun 21, 2023
* - reopen develop PR

* - OCHostSimulator: add auth-race-condition host simulator, to test handling of race conditions in Authorization

* - OCCoreNetworkMonitorSignalProvider: add logging
- OCNetworkMonitor: add logging
- OCAuthenticationMethodOAuth2/OIDC: no longer treat network errors during token refresh as permanently failed refresh

* [feature/openssl-1.1.1] Migration to OpenSSL 1.1.1 (#95)

- migrated code to new OpenSSL 1.1.1 API
- using OpenSSL package via SwiftPM

* - remove OpenSSL 1.0.x includes, build scripts and binaries

* - NSError+OCNetworkFailure: add .isNetworkTimeoutError convenience property
- NSError+OCError: add new error for request timeouts
- OCConnection
	- make better use of the error parameter in HTTP response handling to actions
	- increase timeout for COPY requests to 10 minutes
- OCSyncActionCopyMove: improve error handling for HTTP timeouts
- OCHostSimulator+Builtin: add new "action-timeout-simulator" that responds to action requests with timeout errors

* - OCSyncActionCopyMove/Localizable.strings: add missing localizations

* - change to keep the PR open

* - replace calls of malloc with calloc

* - move core.add-accept-language-header class setting from "Privacy" to "Connection"

* - OCExtensionManager:
	- add class settings support including dynamic documentation
	- allow blocking addition and querying of OCExtensions by identifier

* V12.0: Datasources, Spaces / Drives / Graph API support (#92)

* - update CONFIGURATION.json with latest changes and additions

* - OCClassSettings+Metadata: fix sorting of possible values

* - OCHTTP:
	- clarify and extend redirection policies:
		- "forbidden" becomes "handle locally"
		- "validate connection" - triggering the connection validator - becomes the new default
	- extended redirection support in OCHTTPRequest:
		- new maximumRedirectionDepth property to indicate maximum number of redirections to follow
		- new redirectionHistory property keeping track of NSURLs queried as part of redirection handling
- OCConnection:
	- new status validation method +validateStatus:; replace all instances of checks for maintenance mode with it
	- add Connection Validator that kicks in if a HTTP Request with "ValidateConnection" redirection policy receives a redirection response
	- demote OCConnectionTransparentTemporaryRedirect option from "advanced" to "debug", turn off by default
- OCHostSimulator
	- move OCHostSimulator+CookieRedirect from ownCloudMocking to ownCloudSDK/OCHostSimulator+BuiltIn
	- add new "simple-apm" cookie redirection simulating APM Host Simulator Extension and rebuild documentation
- OCCore:
	- enable cookie support by default

* - OCAuthenticationMethod:
	- switch from detection URLs to detection requests
	- use Detection ID to consolidate requests prior to performing them
	- authentication methods now perform a PROPFIND rather than a GET request on the WebDAV endpoint
	- when contacting the bare WebDAV endpoint, the URL is now slash-terminated
- Connection Validator
	- new error code for failed validation
	- preparations for second stage of validation if first stage fails (but commented out for now as it's not clear that's needed and would complicate the implementation by multiplying the possible outcomes)
	- code comment describing how the Connection Validator works
	- handle failed validation like maintenance mode, but with custom error in status line
- add "recovering-apm" Host Simulator that makes bogus redirects for the first 30 seconds, then becomes a "simple-apm" that wants to set cookies

* - OCConnection: make Connection Validator more thread-safe, add rate limiter to avoid excessive retries

* - OCBookmark:
	- allow setting the internally tracked _lastUsername with new method

- OCAuthenticationMethodOAuth2 + OCAuthenticationMethodOpenIDConnect:
	- add headers to prefill user name where available and supported by the server
	- comment out support for OAuth2 due to crashes in the web view in Simulator and on device

* - OCConnection:
	- implement Connection Validator II - following the latest flow diagram
	- update code comments explaining the structure
	- factor out the Connection Validator to its own method

* - OCConnection: Connection Validator cleanup

* - OCConnection: Connection Validator comment clarifications

* - OCConnection + OCHTTPPipeline: add debug output for cancellation of non-critical requests
- OCProcessManager: add additional observation and debug output for tracking app/extension state

* - OCClassSettings: add "categoryTag" generation support

* - OCHTTP improvements
	- centralize management of X-Request-ID header in OCHTTPRequest
	- replace all header field strings with OCHTTPHeaderFieldNames
	- extended and more uniform log messages to make following a request through the OCHTTPPipeline much easier
	- move the majority of debug messages to the verbose level
	- log old and new X-Request-ID when recreating it, to allow connecting the dots
	- avoid requesting the full header dictionary when just interested in a single one
	- log type (Bearer, Basic, …) from Authorization header and only replace the actually confidential part with "[redacted]"
	- add debugging description to OCHTTPRequest
- OCHTTP bugfixes
	- ensure that only one representation (object or data) is kept in an OCHTTPPipelineTask at a time, to avoid inconsistencies
	- drop request data if requestID is changed
- OCLogger
	- migrate privacy mask and log level to OCClassSetting + observation
	- fix bug where log level changes didn't propagate across processes
- OCClassSettings
	- fix bugs related to change notifications timing
	- implement cross-process notifications for user settings
- General
	- move frequently logged debug messages that are very specific and aren't needed 98% of the time to the verbose logging level

* - Turn off HTTP request and response logging toggle by default

* - OCConnection:
	- limit connection validation to same host (fixes conflict with redirects / multi-tenancy)
	- increase security of "allow same host" redirect policy by also requiring same HTTP scheme
- OCCore: -trackItemAtPath:trackingHandler: no longer makes multiple nil calls if an item is not found
- OCLogger: avoid log.log-enabled-components validation error during logger startup
- OCUser: also archive/unarchive _forceIsRemote
- project: update env vars to take lack of http request/response logging into account
- unit tests:
	- fix failing tests
	- tag remaining tests that still fail

* - OCLogger: fix recursive possible values assignment for OCClassSettingsMetadataKeyPossibleValues
- OCHTTPPipeline: check signal requirements for final requests only if there are any signals actually required by the request - or the handler for the partition the request belongs to is around
- OCHostSimulator+BuiltIn: fix incorrect block passing resulting in requestWithCookiesHandler never being called
- unit tests:
	- fix remaining failing tests
	- comment out deactivated tests

* - additional unit test fixes / adaptions to Bitrise performance

* OAuth2:
- add new method -postProcessAuthenticationDataDict: to condense the stored token response to the needed essentials, saving space and steering clear of issues if the token response contains null values that make secret serialization to property list format fail
- factor out access to clientID and clientSecret into methods
- make -sendTokenRequestToConnection:… subclass able
- improved error handling if property list serialization fails

OIDC:
- add support for OpenID Connect Dynamic Client Registration
- on by default for servers offering the endpoint
- including support for expiration, preservation and caching
- add additional error code for client registration failure

HTTP Pipeline:
- factor out User-Agent template composition method to make it available
- extend OCHTTPRequest with JSON-specific method to easily instantiate POST requests with JSON payload

* Update CONFIGURATION.json with latest OIDC additions

* - Authentication: add new OCAuthenticationMethodRequiredUsernameKey option
- OAuth2 / OIDC: add support for new OCAuthenticationMethodRequiredUsernameKey option

* - OCClassSettings: fix crash that could occur if overrideSettings was mutated while being used

* Class Settings cleanup:
- remove "connection-" and "log-" in front of class setting names for OCConnection and OCLogger to avoid duplication like "connection.connection-.."
- update schemes to use the new names
- update CONFIGURATION.json with the changes
- replace configuration documentation in CONFIGURATION.md with a reference to the full documentation in the ios-app repository, as reference in CONFIGURATION.md is no longer updated

* - OCConnection: add dedicated handling for "403 Forbidden" responses to file download requests (enterprise#4338)
- NSError+OCError: add a new OCErrorWithDescriptionFromError macro that allows creating an OCError based on another error with custom description

* Add support for certificate comparisons:
- OCCertificate+OpenSSL:
	- add nullability annotations
	- extend API to compare certificates
- OCCertificateDetailsViewNode:
	- add nullability annotations
	- add support for different types of changes, supporting old and new values, old and new certificates (for certificate chains)
- OCCertificateViewController
	- add support for certificate comparisons, with a "+/- Show/Hide" toolbar button baked right in
	- highlight changes with colors and circled +/- signs

* OCCertificateViewController: only add "Done" navigation button if root view controller

* - provide clearer issue title for certificate changes

* OCHTTPPipeline: fix "UNKNOWN TASK" error for auto-resumed downloads/transfers
- resumable downloads occur when backgrounding the app
- resumable downloads would be rescheduled automatically to complete the download
- by rescheduling, the request got a new X-Request-ID, but that one was never used by iOS
- when iOS returned the response for the resumed download, it came back with the OLD X-Request-ID, resulting in the Pipeline not being able to recognize the request
- result was hung downloads at the pipeline level
- fixed: now avoids recreating the X-Request-ID for resumed requests

* - OCBookmark: add additional diagnostic action that overwrites the certificate with an empty data blob, prompting a certificate warning dialog on next connect

* OpenID Connect: for token refresh, use the client_id and client_secret used at the time the token was registered in the Authorization header, while using the latest registered client_id / client_secret as parameters

* ownCloudUI: show "Show ±" only for certificate diffs with actual differences

* [feature/mdm+branding] SDK version for MDM+Branding app branch (#78)

* - OCConnection+Setup:
	- remove support for auto-detection of OC installations in "owncloud" subfolder
	- no longer alert user of root redirects if they happen on the same host with the same scheme (http/https)
- OCClassSettings:
	- add new DictionaryArray and URLString types
	- add validation support for new types

* OCClassSettings+Metadata:
- also include registered metadata when determining available keys for a settings identifier

* - OIDC Dynamic Client Registration: add support for non-expiring client_id/client_secret pairs via convention

* Add 11.5 section to CHANGELOG.md

* - OCConnection+Setup: rewrite redirect handling during setup with full duplicate control and permanent removal of support for subfolder installs in `/owncloud/`.

* OCConnection:
- Connection Validator: infinite loops detection:
	- increments a counter for the URL whose response triggered a connection validation
	- decrements the counter when receiving a response from the same URL that no longer would trigger a connection validation (bringing it back to 0, ideally)
	- if the response to the URL triggered validation more than 3 times, the response is delivered instead of triggering validation
- Connection Setup:
	- count how often an URL was the target of a redirect during setup
	- if a URL was already targeted more than 0 times (adjustable), declare detection of the server root URL as failed
- HTTP Pipeline:
	- turn certificate missing log message from error into warning, since it is not handled as an error internally, either and can be confusing when debugging

* - OCConnection+Setup: only accept redirects with status 301 to other root folders, fail for all others

* - OCAuthenticationMethod: add additional userInfo key to redirection errors to indicate from where a redirection started
- OCAuthenticationMethodOpenIDConnect:
	- add redirection detection for .well-known/openid-configuration
	- improved error handling
- OCBookmark+Diagnostics: add "Use Origin URL as URL" action to reset multi-tenancy redirection info in bookmarks
- OCConnection:
	- fix recovery from answered redirection warning issues
	- add support for redirections to other hosts (previously a hard error)
- OCCore:
	- pick up certificate rejection errors from OCHTTPPolicyBookmark and present them to the user
	- remove unused attemptConnect method variant
- OCHTTPPolicyBookmark: improved description of errors where a certificate was changed but could not be auto-accepted
- OCCertificateDetailsViewNode: fix a crasher caused by unconverted object types stored in .previousValue

* - Ocean: adapt to SDK API changes, including unit tests
- OCConnection: add fallback option to extractBaseURLFromRedirectionTargetURL:… to return redirectionTargetURL in case no common base path could be found
- OCAuthenticationMethod: replace local fallback with above fallback

* - AuthenticationTests: additional test cases for redirection base discovery

* - OCConnection: support for cleaning up additional redirection target format (+ additional unit tests)

* Add OCLock set of APIs for expiring, coordinated cross-process locks (+ unit tests)

* - OCLock / OCLockManager: make keepAlive more opportunistic to optimize resource usage
- OCAuthenticationMethodOAuth2: use OCLock to secure token refreshs and avoid issue (3) reported in ios-app#886

* - OCHTTPStatus: new .name property to quickly get the name of a status
- OCHTTPPipeline: new HTSum-tagged brief one-line summary of HTTP requests and responses (to be extended)
- OCConnection+Setup: add base URL extraction call to redirection handling for status requests
- OCConnection: Connection Validator now also checks for the same port before it starts
- NSURL+OCURLNormalization: standardized URL port and scheme/host/port comparison additions, nullability annotations

* OCConnection and OCConnection+Setup: change from local comparison of host and scheme to NSURL+OCURLNormalization utility method.

* - OCLogger: fix migration of log level + privacy masking (broken following shortening of the identifiers earlier)

* - OCLogger: add migration path for user setting "log.log-level" to "log.level"

* - improve OCLogger migration code structure

* - NSDictionary+OCExpand
	- NSDictionary category to expand flat keys into hierarchies
	- implemented unit test in MiscTests
- OCClassSettingsFlatSourceManagedConfiguration
	- add detection of changes pushed via MDM and posting OCClassSettingsManagedSettingsChanged notification
	- utilize NSDictionary+OCExpand to support simplified notations of MDM configurations

* - OCBookmarkManager+ItemResolution: add new method to find the OCBookmark that contains a provided OCLocalID
- OCCoreManager+ItemResolution: add new method to request OCCore and OCItem for a provided OCLocalID (build upon OCBookmarkManager+ItemResolution)

* - OCCoreManager+ItemResolution: fix nullability annotation

* Add unit test for ItemRetrieval method(s).

* - OCConnection+Avatars: clarify the method name as it returns data, not the avatar itself
- OCResource
	- initial draft of a universal resource retrieval, caching and version management subsystem
	- design target is to also support local resource generation (like QuickLook thumbnails) and a unified memory + DB cache across all resource types
	- start README.md on this subsystem to create documentation about the concepts along the way

* - OCResource: add concept of a structure description (lesson from thumbnail caching)

* - change to reopen PR

* - Class Settings: add additional implementation check for settings snapshot
- OCLogger: use all OCClassSettings implementing classes when putting together summary

* - NSArray+ObjCRuntime: support additional ways to filter class list
- OCClassSettings: add new, optional includeInLogSnapshot method to opt into the log snapshot (part of log intro)
- OCClassSettings+Documentation: returning all classes that opted into snapshots via snapshotClasses
- OCLogger: use OCClassSettings.snapshotClasses as basis
- other classes: use opt-in macro

* - OCConnection: update OCConnectionRenewedCertificateAcceptanceRule to allow root certificate change from DST Root CA X3 / R3 to ISRG Root X1 / R3
- add unit tests for LetsEncrypt root certificate change

* - OCKeyValueStorage: add APIs for new semantics for shared instances based on URL + identifier and owner
- OCVault: uses new shared semantics to create its KVS, to avoid rapid recreation in contexts where OCVault is only used temporarily, to gain access to its KVS

* - extend changelog with changes for 11.6.1

* - fix crash that occurred on devices if classes were checked for protocol conformance using a regular method call, which triggered class initialization, which - especially for WebKit classes - led to a crash.
- update CONFIGURATION.json with latest changes

* - Change to keep PR open

* OCCore: add class setting to allow configuration of time interval between end of one scan for changes to the next scan for changes

* - OCDAVRawResponse: container for capturing raw WebDAV PROPFIND responses
- add update scan timing logging
- add support for update scan interval (and disable it for now)
- add support for infinite PROPFIND requests, introduce OCPropfindDepth
- OCSQLiteDB: add method to queue blocks on the DB thread
- OCXMLParser: add support for live processing of parsing results and add further abstraction for error and parse result handling
- OCBookmark, OCVault: add methods to prepopulate account databases from infinite PROPFIND responses
- various smaller improvements

* - OCCore+ItemList: scan for changes no longer uses the background URL session to avoid APM redirect issues

* Update CHANGELOG.md for 11.7

* - OCHTTP: add support for streaming responses as NSInputStream (+ prepare for more variants)
- OCConnection: add support for streaming PROPFIND responses
- OCVault+Prepopulation: add methods for streaming metadata and parsing the stream at the same time
- OCBookmark+Prepopulation: add method for streaming prepopulation

* - OCCapabilities: prepare support for new "supportsInfinitePropfind" capability
- OCHTTPStatus: correct spelling of Method Not Allowedc status code

* - add localizable strings for account prepopulation progress messages

* - OCClassSettings improvements
	- extend -keysForClass from documentation to --keysForClass:options: for wider use
	- settingsSnapshotForClasses now uses -keysForClass:options: instead of trying to compile a definitive list of keys itself
	- adapt calling code accordingly

* - fix DAVRawResponseTests comment error

* - support for custom poll interval for changes:
	- through capabilities: mirroring changes from https://github.com/owncloud/client/pull/8777
	- through MDM via `core.scan-for-changes-interval`
	- in milliseconds
	- defaulting to 10 seconds
	- enforcing (and logging a warning) for intervals below a minimum of 5 seconds
	- logging a warning for intervals greater than 60 seconds

* - improved configurable scan for changes poll interval
	- determine effective poll interval only once / initialized core
	- limit logging of warnings and errors to once / initialized core
	- improve wording and verbosity of log messages
	- clean up code

* - rename OCResourceCache to OCResourceStore and add retrieve/store method definiton
- fix build errors in OCConnection+Avatars
- add OCResourceMetadata type
- extend OCResource definition in preparation for storage/retrieval in OCResourceStore
- add resources table definition to OCDatabase
- outlook: plan is to limit resource subsystem to avatars at first, then eventually migrate thumbnails over

* - Browser Session Class: add AWBrowser to simplify configuration for AirWatch browser

* - no longer output "computed: '<null>'" entries for class settings in the LogIntro if it is the only entry for that MDM parameter

* - OCAuthenticationMethodOAuth2: use UUIDString instead of UUID description for lock name
- OCCore+FileProvider: add handling for edge case when the database is not available or not open, preventing a hang
- OCCore+ItemList: implement coordinated scan for changes
	- synchronizes scans for changes across processes
	- prioritizes scans, giving the app highest and the fileprovider second highest priority
	- consolidate related log messages under ScanChanges tag (including PollForChanges and UpdateScan)
- OCLock: add support for trying to acquire a lock and immediately returning with the result, with a new OCErrorLockInvalidated error code in case the lock couldn't be acquired
- OCDatabase: add .isOpened property
- OCSQLiteDB: disable statement caching in minimum memory configuration

* - change "refresh_token" to "refresh token" in English Localizable.strings.

* - OCLocale: modular localization system replacing direct system localization calls
	- OCLocaleFilter: layers that strings run through during localization to allow transformations
		- ClassSettings: allows overriding individual strings with replacements provided through a dictionary from class settings
		- Variables
			- allows replacing {{variables}} with values, or dynamic content from "variable sources"
			- shared instance allows addition of sources and changing variables at runtime
			- provides generally useful variables like app.name
- change OCLocalized() set of macros to call OCLocale, not NSLocalizedString/NSBundle directly

* - OCLocale:
	- fix bug when replacing placeholders with sources
	- add support for passing additional variables via options (+ OCLocalizedFormat macro)

* - OCLocaleFilterVariables: add missing "{{" and "}}" in search term for replacements

* - OCCapabilities: add support for dav > propfind > depth_infinity capability

* - OCItemPolicyProcessorVacuum: fix wrong metadata type for OCClassSettingsKeyItemPolicyVacuumSyncAnchorTTL (bool -> integer)

* - update CONFIGURATION.json
- OCAuthenticationMethodOAuth2: add support for passing username to OAuth2 page
- OCBookmark: add .serverLocationUserName property to aid with server location functionality, including re-authentication
- OCClassSettingsFlatSourceEnvironment: add support for JSON dictionary values
- OCServerLocator:
	- extensible layer that allows to locate the target server URL from a username
	- OCServerLocatorWebFinger: server location using web finger and custom relation http://webfinger.owncloud/rel/server-instance
	- OCServerLocatorLookupTable: server location using a lookup table and patterns
- OCHostSimulator:
	- add new "web-finger" simulator simulating a webfinger server providing server instance relation information
- OCConnection:
	- add OCConnectionSetupOptionKey type
	- allow to pass a username to -prepareForSetupWithOptions: via OCConnectionSetupOptionUserName
	- setup: add support for / integration with OCServerLocator
- OCHTTPRequest:
	- log application/jrd+json bodys in clear text

* - OCSQL:
    - add collation support via new OCSQLiteCollation class, making it as simple as possible to encapsulate and add collations, avoiding string conversions where possible
    - add collation OCSQLiteCollationLocalized (OCLOCALIZED) for "Finder-like" sorting
- OCDatabase+Schema: upgrade schema for metadata to use OCLOCALIZED for item name
- OCLogger: fix duplicate use of tags in _OC_RLOG macro

* - added authentication-oauth2.oidc-fallback-on-client-registration-failure, defaulting to true, to allow the automatic fallback to default client_id / client_secret if OpenID Connect Dynamic Client Registration fails with any error

* OAuth2:
- store token expiration timespan
- if stored token expiration timespan < (safetyMargin + 20) seconds, no longer preemptively refreshes the token within the safety margin

* - reset OCCapabilities to latest version

* - add NSError+OCErrorTools with new method to determine if an error is an authentication error
- OCConnection+Compatibility: improve error handling, adding handling for "Unauthorised" errors
- OCConnection: remove authenticated WebDAV request asking root WebDAV endpoint for D:supported-method-set, instead rely on capabilities to respond with an authentication error if auth credentials are not valid.
- AuthenticationTests: adjust for latest changes in OAuth2 and OCConnection connect

* - OCBookmark: add first-level support for access to the user.displayName with new property userDisplayName
- OCConnection: update .bookmark.userDisplayName (and save it unless it is a working copy with in-memory credentials storage) on every connect, if it was changed
- OCBookmarkManager: fix possible deadlock

* - Snapshot

* - snapshot

* - remove unused OCJobID from code

* OCCore+CommandLocalModification: no longer handle failure of -startAccessingSecurityScopedResource as an error, as that may indicate the inputFileURL is not actually security scoped, not that the file can't be accessed. Fixes enterprise#4934.

* - !! Snapshot !!
- overhaul of Resources concept
- implementation of OCResourceManager, addition of OCResourceManagerJob
- support for automatic (by deallocation) and manual removal and cancellation of OCResourceRequests
- add serialization/deserialization support to OCResource
- OCHTTP: extend documentation, fix sorting bug, add missing status code description

* - milestone: first functioning thumbnail implementation

* - Resources: database storage & retrieval of retrieved resources now working
- OCBookmarkManager deadlock bugfix

* - add OCPlatform
- add OCViewProvider + OCViewProviderContext
- add OCBookmark.avatar property serialized/deserializing to/from data, utilizing OCViewProvider for maximum flexibility, but ensuring OCBookmark can always be serialized/deserialized even if avatar can't be deserialized
- make OCAvatar a subclass of OCImage
- cleanup designed OCAvatar usages
- making progress, thumbnails and avatars now functional through OCResourceManager

* - OCResources
	- add new OCResourceSourceAvatarPlaceholders
	- add new OCResourceTextPlaceholder
	- add per-session and expiry triggers for avatars
	- add new error code OCErrorResourceDoesNotExist that forces clearing the cache and restart a resource manager job
	- add missing parts
- OCUser: add localizedInitials accessor and class method
- OCBookmark:
	- add .user property with a full copy of the OCUser instance from OCConnection.loggedInUser
	- provide fallback OCResourceTextPlaceholder for .avatar if none is set
- OCBookmarkManager: preserve existing OCBookmark instances on reload whenever possible
- OCConnection: keep bookmark.user up-to-date

* - OCBookmark: add more details to documentation regarding OCBookmark.userName
- OCConnection: build WebDAV root URL using loggedInUser, bookmark.user, only then bookmark.userName, addressing https://github.com/owncloud/enterprise/issues/4924

* - add OCBookmark.user property, storing the last retrieved version of OCConnection.loggedInUser
- use OCBookmark.user to compose WebDAV endpoint path (fixing https://github.com/owncloud/enterprise/issues/4924 )

* - OCCoreItemListTask: stop processing if core has shut down in the meantime

* - OCDatabase
	- Schemas: delete existing thumbnails from old thumbnails table
	- Versions: bump database version number to block repopulation of thumbnails table when using old versions
	- remove old thumbnails API
- OCCore: remove old thumbnails code

* - remove unused OCResourceSourceItemIcons

* - remove OCResourceSourceItemIcons.h from SDK header

* - OCCore: remove thumbnail APIs
- OCDatabase: remove thumbnail API
- OCItem: remove unused .thumbnail property
- OCResourceSourceAvatarPlaceholders: upgrade priority from local fallback to instant
- OCResourceManager: detect duplicate resource source additions
- OCResourceSourceItemThumbnails: utilize item.thumbnailAvailability information to avoid unnecessary requests

* - OCConnection+GraphAPI: start of graph API support
- OCConnection: add OCConnectionEndpointIDGraph
- OCGraph:
	- OCGraphContext: context to pass around during graph parsing
	- OCGraphData+Decoder: decodes graph JSON to graph model objects
	- OCGraphObject: protocol for graph model classes to follow
- ocapigen: YAML parser + code generator with advanced capabilities
	- no external dependencies
	- modular design allows implementation of different generators
		- initial implementation for Objective-C / ownCloudSDK
	- divides target files into segments, with support for:
		- locking segments
		- customizing code generation on a per-segment basis
- GraphAPI/GeneratedTypes: initial batch of model headers and implementations, auto-generated by ocapigen

* - use more distinct "namespace" prefix for Graph API model classes, switching from OCG to GA

* - fix typo in header

* - add OCDrive, OCQuota classes
- add OCDrive, OCDriveType and OCSeed types
- OCItem: add driveID
- OCDatabase:
	- add support for storing, updating, retrieving and deleting OCDrives into a new drives table
	- add driveID column to metaData / item table
- OCConnection+GraphAPI: fully implement drive list retrieval, based on GADrive and OCDrive
- OCRecipient: refactor as OCIdentity
- NSError+OCError: add new OCErrorGraphError code for packaging graph errors
- GAGraphData+Decoder: add NSString -> NSURL conversion, block file URLs
- code generator: also create NSSecureCoding en-/decoding code as well as a debug description implementation
- OCMacros: add new OCExpandVar macro to make meaningful debug descriptions easier to write

* - OCCapabilities: add support for spaces: enabled + version
- OCConnection:
	- turn server version + edition methods into properties
	- add new options OCConnectionEndpointURLOptionDriveID and OCConnectionOptionDriveID to pass driveID to endpoint and retrieveItems APIs
	- adopt new driveID options in almost all WebDAV-related methods
	- DirectURL: adopt new driveID option
	- Compatibility: add central drive switch .useDriveAPI
	- Tools: add support for DriveID-dependant WebDAV endpoint URL
	- OData:
		- new generalized support for requesting OData objects (and later to also create, update and delete them)
		- add stubs for a filter string builder for OCQueryCondition
	- GraphAPI: add methods to retrieve drive list and (cached) drives, use new OData APIs
- GraphAPI: fix issue decoding dates without fractional seconds
- OCHTTPDAVRequest: add driveID option to parsing
- OCLocation: new type that encapsulates bookmarkUUID, driveID and path
- OCItem: add .location property
- OCMacros: generalized macros to wrap/unwrap nil values into NSNull objects
- OCDatabase: add API to remove items for a particular driveID
- OCVault:
	- add drive related methods to erase local copies for a particular drive
	- add method to retrieve the root URL for files of a particular driveID
	- adapt existing methods to take an item's .driveID into account

* - add OCLocation comparison support + building tools
- change APIs and internal structures to use OCLocations instead of OCPaths
- adopt OCDriveID and OCLocation throughout core SDK types like OCShare, OCItem and more
- fix comparison with NULL values in generated SQLite WHERE clauses
- extend OCCoreItemList with drive selection

* - use GADrive instead of GDrive in OCDrive API name
- update types from latest yaml, add some "locked" parts in the headers that would otherwise be overwritten
- ocapigen: alphabetically sort forward declared types and includes so they don't change order and cause unnecessary changes

* - OCItem: add driveID to debug description
- OCDrive:
	- add isSubstantiallyDifferentFrom method to quickly determine if the drive description itself has changed in a substantial way (f.ex. id, type, name, davRootURL)
	- add rootLocation property returning the root folder (/) location
- OCDatabase:
	- add drive "seed" column
- OCCore:
	- replace polling of webDAV root for eTag changes with polling of drive list (+ eTag comparison)
- OCCore+CommandLocalImport: include driveID into placeholderItem
- OCSyncActionCopyMove: include driveID into placeholderItem
- OCSyncActionCreateFolder: include driveID into placeholderItem
- OCBookmark: add bookmark-capabilities support, feature flags that can be set, queried and removed
- OCConnection+GraphAPI: update .drives list every time a new, valid list is retrieved via -retrieveDriveListWithCompletionHandler:
- OCConnection+Compatibility: use bookmark capability OCBookmarkCapabilityDrives to determine .useDriveAPI property value
- OCConnection: set drives capability in bookmark during connect
- GADrive: change eTag from NSString to OCFileETag

* - update GA classes from latest libre-graph

* - OCDatabase: fix duplicate/multiple drive entries in OCDatabase
- OCDrive: add .rootETag property to return root eTag (both for flexibility and convenience)
- OCCore: use .rootETag from drives to trigger PROPFINDs on root folders of the spaces, including database-persistance (!)
- OCSQLiteQuery: add support for INSERT OR REPLACE query construction
- GADriveItem: use OCFileETag for .eTag rather than NSString directly

* - initial Data Sources implementation, including initial set of unit tests
- OCCore+ItemList: do not request updates from drives that do not have an ETag (assume a temporary malfunction)
- fix unit tests compilation errors: convert from OCPath-based APIs to OCLocation

* - NSArray+OCFiltering: utility category to filter arrays efficiently using a block
- Data Sources progress
	- CONCEPT.md: gives an overview over the thinking and structure behind data sources
	- OCCore+DataSources: APIs for core-provided data sources
	- OCDataItemPresentable: new container class storing an intermediate, presentable representation of an item
	- OCDataRenderer:
		- added "path finder" for auto-assembly of converters from one object type to another, using the smallest number of steps
		- added unit tests for path finding algorithm
	- OCDataSourceArray: implementation
	- OCDataSource: refine subscription API
	- OCDataSourceSubscription: add setNeedsUpdateHandling change aggregation pattern, allowing users to provide a dispatch queue to perform the change notification on
- OCDrive:
	- add OCDataItem and OCDataItemVersion suopport
	- add converter to OCDataItemPresentable

* - OCDataItemCellConfiguration: helper class that allows to temporarily attach additional information alongside OCDataItemReferences, where it can't be passed otherwise
- OCDataSource: add UUID property

* - OCDataItemCellConfiguration: add hostViewController property

* - remove OCDataCellConfiguration (replaced by CollectionViewCellConfiguration in ownCloudAppShared)

* - NSArray+OCFiltering: helper methods to quickly filter and find objects in arrays
- OCDataTypes: add types for filter and sort comparators on OCDataSourceItemReferences and OCDataItemRecords
- OCDataSourceArray: use same object for @synchronized internal state modification as OCDataSource
- OCDataSourceComposition:
	- new data source type that composes its content from one or more other OCDataSources
	- supports filtering and sorting
		- of every contributing data source individually
		- of the item set composed from all data sources
- GraphAPI type updates

* - OCResource
	- new request OCResourceRequestDriveItem and source OCResourceSourceDriveItems for DriveItems (from spaces)
	- new resource type: OCResourceTypeDriveItem
	- new resource: OCResourceText to store textual resources
- OCData
	- OCDataItemPresentable: add intermediate resources retrieval support (subject to change)
- OCDrive:
	- add support for providing OCDataItemPresentable resources for cover image and readme
	- add support for space description ("subtitle" in web UI)
	- add type for drive aliases
- Graph API
	- GADrive: add method to retrieve special items
	- GARemoteItem: use eTag type
	- GASpecialFolder: add GASpecialFolderName type and add GASpecialFolderNameReadme and GASpecialFolderNameImage

* - OCConnection+Avatars: use parsed content type
- OCConnection: remove .supportsPreviewAPI and support for thumbnail API
- OCCore+DataSources: clarify the data sources are read-only
- OCDataItemPresentable: change API to return requests to resources, rather than the resource themselves
- OCDrive: adapt to OCDataItemPresentable changes

* - OCItemVersionSeed: new value to allow quick detection of changes in items
	- OCItem: add new versionSeed property and associated methods to update the seed
	- OCCore: add support for updating versionSeed when changes occur
- OCItem+OCDataItem: make OCItem comply to OCDataItem and OCDataItemVersion (the latter using the new version seed)
- OCHTTPResponse: extend support for encoding-sensitive conversion of body data to NSStrings, with explicit fallback encoding
- OCResourceSourceDriveItems: make text resource encoding sensitive
- OCResourceText: make compliant to OCDataItem and OCDataItemVersion
- OCDrive: include readme and image in significant update detection, add support for subtitles/descriptions
- GAGraphData+Decoder: add support for unescaped URLs (https://github.com/owncloud/ocis/issues/3538)
- OCLocation: add .lastPathComponent utility property
- OCViewProviderContext: add initializer and context key for content mode
- OCQuery: add .queryResultsDataSource property providing an OCDataSource tracking the query's results (leaving room for future performance improvements)

* - OCConnection: only accept images in return to thumbnail requests (working around https://github.com/owncloud/ocis/issues/3558)
- OCCore: include virtual drives in hierarchicDrivesTopLevelItems
- OCResource subsystem:
	- fix bug that prevented retrieval of resources other than item thumbnail and avatars from cache
	- fix bug that could mix resources of different types that shared the same ID

* - OCConnection:
	- add virtual preview API endpoint
	- remove legacy thumbnail endpoint support
- OCImage: fix logical error that led to wrong/inferior resolutions being picked
- GAGraphContext: comment out designed methods for now, to avoid warnings

* - add enum annotations for Swift 5

* - additional Swift 5 enum adaptions
- OCConnection: return new OCErrorMissingDriveID + log a warning when a command without drive ID is attempted on a drive-based account

* - new class: OCVaultLocation
	- provides an abstract description of an item's location in a vault
	- can en- and decode OCVFSItemIDs
- OCVault
	- add support to map OCVaultLocations to NSURLs - and back
	- add additional class methods to retrieve specific container root URLs
	- add filesystem layout overview to header file
- OCVFS (WIP)
	- virtual file system implementation
	- supports virtual folders and mapping OCQuerys and OCLocations via OCVFSNodes
	- returns OCVFSContent to describe contents of a folder

* - OCItem: add .customIdentifier1 and .customIdentifier2 to temporarily store two references/IDs that aren't serialized
- OCVault: fix URL <-> OCVFSItemID conversion bugs
- OCVFS: make advances in implementation to drive a first File Provider implementation

* - OCVault:
	- add APIs to store, retrieve and track drives, including in a new detached state (for drives that were removed on the server)
	- add support for OCVFS ID conversion hooks
	- change File Provider signaling to adopt OCVFSItemID
	- add isVirtual flag to OCVaultLocation to allow referencing a drive root mapping to an OCVFSNode
- OCVFS
	- refine ID addressing scheme and implement support for it across OCVaultLocation and OCVFS
	- specify the OCVFSItem protocol and implement it for OCItem and OCVFSNode
	- differentiate auto-updating and self-updating OCVFSContent via .isSnapshot property
	- add methods to OCVFSCore to replace all nodes and request a drive root based on its OCLocation
- OCDrive: add properties for detached state tracking, make value comparisons in isSubstantiallyDifferentFrom nil-aware
- OCItem: replace customIdentifier1/2 with non-serialized .bookmarkUUID property
- OCDatabase: remove support and schema for drives table- NSArray+OCMapping: utility category that adds methods to transform arrays into sets and dictionaries
- OCCore+ItemList: switch to vault as source for drives to scan periodically
- OCCore: clean up drive APIs, make them pass through to OCVault
- OCConnection+Compatibility: add workaround for broken legacy version in ocis beta/nightly
- OCDataSourceKVO: new data source class that is updated via KVO observation of another object, with immediate filtering/conversion capabilities. Supports both regular data items and versioned data items.

* - ocapigen:
	- add support for primitive item types (=> i.e. strings) to resolve warnings and properly dearchive all properties
	- fix occurrences of "NSArray.class.class"
	- update GA types with fixes by running the generator against the latest yaml file
- OCVault.h: add info on subfolder used by TUS uploads

* - OCItem: add OCItemPropertyNameDriveID to allow custom queries targeting specific drives
- OCDatabase: add mapping for OCItemPropertyNameDriveID to driveID database column
- OCCore: add support for drive IDs to -[OCCore trackItemAtLocation:…]
- OCDrive:
	- turn OCDriveType into a string enum
	- add .isDeactivated property
- GADeleted: add type GADeletedState for .state
- OCHTTPRequest: add size of URL-based request body to debug output

* - OCAction: simple encapsulation class for actions that can originate from anywhere (SDK, app, …)
- OCDataTypes: add types for Message (TBD) and Action
- OCDataSource: add OCDataSourceState type as a simple way to convey the status of the underlying mechanism of a data source
- OCQuery: update .queryResultsDataSource.state from OCQuery.state

* - OCAction: extend with identifier, version and type (regular/destructive) properties for a richer representation and more flexibility to control updates
- OCAuthenticationMethod: add convenience class method localizedNameForAuthenticationMethodIdentifier to return the name of an authentication method
- OCAuthenticationMethodOpenIDConnect: add "select_account" to prompt to ensure the account switcher is shown for users that are already logged in
- Data sources:
	- rename OCDataItemVersion protocol to OCDataItemVersioning since Swift can't tell the protocol and the type apart otherwise
	- add new OCDataItemTypeView for views
	- add ordering detection to OCDataSourceSubscription and report it as change as well

* - OCLocation: add simple en-/decoding to/from data and UTI data type ID
- OCQuery: fix typo in .rootItem description

* - OCDataSourceComposition
	- new methods to add, insert and remove sources dynamically
	- new method to include/exclude added sources

* - OCDataSourceComposition: efficiency change: only update composition if include status of a source actually changed

* - NSArray+OCMapping: add method -arrayUsingMapper:
- NSDate+OCDateParser: add method -localizedStringWithTemplate:locale: for flexible localized date representations
- OCQueryCondition: add userInfo property to support adding additional meta data (such as by the ownCloudApp framework for UI purposes)

* Add app provider support
- OCAppProvider: encapsulates URLs, retrieved raw app lists, parsed apps and file types
- OCAppProviderApp: encapsulates apps and provides metadata, including the icon as URLItem resource
- OCAppProviderFileType: encapsulates file types and provides metadata, including the icon as URLItem resource
- OCCapabilities: support for on-demand parsing of  app_providers into OCAppProvider instances, convenience access to latest supported app provider version
- OCConnection:
	- support for the new app provider endpoints in the endpoint API
	- new methods to retrieve app list, create new documents and open documents in web apps
- OCCore: new KVO-observable, managed .appProvider property for convenience access to the latest supported app provider

New URLItem resource type:
- intended for caching remote, URL-based resources with variable caching intervals

Miscellaneous improvements:
- new OCMIMEType and OCFileExtension types
- fix DataSourceTests
- add ocis target to OCTestTarget and stub app provider endpoint test (needs server support to fully implement)

* - OCHTTPDAVRequest: implement support for "Prefer: return=minimal" to take advantage of https://github.com/cs3org/reva/pull/3222
- OCItem+OCTypeAlias: add support for (MIME) type aliases directly into the SDK
	- new OCTypeAlias type
	- new methods for conversion from OCMIMEType to OCTypeAlias
	- new OCItemPropertyNameTypeAlias and support in the SQL Builder
	- add new typeAlias column to metadata, implement v16 of the metaData table schema and an efficient migration with progress reporting
- OCSQLiteDB: add -dropTableSchemas method to release table schemas when they are no longer needed, allowing to free memory held by migration blocks in the schemas, take advantage in OCDatabase

* - OCConnection: add support for "open" app providers endpoint
- OCAppProviderApp: add type to support app provider view mode (view, read, write)
- OCConnection+AppProviders: add support for "open" endpoint, with mode support and returning a ready-to-use URL request
- NSError+OCISError: add support for parsing `{ code: "…", message: "…" }`-style ocis errors into NSError objects
- NSError+OCError: add new error codes to support NSError+OCISError
- NSDictionary+OCFormEncoding: factor out code to encode a dictionary of parameters as a PUT/POST body data

* - OCSyncActionDelete: fix potential crash bug

* - add new OCDataItemTypeSavedSearch data type

* - OCCore
	- add new data source .subscribedDrivesDataSource for subscribed drives
	- add support for deactivated drives
	- do not return a drive as subscribed when it was deactivated on the server
	- automatically reload custom queries if the list of subscribed drives changes
	- mark items of detached drives as deleted, change their detachedStatus from .new to .itemsRemoved
- OCDrive: better documentation of OCDriveDetachedStates and additional state OCDriveDetachedStateItemsRemoved
- OCMacros: add OCWaitOnCompletion to execute a block on completion of the OCWait
- OCDatabase: add methods to remove (mark as deleted) or purge (actually remove) the cache items for a whole drive
- OCVault:
	- add two new internal notifications for when the subscribed and detached drive lists change respectively
	- add new wipe mechanism
		- has wipeContainer locations inside .rootURL and .filesRootURL
		- fs items (files/folders) to be wiped are moved into these folders, then removed
		- all items inside wipeContainers are removed eventually (f.ex. on opening a bookmark, the app, etc.)
	- new method to erase a drive (both files + from cache in DB)

* - OCVault: improve error handling and fileop debug logging

* - fix wrong type warning in implementation

* - update GraphAPI to libre-grap-api v0.17.0

* - OCDrive: no longer pass through space type as presentable subtitle, only actual drive descriptions
- OCLogger: add new "replace-newline" option that replaces newlines with "\n" by default, disable (then unneeded) "single-lined" by default

* - OCHTTP: add support for 425 status
- OCItem:
	- add parsing support for 425 status multi-responses
	- add OCItemState signalling 425 status as .serverSideProcessing

* - OCHTTPStatus: add textual representation for 425 status

* - OCConnection+AppProviders: fix error pass through from HTTP to completion handler

* - OCCore+ItemList: add missing error handling when retrieving drive list; drives now no longer vanish when connections fail or are note possible

* - OCCore+ItemList: recognize OCItem.state changes as relevant change for updating the item and its versionSeed

* - add all missing German translations in Localizable.strings

* - OCConnection+Download: add error code + error message for files returning 425 on download

* - add missing localization of string "Retry"

* - OCCore+SyncEngine: avoid publishing the same sync activity twice

* - OCCore+ItemList:
	- FIX: add .previousPath to renamed items where that info was previously missing
	- FIX: ensure that recomposed paths after a move end in a "/" for folders
- OCCore+ItemUpdates: update OCQuery.queryLocation when the observed location is moved

* - OCVFSCore: guard nodes against enumeration during mutation (which could cause crashes)

* - OCCapabilities: add convenience accessor .federatedSharingSupported with temporary workaround for https://github.com/owncloud/ocis/issues/4788
- OCCore+Sharing: update share queries also in case of errors
- NSError+OCHTTPStatus: add method to quickly check if an error is a HTTP status code
- OCImage: use QOS_CLASS_DEFAULT instead of QOS_CLASS_USER_INITIATED

* - fix Xcode 14 warnings

* - OCShareRole: encapsulates information on sharing roles for display
- OCCore: add new APIs to retrieve available sharing roles for a location, as well as identify the one matching an OCShare
- OCSymbol: OCSymbolName type and class for accessing SF Symbols, adding an abstraction layer that simplifies access and allows centralized customization down the road
- OCLocation: new OCLocationType, also usable as mask, for file, folder, drive and account
- OCShare:
	- migrate from OCItemType to OCLocationType
	- add conversion for OCShareType<->OCShareTypesMask
	- XML parsing support for extracting drive ID information to form a complete OCLocation

* - OCStatistic:
	- new class to provide structured statistical data from the SDK to clients like the app
	- implements OCDataItem and OCDataItemVersioning, so could also be used in data sources as items in the future
- OCDataSource:
	- change implementation of .specialItemReferences to .specialItems, allowing to directly pass OCDataItems from source to subscribers
	- add new OCDataSourceSpecialItemFolderStatistics
- OCDrive: change type of .quota to GAQuota
- OCQuota: add missing OCQuotaState labels
- OCQuery: add .queryResultsDataSourceIncludesStatistics to request that statistics be provided through the query's data source

* - OCDrive: implement .name override for "Personal" and "Shares" spaces

* - OCSyncActionCopyMove: prevent copying and moving of items into themselves

* - OCConnection+AppProviders: add OCConnection.staticHeaderFields to the header fields used in the initial request when opening a web app in-app (typically adding "Accept-Language" to that request)
- OCConnection + OCHTTPRequest: use header field data type rather than different NSDictionary types

* - OCDrive:
	- add new property "specialType" to easily determine if the drive is the personal or shares jail space - or a regular project space
	- detect shares jail not by "virtual" type but by UUID
	- adapt .name to use .specialType to return hardcoded names

* - OCLocale+SystemLanguage: new category providing the "Accept-Language" string as well as the primary language of the user
- OCCore: replace local code with OCLocale+SystemLanguage to fill Accept Language static header field
- OCConnection+AppProviders: add "lang=" parameter if the primaryUserLanguage can be determined. Fixes the issue that the UI of web apps was always presented in English, irrespective of the user's system language.

* - OCConnection+AppProviders: return tailored error message and OCError code for 425 responses to open-web and open endpoint requests

* - NSError+OCISError: add support for code TOO_EARLY
- OCConnection+AppProvider: hardcode to always use the SDK's own 425 error rather than the error that may be returned from the server as JSON (=> which would not be localized)

* - Data Sources:
	- Types: add new item types for OCBookmark and OCLocation
	- Presentable: add .image property for easier rendering of small images (f.ex. for a toolbar)
	- OCDataSourceArray: provide convenience initializer method to pass content at initialization
	- OCDataSourceMapped: new kind of data sources that allows to map an input data source's items to any kind of items that are dynamically created, updated and removed to match the contents of the source datasource
- OCAuthenticationBrowserSessionCustomScheme: move workaround to open URLs from extensions to class-level method to make it generally available
- OCLocation: adopt OCDataItem + OCDataItemVersioning
- OCBookmark: adopt OCDataItem + OCDataItemVersioning
- OCBookmarkManager: provide a data source with the bookmarks
- OCAsyncSequentialQueue: add convenience initializer allowing to pass a dispatch queue to create an executor from

* - OCDataSource:
	- make OCDataSourceKVO available outside the SDK
	- call -terminateSubscription for all active subscriptions on deallocation
- OCQuery: change signal for setting data source state to Loading or Idle so empty folders no longer indicate Loading forever
- replace calls to [UIImage systemImageNamed:] with OCSymbol calls

* - OCAction: add support and a property for ActionProperties, clarify OCActionOption as OCActionRunOption
- OCDataSource: add method to signal updated items by reference efficiently

* - GAGroup: update to libre-graph-api spec v1.0.0

* - OCAction: new type .warning and closed extensibility attribute
- OCResourceManager: add support for status 425 (log and return error)
- OCDataSourceMapped: support changing source and, by setting it to nil, calling the destroyer on all mapped items

* - OCConnection: add support for cross-space COPYs
- OCCore:
	- add new async API to retrieve the cached item for an OCLoation
	- enrich OCLocation with .bookmarkUUID in more places
- OCUser: crash fix and fallback algorithm if the OS does not return initials for a name
- OCItem: return bookmarkUUID as part of the .location
- OCLocation: relax equal comparison: if the driveID is identical, but only one of the OCLocations has a bookmarkUUID, assume it is the same
- OCCertificateStore: store for certificates, preparing for future usage by OCBookmark

* - OCCertificateStore: complete implementation
- OCBookmark:
	- replace plain certificate property with OCCertificateStore and build migration path from existing bookmarks
	- add diagnostics support for multiple certificates
	- add new .primaryCertificate property that returns the certificate matching the bookmark's hostname - or - the only certificate in the store if there is only one
- OCConnection: adapt bookmark building to use OCCertificateStore
- OCHTTPPolicyBookmark:
	- add support for handling certificates for multiple hostnames using a bookmark's Certificate Store
	- implement option connection.associated-certificates-tracking-rule to opt-in certificates other than the server's main certificate into change tracking/recognition
- OCHTTPRequest: add property .hostname for quick access to .effectiveURL/.url hostname

* - OCDataSourceMapped: fix subscription leak on deallocation
- OCDataSource: add new subscription observer API allowing to dynamically start/stop updating content when there is or isn't demand

* - OCCore+DataSources:
	- make names of existing data sources clearer
	- add new data sources for: favorite, available offline item policies, available offline files
	- implement dynamic polling logic (currently used for favorites)
	- prepare for additional data sources for different sharing aspects
- OCItemPolicy:
	- add UUID with fallbacks
	- implement OCDataItem + OCDataItemVersioning support, including a small converter to OCDataItemTypePresentable
	- use .locationString instead of .path in conditions for collections
	- OCItemPolicyProcessorAvailableOffline: add support for drives/spaces
- OCDataTypes: add ItemPolicy type
- OCItem: add .locationString property
- OCDatabase: add new locationString column to metadata database, updating the schema

* - add missing headerfile OCItemPolicy+OCDataItem.h to target

* - OCBookmark: add Favorites capability
- OCCapabilities: add support for favorites support capability
- OCConnection: update bookmarks if its Favorites capability changed
- OCCore+DataSources:
	- clean up naming
	- add additional on-demand data sources for "sharedWithMe" OCShares
- OCShare:
	- rename OCShareStateRejected to OCShareStateDeclined to match wording used elsewhere
	- add OCDataItem + OCDataItemVersioning support
	- add support for composing FileID in Share Jail from ShareID
- OCDataTypes: add Share data type
- OCDataSource/Mapped/Composition: add content synchronization support via dispatch groups and different subscriptions types
- OCDrive: add MountPoint drive type
- libre-graph-api: add new classes and update existing classes via code generation

* - OCDataSourceArray: add internal tracking of OCDataItem versions to allow detecting changes to identical objects
- OCCore+OCDataSource: take advantage of OCDataSourceArray.trackItemVersions to detect changes to OCShares
- OCShare: include cloud share .accepted state into data item version

* - address Xcode 14 thread priority inversion warnings at runtime

* - OCConnection+Sharing:
	- add support for drives
	- add context in which an OCShare was received from the server (shared with me/shared by me)
- OCShare:
	- add .category property and OCShareCategory type
	- add support for grouping shares
	- further enhance Drive ID / File ID logic, describe difficulties with the current approach in https://github.com/owncloud/ocis/issues/5355
- OCCore+DataSources:
	- use the contents of the Shares Jail for "Accepted Shares" instead of the OCShares
	- implement on-demand data sources for sharedByMeDataSource and sharedByLinkDataSource
	- return grouped and sorted shares from all OCShare data sources
- OCDrive: add root ETag to debug output

* - OCCore+DataSources: add .shareJailQueryCustomizer to allow applying filtering and sorting options to the underlying OCQuery for shareWithMeAcceptedDataSource

* - upgrade project version to Xcode 14.2

* - add OCClassSettingsFlatSourcePostBuild to allow injection of post-build class settings

* - rename OCClassSettingsKeyPostBuildAllowedFlatIdentifiers to OCClassSettingsKeyPostBuildAllowedSettings

* - OCDataSourceMapped: fix curiosity crash bug where a weak var is initialized with nil during deallocation

* - OCDataSource:
	- fix auto-completion typo/error that lead to initial updates on subscriptions being ignored and the value of trackDifferences being used instead
	- fix performIntialUpdate -> performInitialUpdate typo

* - fix issue where OC10 accounts showed up empty in the File Provider

* - address static analyzer findings (potential crashes and memory leaks)

* - OCDrive: change label from Shares jail from "Shares" to "Shared with me"

* - OCClassSettingsFlatSourcePostBuild : fix type error leading to a crash

* - make OCResourceSourceURLItems and OCResourceRequestURLItem public API

* - OCLocation: also transfer .bookmarkUUID when creating a copy of an instance

* - OCBookmarkManager: reply on OCBookmark.dataItemVersion to trigger updates to bookmarksDatasource

* - OCAuthenticationMethod
	- broaden API to allow passing options in more methods
	- add additional option keys to
		- pass along a Web Finger Account Lookup URL
		- skip WebDAV-endpoint WWW-Authenticate based tests for authentication method availability (OCAuthenticationMethodSkipWWWAuthenticateChecksKey)
		- limit which authentication methods are allowed
	- BasicAuth + OAuth2: add support for OCAuthenticationMethodSkipWWWAuthenticateChecksKey
	- OIDC:implement alternative logic when OCAuthenticationMethodSkipWWWAuthenticateChecksKey is passed as option
- OCConnection
	- add support for option OCAuthenticationMethodAllowedMethods
	- add support for WebFinger as status.php alternative during account setup
	- add support for retrieving available OCServerInstances after authentication via authenticated WebFinger
	- add support passing back options in the -prepareForSetupWithOptions completionHandler
- OCServerInstance
	- new class to encapsulate server-instance specific information when creating new bookmarks / during account setup
	- convenience accessor for localized server title based on localized title dictionary retrieved from the server
	- OCBookmark+ServerInstance: convenience method to apply a server instance's content to an OCBookmark
- adapt tests to past bookmark.certificate API changes and recent authentication API changes

* - upgrade project from Xcode 13.3 to 14.2
- bring OCConnection+Setup webfinger + authenticated webfinger code in line with enterprise#5579
	- send hosts root URL as relation to webfinger in first request	- send acct:me@{host} as relation to webfinger in second request
	- add "Location:" header with URL of server pointing to IdP when requesting /.well-known/openid-configuration
- extend and clean up NSURL+OCURLQueryParameterExtensions

* - OCConnection+AppProviders: ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en")

* - OCBookmarkManager: ensure _bookmarksDatasource is updated after loading bookmarks

* - OCExtensionContext: in convenience initializer, create new instance from called class, not OCExtensionContext

* - OCConnection: Accept-Language now correctly formats language codes with region/country variant additions, addressing https://github.com/owncloud/ios-app/issues/1193

* - OCConnection:
	- add and implement new option OCAuthenticationMethodWebFingerAlternativeIDPKey to store and re-use information on an alternative IDP address
	- use OCAuthenticationMethodWebFingerAlternativeIDPKey with response returned from WebFinger
	- extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey
- OCAuthentictionMethod:
	- extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey
	- tolerate lack of user_id in token responses in context of WebFinger account lookup, as user_id may depend on the respective instance the user chooses
- OCBookmark: use _lastUsername as a fallback for auth method + auth data derived user_name

* - OCConnection+Setup: prevent erroneously triggering connection validation if a server doesn't support webfinger lookup

* - OCLocation: add new isDriveRoot property to determine if a location is a drive's root

Address https://github.com/owncloud/ios-app/issues/1188 with the following changes:
- OCSyncRecord:
	- add new .removed property to use instead of .recordID when removing a sync record
	- OCDatabase: change to cache sync records ONLY within the Sync Engine, to avoid any possible concurrency issues
- SyncEngine:
	- make use of OCSyncRecord.removed property
	- handle exceptions during processing
		- log sync action and exception in detail
		- send OCIssue to the UI informing the user
		- terminate and remove the action from the queue, so they can't disrupt the client further

* - OCCore: use vault to resolve identifiers to drives, remove internal _drivesByID variable, which was initialized from the vault, but then not kept up-to-date and caused issues

* - OCAuthenticationMethodOpenIDConnect: allow changes to "prompt" via class settings

* - NSDate+OCDateParser: add shared ISO8601 date formatters to parse/compose dates issued by/accepted by oCIS sharing
- OCConnection+Sharing: adapt date formatting for oCIS
- OCCore+DataSources: make OCShares shared by the user available as flat data source and as a data source of grouped OCShares
- OCCore+Sharing: fix bug preventing OCShareRoles from being setup
- OCRecipientSearchController: make recipients available as data source
- OCDataTypes: add item types for OCShareRole and OCIdentity
- OCIdentity: make OCDataItem + OCDataVersioning compatible
- OCShareRole: make OCDataItem + OCDataVersioning compatible

* - OCAppIdentity: add support for FileProviderUIExtension app component
- OCCore+DataSources: sort shared-by-me shares by location + recipient

* - OCItem: add .parentPath property
- OCDatabase: add SQLBuilder support for .parentPath

* - OCConnection+Sharing: return a descriptive error when a share create/modify/delete request fails due to a missing internet connection

* - OCConnection+Sharing: categorize item, item with reshares and subitems as "Shard By Me"
- OCCore+DataSources: a…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
p3-medium Normal priority
Projects
None yet
Development

No branches or pull requests

3 participants