Skip to content

Commit

Permalink
[FileProvider] Removes BindAs, add manual code for it and reviews
Browse files Browse the repository at this point in the history
  • Loading branch information
dalexsoto committed Jul 18, 2017
1 parent 7766b91 commit daa6170
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 20 deletions.
29 changes: 29 additions & 0 deletions src/FileProvider/NSFileProviderItemIdentifierExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// NSFileProviderItemIdentifierExtensions.cs
//
// Authors:
// Alex Soto <alexsoto@microsoft.com>
//
// Copyright 2017 Xamarin Inc. All rights reserved.
//

#if XAMCORE_2_0
using System;
using XamCore.Foundation;

namespace XamCore.FileProvider {
public partial class NSFileProviderItemIdentifierExtensions {

public static NSString[] GetConstants (this NSFileProviderItemIdentifier[] self)
{
if (self == null)
throw new ArgumentNullException (nameof (self));

var array = new NSString [self.Length];
for (int n = 0; n < self.Length; n++)
array [n] = self [n].GetConstant ();
return array;
}
}
}
#endif
38 changes: 22 additions & 16 deletions src/fileprovider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,20 @@ public enum NSFileProviderError : nint {
NotAuthenticated = -1000,
FilenameCollision = -1001,
SyncAnchorExpired = -1002,
PageExpired = SyncAnchorExpired,
InsufficientQuota = -1003,
ServerUnreachable = -1004,
NoSuchItem = -1005
NoSuchItem = -1005,
}

[iOS (11,0)]
enum NSFileProviderItemIdentifier {
// Lets follow swift names

[Field ("NSFileProviderRootContainerItemIdentifier")]
RootContainer,
Root,

[Field ("NSFileProviderWorkingSetContainerItemIdentifier")]
WorkingSet,

[Field ("NSFileProviderAllDirectoriesContainerItemIdentifier")]
AllDirectories,
}

[iOS (11,0)]
Expand All @@ -53,7 +51,7 @@ public enum NSFileProviderItemCapabilities : nuint {
Deleting = 1 << 5,
AddingSubItems = Writing,
ContentEnumerating = Reading,
All = Reading | Writing | Reparenting | Renaming | Trashing | Deleting
All = Reading | Writing | Reparenting | Renaming | Trashing | Deleting,
}

