package org.wordpress.android.task; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.support.v4.app.FragmentTransaction; import com.justsystems.hpb.pad.R; import org.xmlrpc.android.XMLRPCClient; import org.xmlrpc.android.XMLRPCException; import org.wordpress.android.WordPress; import org.wordpress.android.models.Blog; import org.wordpress.android.models.CustomTypePost; import org.wordpress.android.models.Post; import org.wordpress.android.models.Postable; import org.wordpress.android.ui.posts.PostListAdapter; import org.wordpress.android.ui.posts.PostsListFragment; import org.wordpress.android.ui.posts.PostsListFragment.OnRefreshListener; import org.wordpress.android.util.WPAlertDialogFragment; abstract class AbsLoadPostsTask extends MultiAsyncTask<List<?>, Void, Boolean> { private Context context; private PostsListFragment fragment; private OnRefreshListener mOnRefreshListener; private boolean loadMore; private String errorMsg = ""; AbsLoadPostsTask(PostsListFragment fragment, OnRefreshListener mOnRefreshListener, boolean loadMore) { this.context = fragment.getActivity().getApplicationContext(); this.fragment = fragment; this.mOnRefreshListener = mOnRefreshListener; this.loadMore = loadMore; } @Override protected Boolean doInBackground(List<?>... args) { List<?> arguments = args[0]; final Blog currentBlog = (Blog) arguments.get(0); WordPress.currentBlog = currentBlog; boolean isPage = (Boolean) arguments.get(1); int recordCount = (Integer) arguments.get(2); final int id = WordPress.currentBlog.getId(); final String url = currentBlog.getUrl(); final String httpUser = currentBlog.getHttpuser(); final String httpPassword = currentBlog.getHttppassword(); final int blogId = currentBlog.getBlogId(); final String userName = currentBlog.getUsername(); final String password = currentBlog.getPassword(); XMLRPCClient client = new XMLRPCClient(url, httpUser, httpPassword); Object[] params = { blogId, userName, password, recordCount }; Object[] result = null; try { result = (Object[]) client.call(getMethod(), params); } catch (XMLRPCException e) { errorMsg = e.getMessage(); if (errorMsg == null) errorMsg = this.context.getResources().getString( R.string.error_generic); } if (result == null) { errorMsg = this.context.getResources().getString( R.string.error_generic); return false; } if (result.length > 0) { Map<?, ?> contentHash = new HashMap<Object, Object>(); List<Map<?, ?>> dbVector = new Vector<Map<?, ?>>(); if (!loadMore) { WordPress.wpDB.deleteUploadedPosts( WordPress.currentBlog.getId(), isPage); } for (int ctr = 0; ctr < result.length; ctr++) { Map<String, Object> dbValues = new HashMap<String, Object>(); contentHash = (Map<?, ?>) result[ctr]; dbValues.put("blogID", blogId); dbVector.add(ctr, contentHash); } WordPress.wpDB.savePosts(dbVector, id, isPage); } else { PostListAdapter adapter = fragment.getAdapter(); if (adapter != null) { if (adapter.getCount() == 2) { try { // XXX Postable postable = WordPress.getCurrentPost(); if (postable.getType() == Postable.TYP_PAGE || postable.getType() == Postable.TYP_POST) { WordPress.wpDB.deleteUploadedPosts(id, ((Post) postable).isPage()); } else { WordPress.wpDB.deleteUploadedCustomTypePosts(id, ((CustomTypePost) postable).getPost_type()); } // XXX /* * mOnPostActionListener.onPostAction(AbsListActivity. * POST_CLEAR, WordPress.currentPost); */ } catch (Exception e) { e.printStackTrace(); } WordPress.setCurrentPost(null); } } } return true; } protected void onPostExecute(Boolean result) { if (isCancelled() || !result) { mOnRefreshListener.onRefresh(false); final Activity activity = this.fragment.getActivity(); if (activity == null) { return; } final Resources res = this.context.getResources(); if (errorMsg != "" && !activity.isFinishing()) { FragmentTransaction ft = this.fragment.getFragmentManager() .beginTransaction(); WPAlertDialogFragment alert = WPAlertDialogFragment .newInstance(String.format( res.getString(R.string.error_refresh), getTitle(res)), errorMsg); try { alert.show(ft, "alert"); } catch (Exception e) { e.printStackTrace(); } errorMsg = ""; } return; } if (loadMore) this.fragment.switcher.showPrevious(); mOnRefreshListener.onRefresh(false); if (this.fragment.isAdded()) this.fragment.loadPosts(loadMore); } abstract String getTitle(Resources res); abstract String getMethod(); }