mirror of
https://github.com/nuclearfog/Shitter.git
synced 2025-02-06 22:13:21 +01:00
merged account database with app database, bug fix
This commit is contained in:
parent
da061d316b
commit
ac7ca301cd
@ -2,7 +2,7 @@ package org.nuclearfog.twidda.backend.async;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import org.nuclearfog.twidda.database.AccountDatabase;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.model.Account;
|
||||
import org.nuclearfog.twidda.ui.fragments.AccountFragment;
|
||||
|
||||
@ -26,7 +26,7 @@ public class AccountLoader extends AsyncTask<Long, Void, List<Account>> {
|
||||
*/
|
||||
public static final int MODE_DELETE = 2;
|
||||
|
||||
private AccountDatabase accountDatabase;
|
||||
private AppDatabase db;
|
||||
private WeakReference<AccountFragment> weakRef;
|
||||
|
||||
private int mode;
|
||||
@ -38,7 +38,7 @@ public class AccountLoader extends AsyncTask<Long, Void, List<Account>> {
|
||||
public AccountLoader(AccountFragment fragment, int mode) {
|
||||
super();
|
||||
weakRef = new WeakReference<>(fragment);
|
||||
accountDatabase = new AccountDatabase(fragment.requireContext());
|
||||
db = new AppDatabase(fragment.requireContext());
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
@ -47,11 +47,11 @@ public class AccountLoader extends AsyncTask<Long, Void, List<Account>> {
|
||||
protected List<Account> doInBackground(Long... param) {
|
||||
// get all logins
|
||||
if (mode == MODE_LOAD) {
|
||||
return accountDatabase.getLogins();
|
||||
return db.getLogins();
|
||||
}
|
||||
// delete login
|
||||
else if (mode == MODE_DELETE) {
|
||||
accountDatabase.removeLogin(param[0]);
|
||||
db.removeLogin(param[0]);
|
||||
deleteId = param[0];
|
||||
}
|
||||
return null;
|
||||
|
@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
||||
import org.nuclearfog.twidda.backend.api.Connection;
|
||||
import org.nuclearfog.twidda.backend.api.ConnectionException;
|
||||
import org.nuclearfog.twidda.backend.api.ConnectionManager;
|
||||
import org.nuclearfog.twidda.database.AccountDatabase;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.model.Account;
|
||||
import org.nuclearfog.twidda.ui.activities.LoginActivity;
|
||||
@ -43,7 +42,6 @@ public class LoginAction extends AsyncTask<String, Void, String> {
|
||||
public static final int LOGIN_MASTODON = 11;
|
||||
|
||||
private WeakReference<LoginActivity> weakRef;
|
||||
private AccountDatabase accountDB;
|
||||
private AppDatabase database;
|
||||
private Connection connection;
|
||||
@Nullable
|
||||
@ -61,7 +59,6 @@ public class LoginAction extends AsyncTask<String, Void, String> {
|
||||
public LoginAction(LoginActivity activity, int network, int mode) {
|
||||
super();
|
||||
weakRef = new WeakReference<>(activity);
|
||||
accountDB = new AccountDatabase(activity);
|
||||
database = new AppDatabase(activity);
|
||||
this.mode = mode;
|
||||
|
||||
@ -86,8 +83,7 @@ public class LoginAction extends AsyncTask<String, Void, String> {
|
||||
// login with pin and access token
|
||||
Account account = connection.loginApp(param);
|
||||
// save new user information
|
||||
database.saveUser(account.getUser());
|
||||
accountDB.saveLogin(account);
|
||||
database.saveLogin(account);
|
||||
return "";
|
||||
}
|
||||
} catch (ConnectionException exception) {
|
||||
|
@ -1,104 +0,0 @@
|
||||
package org.nuclearfog.twidda.database;
|
||||
|
||||
import static android.database.sqlite.SQLiteDatabase.CONFLICT_REPLACE;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter.AccountTable;
|
||||
import org.nuclearfog.twidda.database.impl.AccountImpl;
|
||||
import org.nuclearfog.twidda.model.Account;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* this database stores multi user logins
|
||||
*
|
||||
* @author nuclearfog
|
||||
*/
|
||||
public class AccountDatabase {
|
||||
|
||||
/**
|
||||
* selection for account entry
|
||||
*/
|
||||
private static final String ACCOUNT_SELECTION = AccountTable.ID + "=?";
|
||||
|
||||
/**
|
||||
* default sort order of the entries
|
||||
* sort by date of creation, starting with the latest entry
|
||||
*/
|
||||
private static final String SORT_BY_CREATION = AccountTable.DATE + " DESC";
|
||||
|
||||
|
||||
private DatabaseAdapter dataHelper;
|
||||
private AppDatabase database;
|
||||
|
||||
/**
|
||||
* @param context current activity context
|
||||
*/
|
||||
public AccountDatabase(Context context) {
|
||||
dataHelper = DatabaseAdapter.getInstance(context);
|
||||
database = new AppDatabase(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* register user login
|
||||
*
|
||||
* @param account Account information
|
||||
*/
|
||||
public void saveLogin(Account account) {
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
values.put(AccountTable.ID, account.getId());
|
||||
values.put(AccountTable.DATE, account.getLoginDate());
|
||||
values.put(AccountTable.HOSTNAME, account.getHostname());
|
||||
values.put(AccountTable.CLIENT_ID, account.getConsumerToken());
|
||||
values.put(AccountTable.CLIENT_SECRET, account.getConsumerSecret());
|
||||
values.put(AccountTable.API, account.getApiType());
|
||||
values.put(AccountTable.ACCESS_TOKEN, account.getOauthToken());
|
||||
values.put(AccountTable.TOKEN_SECRET, account.getOauthSecret());
|
||||
values.put(AccountTable.BEARER, account.getBearerToken());
|
||||
SQLiteDatabase db = dataHelper.getDatabase();
|
||||
db.beginTransaction();
|
||||
db.insertWithOnConflict(AccountTable.NAME, "", values, CONFLICT_REPLACE);
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
/**
|
||||
* get all user logins
|
||||
*
|
||||
* @return list of all logins
|
||||
*/
|
||||
public List<Account> getLogins() {
|
||||
ArrayList<Account> result = new ArrayList<>();
|
||||
|
||||
SQLiteDatabase db = dataHelper.getDatabase();
|
||||
Cursor cursor = db.query(AccountTable.NAME, AccountImpl.COLUMNS, null, null, null, null, SORT_BY_CREATION);
|
||||
if (cursor.moveToFirst()) {
|
||||
result.ensureCapacity(cursor.getCount());
|
||||
do {
|
||||
AccountImpl account = new AccountImpl(cursor);
|
||||
account.addUser(database.getUser(account.getId(), account));
|
||||
result.add(account);
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
cursor.close();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* remove login information from storage
|
||||
*
|
||||
* @param id account ID to remove
|
||||
*/
|
||||
public void removeLogin(long id) {
|
||||
String[] args = {Long.toString(id)};
|
||||
|
||||
SQLiteDatabase db = dataHelper.getDatabase();
|
||||
db.delete(AccountTable.NAME, ACCOUNT_SELECTION, args);
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package org.nuclearfog.twidda.database;
|
||||
|
||||
import static android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE;
|
||||
import static android.database.sqlite.SQLiteDatabase.CONFLICT_REPLACE;
|
||||
import static org.nuclearfog.twidda.database.DatabaseAdapter.AccountTable;
|
||||
import static org.nuclearfog.twidda.database.DatabaseAdapter.FavoriteTable;
|
||||
import static org.nuclearfog.twidda.database.DatabaseAdapter.LocationTable;
|
||||
import static org.nuclearfog.twidda.database.DatabaseAdapter.MediaTable;
|
||||
@ -21,6 +22,7 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.backend.lists.Messages;
|
||||
import org.nuclearfog.twidda.database.impl.AccountImpl;
|
||||
import org.nuclearfog.twidda.database.impl.LocationImpl;
|
||||
import org.nuclearfog.twidda.database.impl.MediaImpl;
|
||||
import org.nuclearfog.twidda.database.impl.MessageImpl;
|
||||
@ -37,6 +39,7 @@ import org.nuclearfog.twidda.model.Status;
|
||||
import org.nuclearfog.twidda.model.Trend;
|
||||
import org.nuclearfog.twidda.model.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@ -271,6 +274,11 @@ public class AppDatabase {
|
||||
*/
|
||||
private static final String USER_REG_SELECT = UserRegisterTable.ID + "=? AND " + UserRegisterTable.OWNER + "=?";
|
||||
|
||||
/**
|
||||
* selection for account entry
|
||||
*/
|
||||
private static final String ACCOUNT_SELECTION = AccountTable.ID + "=?";
|
||||
|
||||
/**
|
||||
* column projection for user register
|
||||
*/
|
||||
@ -286,6 +294,11 @@ public class AppDatabase {
|
||||
*/
|
||||
private static final String TREND_ORDER = TrendTable.INDEX + " ASC";
|
||||
|
||||
/**
|
||||
* default sort order for logins
|
||||
*/
|
||||
private static final String SORT_BY_CREATION = AccountTable.DATE + " DESC";
|
||||
|
||||
/**
|
||||
* limit for accessing a single row
|
||||
*/
|
||||
@ -441,6 +454,32 @@ public class AppDatabase {
|
||||
commit(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* save user login
|
||||
*
|
||||
* @param account login information
|
||||
*/
|
||||
public void saveLogin(Account account) {
|
||||
ContentValues values = new ContentValues(9);
|
||||
values.put(AccountTable.ID, account.getId());
|
||||
values.put(AccountTable.DATE, account.getLoginDate());
|
||||
values.put(AccountTable.HOSTNAME, account.getHostname());
|
||||
values.put(AccountTable.CLIENT_ID, account.getConsumerToken());
|
||||
values.put(AccountTable.CLIENT_SECRET, account.getConsumerSecret());
|
||||
values.put(AccountTable.API, account.getApiType());
|
||||
values.put(AccountTable.ACCESS_TOKEN, account.getOauthToken());
|
||||
values.put(AccountTable.TOKEN_SECRET, account.getOauthSecret());
|
||||
values.put(AccountTable.BEARER, account.getBearerToken());
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
db.insertWithOnConflict(AccountTable.NAME, "", values, CONFLICT_REPLACE);
|
||||
if (account.getUser() != null) {
|
||||
saveUser(account.getUser(), db, CONFLICT_IGNORE);
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
/**
|
||||
* load home timeline
|
||||
*
|
||||
@ -698,6 +737,18 @@ public class AppDatabase {
|
||||
commit(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* remove login information from database
|
||||
*
|
||||
* @param id account ID to remove
|
||||
*/
|
||||
public void removeLogin(long id) {
|
||||
String[] args = {Long.toString(id)};
|
||||
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.delete(DatabaseAdapter.AccountTable.NAME, ACCOUNT_SELECTION, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load trend List
|
||||
*
|
||||
@ -782,6 +833,28 @@ public class AppDatabase {
|
||||
commit(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all user logins
|
||||
*
|
||||
* @return list of all logins
|
||||
*/
|
||||
public List<Account> getLogins() {
|
||||
ArrayList<Account> result = new ArrayList<>();
|
||||
|
||||
SQLiteDatabase db = getDbRead();
|
||||
Cursor cursor = db.query(DatabaseAdapter.AccountTable.NAME, AccountImpl.COLUMNS, null, null, null, null, SORT_BY_CREATION);
|
||||
if (cursor.moveToFirst()) {
|
||||
result.ensureCapacity(cursor.getCount());
|
||||
do {
|
||||
AccountImpl account = new AccountImpl(cursor);
|
||||
account.addUser(getUser(account.getId(), account));
|
||||
result.add(account);
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
cursor.close();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* get status information from database
|
||||
*
|
||||
@ -1154,8 +1227,8 @@ public class AppDatabase {
|
||||
userUpdate.put(UserTable.FRIENDS, user.getFollowing());
|
||||
userUpdate.put(UserTable.FOLLOWER, user.getFollower());
|
||||
|
||||
db.update(StatusTable.NAME, statusUpdate, STATUS_SELECT, statusIdArg);
|
||||
db.update(UserTable.NAME, userUpdate, USER_SELECT, userIdArg);
|
||||
db.updateWithOnConflict(StatusTable.NAME, statusUpdate, STATUS_SELECT, statusIdArg, CONFLICT_REPLACE);
|
||||
db.updateWithOnConflict(UserTable.NAME, userUpdate, USER_SELECT, userIdArg, CONFLICT_IGNORE);
|
||||
saveStatusRegister(db, status, register);
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ import org.nuclearfog.twidda.backend.api.ConnectionException;
|
||||
import org.nuclearfog.twidda.backend.async.LocationLoader;
|
||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
|
||||
import org.nuclearfog.twidda.database.AccountDatabase;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.model.Account;
|
||||
@ -300,8 +300,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
|
||||
// confirm log out
|
||||
if (type == ConfirmDialog.APP_LOG_OUT) {
|
||||
// remove account from database
|
||||
AccountDatabase accountDB = new AccountDatabase(this);
|
||||
accountDB.removeLogin(settings.getLogin().getId());
|
||||
AppDatabase db = new AppDatabase(this);
|
||||
db.removeLogin(settings.getLogin().getId());
|
||||
settings.setLogin(null, true);
|
||||
setResult(RETURN_APP_LOGOUT);
|
||||
finish();
|
||||
|
Loading…
x
Reference in New Issue
Block a user