Skip to content

Commit

Permalink
[feature/fileprovider] File Provider support (#67)
Browse files Browse the repository at this point in the history
* - Move to feature/sync version of ios-sdk

* - Replaced CoreManager and BookmarkManager with OCCoreManager and OCBookmarkManager
- Upgraded bookmark deletion (and deletion of its vault) to being guarded as scheduled offline operation by OCCoreManager
- Upgraded source base to take advantage of new instance properties for shared instances
- Added file provider and file provider UI targets (WIP)

* - add NSFileProviderItem protocol compliance to OCItem
- remove template FileProviderItem

* - First implementation of the file provider (WIP)
	- FileProviderInterfaceManager to manage the file provider from the app
	- For starters, the File Provider supports
		- browsing
		- thumbnails
	- Adapted project settings for keychain access group, app group, etc.
- Made OCBookmark.shortName an actual read-only property
- Updated app and file provider extension to take advantage of the latest ios-sdk improvements

* - Update SDK

* - Basic delete support (handling MC issues TBD)

* - Add UIAlertController+OCConnectionIssue to turn multiple choice issues into alerts

* - Add AsyncSequentialQueue class

* - Update SDK
- Add proof-of-concept "duplicate" and "rename" actions

* - Fileprovider now supports
	- deletion
	- renaming
	- reparenting (moving)
	- creating directories
- SDK-level bugfixes
	- for when the fileID of an item changed (update in metaData database was missing)
	- for the lack of a runloop on the extension main thread

* - Make use of downloading capabilities in the app to allow viewing files (proof-of-concept)
- Extend File Provider with ability to download requested files (non-functional atm, as the File Provider doesn't call the respective method)

* - Update PocketSVG to latest
- Adapt to ios-sdk API changes
- Add code to recover background URL sessions
- Add Mock build configuration and MockingAliases (which already turned out to be an approach that won't work, but saved here for playing/reference)

* - File Provider can now download and open files
- Removed Mock build configuration (no longer needed)

* - Update ios-sdk to gain critical File Provider related changes

* - Merge fixes to new API / formatting / broken project file

* - Remove superfluous MockingAliases.swift file

* - Download progress is now shown
- Usernames are prepended before computed bookmark names (i.e. "admin @ demo.owncloud.org") in the bookmark list
- ProgressSummarizer now removes completed progress objects and accurately computes progress
- Support for OCCoreManager.postFileProviderNotifications
- SDK updates
- fixed warning

* - Switching to ios-sdk/feature/filemgmt

* Restructured file provider to take advantage of OCQuery's multi-level updates and supporting future offline capabilities

* - Refactor FileProviderEnumerator to support multiple observers in every category

* - Update SDK

* - Fixed issue where new domains in the file provider would not be displayed - or only after a long delay - by moving the respective code to the main thread
- Taking advantage of new OCCore functionality to signal changes

* - Fix bugs and add missing code paths in FileProvider

* - Reload bookmarks when first encountering an unknown bookmark (covers the case where the FileProvider runs while new bookmarks get added in the app)

* - Update SDK, gaining automatic support for checking for updates on the server

* - Background fetch and background URL session routing from app to SDk

* - Update to latest SDK

* - Fixed a deadlock in FileProvider
- Added isDownloading, isDownloaded and contentModificationDate information to NSFileProviderItem support

* - Adding certificate management to settings
- Adding ThemeCertificateViewController, a version of OCCertificateViewController leveraging the themeing system
- Update the app to use ThemeCertificateViewController instead of OCCertificateViewController
- StaticTableViewController bugfix: now no longer crashes if a view controller, that has already been shown, is updated while not visible
- Indentation fixes

* - Add TextViewController to easily display text and attributed text
- Add Acknowledgements to settings that compiles and shows the license texts provided through license extensions
- Add build step to copy PocketSVG license into the resources folder
- Add license extension to supply the PocketSVG license
- Rename build steps to be more descriptive
- Fix typos

* - Updated SDK

* - Update to latest SDK
- display icon in ClientItemCell's at 50% transparent if an item is a placeholder

* Added the Provisioning Profiles of the Document Provider on the Fastfile for AdHoc distributionOC

* Disabled the automatic code signing

* Setted the project as not automatic and setted the right certificates

* - FileProvider changes
	- Modernized to use new OCSyncExec macros for more clarity, finding and fixing timing bugs along the way
	- Stopped removing files in -stopProvidingItemAtURL
	- Added support for importing documents (=> uploading)
- Updated to newer SDK

* Version Bump to 57

* Version Bump to 59

* - OCMockingManager extension to support adding mocking blocks by passing [location : block] dictionaries from Swift code

* - Updated SDK
- Fixed warnings after switching to Xcode 10

* - Updated for new OCCore.hostHasFileProvider / OCHasFileProvider feature

* - SDK update
- Fixing a typo

* - Updated FileProvider for OCCore.hostHasFileProvider
- Added support for uploading edited/modified files to FileProvider
- Updated SDK

* Fixed a compilation issue when generate a build on bitrise

* - Adapting to nullability-annotated API changes

* - Ensures that issues and alerts are presented even if the ClientRootViewController already presents a view controller

* - Update SDK

* - Providing more item status metadata to the File Provider
- Include username in autogenerated bookmark name as well
- Fix warning in ClientQueryViewController
- Updated SDK

* SDK update

* - SDK update

* - File Provider changes
	- clarified which comments and TODOs are from Apple template comments
	- clean up FileProviderExtensionThumbnailRequest and fix an issue in it
- Make sure "Certificates" appears under all passcode-related options in Security section in settings

* - Adapt Viewer to OCExtension nullability changes, fixing a crash in matching with the Acknowledgements view in Settings

* - Fix status badge in upper-right

* - Improvement: when adding a bookmark, hitting the Return key in the URL field triggers the "Continue" button

* - Update to latest SDK
- Adaptions to OCAppIdentity nullability update
- Making the git commit available through LastGitCommit() throughout the project
- Fix git commit info in the project file (was broken since switching to Xcode 10)
- Add beta warning (comes up whenever the git commit changes)

* - Change warning text
- Commit accidentally uncommited changes that were meant to be commit with the previous commit

* - Fix commit that external/PocketSVG is targeting
- Fix indentation in several files
- Change type of ThemeCollectionStyle to String and start implementing a section for users to choose between theme styles

* - Added ThemeStyle
	- encapsulates all information needed to build and customize a ThemeCollection
	- preliminary support for colorPath=#aabbcc style theme customization
	- uses OCExtension to keep track of styles, determine the default style and allow overriding by vendor styles
	- interface to request the defaultStyle and set a preferredStyle
- Added "User Interface" preferences
	- Section "Theme" allows picking a ThemeStyle
- Added ThemeColllection-switching method to Theme
- Made ThemeCollectionStyle iterable
- Moved "Recommend to friend" and "Send feedback" to new VendorServices class
- Removed theme switching code from "Help" button and wired it to "Send feedback"
- Extended StaticTableViewRow with new row type for value settings
- Added String extension to convert "#aabbcc"-style strings into a UIColor
- Fixed indenation of some legal notices
- Various other minor improvements

* - Cleanup

* - Add missing localizations
- Change "Help" to "Feedback"
- Change feedback email address and subject to include "beta"

* Version Bump to 76

* Version Bump to 77

* Version Bump to 78

* - Updated SDK with fixes for recognizing remotely made file name changes

* - Update to latest ios-sdk
- Added "app.show-beta-warning" configuration point, adding an "oc:show-beta-warning" environment variable and setting it to "false" (both without quotes) will disable the beta warning

* - File Provider:
	- update SDK to include important bugfixes, so folders can be chosen in "Save to Files"
	- make root folder item return the proper identifier expected by iOS
	- add additional debug info to output
	- creating a folder in root directory now works

* - Add support for OCLogger improvements
- Move from NSLog to OCLogger

* - Add user interface for logging settings, incl.:
	- log level
	- privacy mode
	- individual log writers
	- resetting the log file
	- exporting the log file

* - Add ownCloudMocking.framework to ownCloud tests

* - Add early logger initialization
- Move "Off" log level option to the end so that the order of levels aligns with the level of filtering / message supression

* Version Bump to 79

* - Merge improvements from feature/misc back into feature/fileprovider

* - Fix Info.plist overlooked merge conflict

* - Fix ios-sdk branch reference in gitmodules

* - Remove FileProviderUI (for now) from the app bundle
- Return authentication error if no domain.identifier is provided (=> shown for "ownCloud" item in file provider that shows up when no account has yet been added)

* - Add support for favoriteRank and tagData based on new OCItem.localAttributes feature

* - Add File Provider tagData format description (comment in FileProviderExtension)

* - FileProvider improvements:
	- itemForIdentifier:error: now returns the proper error for unknown identifiers
	- document import improvements:
		- detects uploads from our own vault and makes sure these files are copied, not moved to import
		- detects local name collissions (=> duplicate in Files app works now because of this)
- Updated ios-sdk

* - First attempt at adding server-side collission error reporting via -[OCItem setUploadingError:] when importing files

* - Updated to latest ios-sdk, containing important bugfixes for file uploads

* - Move local attributes to new OCCore.updateItem API

* - [FileProviderEnumerator queryHasChangesAvailable:] no longer (erroneously, from the earliest days of development) sends File Provider change signals when the query state becomes idle, often ending in an infinite loop

* - Make File Provider also return YES for isMostRecentVersionDownloaded on items if the item in question is currently uploading, as it is likely to be the next "most-recent" version of the file, soon

* - Add support for cancelling downloads initiated via the File Provider

* - Translate ownCloud permissions to FileProvider permissions

* - Update SDK

* - Updated SDK

* - Updated SDK

* - Plug memory leaks in app

* - Make core weak for ClientRootViewController
- Add missing OCHasFileProvider key to File Provider Info.plist
- Set memory configuration to minimum for File Provider
- Update SDK

* - Fix PocketSVG commit pointer

* - Reconnect PocketSVG to GitHub master latest commit

* Version Bump to 81

* - Transfer remaining set of memory leak fixes from memleaks branch

* - Ensure File Provider Domains (which represent OCBookmarks) have unique names
- Optimize OCBookmark.shortName

* - Update SDK

* - Added detection of name conflicts with existing items for creating folders
- Addresses issue where folders couldn't be duplicated in the Files app
  • Loading branch information
felix-schwarz authored and jesmrec committed Nov 23, 2018
1 parent b9e7f82 commit b11137d
Show file tree
Hide file tree
Showing 41 changed files with 2,648 additions and 70 deletions.
4 changes: 3 additions & 1 deletion fastlane/Fastfile
Expand Up @@ -36,7 +36,9 @@ platform :ios do
export_options: {
method: "ad-hoc",
provisioningProfiles: {
"com.owncloud.ios-app" => "match AdHoc com.owncloud.ios-app"
"com.owncloud.ios-app" => "match AdHoc com.owncloud.ios-app",
"com.owncloud.ios-app.ownCloud-File-Provider" => "match AdHoc com.owncloud.ios-app.ownCloud-File-Provider",
"com.owncloud.ios-app.ownCloud-File-ProviderUI" => "match AdHoc com.owncloud.ios-app.ownCloud-File-ProviderUI"
#Add more Provisioning Profiles when extensions are added
}
}
Expand Down
2 changes: 1 addition & 1 deletion ios-sdk
Submodule ios-sdk updated 31 files
+8 −0 ownCloudSDK.xcodeproj/project.pbxproj
+26 −1 ownCloudSDK/Connection/OCConnection+Compatibility.m
+15 −11 ownCloudSDK/Connection/OCConnection+Setup.m
+1 −3 ownCloudSDK/Connection/OCConnection+Tools.m
+4 −0 ownCloudSDK/Connection/OCConnection.h
+8 −17 ownCloudSDK/Connection/OCConnection.m
+1 −1 ownCloudSDK/Connection/OCConnectionDAVMultistatusResponse.h
+10 −4 ownCloudSDK/Core/Actions/CopyMove/OCSyncActionCopyMove.m
+5 −2 ownCloudSDK/Core/Actions/Download/OCSyncActionDownload.m
+1 −1 ownCloudSDK/Core/OCCore+FileProvider.h
+3 −9 ownCloudSDK/Core/OCCore+FileProvider.m
+11 −1 ownCloudSDK/Core/OCCore.h
+21 −0 ownCloudSDK/Core/OCCore.m
+2 −1 ownCloudSDK/Errors/NSError+OCError.h
+4 −0 ownCloudSDK/Errors/NSError+OCError.m
+30 −0 ownCloudSDK/Errors/NSError+OCHTTPStatus.h
+34 −0 ownCloudSDK/Errors/NSError+OCHTTPStatus.m
+1 −0 ownCloudSDK/Errors/OCHTTPStatus.h
+2 −0 ownCloudSDK/Extensions/OCExtension.m
+4 −1 ownCloudSDK/Query/OCQuery.m
+1 −0 ownCloudSDK/Resource Management/OCCoreManager.h
+13 −0 ownCloudSDK/Resource Management/OCCoreManager.m
+4 −0 ownCloudSDK/Resources/en.lproj/Localizable.strings
+ ownCloudSDK/Resources/en_GB.lproj/Localizable.strings
+ ownCloudSDK/Resources/pt_BR.lproj/Localizable.strings
+ ownCloudSDK/Resources/ru.lproj/Localizable.strings
+ ownCloudSDK/Resources/sq.lproj/Localizable.strings
+ ownCloudSDK/Resources/th_TH.lproj/Localizable.strings
+ ownCloudSDK/Resources/zh_CN.lproj/Localizable.strings
+5 −1 ownCloudSDK/Toolkit/OCCache.h
+3 −0 ownCloudSDK/ownCloudSDK.h
48 changes: 48 additions & 0 deletions ownCloud File Provider/FileProviderEnumerator.h
@@ -0,0 +1,48 @@
//
// FileProviderEnumerator.h
// ownCloud File Provider
//
// Created by Felix Schwarz on 07.06.18.
// Copyright © 2018 ownCloud GmbH. All rights reserved.
//

/*
* Copyright (C) 2018, ownCloud GmbH.
*
* This code is covered by the GNU Public License Version 3.
*
* For distribution utilizing Apple mechanisms please see https://owncloud.org/contribute/iOS-license-exception/
* You should have received a copy of this license along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.en.html>.
*
*/

#import <FileProvider/FileProvider.h>
#import <ownCloudSDK/ownCloudSDK.h>
#import "FileProviderEnumeratorObserver.h"

@class FileProviderExtension;

@interface FileProviderEnumerator : NSObject <NSFileProviderEnumerator, OCQueryDelegate>
{
__weak FileProviderExtension *_fileProviderExtension;

OCCore *_core;
OCBookmark *_bookmark;
NSFileProviderItemIdentifier _enumeratedItemIdentifier;

OCQuery *_query;

NSMutableArray <FileProviderEnumeratorObserver *> *_enumerationObservers;
NSMutableArray <FileProviderEnumeratorObserver *> *_changeObservers;

BOOL _invalidated;
}

@property(weak) FileProviderExtension *fileProviderExtension;

- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithBookmark:(OCBookmark *)bookmark enumeratedItemIdentifier:(NSFileProviderItemIdentifier)enumeratedItemIdentifier;

@property (nonatomic, readonly, strong) NSFileProviderItemIdentifier enumeratedItemIdentifier;

@end

0 comments on commit b11137d

Please sign in to comment.