package org.wikipedia.readinglist.sync;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.apache.commons.lang3.StringUtils;
import org.wikipedia.readinglist.ReadingList;
import org.wikipedia.readinglist.page.ReadingListPage;
import java.util.ArrayList;
import java.util.List;
public class RemoteReadingLists {
// TODO: don't use userjs options for storing reading lists.
// Since userjs options are not an optimal way of storing reading lists on the server,
// we need to artificially limit the number of pages that can be synced.
private static final int MAX_SYNCED_LISTS = 10;
private static final int MAX_SYNCED_PAGES_PER_LIST = 100;
@SuppressWarnings("unused") private long rev;
@SuppressWarnings("unused") @NonNull private List<RemoteReadingList> lists;
RemoteReadingLists(long rev, List<ReadingList> localLists) {
this.rev = rev;
lists = new ArrayList<>();
for (ReadingList localList : localLists) {
lists.add(new RemoteReadingList(localList));
if (lists.size() >= MAX_SYNCED_LISTS) {
break;
}
}
}
public long rev() {
return rev;
}
@NonNull public List<RemoteReadingList> lists() {
return lists;
}
static class RemoteReadingList {
@SuppressWarnings("unused") @NonNull private String title;
@SuppressWarnings("unused") @Nullable private String desc;
@SuppressWarnings("unused") @NonNull private List<RemoteReadingListPage> pages;
RemoteReadingList(@NonNull ReadingList localList) {
this.title = localList.getTitle();
this.desc = localList.getDescription();
pages = new ArrayList<>();
for (ReadingListPage localPage : localList.getPages()) {
pages.add(new RemoteReadingListPage(localPage.wikiSite().languageCode(),
localPage.namespace().code(), localPage.title()));
if (pages.size() >= MAX_SYNCED_PAGES_PER_LIST) {
break;
}
}
}
@NonNull public String title() {
return title;
}
@NonNull public String desc() {
return StringUtils.defaultString(desc);
}
@NonNull public List<RemoteReadingListPage> pages() {
return pages;
}
}
public static class RemoteReadingListPage {
@NonNull private String lang;
private int namespace;
@NonNull private String title;
RemoteReadingListPage(@NonNull String lang, int namespace, @NonNull String title) {
this.lang = lang;
this.namespace = namespace;
this.title = title;
}
@NonNull public String lang() {
return lang;
}
public int namespace() {
return namespace;
}
@NonNull public String title() {
return title;
}
}
}