[MediaWiki-commits] [Gerrit] Data migration for old saved pages - bookmarks - change (apps...wikipedia)

2014-05-08 Thread Dbrant (Code Review)
Dbrant has submitted this change and it was merged.

Change subject: Data migration for old saved pages - bookmarks
..


Data migration for old saved pages - bookmarks

This is done once on first launch, synchronously.
Should still be pretty fast since it's only saving the page title entries,
not fetching any of their data.

Change-Id: I4063447c9f29e4267cf547de040ddcf871dd7816
---
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
A wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
A wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
3 files changed, 143 insertions(+), 0 deletions(-)

Approvals:
  Dbrant: Looks good to me, approved



diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index 54bf450..102a3b7 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -7,10 +7,12 @@
 import android.net.*;
 import android.os.*;
 import android.preference.*;
+import android.util.Log;
 import android.webkit.*;
 import com.squareup.otto.*;
 import org.acra.*;
 import org.acra.annotation.*;
+import org.json.JSONObject;
 import org.mediawiki.api.json.*;
 import org.wikipedia.analytics.*;
 import org.wikipedia.data.*;
@@ -18,6 +20,8 @@
 import org.wikipedia.editing.summaries.*;
 import org.wikipedia.history.*;
 import org.wikipedia.login.*;
+import org.wikipedia.migration.ArticleImporter;
+import org.wikipedia.migration.DataMigrator;
 import org.wikipedia.networking.*;
 import org.wikipedia.pageimages.*;
 import org.wikipedia.bookmarks.*;
@@ -99,6 +103,24 @@
 throw new RuntimeException(e);
 }
 
