78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
/**
|
|
* Created by Yun on 2015-12-12.
|
|
*/
|
|
import {NativeModules, NativeAppEventEmitter} from 'react-native';
|
|
|
|
const {QQAPI} = NativeModules;
|
|
|
|
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 }));
|
|
}
|
|
|
|
export const isQQInstalled = QQAPI.isQQInstalled;
|
|
export const isQQSupportApi = QQAPI.isQQSupportApi;
|
|
|
|
// 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 {
|
|
const {type, ...r} = result
|
|
resolve(r);
|
|
}
|
|
};
|
|
});
|
|
}
|
|
|
|
NativeAppEventEmitter.addListener('QQ_Resp', resp => {
|
|
const callback = savedCallback;
|
|
savedCallback = undefined;
|
|
callback && callback(resp);
|
|
});
|
|
|
|
export function login(scopes) {
|
|
return QQAPI.login(scopes)
|
|
.then(() => waitForResponse("QQAuthorizeResponse"));
|
|
}
|
|
|
|
export function shareToQQ(data={}) {
|
|
return QQAPI.shareToQQ(data)
|
|
.then(() => waitForResponse("QQShareResponse"));
|
|
}
|
|
|
|
export function shareToQzone(data={}) {
|
|
return QQAPI.shareToQzone(data)
|
|
.then(() => waitForResponse("QQShareResponse"));
|
|
}
|
|
|
|
export function logout(){
|
|
QQAPI.logout()
|
|
}
|
|
|
|
|
|
|
|
|