aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java211
1 files changed, 211 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java
new file mode 100644
index 000000000..dcf94704e
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderUserTable.java
@@ -0,0 +1,211 @@
+package org.wordpress.android.datasets;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteStatement;
+
+import org.wordpress.android.models.ReaderUser;
+import org.wordpress.android.models.ReaderUserIdList;
+import org.wordpress.android.models.ReaderUserList;
+import org.wordpress.android.models.AccountHelper;
+import org.wordpress.android.util.GravatarUtils;
+import org.wordpress.android.util.SqlUtils;
+
+import java.util.ArrayList;
+
+/**
+ * stores info about the current user and liking users
+ */
+public class ReaderUserTable {
+ protected static void createTables(SQLiteDatabase db) {
+ db.execSQL("CREATE TABLE tbl_users ("
+ + " user_id INTEGER PRIMARY KEY,"
+ + " blog_id INTEGER DEFAULT 0,"
+ + " user_name TEXT,"
+ + " display_name TEXT COLLATE NOCASE,"
+ + " url TEXT,"
+ + " profile_url TEXT,"
+ + " avatar_url TEXT)");
+ }
+
+ protected static void dropTables(SQLiteDatabase db) {
+ db.execSQL("DROP TABLE IF EXISTS tbl_users");
+ }
+
+ public static void addOrUpdateUser(ReaderUser user) {
+ if (user==null)
+ return;
+
+ ReaderUserList users = new ReaderUserList();
+ users.add(user);
+ addOrUpdateUsers(users);
+ }
+
+ private static final String COLUMN_NAMES =
+ " user_id," // 1
+ + " blog_id," // 2
+ + " user_name," // 3
+ + " display_name," // 4
+ + " url," // 5
+ + " profile_url," // 6
+ + " avatar_url"; // 7
+
+ public static void addOrUpdateUsers(ReaderUserList users) {
+ if (users==null || users.size()==0)
+ return;
+
+ SQLiteDatabase db = ReaderDatabase.getWritableDb();
+ db.beginTransaction();
+ SQLiteStatement stmt = db.compileStatement("INSERT OR REPLACE INTO tbl_users (" + COLUMN_NAMES + ") VALUES (?1,?2,?3,?4,?5,?6,?7)");
+ try {
+ for (ReaderUser user: users) {
+ stmt.bindLong (1, user.userId);
+ stmt.bindLong (2, user.blogId);
+ stmt.bindString(3, user.getUserName());
+ stmt.bindString(4, user.getDisplayName());
+ stmt.bindString(5, user.getUrl());
+ stmt.bindString(6, user.getProfileUrl());
+ stmt.bindString(7, user.getAvatarUrl());
+ stmt.execute();
+ }
+
+ db.setTransactionSuccessful();
+
+ } finally {
+ db.endTransaction();
+ SqlUtils.closeStatement(stmt);
+ }
+ }
+
+ /*
+ * returns avatar urls for the passed user ids - used by post detail to show avatars for liking users
+ */
+ public static ArrayList<String> getAvatarUrls(ReaderUserIdList userIds, int max, int avatarSz) {
+ ArrayList<String> avatars = new ArrayList<String>();
+ if (userIds==null || userIds.size()==0)
+ return avatars;
+
+ StringBuilder sb = new StringBuilder("SELECT user_id, avatar_url FROM tbl_users WHERE user_id IN (");
+
+ // make sure current user's avatar is returned if the passed list contains them - this is
+ // important since it may not otherwise be returned when a "max" is passed, and we want
+ // the current user to appear first in post detail when they like a post
+ long currentUserId = AccountHelper.getDefaultAccount().getUserId();
+ boolean containsCurrentUser = userIds.contains(currentUserId);
+ if (containsCurrentUser)
+ sb.append(currentUserId);
+
+ int numAdded = (containsCurrentUser ? 1 : 0);
+ for (Long id: userIds) {
+ // skip current user since we added them already
+ if (id!=currentUserId) {
+ if (numAdded > 0)
+ sb.append(",");
+ sb.append(id);
+ numAdded++;
+ if (max > 0 && numAdded >= max)
+ break;
+ }
+ }
+ sb.append(")");
+
+ Cursor c = ReaderDatabase.getReadableDb().rawQuery(sb.toString(), null);
+ try {
+ if (c.moveToFirst()) {
+ do {
+ long userId = c.getLong(0);
+ String url = GravatarUtils.fixGravatarUrl(c.getString(1), avatarSz);
+ // add current user to the top
+ if (userId==currentUserId) {
+ avatars.add(0, url);
+ } else {
+ avatars.add(url);
+ }
+ } while (c.moveToNext());
+ }
+ return avatars;
+ } finally {
+ SqlUtils.closeCursor(c);
+ }
+ }
+
+ public static ReaderUser getCurrentUser() {
+ return getUser(AccountHelper.getDefaultAccount().getUserId());
+ }
+
+ private static ReaderUser getUser(long userId) {
+ String args[] = {Long.toString(userId)};
+ Cursor c = ReaderDatabase.getReadableDb().rawQuery("SELECT * FROM tbl_users WHERE user_id=?", args);
+ try {
+ if (!c.moveToFirst())
+ return null;
+ return getUserFromCursor(c);
+ } finally {
+ SqlUtils.closeCursor(c);
+ }
+ }
+
+ private static String getAvatarForUser(long userId) {
+ String args[] = {Long.toString(userId)};
+ return SqlUtils.stringForQuery(ReaderDatabase.getReadableDb(), "SELECT avatar_url FROM tbl_users WHERE user_id=?", args);
+ }
+
+ public static ReaderUserList getUsersWhoLikePost(long blogId, long postId, int max) {
+ String[] args = {Long.toString(blogId), Long.toString(postId)};
+ String sql = "SELECT * from tbl_users WHERE user_id IN (SELECT user_id FROM tbl_post_likes WHERE blog_id=? AND post_id=?) ORDER BY display_name";
+ if (max > 0) {
+ sql += " LIMIT " + Integer.toString(max);
+ }
+
+ Cursor c = ReaderDatabase.getReadableDb().rawQuery(sql, args);
+ try {
+ ReaderUserList users = new ReaderUserList();
+ if (c.moveToFirst()) {
+ do {
+ users.add(getUserFromCursor(c));
+ } while (c.moveToNext());
+ }
+ return users;
+ } finally {
+ SqlUtils.closeCursor(c);
+ }
+ }
+
+ public static ReaderUserList getUsersWhoLikeComment(long blogId, long commentId, int max) {
+ String[] args = {Long.toString(blogId),
+ Long.toString(commentId)};
+ String sql = "SELECT * from tbl_users WHERE user_id IN"
+ + " (SELECT user_id FROM tbl_comment_likes WHERE blog_id=? AND comment_id=?)"
+ + " ORDER BY display_name";
+ if (max > 0) {
+ sql += " LIMIT " + Integer.toString(max);
+ }
+
+ Cursor c = ReaderDatabase.getReadableDb().rawQuery(sql, args);
+ try {
+ ReaderUserList users = new ReaderUserList();
+ if (c.moveToFirst()) {
+ do {
+ users.add(getUserFromCursor(c));
+ } while (c.moveToNext());
+ }
+ return users;
+ } finally {
+ SqlUtils.closeCursor(c);
+ }
+ }
+
+ private static ReaderUser getUserFromCursor(Cursor c) {
+ ReaderUser user = new ReaderUser();
+
+ user.userId = c.getLong(c.getColumnIndex("user_id"));
+ user.blogId = c.getLong(c.getColumnIndex("blog_id"));
+ user.setUserName(c.getString(c.getColumnIndex("user_name")));
+ user.setDisplayName(c.getString(c.getColumnIndex("display_name")));
+ user.setUrl(c.getString(c.getColumnIndex("url")));
+ user.setProfileUrl(c.getString(c.getColumnIndex("profile_url")));
+ user.setAvatarUrl(c.getString(c.getColumnIndex("avatar_url")));
+
+ return user;
+ }
+}