Sharvaniharan has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/402464 )
Change subject: [WIP] Split large reading lists ...................................................................... [WIP] Split large reading lists - Split existing lists > 1000 on version update - Split lists when articles are added, if they exceed 1000 counts - Show UI feedback before splitting Bug: T180229 Change-Id: Ife8b1c4adea5e67f82d6d033d6800fd1ed5f2e4c --- M app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java M app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java M app/src/main/res/values/strings.xml 3 files changed, 36 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/64/402464/1 diff --git a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java index 3b90199..885c7a8 100644 --- a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java +++ b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java @@ -1,14 +1,17 @@ package org.wikipedia.readinglist.database; import android.content.ContentValues; +import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import org.wikipedia.R; import org.wikipedia.WikipediaApp; import org.wikipedia.database.contract.ReadingListContract; import org.wikipedia.database.contract.ReadingListPageContract; +import org.wikipedia.dataclient.WikiSite; import org.wikipedia.page.PageTitle; import org.wikipedia.savedpages.SavedPageSyncService; import org.wikipedia.util.log.L; @@ -19,6 +22,7 @@ public class ReadingListDbHelper { private static ReadingListDbHelper INSTANCE; + private static final int MAX_ARTICLE_LIMIT = 1000; public static ReadingListDbHelper instance() { if (INSTANCE == null) { @@ -116,6 +120,7 @@ } finally { db.endTransaction(); } + spiltLargeList(list); SavedPageSyncService.enqueue(); } @@ -130,6 +135,7 @@ for (ReadingListPage page : pages) { insertPageInDb(db, list, page); } + spiltLargeList(list); db.setTransactionSuccessful(); } finally { db.endTransaction(); @@ -149,6 +155,7 @@ addPageToList(db, list, title); numAdded++; } + spiltLargeList(list); db.setTransactionSuccessful(); } finally { db.endTransaction(); @@ -483,4 +490,24 @@ private SQLiteDatabase getWritableDatabase() { return WikipediaApp.getInstance().getDatabase().getWritableDatabase(); } + + public synchronized void spiltLargeList(ReadingList readingList) { + int index = readingList.title().split("_").length == 1 ? 1 : Integer.valueOf(readingList.title().split("_")[1]) + 1; + WikiSite wikiSite = WikipediaApp.getInstance().getWikiSite(); + Context context = WikipediaApp.getInstance(); + List<ReadingListPage> pageTitleList = new ArrayList<>(); + List<PageTitle> toBeAddedList = new ArrayList<>(); + if (readingList.pages().size() <= MAX_ARTICLE_LIMIT) { + return; + } + for (int j = MAX_ARTICLE_LIMIT - 1; j < readingList.pages().size(); j++) { + pageTitleList.add(readingList.pages().get(j)); + toBeAddedList.add(new PageTitle(readingList.pages().get(j).title(), wikiSite)); + } + markPagesForDeletion(pageTitleList); + purgeDeletedPages(); + ReadingList newList = createList(String.format(context.getString(R.string.split_list_name), readingList.title().split("_")[0], index), readingList.description()); + addPagesToListIfNotExist(newList, toBeAddedList); + spiltLargeList(newList); + } } diff --git a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java index 0f4f6f7..cb6db3b 100644 --- a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java +++ b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java @@ -81,10 +81,18 @@ importOldLists(db, currentLists); } createDefaultList(db, currentLists); + //splitLargeLists(db, currentLists); // TODO: add other one-time conversions here. } } + + private void splitLargeLists(SQLiteDatabase db, List<ReadingList> currentLists) { + for (ReadingList list : currentLists) { + ReadingListDbHelper.instance().spiltLargeList(list); + } + } + @Override protected ContentValues toContentValues(@NonNull ReadingListPage row) { ContentValues contentValues = new ContentValues(); contentValues.put(ReadingListPageContract.Col.LISTID.getName(), row.listId()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ebce5d9..6c692f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -389,6 +389,7 @@ <string name="reading_list_added_articles_list_titled">Added %1$d articles to %2$s</string> <string name="default_reading_list_name">Saved</string> <string name="default_reading_list_description">Default list for your saved articles</string> + <string name="split_list_name">%1$s_%2$d</string> <plurals name="reading_list_article_offline_message"> <item quantity="one">This article will now be available offline.</item> <item quantity="other">These articles will now be available offline.</item> -- To view, visit https://gerrit.wikimedia.org/r/402464 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ife8b1c4adea5e67f82d6d033d6800fd1ed5f2e4c Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Sharvaniharan <sha...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits