blob: 5cd850199ab759152d7c8e3c757dfeae24d79dbe [file] [log] [blame]
package org.wordpress.android.ui.accounts.helpers;
import android.content.Context;
import com.android.volley.VolleyError;
import com.wordpress.rest.RestRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.wordpress.android.WordPress;
import org.wordpress.android.networking.RestClientUtils;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.wordpress.android.util.JSONUtils;
import org.wordpress.android.util.VolleyUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FetchBlogListWPCom extends FetchBlogListAbstract {
private Context mContext;
public FetchBlogListWPCom(Context context) {
super(null, null);
mContext = context;
}
protected void fetchBlogList(final Callback callback) {
getUsersBlogsRequestREST(callback);
}
private List<Map<String, Object>> convertJSONObjectToSiteList(JSONObject jsonObject, boolean keepJetpackSites) {
List<Map<String, Object>> sites = new ArrayList<Map<String, Object>>();
JSONArray jsonSites = jsonObject.optJSONArray("sites");
if (jsonSites != null) {
for (int i = 0; i < jsonSites.length(); i++) {
JSONObject jsonSite = jsonSites.optJSONObject(i);
Map<String, Object> site = new HashMap<String, Object>();
try {
// skip if it's a jetpack site and we don't keep them
if (jsonSite.getBoolean("jetpack") && !keepJetpackSites) {
continue;
}
site.put("blogName", jsonSite.get("name"));
site.put("url", jsonSite.get("URL"));
site.put("blogid", jsonSite.get("ID"));
site.put("isAdmin", jsonSite.get("user_can_manage"));
site.put("isVisible", jsonSite.get("visible"));
// store capabilities as a json string
site.put("capabilities", jsonSite.getString("capabilities"));
JSONObject plan = jsonSite.getJSONObject("plan");
site.put("planID", plan.get("product_id"));
site.put("plan_product_name_short", plan.get("product_name_short"));
JSONObject jsonLinks = JSONUtils.getJSONChild(jsonSite, "meta/links");
if (jsonLinks != null) {
site.put("xmlrpc", jsonLinks.getString("xmlrpc"));
sites.add(site);
} else {
AppLog.e(T.NUX, "xmlrpc links missing from the me/sites REST response");
}
} catch (JSONException e) {
AppLog.e(T.NUX, e);
}
}
}
return sites;
}
private void getUsersBlogsRequestREST(final FetchBlogListAbstract.Callback callback) {
WordPress.getRestClientUtils().get("me/sites", RestClientUtils.getRestLocaleParams(mContext), null, new RestRequest.Listener() {
@Override
public void onResponse(JSONObject response) {
if (response != null) {
List<Map<String, Object>> userBlogListReceiver = convertJSONObjectToSiteList(response, true);
callback.onSuccess(userBlogListReceiver);
} else {
callback.onSuccess(null);
}
}
}, new RestRequest.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
JSONObject errorObject = VolleyUtils.volleyErrorToJSON(volleyError);
callback.onError(LoginWPCom.restLoginErrorToMsgId(errorObject), false, false, false, "");
}
});
}
}