[iOS (11,0)]
Expand Down Expand Up @@ -128,10 +126,10 @@ interface NSFileProviderEnumerator {

[Abstract]
[Export ("enumerateItemsForObserver:startingAtPage:")]
void EnumerateItems (INSFileProviderEnumerationObserver observer, NSData page);
void EnumerateItems (INSFileProviderEnumerationObserver observer, NSData startPage);

[Export ("enumerateChangesForObserver:fromSyncAnchor:")]
void EnumerateChanges (INSFileProviderChangeObserver observer, NSData anchor);
void EnumerateChanges (INSFileProviderChangeObserver observer, NSData syncAnchor);

[Export ("currentSyncAnchorWithCompletionHandler:")]
void CurrentSyncAnchor (Action<NSData> completionHandler);
Expand All @@ -146,12 +144,12 @@ interface NSFileProviderItem {
[Advice ("Use 'NSFileProviderItemIdentifierExtensions.GetValue (ItemIdentifier)' to get a 'NSFileProviderItemIdentifier' enum.")]
[Abstract]
[Export ("itemIdentifier")]
NSString ItemIdentifier { get; }
NSString Identifier { get; }

[Advice ("Use 'NSFileProviderItemIdentifierExtensions.GetValue (ParentItemIdentifier)' to get a 'NSFileProviderItemIdentifier' enum.")]
[Abstract]
[Export ("parentItemIdentifier")]
NSString ParentItemIdentifier { get; }
NSString ParentIdentifier { get; }

[Abstract]
[Export ("filename")]
Expand Down Expand Up @@ -250,13 +248,21 @@ interface NSFileProviderManager {
[Export ("defaultManager", ArgumentSemantic.Strong)]
NSFileProviderManager DefaultManager { get; }

[Protected]
[Export ("signalEnumeratorForContainerItemIdentifier:completionHandler:")]
// Not Async'ified on pruppose, because this can switch from app to extension.
void SignalEnumerator (/*[BindAs (typeof (NSFileProviderItemIdentifier))]*/ NSString containerItemIdentifier, Action<NSError> completion);
// Not Async'ified on purpose, because this can switch from app to extension.
void SignalEnumerator (NSString containerItemIdentifier, Action<NSError> completion);

// Not Async'ified on pruppose, because the task must be accesed while the completion action is performing...
[Wrap ("SignalEnumerator (containerItemIdentifier.GetConstant (), completion)")]
void SignalEnumerator (NSFileProviderItemIdentifier containerItemIdentifier, Action<NSError> completion);

// Not Async'ified on purpose, because the task must be accesed while the completion action is performing...
[Protected]
[Export ("registerURLSessionTask:forItemWithIdentifier:completionHandler:")]
void Register (NSUrlSessionTask task, /*[BindAs (typeof (NSFileProviderItemIdentifier))]*/ NSString identifier, Action<NSError> completion);
void Register (NSUrlSessionTask task, NSString identifier, Action<NSError> completion);

[Wrap ("Register (task, identifier.GetConstant (), completion)")]
void Register (NSUrlSessionTask task, NSFileProviderItemIdentifier identifier, Action<NSError> completion);

[Export ("providerIdentifier")]
string ProviderIdentifier { get; }
Expand Down Expand Up @@ -285,7 +291,7 @@ interface NSFileProviderManager {
[Static]
[Async]
[Export ("getDomainsWithCompletionHandler:")]
void GetDomains (Action<NSArray<NSFileProviderDomain>, NSError> completionHandler);
void GetDomains (Action<NSFileProviderDomain [], NSError> completionHandler);

[Static]
[Async]
Expand Down
5 changes: 5 additions & 0 deletions src/frameworks.sources
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,11 @@ EVENTKITUI_SOURCES = \
EXTERNALACCESSORY_API_SOURCES = \
ExternalAccessory/EAEnums.cs \

# FileProvider

FILEPROVIDER_SOURCES = \
FileProvider/NSFileProviderItemIdentifierExtensions.cs \

# FinderSync

FINDERSYNC_CORE_SOURCES = \
Expand Down
32 changes: 28 additions & 4 deletions src/uikit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -327,10 +327,15 @@ partial interface NSFileProviderExtension {

#if XAMCORE_2_0 && IOS

[Protected]
[iOS (11,0)]
[Export ("itemForIdentifier:error:")]
[return: NullAllowed]
XamCore.FileProvider.INSFileProviderItem GetItem (/*[BindAs (typeof (NSFileProviderItemIdentifier))]*/ NSString identifier, out NSError error);
XamCore.FileProvider.INSFileProviderItem GetItem (NSString identifier, out NSError error);

[iOS (11,0)]
[Wrap ("GetItem (identifier.GetConstant (), out error)")]
XamCore.FileProvider.INSFileProviderItem GetItem (NSFileProviderItemIdentifier identifier, out NSError error);

// Inlining NSFileProviderExtension (NSFileProviderActions) so we get asyncs

Expand Down Expand Up @@ -391,24 +396,43 @@ partial interface NSFileProviderExtension {

// From NSFileProviderExtension (NSFileProviderThumbnailing)

[iOS (11,0)]
[Export ("fetchThumbnailsForItemIdentifiers:requestedSize:perThumbnailCompletionHandler:completionHandler:")]
[Async]
NSProgress FetchThumbnails (/*[BindAs (typeof (NSFileProviderItemIdentifier []))]*/ NSString [] itemIdentifiers, CGSize size, NSFileProviderExtensionFetchThumbnailsHandler perThumbnailCompletionHandler, Action<NSError> completionHandler);
NSProgress FetchThumbnails (NSString [] itemIdentifiers, CGSize size, NSFileProviderExtensionFetchThumbnailsHandler perThumbnailCompletionHandler, Action<NSError> completionHandler);

[Async]
[iOS (11,0)]
[Wrap ("FetchThumbnails (itemIdentifiers.GetConstants (), size, perThumbnailCompletionHandler, completionHandler)")]
NSProgress FetchThumbnails (NSFileProviderItemIdentifier [] itemIdentifiers, CGSize size, NSFileProviderExtensionFetchThumbnailsHandler perThumbnailCompletionHandler, Action<NSError> completionHandler);

// From NSFileProviderExtension (NSFileProviderMessaging)

// TODO: NSFileProviderMessageInterfaceName is not bound yet, comes from Foundation
//[iOS (11,0)]
//[Internal]
//[Export ("supportedMessageInterfaceNamesForItemWithIdentifier:")]
//NSFileProviderMessageInterfaceName[] GetSupportedMessageInterfaceNames (/*[BindAs (typeof (NSFileProviderItemIdentifier))]*/ NSString identifier);
//NSFileProviderMessageInterfaceName[] GetSupportedMessageInterfaceNames (NSString identifier);

//[iOS (11,0)]
//[Wrap ("GetSupportedMessageInterfaceNames (identifier.GetConstant ())")]
//NSFileProviderMessageInterfaceName[] GetSupportedMessageInterfaceNames (NSFileProviderItemIdentifier identifier);

// TODO: NSFileProviderMessageInterface is not bound yet, comes from Foundation
//[iOS (11,0)]
//[Export ("protocolForMessageInterface:")]
//Protocol GetProtocol (NSFileProviderMessageInterface messageInterface);

// TODO: NSFileProviderMessageInterface is not bound yet, comes from Foundation
//[iOS (11,0)]
//[Internal]
//[return: NullAllowed]
//[Export ("exportedObjectForMessageInterface:itemIdentifier:error:")]
//NSObject GetExportedObject (NSFileProviderMessageInterface messageInterface, /*[BindAs (typeof (NSFileProviderItemIdentifier))]*/ NSString identifier, out NSError error);
//NSObject GetExportedObject (NSFileProviderMessageInterface messageInterface, NSString identifier, out NSError error);

//[iOS (11,0)]
//[Wrap ("GetExportedObject (messageInterface, identifier.GetConstant (), out error)")]
//NSObject GetExportedObject (NSFileProviderMessageInterface messageInterface, NSFileProviderItemIdentifier identifier, out NSError error);
#endif
}
#endif // !WATCH
Expand Down

0 comments on commit daa6170

Please sign in to comment.