aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java
blob: c66776c36f8e7725821b8bfe41ee722c2869daee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package org.wordpress.android.datasets;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import org.wordpress.android.WordPress;
import org.wordpress.android.models.Account;
import org.wordpress.android.util.DateTimeUtils;
import org.wordpress.android.util.SqlUtils;

public class AccountTable {
    // Warning: the "accounts" table in WordPressDB is actually where blogs are stored.
    private static final String ACCOUNT_TABLE = "tbl_accounts";

    private static SQLiteDatabase getReadableDb() {
        return WordPress.wpDB.getDatabase();
    }
    private static SQLiteDatabase getWritableDb() {
        return WordPress.wpDB.getDatabase();
    }

    public static void createTables(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + ACCOUNT_TABLE + " ("
                + "local_id                INTEGER PRIMARY KEY DEFAULT 0,"
                + "user_name               TEXT,"
                + "user_id                 INTEGER DEFAULT 0,"
                + "display_name            TEXT,"
                + "profile_url             TEXT,"
                + "avatar_url              TEXT,"
                + "primary_blog_id         INTEGER DEFAULT 0,"
                + "site_count              INTEGER DEFAULT 0,"
                + "visible_site_count      INTEGER DEFAULT 0,"
                + "access_token            TEXT)");
    }

    public static void migrationAddEmailAddressField(SQLiteDatabase db) {
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD email TEXT DEFAULT '';");
    }

    public static void migrationAddFirstNameLastNameAboutMeFields(SQLiteDatabase db) {
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD first_name TEXT DEFAULT '';");
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD last_name TEXT DEFAULT '';");
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD about_me TEXT DEFAULT '';");
    }

    public static void migrationAddDateFields(SQLiteDatabase db) {
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD date TEXT DEFAULT '';");
    }

    public static void migrationAddAccountSettingsFields(SQLiteDatabase db) {
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD new_email TEXT DEFAULT '';");
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD pending_email_change BOOLEAN DEFAULT false;");
        db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD web_address TEXT DEFAULT '';");
    }

    private static void dropTables(SQLiteDatabase db) {
        db.execSQL("DROP TABLE IF EXISTS " + ACCOUNT_TABLE);
    }

    public static void save(Account account) {
        save(account, getWritableDb());
    }

    public static void save(Account account, SQLiteDatabase database) {
        ContentValues values = new ContentValues();
        // we only support one wpcom user at the moment: local_id is always 0
        values.put("local_id", 0);
        values.put("user_name", account.getUserName());
        values.put("user_id", account.getUserId());
        values.put("display_name", account.getDisplayName());
        values.put("profile_url", account.getProfileUrl());
        values.put("avatar_url", account.getAvatarUrl());
        values.put("primary_blog_id", account.getPrimaryBlogId());
        values.put("site_count", account.getSiteCount());
        values.put("visible_site_count", account.getVisibleSiteCount());
        values.put("access_token", account.getAccessToken());
        values.put("email", account.getEmail());
        values.put("first_name", account.getFirstName());
        values.put("last_name", account.getLastName());
        values.put("about_me", account.getAboutMe());
        values.put("date", DateTimeUtils.iso8601FromDate(account.getDateCreated()));
        values.put("new_email", account.getNewEmail());
        values.put("pending_email_change", account.getPendingEmailChange());
        values.put("web_address", account.getWebAddress());
        database.insertWithOnConflict(ACCOUNT_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE);
    }

    public static Account getDefaultAccount() {
        return getAccountByLocalId(0);
    }

    private static Account getAccountByLocalId(long localId) {
        Account account = new Account();

        String[] args = {Long.toString(localId)};
        Cursor c = getReadableDb().rawQuery("SELECT * FROM " + ACCOUNT_TABLE + " WHERE local_id=?", args);

        try {
            if (c.moveToFirst()) {
                account.setUserName(c.getString(c.getColumnIndex("user_name")));
                account.setUserId(c.getLong(c.getColumnIndex("user_id")));
                account.setDisplayName(c.getString(c.getColumnIndex("display_name")));
                account.setProfileUrl(c.getString(c.getColumnIndex("profile_url")));
                account.setAvatarUrl(c.getString(c.getColumnIndex("avatar_url")));
                account.setPrimaryBlogId(c.getLong(c.getColumnIndex("primary_blog_id")));
                account.setSiteCount(c.getInt(c.getColumnIndex("site_count")));
                account.setVisibleSiteCount(c.getInt(c.getColumnIndex("visible_site_count")));
                account.setAccessToken(c.getString(c.getColumnIndex("access_token")));
                account.setEmail(c.getString(c.getColumnIndex("email")));
                account.setFirstName(c.getString(c.getColumnIndex("first_name")));
                account.setLastName(c.getString(c.getColumnIndex("last_name")));
                account.setAboutMe(c.getString(c.getColumnIndex("about_me")));
                account.setDateCreated(DateTimeUtils.dateFromIso8601(c.getString(c.getColumnIndex("date"))));
                account.setNewEmail(c.getString(c.getColumnIndex("new_email")));
                account.setPendingEmailChange(c.getInt(c.getColumnIndex("pending_email_change")) > 0);
                account.setWebAddress(c.getString(c.getColumnIndex("web_address")));
            }
            return account;
        } finally {
            SqlUtils.closeCursor(c);
        }
    }
}