From 899c4a97c155842c313993f062358ba372f0158e Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Fri, 25 Jul 2014 18:26:29 -0400 Subject: [PATCH 1/3] Fixed bug in ReaderTagTable that caused tbl_tag_updates to always overwrite the existing row when updating a date column --- .../android/datasets/ReaderTagTable.java | 85 ++++++++----------- 1 file changed, 34 insertions(+), 51 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java index 8fcf471e71f9..fcfcba9014a2 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java @@ -1,6 +1,5 @@ package org.wordpress.android.datasets; -import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; @@ -237,82 +236,66 @@ public static void deleteTag(ReaderTag tag) { ReaderDatabase.getWritableDb().delete("tbl_tag_updates", "tag_name=? AND tag_type=?", args); } + /** * tbl_tag_updates routines **/ public static String getTagNewestDate(ReaderTag tag) { - if (tag == null) { - return ""; - } - String[] args = {tag.getTagName(), Integer.toString(tag.tagType.toInt())}; - return SqlUtils.stringForQuery(ReaderDatabase.getReadableDb(), - "SELECT date_newest FROM tbl_tag_updates WHERE tag_name=? AND tag_type=?", - args); + return getDateColumn(tag, "date_newest"); } public static void setTagNewestDate(ReaderTag tag, String date) { - if (tag == null) { - return; - } - - ContentValues values = new ContentValues(); - values.put("tag_name", tag.getTagName()); - values.put("tag_type", tag.tagType.toInt()); - values.put("date_newest", date); - try { - ReaderDatabase.getWritableDb().insertWithOnConflict("tbl_tag_updates", null, values, SQLiteDatabase.CONFLICT_REPLACE); - } catch (SQLException e) { - AppLog.e(T.READER, e); - } + setDateColumn(tag, "date_newest", date); } public static String getTagOldestDate(ReaderTag tag) { - if (tag == null) { - return ""; - } - String[] args = {tag.getTagName(), Integer.toString(tag.tagType.toInt())}; - return SqlUtils.stringForQuery(ReaderDatabase.getReadableDb(), - "SELECT date_oldest FROM tbl_tag_updates WHERE tag_name=? AND tag_type=?", - args); + return getDateColumn(tag, "date_oldest"); } public static void setTagOldestDate(ReaderTag tag, String date) { - if (tag == null) { - return; - } - - ContentValues values = new ContentValues(); - values.put("tag_name", tag.getTagName()); - values.put("tag_type", tag.tagType.toInt()); - values.put("date_oldest", date); - try { - ReaderDatabase.getWritableDb().insertWithOnConflict("tbl_tag_updates", null, values, SQLiteDatabase.CONFLICT_REPLACE); - } catch (SQLException e) { - AppLog.e(T.READER, e); - } + setDateColumn(tag, "date_oldest", date); } private static String getTagLastUpdated(ReaderTag tag) { + return getDateColumn(tag, "date_updated"); + } + public static void setTagLastUpdated(ReaderTag tag, String date) { + setDateColumn(tag, "date_updated", date); + } + + private static String getDateColumn(ReaderTag tag, String colName) { if (tag == null) { return ""; } String[] args = {tag.getTagName(), Integer.toString(tag.tagType.toInt())}; return SqlUtils.stringForQuery(ReaderDatabase.getReadableDb(), - "SELECT date_updated FROM tbl_tag_updates WHERE tag_name=? AND tag_type=?", + "SELECT " + colName + " FROM tbl_tag_updates WHERE tag_name=? AND tag_type=?", args); } - - public static void setTagLastUpdated(ReaderTag tag, String date) { + private static void setDateColumn(ReaderTag tag, String colName, String date) { if (tag == null) { return; } - ContentValues values = new ContentValues(); - values.put("tag_name", tag.getTagName()); - values.put("tag_type", tag.tagType.toInt()); - values.put("date_updated", date); + String[] args = {tag.getTagName(), Integer.toString(tag.tagType.toInt())}; + boolean rowExists = SqlUtils.boolForQuery( + ReaderDatabase.getReadableDb(), + "SELECT 1 FROM tbl_tag_updates WHERE tag_name=? AND tag_type=?", + args); + + final String sql; + if (rowExists) { + sql = "UPDATE tbl_tag_updates SET " + colName + "=?1 WHERE tag_name=?2 AND tag_type=?3"; + } else { + sql = "INSERT INTO tbl_tag_updates (" + colName + " tag_name, tag_type, " + colName + ") VALUES (?1,?2,?3)"; + } + + SQLiteStatement stmt = ReaderDatabase.getWritableDb().compileStatement(sql); try { - ReaderDatabase.getWritableDb().insertWithOnConflict("tbl_tag_updates", null, values, SQLiteDatabase.CONFLICT_REPLACE); - } catch (SQLException e) { - AppLog.e(T.READER, e); + stmt.bindString(1, date); + stmt.bindString(2, tag.getTagName()); + stmt.bindLong (3, tag.tagType.toInt()); + stmt.execute(); + } finally { + SqlUtils.closeStatement(stmt); } } From dc05998f454ee366397702b07f1f76ca28af6d71 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Fri, 25 Jul 2014 18:26:56 -0400 Subject: [PATCH 2/3] ReaderPostListFragment now auto-updates upon resume --- .../android/ui/reader/ReaderPostListFragment.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java index c08ae99d1f5a..492b974e02aa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java @@ -218,6 +218,14 @@ public void onResume() { // likewise for tags refreshTags(); + + // auto-update the current tag if it's time + if (!isUpdating() + && getPostListType() == ReaderPostListType.TAG_FOLLOWED + && ReaderTagTable.shouldAutoUpdateTag(mCurrentTag)) { + AppLog.i(T.READER, "reader post list > auto-updating current tag after resume"); + updatePostsWithTag(getCurrentTag(), RequestDataAction.LOAD_NEWER, ReaderTypes.RefreshType.AUTOMATIC); + } } } From b675c6022411791a01245c4c2cfe65a48f4bd8c3 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Fri, 25 Jul 2014 20:44:27 -0400 Subject: [PATCH 3/3] Fixed bug in SQL insert --- .../java/org/wordpress/android/datasets/ReaderTagTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java index fcfcba9014a2..aa472fde7207 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderTagTable.java @@ -285,7 +285,7 @@ private static void setDateColumn(ReaderTag tag, String colName, String date) { if (rowExists) { sql = "UPDATE tbl_tag_updates SET " + colName + "=?1 WHERE tag_name=?2 AND tag_type=?3"; } else { - sql = "INSERT INTO tbl_tag_updates (" + colName + " tag_name, tag_type, " + colName + ") VALUES (?1,?2,?3)"; + sql = "INSERT INTO tbl_tag_updates (" + colName + ", tag_name, tag_type) VALUES (?1,?2,?3)"; } SQLiteStatement stmt = ReaderDatabase.getWritableDb().compileStatement(sql);