+try {
+DataMigrator dataMigrator = new DataMigrator(this);
+if (dataMigrator.hasData()) {
+// whee
+Log.d(Wikipedia, Migrating old app data...);
+ArticleImporter articleImporter = new ArticleImporter(this);
+ListJSONObject pages = dataMigrator.extractSavedPages();
+Log.d(Wikipedia, Importing  + pages.size() +  old saved 
pages as bookmarks...);
+articleImporter.importArticles(pages);
+Log.d(Wikipedia, Deleting old saved pages table);
+dataMigrator.removeOldData();
+Log.d(Wikipedia, Migration done.);
+} else {
+Log.d(Wikipedia, No old app data to migrate);
+}
+} catch (Exception e) {
+Log.d(Wikipedia, Migration code fail:  + e);
+}
 }
 
 public Bus getBus() {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java 
b/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
new file mode 100644
index 000..2434221
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
@@ -0,0 +1,35 @@
+package org.wikipedia.migration;
+
+import org.json.JSONObject;
+import org.wikipedia.PageTitle;
+import org.wikipedia.Site;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.bookmarks.Bookmark;
+import org.wikipedia.bookmarks.BookmarkPersister;
+
+import android.content.Context;
+import java.util.List;
+
+public class ArticleImporter {
+private final WikipediaApp app;
+
+public ArticleImporter(Context context) {
+app = (WikipediaApp) context.getApplicationContext();
+}
+
+public void importArticles(ListJSONObject articles) {
+//
+BookmarkPersister persister = (BookmarkPersister) 
app.getPersister(Bookmark.class);
+
+for (JSONObject item : articles) {
+PageTitle title = titleForItem(item);
+Bookmark bookmark = new Bookmark(title);
+persister.upsert(bookmark);
+}
+}
+
+private PageTitle titleForItem(JSONObject item) {
+Site site = new Site(item.optString(lang) + .wikipedia.org);
+return new PageTitle(null, item.optString(title), site);
+}
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java 
b/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
new file mode 100644
index 000..6d5a72b
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
@@ -0,0 +1,86 @@
+package org.wikipedia.migration;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataMigrator {
+Context context;
+
+public DataMigrator(Context context) {
+super();
+this.context = context;
+}
+
+/**
+ * @return Are databases from the old app present?
+ */
+public boolean hasData() {
+String path = 

[MediaWiki-commits] [Gerrit] Data migration for old saved pages - bookmarks - change (apps...wikipedia)

2014-05-05 Thread Brion VIBBER (Code Review)
Brion VIBBER has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/131539

Change subject: Data migration for old saved pages - bookmarks
..

Data migration for old saved pages - bookmarks

This is done once on first launch, synchronously.
Should still be pretty fast since it's only saving the page title entries,
not fetching any of their data.

Change-Id: I4063447c9f29e4267cf547de040ddcf871dd7816
---
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
A wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
A wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
3 files changed, 143 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/39/131539/1

diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index 54bf450..102a3b7 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -7,10 +7,12 @@
 import android.net.*;
 import android.os.*;
 import android.preference.*;
+import android.util.Log;
 import android.webkit.*;
 import com.squareup.otto.*;
 import org.acra.*;
 import org.acra.annotation.*;
+import org.json.JSONObject;
 import org.mediawiki.api.json.*;
 import org.wikipedia.analytics.*;
 import org.wikipedia.data.*;
@@ -18,6 +20,8 @@
 import org.wikipedia.editing.summaries.*;
 import org.wikipedia.history.*;
 import org.wikipedia.login.*;
+import org.wikipedia.migration.ArticleImporter;
+import org.wikipedia.migration.DataMigrator;
 import org.wikipedia.networking.*;
 import org.wikipedia.pageimages.*;
 import org.wikipedia.bookmarks.*;
@@ -99,6 +103,24 @@
 throw new RuntimeException(e);
 }
 
+try {
+DataMigrator dataMigrator = new DataMigrator(this);
+if (dataMigrator.hasData()) {
+// whee
+Log.d(Wikipedia, Migrating old app data...);
+ArticleImporter articleImporter = new ArticleImporter(this);
+ListJSONObject pages = dataMigrator.extractSavedPages();
+Log.d(Wikipedia, Importing  + pages.size() +  old saved 
pages as bookmarks...);
+articleImporter.importArticles(pages);
+Log.d(Wikipedia, Deleting old saved pages table);
+dataMigrator.removeOldData();
+Log.d(Wikipedia, Migration done.);
+} else {
+Log.d(Wikipedia, No old app data to migrate);
+}
+} catch (Exception e) {
+Log.d(Wikipedia, Migration code fail:  + e);
+}
 }
 
 public Bus getBus() {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java 
b/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
new file mode 100644
index 000..2434221
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/migration/ArticleImporter.java
@@ -0,0 +1,35 @@
+package org.wikipedia.migration;
+
+import org.json.JSONObject;
+import org.wikipedia.PageTitle;
+import org.wikipedia.Site;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.bookmarks.Bookmark;
+import org.wikipedia.bookmarks.BookmarkPersister;
+
+import android.content.Context;
+import java.util.List;
+
+public class ArticleImporter {
+private final WikipediaApp app;
+
+public ArticleImporter(Context context) {
+app = (WikipediaApp) context.getApplicationContext();
+}
+
+public void importArticles(ListJSONObject articles) {
+//
+BookmarkPersister persister = (BookmarkPersister) 
app.getPersister(Bookmark.class);
+
+for (JSONObject item : articles) {
+PageTitle title = titleForItem(item);
+Bookmark bookmark = new Bookmark(title);
+persister.upsert(bookmark);
+}
+}
+
+private PageTitle titleForItem(JSONObject item) {
+Site site = new Site(item.optString(lang) + .wikipedia.org);
+return new PageTitle(null, item.optString(title), site);
+}
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java 
b/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
new file mode 100644
index 000..6d5a72b
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/migration/DataMigrator.java
@@ -0,0 +1,86 @@
+package org.wikipedia.migration;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataMigrator {
+Context context;
+
+public DataMigrator(Context context) {
+super();
+this.context = context;
+}
+
+/**
+ * @return Are databases from the