You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ac...@apache.org on 2018/03/07 03:15:37 UTC
[1/2] incubator-weex git commit: [WEEX-239] add more download image
interface for imageloader
Repository: incubator-weex
Updated Branches:
refs/heads/master c65acbd84 -> 4b0e37423
[WEEX-239] add more download image interface for imageloader
add more download image interface, you can obtain more details such as the progress of downloading image
Bug:239
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/c994aa86
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c994aa86
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c994aa86
Branch: refs/heads/master
Commit: c994aa86d8335a6c6ea1dd58bcf55296391608a2
Parents: c65acbd
Author: acton393 <zh...@gmail.com>
Authored: Tue Mar 6 20:06:17 2018 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Mar 6 20:06:17 2018 +0800
----------------------------------------------------------------------
.../extend/handler/WXImgLoaderDefaultImpl.m | 18 +++++
.../Sources/Component/WXImageComponent.m | 79 +++++++++++++++-----
.../Sources/Protocol/WXImgLoaderProtocol.h | 42 +++++++++++
3 files changed, 119 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c994aa86/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
index 1adaa5e..a085ddb 100644
--- a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
+++ b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
@@ -60,4 +60,22 @@
}];
}
+- (void)setImageViewWithURL:(UIImageView *)imageView url:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(NSDictionary *)options progress:(void (^)(NSInteger, NSInteger))progressBlock completed:(void (^)(UIImage *, NSError *, WXImageLoaderCacheType, NSURL *))completedBlock
+{
+ SDWebImageOptions sdWebimageOption = SDWebImageRetryFailed;
+ if (options && options[@"sdWebimageOption"]) {
+ [options[@"sdWebimageOption"] intValue];
+ }
+
+ [imageView sd_setImageWithURL:url placeholderImage:placeholder options:sdWebimageOption progress:^(NSInteger receivedSize, NSInteger expectedSize) {
+ if (progressBlock) {
+ progressBlock(receivedSize, expectedSize);
+ }
+ } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
+ if (completedBlock) {
+ completedBlock(image, error, (WXImageLoaderCacheType)cacheType, imageURL);
+ }
+ }];
+}
+
@end
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c994aa86/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 3f79791..891217a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -30,6 +30,8 @@
#import "WXSDKEngine.h"
#import "WXUtility.h"
#import "WXAssert.h"
+#import "WXConfigCenterProtocol.h"
+#import "WXSDKEngine.h"
#import <pthread/pthread.h>
@interface WXImageView : UIImageView
@@ -64,6 +66,7 @@ static dispatch_queue_t WXImageUpdateQueue;
@property (nonatomic, strong) id<WXImageOperationProtocol> placeholderOperation;
@property (nonatomic) BOOL imageLoadEvent;
@property (nonatomic) BOOL imageDownloadFinish;
+@property (nonatomic) BOOL downloadImageWithURL;
@end
@@ -101,6 +104,14 @@ WX_EXPORT_METHOD(@selector(save:))
if (attributes[@"quality"]) {
_imageQuality = [WXConvert WXImageQuality:attributes[@"quality"]];
}
+ id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
+ _downloadImageWithURL = YES;
+ if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
+ _downloadImageWithURL = [configCenter configForKey:@"iOS_weex_ext_config.downloadImageWithURL" defaultValue:@(YES) isDefault:NULL];
+ }
+ if (attributes[@"compositing"]) {
+ _downloadImageWithURL = [WXConvert BOOL:attributes[@"compositing"]];
+ }
_imageSharp = [WXConvert WXImageSharp:styles[@"sharpen"]];
_imageLoadEvent = NO;
@@ -352,27 +363,55 @@ WX_EXPORT_METHOD(@selector(save:))
- (void)updateImage
{
__weak typeof(self) weakSelf = self;
- dispatch_async(WXImageUpdateQueue, ^{
- __strong typeof(weakSelf) strongSelf = weakSelf;
- [strongSelf cancelImage];
-
- void(^downloadFailed)(NSString *, NSError *) = ^void(NSString *url, NSError *error) {
- weakSelf.imageDownloadFinish = YES;
- WXLogError(@"Error downloading image: %@, detail:%@", url, [error localizedDescription]);
- };
-
- [strongSelf updatePlaceHolderWithFailedBlock:downloadFailed];
- [strongSelf updateContentImageWithFailedBlock:downloadFailed];
-
- if (!strongSelf.imageSrc && !strongSelf.placeholdSrc) {
- dispatch_async(dispatch_get_main_queue(), ^{
-
- strongSelf.layer.contents = nil;
- strongSelf.imageDownloadFinish = YES;
- [strongSelf readyToRender];
- });
+ if (_downloadImageWithURL && [[self imageLoader] respondsToSelector:@selector(setImageViewWithURL:url:placeholderImage:options:progress:completed:)]) {
+ NSString *newURL = nil;
+ if (self.placeholdSrc) {
+ newURL = [self.placeholdSrc copy];
+ WX_REWRITE_URL([self placeholdSrc], WXResourceTypeImage, self.weexInstance)
+ [[self imageLoader] setImageViewWithURL:(UIImageView*)self.view url:[NSURL URLWithString:newURL] placeholderImage:nil options:nil progress:nil completed:nil];
}
- });
+ newURL = [[self imageSrc] copy];
+ WX_REWRITE_URL([self imageSrc], WXResourceTypeImage, self.weexInstance)
+ NSDictionary *userInfo = @{@"imageQuality":@(self.imageQuality), @"imageSharp":@(self.imageSharp), @"blurRadius":@(self.blurRadius)};
+ [[self imageLoader] setImageViewWithURL:(UIImageView*)self.view url:[NSURL URLWithString:newURL] placeholderImage:nil options:userInfo progress:^(NSInteger receivedSize, NSInteger expectedSize) {
+ // progress when loading image
+ } completed:^(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (strongSelf.imageLoadEvent) {
+ NSMutableDictionary *sizeDict = [NSMutableDictionary new];
+ sizeDict[@"naturalWidth"] = @0;
+ sizeDict[@"naturalHeight"] = @0;
+ if (!error) {
+ sizeDict[@"naturalWidth"] = @(image.size.width * image.scale);
+ sizeDict[@"naturalHeight"] = @(image.size.height * image.scale);
+ } else {
+ [sizeDict setObject:[error description]?:@"" forKey:@"errorDesc"];
+ }
+ [strongSelf fireEvent:@"load" params:@{ @"success": error? @false : @true,@"size":sizeDict}];
+ }
+ }];
+ } else {
+ dispatch_async(WXImageUpdateQueue, ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf cancelImage];
+
+ void(^downloadFailed)(NSString *, NSError *) = ^void(NSString *url, NSError *error) {
+ weakSelf.imageDownloadFinish = YES;
+ WXLogError(@"Error downloading image: %@, detail:%@", url, [error localizedDescription]);
+ };
+
+ [strongSelf updatePlaceHolderWithFailedBlock:downloadFailed];
+ [strongSelf updateContentImageWithFailedBlock:downloadFailed];
+
+ if (!strongSelf.imageSrc && !strongSelf.placeholdSrc) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ strongSelf.layer.contents = nil;
+ strongSelf.imageDownloadFinish = YES;
+ [strongSelf readyToRender];
+ });
+ }
+ });
+ }
}
- (void)updatePlaceHolderWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c994aa86/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
index 1dbd188..f7728c5 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
@@ -26,6 +26,21 @@
@end
+typedef NS_ENUM(NSInteger, WXImageLoaderCacheType) {
+ /**
+ * The image wasn't available the imageLoad caches, but was downloaded from the web.
+ */
+ WXImageLoaderCacheTypeNone,
+ /**
+ * The image was obtained from the disk cache.
+ */
+ WXImageLoaderCacheTypeDisk,
+ /**
+ * The image was obtained from the memory cache.
+ */
+ WXImageLoaderCacheTypeMemory
+};
+
@protocol WXImgLoaderProtocol <WXModuleProtocol>
/**
@@ -44,4 +59,31 @@
*/
- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)options completed:(void(^)(UIImage *image, NSError *error, BOOL finished))completedBlock;
+@optional
+
+/**
+ * @abstract Creates a image download handler with a given URL
+ *
+ * @param imageView UIImageView to display the image
+ *
+ * @param url The URL of the image to download
+ *
+ * @param placeholder The image to be set initially, until the image request finishes.
+ *
+ * @param options : The options to be used for download operation
+ *
+ * @param progress: A block called while the download start
+ *
+ * @param completedBlock : A block called once the download is completed.
+ * image : the image which has been download to local.
+ * error : the error which has happened in download.
+ * finished : a Boolean value indicating whether download action has finished.
+ */
+- (void)setImageViewWithURL:(UIImageView*)imageView
+ url:(NSURL *)url
+ placeholderImage:(UIImage *)placeholder
+ options:(NSDictionary*)options
+ progress:(void(^)(NSInteger receivedSize, NSInteger expectedSize))progressBlock
+ completed:(void(^)(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL))completedBlock;
+
@end
[2/2] incubator-weex git commit: [WEEX-239][iOS] rename comment about
params
Posted by ac...@apache.org.
[WEEX-239][iOS] rename comment about params
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4b0e3742
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4b0e3742
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4b0e3742
Branch: refs/heads/master
Commit: 4b0e3742354d3addf65e86b7820232931a8b4432
Parents: c994aa8
Author: acton393 <zh...@gmail.com>
Authored: Tue Mar 6 20:34:51 2018 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Mar 6 20:34:51 2018 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4b0e3742/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
index f7728c5..e883c19 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
@@ -72,7 +72,7 @@ typedef NS_ENUM(NSInteger, WXImageLoaderCacheType) {
*
* @param options : The options to be used for download operation
*
- * @param progress: A block called while the download start
+ * @param progressBlock: A block called while the download start
*
* @param completedBlock : A block called once the download is completed.
* image : the image which has been download to local.