package me.ccrama.redditslide.Adapters;
import android.os.AsyncTask;
import android.support.v4.widget.SwipeRefreshLayout;
import net.dean.jraw.models.PublicContribution;
import net.dean.jraw.paginators.ModeratorPaginator;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import me.ccrama.redditslide.Authentication;
/**
* Created by ccrama on 9/17/2015.
*/
public class ModeratorPosts {
public ArrayList<PublicContribution> posts;
public boolean loading;
private SwipeRefreshLayout refreshLayout;
private String where;
private String subreddit;
private ModeratorAdapter adapter;
private ModeratorPaginator paginator;
public ModeratorPosts(ArrayList<PublicContribution> firstData, ModeratorPaginator paginator) {
posts = firstData;
this.paginator = paginator;
}
public ModeratorPosts(String where, String subreddit) {
this.where = where;
this.subreddit = subreddit;
}
public void bindAdapter(ModeratorAdapter a, SwipeRefreshLayout layout) {
this.adapter = a;
this.refreshLayout = layout;
loadMore(a, where, subreddit);
}
public void loadMore(ModeratorAdapter adapter, String where, String subreddit) {
this.subreddit = subreddit;
new LoadData(true).execute(where);
}
public void addData(List<PublicContribution> data) {
posts.addAll(data);
}
public class LoadData extends AsyncTask<String, Void, ArrayList<PublicContribution>> {
final boolean reset;
public LoadData(boolean reset) {
this.reset = reset;
}
@Override
public void onPostExecute(ArrayList<PublicContribution> subs) {
if (subs != null) {
if(reset || posts == null){
posts = new ArrayList<>(new LinkedHashSet(subs));
} else {
posts.addAll(subs);
posts = new ArrayList<>(new LinkedHashSet(posts));
}
loading = false;
refreshLayout.setRefreshing(false);
adapter.dataSet = ModeratorPosts.this;
adapter.notifyDataSetChanged();
} else {
adapter.setError(true);
refreshLayout.setRefreshing(false);
}
}
@Override
protected ArrayList<PublicContribution> doInBackground(String... subredditPaginators) {
try {
if (reset || paginator == null) {
paginator = new ModeratorPaginator(Authentication.reddit, subreddit, where);
}
paginator.setIncludeComments(true);
paginator.setIncludeSubmissions(true);
if (paginator.hasNext()) {
ArrayList<PublicContribution> done = new ArrayList<>(paginator.next());
return done;
}
return null;
} catch (Exception e) {
return null;
}
}
}
}