package me.ccrama.redditslide.Adapters;
import net.dean.jraw.models.Contribution;
import net.dean.jraw.models.Submission;
import net.dean.jraw.paginators.UserSavedPaginator;
import java.util.ArrayList;
import me.ccrama.redditslide.Authentication;
import me.ccrama.redditslide.HasSeen;
import me.ccrama.redditslide.PostMatch;
import me.ccrama.redditslide.Reddit;
import me.ccrama.redditslide.SettingValues;
/**
* Created by ccrama on 9/17/2015.
*/
public class ContributionPostsSaved extends ContributionPosts {
private final String category;
public ContributionPostsSaved(String subreddit, String where, String category) {
super(subreddit, where);
this.category = category;
}
UserSavedPaginator paginator;
@Override
public void loadMore(ContributionAdapter adapter, String subreddit, boolean reset) {
new LoadData(reset).execute(subreddit);
}
public class LoadData extends ContributionPosts.LoadData {
public LoadData(boolean reset) {
super(reset);
}
@Override
public void onPostExecute(ArrayList<Contribution> submissions) {
loading = false;
if (submissions != null && !submissions.isEmpty()) {
// new submissions found
int start = 0;
if (posts != null) {
start = posts.size() + 1;
}
ArrayList<Contribution> filteredSubmissions = new ArrayList<>();
for (Contribution c : submissions) {
if (c instanceof Submission) {
if (!PostMatch.doesMatch((Submission) c)) {
filteredSubmissions.add(c);
}
} else {
filteredSubmissions.add(c);
}
}
HasSeen.setHasSeenContrib(filteredSubmissions);
if (reset || posts == null) {
posts = filteredSubmissions;
start = -1;
} else {
posts.addAll(filteredSubmissions);
}
final int finalStart = start;
// update online
if (refreshLayout != null) {
refreshLayout.setRefreshing(false);
}
if (finalStart != -1) {
adapter.notifyItemRangeInserted(finalStart + 1, posts.size());
} else {
adapter.notifyDataSetChanged();
}
} else if (submissions != null) {
// end of submissions
nomore = true;
adapter.notifyDataSetChanged();
} else if (!nomore) {
// error
adapter.setError(true);
}
refreshLayout.setRefreshing(false);
}
@Override
protected ArrayList<Contribution> doInBackground(String... subredditPaginators) {
ArrayList<Contribution> newData = new ArrayList<>();
try {
if (reset || paginator == null) {
paginator = new UserSavedPaginator(Authentication.reddit, where, subreddit);
paginator.setSorting(SettingValues.getSubmissionSort(subreddit));
paginator.setTimePeriod(SettingValues.getSubmissionTimePeriod(subreddit));
if(category != null)
paginator.setCategory(category);
}
if (!paginator.hasNext()) {
nomore = true;
return new ArrayList<>();
}
for (Contribution c : paginator.next()) {
if (c instanceof Submission) {
Submission s = (Submission) c;
newData.add(s);
} else {
newData.add(c);
}
}
return newData;
} catch (Exception e) {
return null;
}
}
}
}