[MediaWiki-commits] [Gerrit] Data migration for old saved pages - bookmarks - change (apps...wikipedia)
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)
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