diff --git a/app/src/main/java/org/pixeldroid/app/utils/db/DBUtils.kt b/app/src/main/java/org/pixeldroid/app/utils/db/DBUtils.kt index fea14708..df33746e 100644 --- a/app/src/main/java/org/pixeldroid/app/utils/db/DBUtils.kt +++ b/app/src/main/java/org/pixeldroid/app/utils/db/DBUtils.kt @@ -14,7 +14,7 @@ import java.lang.IllegalArgumentException fun addUser(db: AppDatabase, account: Account, instance_uri: String, activeUser: Boolean = true, accessToken: String, refreshToken: String?, clientId: String, clientSecret: String) { - db.userDao().insertUser( + db.userDao().insertOrUpdate( UserDatabaseEntity( user_id = account.id!!, instance_uri = normalizeDomain(instance_uri), diff --git a/app/src/main/java/org/pixeldroid/app/utils/db/dao/UserDao.kt b/app/src/main/java/org/pixeldroid/app/utils/db/dao/UserDao.kt index 396f152e..b1a696e3 100644 --- a/app/src/main/java/org/pixeldroid/app/utils/db/dao/UserDao.kt +++ b/app/src/main/java/org/pixeldroid/app/utils/db/dao/UserDao.kt @@ -5,8 +5,21 @@ import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity @Dao interface UserDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertUser(user: UserDatabaseEntity) + /** + * Insert a user, if it already exists return -1 + */ + @Insert(onConflict = OnConflictStrategy.IGNORE) + fun insertUser(user: UserDatabaseEntity): Long + + @Transaction + fun insertOrUpdate(user: UserDatabaseEntity) { + if (insertUser(user) == -1L) { + updateUser(user) + } + } + + @Update + fun updateUser(user: UserDatabaseEntity) @Query("UPDATE users SET accessToken = :accessToken, refreshToken = :refreshToken WHERE user_id = :id and instance_uri = :instance_uri") fun updateAccessToken(accessToken: String, refreshToken: String, id: String, instance_uri: String)