package org.wikipedia.readinglist.page.database;
import android.support.annotation.NonNull;
import android.util.Base64;
import org.wikipedia.page.PageTitle;
import org.wikipedia.readinglist.ReadingList;
import org.wikipedia.readinglist.page.ReadingListPage;
import org.wikipedia.readinglist.page.database.disk.DiskStatus;
public final class ReadingListDaoProxy {
@NonNull public static PageTitle pageTitle(@NonNull ReadingListPage page) {
return new PageTitle(page.title(), page.wikiSite(), page.thumbnailUrl(), page.description());
}
@NonNull public static ReadingListPage page(@NonNull ReadingList list, @NonNull PageTitle title) {
long now = System.currentTimeMillis();
return ReadingListPage
.builder()
.diskStatus(DiskStatus.OUTDATED)
.key(key(title))
.listKeys(listKey(list))
.site(title.getWikiSite())
.namespace(title.namespace())
.title(title.getDisplayText())
.diskPageRevision(title.hasProperties() ? title.getProperties().getRevisionId() : 0)
.mtime(now)
.atime(now)
.thumbnailUrl(title.hasProperties() ? title.getProperties().getLeadImageUrl() : null)
.description(title.getDescription())
.build();
}
@NonNull public static String key(@NonNull PageTitle title) {
// TODO: this should use the following but PageTitles often do not have Properties and page
// ID is not preserved elsewhere.
// return "wikipedia-" + title.getWikiSite().languageCode() + '-' + title.getProperties().getPageId();
return Base64.encodeToString((title.getWikiSite().languageCode() + '-' + title.getDisplayText()).getBytes(),
Base64.NO_WRAP);
}
@NonNull public static String listKey(@NonNull ReadingList list) {
// TODO: we need to rekey all pages if a user changes the list title.
return listKey(list.getTitle());
}
@NonNull public static String listKey(@NonNull String title) {
// TODO: we need to rekey all pages if a user changes the list title.
return Base64.encodeToString(title.getBytes(), Base64.NO_WRAP);
}
@NonNull public static String listName(@NonNull String key) {
return new String(Base64.decode(key, Base64.NO_WRAP));
}
private ReadingListDaoProxy() { }
}