| package org.wordpress.android.ui.accounts.helpers; |
| |
| import org.wordpress.android.analytics.AnalyticsTracker; |
| import org.wordpress.android.analytics.AnalyticsTracker.Stat; |
| |
| import org.xmlrpc.android.XMLRPCUtils; |
| import org.xmlrpc.android.XMLRPCUtils.XMLRPCUtilsException; |
| |
| import android.os.AsyncTask; |
| |
| import java.net.URI; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| public class FetchBlogListWPOrg extends FetchBlogListAbstract { |
| private String mSelfHostedUrl; |
| private String mHttpUsername; |
| private String mHttpPassword; |
| |
| public FetchBlogListWPOrg(String username, String password, String selfHostedUrl) { |
| super(username, password); |
| mSelfHostedUrl = selfHostedUrl; |
| } |
| |
| public void setHttpCredentials(String username, String password) { |
| mHttpUsername = username; |
| mHttpPassword = password; |
| } |
| |
| public void fetchBlogList(Callback callback) { |
| (new FetchBlogListTask(callback)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
| } |
| |
| public class FetchBlogListTask extends AsyncTask<Void, Void, List<Map<String, Object>>> { |
| private final Callback mCallback; |
| private boolean mHttpAuthRequired; |
| private boolean mErroneousSslCertificate; |
| private int mErrorMsgId; |
| private String mClientResponse = ""; |
| |
| public FetchBlogListTask(Callback callback) { |
| mCallback = callback; |
| } |
| |
| private void trackInvalidInsertedURL(String url){ |
| Map<String, Object> properties = new HashMap<>(); |
| properties.put("user_inserted_url", url); |
| AnalyticsTracker.track(Stat.LOGIN_INSERTED_INVALID_URL, properties); |
| } |
| |
| @Override |
| protected List<Map<String, Object>> doInBackground(Void... notUsed) { |
| try { |
| String xmlrpcUrl = XMLRPCUtils.verifyOrDiscoverXmlRpcUrl(mSelfHostedUrl, mHttpUsername, mHttpPassword); |
| |
| // The XML-RPC address is now available. Call wp.getUsersBlogs and load the sites. |
| return XMLRPCUtils.getUserBlogsList(URI.create(xmlrpcUrl), mUsername, mPassword, mHttpUsername, |
| mHttpPassword); |
| } catch (XMLRPCUtilsException hce) { |
| mErrorMsgId = hce.errorMsgId; |
| mHttpAuthRequired = (hce.kind == XMLRPCUtilsException.Kind.HTTP_AUTH_REQUIRED); |
| mErroneousSslCertificate = (hce.kind == XMLRPCUtilsException.Kind.ERRONEOUS_SSL_CERTIFICATE); |
| trackInvalidInsertedURL(hce.failedUrl); |
| return null; |
| } |
| } |
| |
| protected void onPostExecute(List<Map<String, Object>> userBlogList) { |
| if (userBlogList == null) { |
| mCallback.onError(mErrorMsgId, false, mHttpAuthRequired, mErroneousSslCertificate, mClientResponse); |
| } else { |
| mCallback.onSuccess(userBlogList); |
| } |
| } |
| |
| protected void onCancelled() { |
| mCallback.onError(mErrorMsgId, false, mHttpAuthRequired, mErroneousSslCertificate, mClientResponse); |
| } |
| } |
| } |