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/avatar] Avatar and generalized resource support #1092

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ios-sdk
Submodule ios-sdk updated 83 files
+238 −0 ownCloudSDK.xcodeproj/project.pbxproj
+7 −3 ownCloudSDK/Bookmark/OCBookmark.h
+76 −1 ownCloudSDK/Bookmark/OCBookmark.m
+95 −0 ownCloudSDK/Connection/OCConnection+Avatars.m
+8 −13 ownCloudSDK/Connection/OCConnection+Tools.m
+10 −0 ownCloudSDK/Connection/OCConnection.h
+8 −2 ownCloudSDK/Connection/OCConnection.m
+10 −0 ownCloudSDK/Core/ItemList/OCCoreItemListTask.m
+0 −2 ownCloudSDK/Core/OCCore.h
+19 −5 ownCloudSDK/Core/OCCore.m
+29 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceRequestAvatar.h
+45 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceRequestAvatar.m
+29 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceSourceAvatarPlaceholders.h
+74 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceSourceAvatarPlaceholders.m
+29 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceSourceAvatars.h
+166 −0 ownCloudSDK/Core/Resources/Avatars/OCResourceSourceAvatars.m
+62 −0 ownCloudSDK/Core/Resources/Manager/OCResourceManager.h
+554 −0 ownCloudSDK/Core/Resources/Manager/OCResourceManager.m
+71 −0 ownCloudSDK/Core/Resources/Manager/OCResourceManagerJob.h
+205 −0 ownCloudSDK/Core/Resources/Manager/OCResourceManagerJob.m
+47 −0 ownCloudSDK/Core/Resources/OCResourceTypes.h
+45 −0 ownCloudSDK/Core/Resources/README.md
+91 −0 ownCloudSDK/Core/Resources/Request/OCResourceRequest.h
+148 −0 ownCloudSDK/Core/Resources/Request/OCResourceRequest.m
+31 −0 ownCloudSDK/Core/Resources/Request/OCResourceRequestImage.h
+47 −0 ownCloudSDK/Core/Resources/Request/OCResourceRequestImage.m
+55 −0 ownCloudSDK/Core/Resources/Resource/OCResource.h
+108 −0 ownCloudSDK/Core/Resources/Resource/OCResource.m
+42 −0 ownCloudSDK/Core/Resources/Resource/OCResourceImage.h
+142 −0 ownCloudSDK/Core/Resources/Resource/OCResourceImage.m
+29 −0 ownCloudSDK/Core/Resources/Resource/OCResourceTextPlaceholder.h
+46 −0 ownCloudSDK/Core/Resources/Resource/OCResourceTextPlaceholder.m
+28 −0 ownCloudSDK/Core/Resources/Sources/OCDatabase+ResourceStorage.h
+191 −0 ownCloudSDK/Core/Resources/Sources/OCDatabase+ResourceStorage.m
+68 −0 ownCloudSDK/Core/Resources/Sources/OCResourceSource.h
+106 −0 ownCloudSDK/Core/Resources/Sources/OCResourceSource.m
+29 −0 ownCloudSDK/Core/Resources/Sources/OCResourceSourceStorage.h
+83 −0 ownCloudSDK/Core/Resources/Sources/OCResourceSourceStorage.m
+31 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceRequestItemThumbnail.h
+54 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceRequestItemThumbnail.m
+29 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceSourceItemLocalThumbnails.h
+140 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceSourceItemLocalThumbnails.m
+29 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceSourceItemThumbnails.h
+126 −0 ownCloudSDK/Core/Resources/Thumbnails/OCResourceSourceItemThumbnails.m
+3 −2 ownCloudSDK/Core/Sync/Actions/Upload/OCCore+CommandLocalModification.m
+0 −6 ownCloudSDK/Core/Thumbnails/OCCore+Thumbnails.h
+3 −266 ownCloudSDK/Core/Thumbnails/OCCore+Thumbnails.m
+3 −1 ownCloudSDK/Errors/NSError+OCError.h
+4 −0 ownCloudSDK/Errors/NSError+OCError.m
+0 −11 ownCloudSDK/Events/NSProgress+OCEvent.m
+1 −1 ownCloudSDK/HTTP/OCHTTPTypes.h
+1 −1 ownCloudSDK/HTTP/Pipeline/OCHTTPPipeline.m
+1 −1 ownCloudSDK/HTTP/Request/OCHTTPRequest.h
+1 −0 ownCloudSDK/HTTP/Status/OCHTTPStatus.h
+4 −0 ownCloudSDK/HTTP/Status/OCHTTPStatus.m
+26 −5 ownCloudSDK/Item/Images/OCImage.h
+127 −6 ownCloudSDK/Item/Images/OCImage.m
+6 −14 ownCloudSDK/Item/Images/OCItemThumbnail.h
+0 −112 ownCloudSDK/Item/Images/OCItemThumbnail.m
+1 −2 ownCloudSDK/Item/OCItem.h
+0 −10 ownCloudSDK/Item/OCItem.m
+1 −0 ownCloudSDK/OCMacros.h
+0 −2 ownCloudSDK/OCTypes.h
+43 −0 ownCloudSDK/Platforms/OCPlatform.h
+23 −0 ownCloudSDK/Platforms/OCPlatform.m
+31 −0 ownCloudSDK/Protocols/OCViewProvider.h
+36 −0 ownCloudSDK/Protocols/OCViewProviderContext.h
+13 −0 ownCloudSDK/Protocols/OCViewProviderContext.m
+79 −4 ownCloudSDK/Resource Management/OCBookmarkManager.m
+3 −0 ownCloudSDK/Resources/en.lproj/Localizable.strings
+37 −0 ownCloudSDK/Share/OCAvatar.h
+55 −0 ownCloudSDK/Share/OCAvatar.m
+1 −1 ownCloudSDK/Share/OCRecipient.h
+5 −2 ownCloudSDK/Share/OCUser.h
+33 −11 ownCloudSDK/Share/OCUser.m
+1 −0 ownCloudSDK/Vaults/Database/OCDatabase+Schemas.h
+69 −0 ownCloudSDK/Vaults/Database/OCDatabase+Schemas.m
+12 −1 ownCloudSDK/Vaults/Database/OCDatabase+Versions.h
+0 −4 ownCloudSDK/Vaults/Database/OCDatabase.h
+0 −136 ownCloudSDK/Vaults/Database/OCDatabase.m
+2 −0 ownCloudSDK/Vaults/OCVault.h
+21 −0 ownCloudSDK/Vaults/OCVault.m
+24 −0 ownCloudSDK/ownCloudSDK.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ typedef void (^FileProviderExtensionThumbnailRequestPerThumbnailCompletionHandle
typedef void (^FileProviderExtensionThumbnailRequestCompletionHandler)(NSError * _Nullable error);

@interface FileProviderExtensionThumbnailRequest : NSObject <OCLogTagging>
{
BOOL _isDone;
}

@property(strong) FileProviderExtension *extension;

Expand All @@ -39,7 +36,7 @@ typedef void (^FileProviderExtensionThumbnailRequestCompletionHandler)(NSError *
@property(copy) FileProviderExtensionThumbnailRequestPerThumbnailCompletionHandler perThumbnailCompletionHandler;
@property(copy) FileProviderExtensionThumbnailRequestCompletionHandler completionHandler;

@property(nullable,strong) NSProgress *progress;
@property(nullable,strong,nonatomic) NSProgress *progress;

- (void)requestNextThumbnail;

Expand Down
52 changes: 46 additions & 6 deletions ownCloud File Provider/FileProviderExtensionThumbnailRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@
#import "FileProviderExtensionThumbnailRequest.h"
#import "NSError+MessageResolution.h"

@interface FileProviderExtensionThumbnailRequest ()
{
BOOL _isDone;
OCResourceRequestItemThumbnail *_thumbnailRequest;
}
@end

@implementation FileProviderExtensionThumbnailRequest

- (void)dealloc
Expand Down Expand Up @@ -52,11 +59,14 @@ - (void)requestNextThumbnail

if ((core = self.extension.core) != nil)
{
// if (core.connectionStatus == OCCoreConnectionStatusOnline)
[core retrieveItemFromDatabaseForLocalID:(OCLocalID)itemIdentifier completionHandler:^(NSError *error, OCSyncAnchor syncAnchor, OCItem *itemFromDatabase) {
OCLogDebug(@"Retrieving %ld: %@", self.cursorPosition-1, itemFromDatabase.name);

if ((itemFromDatabase.type == OCItemTypeCollection) || (itemFromDatabase.thumbnailAvailability == OCItemThumbnailAvailabilityNone))
OCResourceManager *resourceManager = core.vault.resourceManager;

if ((itemFromDatabase.type == OCItemTypeCollection) || // No previews for folders
(itemFromDatabase.thumbnailAvailability == OCItemThumbnailAvailabilityNone) || // No thumbnails available for this type
(resourceManager == nil)) // No ResourceManager available for this core
{
dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
self.perThumbnailCompletionHandler(itemIdentifier, nil, nil);
Expand All @@ -68,23 +78,32 @@ - (void)requestNextThumbnail
}
else
{
NSProgress *retrieveProgress = [self.extension.core retrieveThumbnailFor:itemFromDatabase maximumSize:self.sizeInPixels scale:1.0 waitForConnectivity:NO retrieveHandler:^(NSError *error, OCCore *core, OCItem *item, OCItemThumbnail *thumbnail, BOOL isOngoing, NSProgress *progress) {
OCResourceRequestItemThumbnail *thumbnailRequest = [OCResourceRequestItemThumbnail requestThumbnailFor:itemFromDatabase maximumSize:self.sizeInPixels scale:1.0 waitForConnectivity:NO changeHandler:^(OCResourceRequest * _Nonnull request, NSError * _Nullable error, BOOL isOngoing, OCResource * _Nullable previousResource, OCResource * _Nullable newResource) {

OCLogDebug(@"Retrieved %ld: %@ -> %d", self.cursorPosition-1, itemFromDatabase.name, isOngoing);

if (!isOngoing)
{
OCResourceImage *thumbnailResource = OCTypedCast(newResource, OCResourceImage);
OCItemThumbnail *thumbnail = thumbnailResource.thumbnail;

dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
self.perThumbnailCompletionHandler(itemIdentifier, thumbnail.data, (thumbnail==nil) ? nil : [error translatedError]);
NSError *returnError = (thumbnail==nil) ?
((error != nil) ? error.translatedError : OCError(OCErrorInternal)) :
nil;

self.perThumbnailCompletionHandler(itemIdentifier, thumbnail.data, returnError);

OCLogDebug(@"Replied %ld: %@ -> thumbnailData=%d, error=%@", self.cursorPosition-1, itemFromDatabase.name, (thumbnail.data != nil), error);
OCLogDebug(@"Replied %ld: %@ -> thumbnailData=%d, error=%@", self.cursorPosition-1, itemFromDatabase.name, (thumbnail.data != nil), returnError);

[self requestNextThumbnail];
});
}
}];

[self.progress addChild:retrieveProgress withPendingUnitCount:1];
[resourceManager startRequest:thumbnailRequest];

self->_thumbnailRequest = thumbnailRequest;
}
}];
}
Expand Down Expand Up @@ -114,6 +133,27 @@ - (void)completedRequestWithError:(NSError *)error
}
}

- (void)setProgress:(NSProgress *)progress
{
__weak FileProviderExtensionThumbnailRequest *weakSelf = self;

progress.cancellationHandler = ^{
FileProviderExtensionThumbnailRequest *strongSelf;

if ((strongSelf = weakSelf) != nil)
{
OCResourceRequestItemThumbnail *thumbnailRequest;

if ((thumbnailRequest = strongSelf->_thumbnailRequest) != nil)
{
[strongSelf.extension.core.vault.resourceManager stopRequest:thumbnailRequest];
}

strongSelf->_thumbnailRequest = nil;
}
};
}

- (nonnull NSArray<OCLogTagName> *)logTags
{
return (@[@"FPThumbs"]);
Expand Down
5 changes: 5 additions & 0 deletions ownCloud Share Extension/ShareViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ class ShareViewController: MoreStaticTableViewController {
self.requestedCoreBookmarks.remove(at: index)
}
}

if let core = core {
core.vault.resourceManager?.add(ResourceSourceItemIcons(core: core))
}

completionHandler(core, error)
})
}
Expand Down
Loading