Created
August 28, 2015 20:31
-
-
Save yongjhih/dd77f92076e0703daae7 to your computer and use it in GitHub Desktop.
RetroWeibo_SimpleWeibo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sina.weibo.simple; | |
import rx.Observable; | |
import android.util.Log; | |
import com.bluelinelabs.logansquare.LoganSquare; | |
import com.sina.weibo.sdk.auth.*; | |
import com.sina.weibo.sdk.auth.sso.*; | |
import com.sina.weibo.sdk.exception.*; | |
import com.sina.weibo.sdk.net.*; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.Collection; | |
import java.util.Collections; | |
import java.util.HashSet; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.Set; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
import rx.android.app.*; | |
import rx.functions.*; | |
import rx.Observable; | |
import rx.Subscriber; | |
import android.os.Bundle; | |
import android.text.TextUtils; | |
import android.content.Intent; | |
import android.content.Context; | |
import android.app.Activity; | |
import android.content.pm.PackageManager; | |
import android.content.pm.ApplicationInfo; | |
import com.sina.weibo.simple.AccessToken; | |
public final class RetroWeibo_SimpleWeibo extends SimpleWeibo { | |
private Activity activity; | |
private Context context; | |
private String appId; | |
private String redirectUrl; | |
private SsoHandler ssoHandler; | |
private AccessToken accessToken; | |
private static final String ACCESS_TOKEN = "access_token"; // AbsOpenAPI.KEY_ACCESS_TOKEN | |
private static final String HTTPS_WEIBO_API_2 = "https://api.weibo.com/2"; // AbsOpenAPI.API_SERVER | |
private static final String HTTPS_WEIBO_API = "https://api.weibo.com"; | |
private static final String GET = "GET"; // AbsOpenAPI.HTTPMETHOD_GET | |
private static final String POST = "POST"; | |
private static final String DELETE = "DELETE"; | |
private static final String APPLICATION_ID_PROPERTY = "com.sina.weibo.sdk.ApplicationId"; | |
private static final String REDIRECT_URL_PROPERTY = "com.sina.weibo.sdk.RedirectUrl"; | |
private static final String DEFAULT_REDIRECT_URL = "https://api.weibo.com/oauth2/default.html"; | |
public RetroWeibo_SimpleWeibo(Activity activity) { | |
this.activity = activity; | |
this.context = activity; | |
this.appId = _getMetaData(activity, APPLICATION_ID_PROPERTY); | |
// null ? throw new IllegalArgumentException() | |
this.redirectUrl = _getMetaData(activity, REDIRECT_URL_PROPERTY); | |
if (this.redirectUrl == null || "".equals(this.redirectUrl)) this.redirectUrl = DEFAULT_REDIRECT_URL; | |
} | |
@Override | |
public Observable<Status> getFriendStatuses(final long sinceId, final long maxId, final boolean baseApp, final boolean trimUser, final int featureType) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "max_id", maxId); | |
_put(params, "base_app", baseApp); | |
_put(params, "trim_user", trimUser); | |
_put(params, "feature", featureType); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/friends_timeline.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/friends_timeline.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Status> getStatuses(final long sinceId, final long maxId, final boolean baseApp, final boolean trimUser, final int featureType) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "max_id", maxId); | |
_put(params, "base_app", baseApp); | |
_put(params, "trim_user", trimUser); | |
_put(params, "feature", featureType); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/user_timeline.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/user_timeline.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Status> getMentionedStatuses(final long sinceId, final long maxId, final int filterByAuthor, final int filterBySource, final int filterByType, final boolean trimUser) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "filter_by_source", filterBySource); | |
_put(params, "max_id", maxId); | |
_put(params, "trim_user", trimUser); | |
_put(params, "filter_by_author", filterByAuthor); | |
_put(params, "filter_by_type", filterByType); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/mentions.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/mentions.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<User> getUsersById(final long uid) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<User> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "uid", uid); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/users/show.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/users/show.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<User>>() { | |
@Override public Observable<User> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
UserList group = null; | |
try { | |
Log.d("RetroWeibo", "UserList: " + json); | |
group = LoganSquare.parse(json, AutoJson_UserList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<User>just(LoganSquare.parse(json, AutoJson_User.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<User, Boolean>() { | |
@Override public Boolean call(User item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<User> getUsersByName(final java.lang.String screenName) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<User> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "screen_name", screenName); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/users/show.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/users/show.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<User>>() { | |
@Override public Observable<User> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
UserList group = null; | |
try { | |
Log.d("RetroWeibo", "UserList: " + json); | |
group = LoganSquare.parse(json, AutoJson_UserList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<User>just(LoganSquare.parse(json, AutoJson_User.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<User, Boolean>() { | |
@Override public Boolean call(User item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<User> getUsersByDomain(final java.lang.String domain) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<User> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "domain", domain); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/users/domain_show.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/users/domain_show.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<User>>() { | |
@Override public Observable<User> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
UserList group = null; | |
try { | |
Log.d("RetroWeibo", "UserList: " + json); | |
group = LoganSquare.parse(json, AutoJson_UserList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<User>just(LoganSquare.parse(json, AutoJson_User.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<User, Boolean>() { | |
@Override public Boolean call(User item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<User> getUsersCount(final long[] uids) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<User> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "uids", uids); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/users/counts.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/users/counts.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<User>>() { | |
@Override public Observable<User> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
UserList group = null; | |
try { | |
Log.d("RetroWeibo", "UserList: " + json); | |
group = LoganSquare.parse(json, AutoJson_UserList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<User>just(LoganSquare.parse(json, AutoJson_User.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<User, Boolean>() { | |
@Override public Boolean call(User item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getCommentsById(final int id, final long sinceId, final long maxId, final int count, final int page, final int filterByAuthor) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "count", count); | |
_put(params, "id", id); | |
_put(params, "max_id", maxId); | |
_put(params, "page", page); | |
_put(params, "filter_by_author", filterByAuthor); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/show.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/show.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getCommentsByMe(final long sinceId, final long maxId, final int count, final int page, final int filterBySource) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "count", count); | |
_put(params, "filter_by_source", filterBySource); | |
_put(params, "max_id", maxId); | |
_put(params, "page", page); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/by_me.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/by_me.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getCommentsToMe(final long sinceId, final long maxId, final int count, final int page, final int filterByAuthor, final int filterBySource) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "count", count); | |
_put(params, "filter_by_source", filterBySource); | |
_put(params, "max_id", maxId); | |
_put(params, "page", page); | |
_put(params, "filter_by_author", filterByAuthor); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/to_me.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/to_me.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getComments(final long sinceId, final long maxId, final int count, final int page, final boolean trimUser) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "count", count); | |
_put(params, "max_id", maxId); | |
_put(params, "trim_user", trimUser); | |
_put(params, "page", page); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/timeline.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/timeline.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getMentionedComments(final long sinceId, final long maxId, final int count, final int page, final int filterByAuthor, final int filterBySource) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "since_id", sinceId); | |
_put(params, "count", count); | |
_put(params, "filter_by_source", filterBySource); | |
_put(params, "max_id", maxId); | |
_put(params, "page", page); | |
_put(params, "filter_by_author", filterByAuthor); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/mentions.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/mentions.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> getComments(final long[] commentIds) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "cids", commentIds); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/show_batch.json".startsWith("http")) prefix = ""; | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/show_batch.json", params, GET)); | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Response> invite(final long uid, final com.sina.weibo.simple.Invitation invitation) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Response> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "uid", uid); | |
_put(params, "data", invitation); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("https://m.api.weibo.com/2/messages/invite.json".startsWith("http")) prefix = ""; | |
if ("https://m.api.weibo.com/2/messages/invite.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "https://m.api.weibo.com/2/messages/invite.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "https://m.api.weibo.com/2/messages/invite.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Response>>() { | |
@Override public Observable<Response> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
ResponseList group = null; | |
try { | |
Log.d("RetroWeibo", "ResponseList: " + json); | |
group = LoganSquare.parse(json, AutoJson_ResponseList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Response>just(LoganSquare.parse(json, AutoJson_Response.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Response, Boolean>() { | |
@Override public Boolean call(Response item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Status> publishStatus(final java.lang.String content, final double longtitude, final double latitude) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "lat", latitude); | |
_put(params, "status", content); | |
_put(params, "long", longtitude); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/update.json".startsWith("http")) prefix = ""; | |
if ("/statuses/update.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/statuses/update.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/update.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Status> publishStatus(final java.lang.String content, final android.graphics.Bitmap picture, final double longtitude, final double latitude) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "lat", latitude); | |
_put(params, "pic", picture); | |
_put(params, "status", content); | |
_put(params, "long", longtitude); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/upload.json".startsWith("http")) prefix = ""; | |
if ("/statuses/upload.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/statuses/upload.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/upload.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Status> publishStatus(final java.lang.String content, final java.lang.String pictureUrl, final java.lang.String pictureId, final double longtitude, final double latitude) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Status> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "url", pictureUrl); | |
_put(params, "lat", latitude); | |
_put(params, "status", content); | |
_put(params, "pic_id", pictureId); | |
_put(params, "long", longtitude); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/statuses/upload_url_text.json".startsWith("http")) prefix = ""; | |
if ("/statuses/upload_url_text.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/statuses/upload_url_text.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/statuses/upload_url_text.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Status>>() { | |
@Override public Observable<Status> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
StatusList group = null; | |
try { | |
Log.d("RetroWeibo", "StatusList: " + json); | |
group = LoganSquare.parse(json, AutoJson_StatusList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Status>just(LoganSquare.parse(json, AutoJson_Status.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Status, Boolean>() { | |
@Override public Boolean call(Status item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> publishComment(final java.lang.String comment, final long id, final boolean pingback) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "id", id); | |
_put(params, "comment", comment); | |
_put(params, "comment_ori", pingback); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/create.json".startsWith("http")) prefix = ""; | |
if ("/comments/create.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/comments/create.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/create.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> deleteComment(final long commentId) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "cid", commentId); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/destroy.json".startsWith("http")) prefix = ""; | |
if ("/comments/destroy.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/comments/destroy.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/destroy.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> deleteComments(final long[] commentIds) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "cids", commentIds); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/sdestroy_batch.json".startsWith("http")) prefix = ""; | |
if ("/comments/sdestroy_batch.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/comments/sdestroy_batch.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/sdestroy_batch.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Comment> replyComment(final java.lang.String comment, final long cid, final long id, final boolean withoutMention, final boolean pingback) { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Comment> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
_put(params, "id", id); | |
_put(params, "comment", comment); | |
_put(params, "cid", cid); | |
_put(params, "without_mention", withoutMention); | |
_put(params, "comment_ori", pingback); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/comments/reply.json".startsWith("http")) prefix = ""; | |
if ("/comments/reply.json".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/comments/reply.json", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/comments/reply.json", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Comment>>() { | |
@Override public Observable<Comment> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
CommentList group = null; | |
try { | |
Log.d("RetroWeibo", "CommentList: " + json); | |
group = LoganSquare.parse(json, AutoJson_CommentList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Comment>just(LoganSquare.parse(json, AutoJson_Comment.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Comment, Boolean>() { | |
@Override public Boolean call(Comment item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
@Override | |
public Observable<Response> revoke() { | |
final List<String> permissions = Collections.emptyList(); | |
Observable<Response> obs = | |
AppObservable.bindActivity(activity, Observable.defer(new Func0<Observable<AccessToken>>() { | |
@Override public Observable<AccessToken> call() { | |
return _logInWithPermissions(permissions); | |
} | |
}).map(new Func1<AccessToken, WeiboParameters>() { | |
@Override public WeiboParameters call(AccessToken accessToken) { | |
RetroWeibo_SimpleWeibo.this.accessToken = accessToken; | |
android.util.Log.d("RetroWeibo", "weiboParameters"); | |
WeiboParameters params = new WeiboParameters(appId); | |
params.put(ACCESS_TOKEN, accessToken.token()); | |
android.util.Log.d("RetroWeibo", "weiboParameters:token: " + accessToken.token()); | |
return params; | |
} | |
}).flatMap(new Func1<WeiboParameters, Observable<String>>() { | |
@Override public Observable<String> call(WeiboParameters params) { | |
String prefix = HTTPS_WEIBO_API_2; | |
if ("/oauth2/revokeoauth2".startsWith("http")) prefix = ""; | |
if ("/oauth2/revokeoauth2".startsWith("/oauth2")) { | |
return Observable.create(new OnSubscribeWeibo(context, HTTPS_WEIBO_API + "/oauth2/revokeoauth2", params, POST)); | |
} else { | |
return Observable.create(new OnSubscribeWeibo(context, prefix + "/oauth2/revokeoauth2", params, POST)); | |
} | |
} | |
}).flatMap(new Func1<String, Observable<Response>>() { | |
@Override public Observable<Response> call(String json) { | |
// TODO check "data" field to determine parse group or item. | |
ResponseList group = null; | |
try { | |
Log.d("RetroWeibo", "ResponseList: " + json); | |
group = LoganSquare.parse(json, AutoJson_ResponseList.class); | |
} catch (java.io.IOException e) { | |
e.printStackTrace(); | |
return Observable.empty(); | |
} | |
if (group != null && group.data() != null) return Observable.from(group.data()); | |
try { | |
return Observable.<Response>just(LoganSquare.parse(json, AutoJson_Response.class)); | |
} catch (java.io.IOException e) { | |
return Observable.empty(); | |
} | |
} | |
}).filter(new Func1<Response, Boolean>() { | |
@Override public Boolean call(Response item) { | |
return item != null; | |
} | |
})); | |
return obs; | |
} | |
private static class OnSubscribeWeibo implements Observable.OnSubscribe<String> { | |
private static final int DEFAULT_LIMIT = 30; | |
private static final String COUNT = "count"; | |
private static final String PAGE = "page"; | |
private static final String CURSOR = "cursor"; | |
private int page = 1; | |
private String cursor = "0"; | |
private Context context; | |
private String url; | |
private WeiboParameters params; | |
private String method; | |
public OnSubscribeWeibo(Context context, String url, WeiboParameters params, String method) { | |
this.context = context; | |
this.params = params; | |
this.method = method; | |
this.url = url; | |
} | |
private void request(int page, String cursor, RequestListener listener) { | |
android.util.Log.d("RetroWeibo", method); | |
android.util.Log.d("RetroWeibo", "url: " + url); | |
params.put(COUNT, DEFAULT_LIMIT); | |
params.put(PAGE, page); | |
params.put(CURSOR, cursor); | |
new AsyncWeiboRunner(context).requestAsync( | |
url, | |
params, | |
method, | |
listener | |
); | |
} | |
@Override | |
public void call(final Subscriber<? super String> sub) { | |
RequestListener listener = new RequestListener() { | |
@Override public void onComplete(String json) { | |
sub.onNext(json); | |
cursor = getNextCursor(json); | |
if ("0".equals(cursor)) { | |
sub.onCompleted(); | |
} else { | |
request(page++, cursor, this); | |
} | |
} | |
@Override public void onWeiboException(WeiboException e) { | |
sub.onError(e); | |
} | |
}; | |
request(page++, cursor, listener); | |
} | |
} | |
private static <T> T _cast(Object o) { | |
return (T) o; | |
} | |
private static void _put(WeiboParameters params, Map<String, String> map) { | |
for (Map.Entry<String, String> entry : map.entrySet()) { | |
android.util.Log.d("RetroWeibo", entry.getKey() + ":" + entry.getValue()); | |
params.put(entry.getKey(), entry.getValue()); | |
} | |
} | |
private static void _put(WeiboParameters params, String key, String value) { | |
android.util.Log.d("RetroWeibo", key + ":" + value); | |
params.put(key, value); | |
} | |
private static void _put(WeiboParameters params, String key, int value) { | |
android.util.Log.d("RetroWeibo", key + ":" + value); | |
params.put(key, value); | |
} | |
private static void _put(WeiboParameters params, String key, long value) { | |
android.util.Log.d("RetroWeibo", key + ":" + value); | |
params.put(key, value); | |
} | |
private static void _put(WeiboParameters params, String key, boolean value) { | |
_put(params, key, value ? 1 : 0); | |
} | |
private static void _put(WeiboParameters params, String key, android.graphics.Bitmap value) { | |
android.util.Log.d("RetroWeibo", key + ":" + value); | |
params.put(key, value); | |
} | |
private static void _put(WeiboParameters params, String key, Object value) { | |
android.util.Log.d("RetroWeibo", key + ":" + value); | |
//try { | |
//JSONObject json = new JSONObject("" + value); | |
//params.put(key, json.toString()); | |
//} catch (JSONException e) { | |
params.put(key, value); | |
//} | |
} | |
private static void _put(WeiboParameters params, String key, Object[] values) { | |
_put(params, key, TextUtils.join(",", values)); | |
} | |
/* | |
private static void _put(WeiboParameters params, String key, float value) { | |
_put(params, key, String.valueOf(value)); | |
} | |
private static void _put(WeiboParameters params, String key, double value) { | |
_put(params, key, String.valueOf(value)); | |
} | |
*/ | |
private Observable<AccessToken> _logIn() { | |
return logInWithPermissions( | |
"email", | |
"direct_messages_read", | |
"direct_messages_write", | |
"friendships_groups_read", | |
"friendships_groups_write", | |
"statuses_to_me_read", | |
"follow_app_official_microblog", | |
"invitation_write" | |
); | |
} | |
public Observable<AccessToken> _logInWithPermissions(String... permissions) { | |
return _logInWithPermissions(Arrays.asList(permissions)); | |
} | |
private Observable<AccessToken> _logInWithPermissions(final Collection<String> permissions) { | |
if (accessToken == null) accessToken = AccessTokenPreferences.create(context); | |
if (true) return Observable.just(accessToken); | |
if (_isValid(accessToken)) { | |
if (!_hasNewPermissions(accessToken, permissions)) { | |
return Observable.just(accessToken); | |
} | |
} | |
ssoHandler = new SsoHandler(activity, new AuthInfo(context, appId, redirectUrl, | |
TextUtils.join(",", permissions))); | |
return _logInForOauth2AccessToken(permissions).map(new Func1<Oauth2AccessToken, AccessToken>() { | |
@Override public AccessToken call(Oauth2AccessToken oauth2) { | |
accessToken.uid(oauth2.getUid()); | |
accessToken.token(oauth2.getToken()); | |
accessToken.refreshToken(oauth2.getRefreshToken()); | |
accessToken.expiresTime(oauth2.getExpiresTime()); | |
accessToken.phoneNum(oauth2.getPhoneNum()); | |
accessToken.permissions(new HashSet<>(permissions)); //accessToken.permissions(permissions.addAll(accessToken.permissions())); | |
return accessToken; | |
} | |
}); | |
} | |
private Observable<Oauth2AccessToken> _logInForOauth2AccessToken(Collection<String> permissions) { | |
return _logInForBundle(permissions).map(new Func1<Bundle, Oauth2AccessToken>() { | |
@Override public Oauth2AccessToken call(Bundle bundle) { | |
return Oauth2AccessToken.parseAccessToken(bundle); | |
} | |
}).flatMap(new Func1<Oauth2AccessToken, Observable<Oauth2AccessToken>>() { | |
@Override public Observable<Oauth2AccessToken> call(Oauth2AccessToken oauth2) { | |
if (!oauth2.isSessionValid()) { | |
return Observable.error(new WeiboException("AccessToken is invalid")); | |
} | |
return Observable.just(oauth2); | |
} | |
}); | |
} | |
private Observable<Bundle> _logInForBundle(Collection<String> permissions) { | |
return Observable.create(new Observable.OnSubscribe<Bundle>() { | |
@Override public void call(final Subscriber<? super Bundle> sub) { | |
ssoHandler.authorize(new WeiboAuthListener() { | |
@Override public void onComplete(Bundle values) { | |
sub.onNext(values); | |
sub.onCompleted(); | |
} | |
@Override public void onCancel() { | |
sub.onCompleted(); | |
} | |
@Override public void onWeiboException(WeiboException e) { | |
sub.onError(e); | |
} | |
}); | |
} | |
}); | |
} | |
private static boolean _isValid(AccessToken accessToken) { | |
return !TextUtils.isEmpty(accessToken.token()); // TODO && isExpired(accessToken) | |
} | |
private static boolean _hasNewPermissions(AccessToken accessToken, Collection<String> permissions) { | |
List<String> newPermissions = new ArrayList<>(permissions); | |
newPermissions.removeAll(accessToken.permissions()); | |
return !newPermissions.isEmpty(); | |
} | |
private static String _getMetaData(Context context, String key) { | |
ApplicationInfo ai = null; | |
try { | |
ai = context.getPackageManager().getApplicationInfo( | |
context.getPackageName(), PackageManager.GET_META_DATA); | |
} catch (PackageManager.NameNotFoundException e) { | |
return null; | |
} | |
if (ai == null || ai.metaData == null) { | |
return null; | |
} | |
return ai.metaData.getString(key); | |
} | |
private static String getNextCursor(String json) { | |
String nextCursor = "0"; | |
try { | |
JSONObject jsonObject = new JSONObject(json); | |
nextCursor = jsonObject.optString("next_cursor", "0"); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
return nextCursor; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment