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

Reply via email to