diff options
author | Oguz Kocer <oguz.kocer@automattic.com> | 2016-06-13 15:35:30 +0300 |
---|---|---|
committer | Oguz Kocer <oguz.kocer@automattic.com> | 2016-06-13 15:35:30 +0300 |
commit | be662a72efdae7dfe3ad3fb1277756a2a72637a2 (patch) | |
tree | 98fe946649ee020f5f4823995e02623652d999e7 /WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java | |
parent | f0ecda395170ebd8a98f35aa9b146a6f82430b8a (diff) | |
download | gradle-perf-android-medium-be662a72efdae7dfe3ad3fb1277756a2a72637a2.tar.gz |
Big refactor to PeopleTable methods to accommodate for followers
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java | 75 |
1 files changed, 57 insertions, 18 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java index 1d190976a..2fd95e6e7 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -73,12 +73,12 @@ public class PeopleTable { database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } - public static void savePeople(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { + public static void saveUsers(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { getWritableDb().beginTransaction(); try { - //We have a fresh list, remove the previous list of people in case it was deleted on remote + // We have a fresh list, remove the previous list of users in case it was deleted on remote if (isFreshList) { - PeopleTable.deletePeopleForLocalBlogId(localTableBlogId); + PeopleTable.deleteUsersForLocalBlogId(localTableBlogId); } for (Person person : peopleList) { @@ -90,42 +90,81 @@ public class PeopleTable { } } - public static int getPeopleCountForLocalBlogId(int localTableBlogId) { - String[] args = new String[]{Integer.toString(localTableBlogId)}; - String sql = "SELECT COUNT(*) FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?"; - return SqlUtils.intForQuery(getReadableDb(), sql, args); + public static void saveFollowers(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { + getWritableDb().beginTransaction(); + try { + // We have a fresh list, remove the previous list of followers in case it was deleted on remote + if (isFreshList) { + PeopleTable.deleteFollowersForLocalBlogId(localTableBlogId); + } + + for (Person person : peopleList) { + PeopleTable.save(person); + } + getWritableDb().setTransactionSuccessful(); + } finally { + getWritableDb().endTransaction(); + } } - public static void deletePeopleForLocalBlogId(int localTableBlogId) { - String[] args = new String[]{Integer.toString(localTableBlogId)}; - getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?", args); + public static void deleteUsersForLocalBlogId(int localTableBlogId) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(false)}; + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?&is_follower=?", args); } - public static void deletePeopleForLocalBlogIdExceptForFirstPage(int localTableBlogId) { - int size = getPeopleCountForLocalBlogId(localTableBlogId); + public static void deleteFollowersForLocalBlogId(int localTableBlogId) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(true)}; + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?&is_follower=?", args); + } + + public static void deleteUsersForLocalBlogIdExceptForFirstPage(int localTableBlogId) { + PeopleTable.deletePeopleForLocalBlogIdExceptForFirstPage(localTableBlogId, false); + } + + public static void deleteFollowersForLocalBlogIdExceptForFirstPage(int localTableBlogId) { + PeopleTable.deletePeopleForLocalBlogIdExceptForFirstPage(localTableBlogId, false); + } + + private static void deletePeopleForLocalBlogIdExceptForFirstPage(int localTableBlogId, boolean isFollower) { + int size = getPeopleCountForLocalBlogId(localTableBlogId, isFollower); int fetchLimit = PeopleUtils.FETCH_USERS_LIMIT; if (size > fetchLimit) { int deleteCount = size - fetchLimit; String[] args = new String[] { Integer.toString(localTableBlogId), + Boolean.toString(isFollower), Integer.toString(deleteCount) }; - getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?1 AND person_id " + - "IN (SELECT person_id FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?1 " + - "ORDER BY display_name DESC LIMIT ?2)", args); + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?1 AND is_follower=?2 AND person_id " + + "IN (SELECT person_id FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?1 AND is_follower=?2 " + + "ORDER BY display_name DESC LIMIT ?3)", args); } } + public static int getUsersCountForLocalBlogId(int localTableBlogId) { + return PeopleTable.getPeopleCountForLocalBlogId(localTableBlogId, false); + } + + private static int getPeopleCountForLocalBlogId(int localTableBlogId, boolean isFollower) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(isFollower)}; + String sql = "SELECT COUNT(*) FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?&is_follower=?"; + return SqlUtils.intForQuery(getReadableDb(), sql, args); + } + public static void deletePerson(long personID, int localTableBlogId) { String[] args = new String[]{Long.toString(personID), Integer.toString(localTableBlogId)}; getWritableDb().delete(PEOPLE_TABLE, "person_id=? AND local_blog_id=?", args); } - public static List<Person> getPeople(int localTableBlogId) { + public static List<Person> getUsers(int localTableBlogId) { + return PeopleTable.getPeople(localTableBlogId, false); + } + + private static List<Person> getPeople(int localTableBlogId, boolean isFollower) { List<Person> people = new ArrayList<>(); - String[] args = { Integer.toString(localTableBlogId) }; + String[] args = { Integer.toString(localTableBlogId), Boolean.toString(isFollower) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + - " WHERE local_blog_id=? ORDER BY lower(display_name), lower(user_name)", args); + " WHERE local_blog_id=? AND is_follower=? ORDER BY lower(display_name), lower(user_name)", args); try { while (c.moveToNext()) { |