From ff1be4894d5313e4a7245a2f782af79c0deede05 Mon Sep 17 00:00:00 2001 From: David Ruisinger Date: Tue, 24 Jan 2017 12:04:43 +0100 Subject: [PATCH 1/4] update to support rn 0.40+ --- ios/RCTWeiboAPI/RCTWeiboAPI.h | 2 +- ios/RCTWeiboAPI/RCTWeiboAPI.m | 25 ++++++++++++------------- package.json | 2 +- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/ios/RCTWeiboAPI/RCTWeiboAPI.h b/ios/RCTWeiboAPI/RCTWeiboAPI.h index 8db7a56..0f5308e 100644 --- a/ios/RCTWeiboAPI/RCTWeiboAPI.h +++ b/ios/RCTWeiboAPI/RCTWeiboAPI.h @@ -6,7 +6,7 @@ // Copyright © 2016 erica. All rights reserved. // -#import "RCTBridgeModule.h" +#import @interface RCTWeiboAPI : NSObject diff --git a/ios/RCTWeiboAPI/RCTWeiboAPI.m b/ios/RCTWeiboAPI/RCTWeiboAPI.m index 384fa81..106512c 100644 --- a/ios/RCTWeiboAPI/RCTWeiboAPI.m +++ b/ios/RCTWeiboAPI/RCTWeiboAPI.m @@ -8,14 +8,13 @@ #import "RCTWeiboAPI.h" #import "WeiboSDK.h" -#import "RCTBridge.h" -#import "RCTEventDispatcher.h" -#import "RCTImageLoader.h" +#import +#import +#import #define INVOKE_FAILED (@"WeiBo API invoke returns false.") #define RCTWBEventName (@"Weibo_Resp") - #define RCTWBShareTypeNews @"news" #define RCTWBShareTypeImage @"image" #define RCTWBShareTypeText @"text" @@ -51,7 +50,7 @@ - (instancetype)init { self = [super init]; if (self) { - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil]; } return self; @@ -66,7 +65,7 @@ - (void)dealloc :(RCTResponseSenderBlock)callback) { [self _autoRegisterAPI]; - + WBAuthorizeRequest *request = [self _genAuthRequest:config]; BOOL success = [WeiboSDK sendRequest:request]; callback(@[success?[NSNull null]:INVOKE_FAILED]); @@ -112,7 +111,7 @@ - (void)didReceiveWeiboRequest:(WBBaseRequest *)request { if ([request isKindOfClass:WBProvideMessageForWeiboRequest.class]) { - + } } @@ -168,7 +167,7 @@ - (void)_autoRegisterAPI if (gRegister) { return; } - + NSArray *list = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleURLTypes"]; for (NSDictionary *item in list) { NSString *name = item[@"CFBundleURLName"]; @@ -226,7 +225,7 @@ - (void)_shareWithData:(NSDictionary *)aData image:(UIImage *)aImage WBMessageObject *message = [WBMessageObject message]; NSString *text = aData[RCTWBShareText]; message.text = text; - + NSString *type = aData[RCTWBShareType]; if ([type isEqualToString:RCTWBShareTypeText]) { } @@ -262,11 +261,11 @@ - (void)_shareWithData:(NSDictionary *)aData image:(UIImage *)aImage message.mediaObject.thumbnailData = UIImageJPEGRepresentation(aImage, 0.7); } } - + WBAuthorizeRequest *authRequest = [self _genAuthRequest:aData]; NSString *accessToken = aData[RCTWBShareAccessToken]; WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:accessToken]; - + BOOL success = [WeiboSDK sendRequest:request]; if (!success) { NSMutableDictionary *body = [NSMutableDictionary new]; @@ -281,11 +280,11 @@ - (WBAuthorizeRequest *)_genAuthRequest:(NSDictionary *)config { NSString *redirectURI = config[@"redirectURI"]; NSString *scope = config[@"scope"]; - + WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request]; authRequest.redirectURI = redirectURI; authRequest.scope = scope; - + return authRequest; } diff --git a/package.json b/package.json index 404b198..7eb0643 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-weibo", - "version": "3.0.1", + "version": "3.0.2", "description": "新浪微博登录、分享模块", "main": "index.js", "scripts": { From f0d374b33f5ed37bec8e1455edb195c78ffeb63a Mon Sep 17 00:00:00 2001 From: sunnylqm Date: Tue, 24 Jan 2017 23:11:32 +0800 Subject: [PATCH 2/4] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7eb0643..8f75095 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-weibo", - "version": "3.0.2", + "version": "4.0.0", "description": "新浪微博登录、分享模块", "main": "index.js", "scripts": { From d6cc991d0c59ac322c6d6cccbffe9764750e84ca Mon Sep 17 00:00:00 2001 From: David Ruisinger Date: Wed, 8 Mar 2017 16:49:13 +0100 Subject: [PATCH 3/4] Adds node_modules/ to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 485dee6..5b04c74 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +node_modules/ From 571a993c36e1d8c7e76652e6d045c1ab95e20b90 Mon Sep 17 00:00:00 2001 From: David Ruisinger Date: Wed, 8 Mar 2017 16:50:50 +0100 Subject: [PATCH 4/4] Refactor to remove es-6-promisify which is not working on Android with rn > 0.41 --- index.js | 89 +++++++++++++++------------------------------------- package.json | 4 +-- 2 files changed, 26 insertions(+), 67 deletions(-) diff --git a/index.js b/index.js index 5d1ca37..b6068de 100644 --- a/index.js +++ b/index.js @@ -1,68 +1,12 @@ /** * Created by lvbingru on 1/5/16. + * Modified by flavordaave on 3/8/17 */ import {NativeModules, NativeAppEventEmitter} from 'react-native'; -import promisify from 'es6-promisify'; const {WeiboAPI} = NativeModules; -// Used only with promisify. Transform callback to promise result. -function translateError(err, result) { - if (!err) { - return this.resolve(result); - } - if (typeof err === 'object') { - if (err instanceof Error) { - return this.reject(ret); - } - return this.reject(Object.assign(new Error(err.message), { errCode: err.errCode })); - } else if (typeof err === 'string') { - return this.reject(new Error(err)); - } - this.reject(Object.assign(new Error(), { origin: err })); -} - -function wrapApi(nativeFunc) { - if (!nativeFunc) { - return undefined; - } - const promisified = promisify(nativeFunc, translateError); - return (...args) => { - return promisified(...args); - }; -} - -// Save callback and wait for future event. -let savedCallback = undefined; -function waitForResponse(type) { - return new Promise((resolve, reject) => { - if (savedCallback) { - savedCallback('User canceled.'); - } - savedCallback = result => { - if (result.type !== type) { - return; - } - savedCallback = undefined; - if (result.errCode !== 0) { - const err = new Error(result.errMsg); - err.errCode = result.errCode; - reject(err); - } else { - resolve(result); - } - }; - }); -} - -NativeAppEventEmitter.addListener('Weibo_Resp', resp => { - const callback = savedCallback; - savedCallback = undefined; - callback && callback(resp); -}); - - const defaultScope = "all" const defaultRedirectURI = "https://api.weibo.com/oauth2/default.html" @@ -75,16 +19,33 @@ function checkData(data) { } } -const nativeSendAuthRequest = wrapApi(WeiboAPI.login); -const nativeSendMessageRequest = wrapApi(WeiboAPI.shareToWeibo); +function promiseBody(type, resolve, reject) { + NativeAppEventEmitter.on('Weibo_Resp', result => { + if (result.type === type) { + if (result.errCode !== 0) { + const err = new Error(result.errMsg); + err.errCode = result.errCode; + reject(err); + } else { + resolve(result); + } + } + }) +} export function login(config={}) { - checkData(config) - return Promise.all([waitForResponse('WBAuthorizeResponse'), nativeSendAuthRequest(config)]).then(v=>v[0]); + checkData(config) + return new Promise((resolve, reject) => { + promiseBody('WBAuthorizeResponse', resolve, reject) + WeiboAPI.login(config, ()=>{}) + }) } export function share(data) { - checkData(data) - return Promise.all([waitForResponse('WBSendMessageToWeiboResponse'), nativeSendMessageRequest(data)]).then(v=>v[0]); -} + checkData(data) + return new Promise((resolve, reject) => { + promiseBody('WBSendMessageToWeiboResponse', resolve, reject) + WeiboAPI.login(config, null) + }) +} diff --git a/package.json b/package.json index 5bc592b..d94cc3d 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,5 @@ "url": "https://github.com/reactnativecn/react-native-weibo/issues" }, "homepage": "https://github.com/reactnativecn/react-native-weibo#readme", - "dependencies": { - "es6-promisify": "^3.0.0" - } + "dependencies": {} }