package me.ccrama.redditslide.Adapters; import android.app.Activity; import android.os.AsyncTask; import android.support.v4.widget.SwipeRefreshLayout; import com.fasterxml.jackson.databind.JsonNode; import net.dean.jraw.models.Message; import net.dean.jraw.models.PrivateMessage; import net.dean.jraw.paginators.InboxPaginator; import net.dean.jraw.paginators.Paginator; import java.util.ArrayList; import java.util.List; import me.ccrama.redditslide.Authentication; /** * Created by ccrama on 9/17/2015. */ public class InboxMessages extends GeneralPosts { public ArrayList<Message> posts; public boolean loading; private Paginator<Message> paginator; private SwipeRefreshLayout refreshLayout; public String where; private InboxAdapter adapter; public InboxMessages(ArrayList<Message> firstData, InboxPaginator paginator) { posts = firstData; this.paginator = paginator; } public InboxMessages(String where) { this.where = where; } public void bindAdapter(InboxAdapter a, SwipeRefreshLayout layout) { this.adapter = a; this.refreshLayout = layout; loadMore(a, where, true); } public void loadMore(InboxAdapter adapter, String where, boolean refresh) { new LoadData(refresh).execute(where); } public void addData(List<Message> data) { posts.addAll(data); } public class LoadData extends AsyncTask<String, Void, ArrayList<Message>> { final boolean reset; public LoadData(boolean reset) { this.reset = reset; } @Override public void onPostExecute(ArrayList<Message> subs) { if (subs == null && !nomore) { adapter.setError(true); refreshLayout.setRefreshing(false); } else if(!nomore) { if(subs.size() < 25){ nomore = true; } if (reset) { posts = subs; ((Activity) adapter.mContext).runOnUiThread(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(false); loading = false; adapter.notifyDataSetChanged(); } }); } else { if(posts == null){ posts =new ArrayList<>(); } posts.addAll(subs); ((Activity) adapter.mContext).runOnUiThread(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(false); loading = false; adapter.notifyDataSetChanged(); } }); } } } @Override protected ArrayList<Message> doInBackground(String... subredditPaginators) { try { if (reset || paginator == null) { paginator = new InboxPaginator(Authentication.reddit, where); paginator.setLimit(25); nomore = false; } if (paginator.hasNext()) { ArrayList<Message> done = new ArrayList<>(); for (Message m : paginator.next()) { done.add(m); if (m.getDataNode().has("replies") && !m.getDataNode().get("replies").toString().isEmpty() && m.getDataNode().get("replies").has("data") && m.getDataNode().get("replies").get("data").has("children")) { JsonNode n = m.getDataNode().get("replies").get("data").get("children"); for (JsonNode o : n) { done.add(new PrivateMessage(o.get("data"))); } } } return done; } else { nomore = true; } return null; } catch (Exception e) { e.printStackTrace(); return null; } } } }