Skip to content

Instantly share code, notes, and snippets.

@yongjhih
Created August 28, 2015 20:31
Show Gist options
  • Save yongjhih/dd77f92076e0703daae7 to your computer and use it in GitHub Desktop.
Save yongjhih/dd77f92076e0703daae7 to your computer and use it in GitHub Desktop.
RetroWeibo_SimpleWeibo.java
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