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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits