Skip to content
Merged
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
49 changes: 20 additions & 29 deletions source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACRView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -509,37 +509,29 @@ - (void)loadImage:(std::string const &)urlStr
url = [NSURL URLWithString:nSUrlStr relativeToURL:_hostConfig.baseURL];
}

NSObject<ACOIResourceResolver> *imageResourceResolver = [_hostConfig getResourceResolverForScheme:[url scheme]];
ImageLoadBlock imageloadblock = nil;
if (!imageResourceResolver || ![imageResourceResolver respondsToSelector:@selector(resolveImageResource:)]) {
imageloadblock = ^(NSURL *url) {
// download image
UIImage *img = nil;
if ([url.scheme isEqualToString:@"data"]) {
NSString *absoluteUri = url.absoluteString;
std::string dataUri = AdaptiveCards::AdaptiveBase64Util::ExtractDataFromUri(std::string([absoluteUri UTF8String]));
std::vector<char> decodedDataUri = AdaptiveCards::AdaptiveBase64Util::Decode(dataUri);
NSData *decodedBase64 = [NSData dataWithBytes:decodedDataUri.data() length:decodedDataUri.size()];
img = [UIImage imageWithData:decodedBase64];
} else {
img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
}
return img;
};
}
ImageLoadBlock imageloadblock = ^(NSURL *url) {
// download image
UIImage *img = nil;
if ([url.scheme isEqualToString:@"data"]) {
NSString *absoluteUri = url.absoluteString;
std::string dataUri = AdaptiveCards::AdaptiveBase64Util::ExtractDataFromUri(std::string([absoluteUri UTF8String]));
std::vector<char> decodedDataUri = AdaptiveCards::AdaptiveBase64Util::Decode(dataUri);
NSData *decodedBase64 = [NSData dataWithBytes:decodedDataUri.data() length:decodedDataUri.size()];
img = [UIImage imageWithData:decodedBase64];
} else {
img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
}
return img;
};

dispatch_group_async(_async_tasks_group, _global_queue,
^{
UIImage *img = nil;
if (imageloadblock) {
img = imageloadblock(url);
} else if (imageResourceResolver) {
img = [imageResourceResolver resolveImageResource:url];
UIImage *img = (imageloadblock) ? imageloadblock(url) : nil;
if (img) {
dispatch_sync(self->_serial_queue, ^{
self->_imageViewMap[nSUrlStr] = img;
});
}

dispatch_sync(self->_serial_queue, ^{
self->_imageViewMap[nSUrlStr] = img;
});
});
}

Expand Down Expand Up @@ -727,8 +719,6 @@ - (void)loadImageAccordingToResourceResolverIFForBaseAction:(std::shared_ptr<Bas
NSNumber *number = nil;
NSString *nSUrlStr = nil;

_numberOfSubscribers++;

number = [NSNumber numberWithUnsignedLongLong:(unsigned long long)elem.get()];
nSUrlStr = [NSString stringWithCString:elem->GetIconUrl().c_str() encoding:[NSString defaultCStringEncoding]];
if (!key) {
Expand All @@ -740,6 +730,7 @@ - (void)loadImageAccordingToResourceResolverIFForBaseAction:(std::shared_ptr<Bas
if (ACOImageViewIF == [_hostConfig getResolverIFType:[url scheme]]) {
if (observerAction) {
observerAction(imageResourceResolver, key, elem, url, self);
_numberOfSubscribers++;
}
} else {
[self loadImage:[nSUrlStr cStringUsingEncoding:NSUTF8StringEncoding]];
Expand Down