11package me.ash.reader.data.repository
22
33import android.content.Context
4+ import android.os.Looper
45import dagger.hilt.android.qualifiers.ApplicationContext
56import kotlinx.coroutines.flow.Flow
67import me.ash.reader.R
@@ -11,10 +12,7 @@ import me.ash.reader.data.dao.GroupDao
1112import me.ash.reader.data.model.account.Account
1213import me.ash.reader.data.model.account.AccountType
1314import me.ash.reader.data.model.group.Group
14- import me.ash.reader.ui.ext.currentAccountId
15- import me.ash.reader.ui.ext.getDefaultGroupId
16- import me.ash.reader.ui.ext.showToast
17- import me.ash.reader.ui.ext.showToastLong
15+ import me.ash.reader.ui.ext.*
1816import javax.inject.Inject
1917
2018class AccountRepository @Inject constructor(
@@ -24,7 +22,9 @@ class AccountRepository @Inject constructor(
2422 private val groupDao : GroupDao ,
2523 private val feedDao : FeedDao ,
2624 private val articleDao : ArticleDao ,
25+ private val rssRepository : RssRepository ,
2726) {
27+
2828 fun getAccounts (): Flow <List <Account >> = accountDao.queryAllAsFlow()
2929
3030 fun getAccountById (accountId : Int ): Flow <Account ?> = accountDao.queryAccount(accountId)
@@ -33,26 +33,31 @@ class AccountRepository @Inject constructor(
3333
3434 suspend fun isNoAccount (): Boolean = accountDao.queryAll().isEmpty()
3535
36- suspend fun addDefaultAccount (): Account {
37- val readYouString = context.getString(R .string.read_you)
38- val defaultString = context.getString(R .string.defaults)
39- return Account (
40- name = readYouString,
41- type = AccountType .Local ,
42- ).apply {
36+ suspend fun addAccount (account : Account ): Account =
37+ account.apply {
4338 id = accountDao.insert(this ).toInt()
4439 }.also {
45- if (groupDao.queryAll(it.id!! ).isEmpty()) {
46- groupDao.insert(
47- Group (
48- id = it.id!! .getDefaultGroupId(),
49- name = defaultString,
50- accountId = it.id!! ,
40+ // handle default group
41+ when (it.type) {
42+ AccountType .Local -> {
43+ groupDao.insert(
44+ Group (
45+ id = it.id!! .getDefaultGroupId(),
46+ name = context.getString(R .string.defaults),
47+ accountId = it.id!! ,
48+ )
5149 )
52- )
50+ }
5351 }
52+ context.dataStore.put(DataStoreKeys .CurrentAccountId , it.id!! )
53+ context.dataStore.put(DataStoreKeys .CurrentAccountType , it.type.id)
5454 }
55- }
55+
56+ suspend fun addDefaultAccount (): Account =
57+ addAccount(Account (
58+ type = AccountType .Local ,
59+ name = context.getString(R .string.read_you)
60+ ))
5661
5762 suspend fun update (accountId : Int , block : Account .() -> Unit ) {
5863 accountDao.queryById(accountId)?.let {
@@ -62,15 +67,33 @@ class AccountRepository @Inject constructor(
6267
6368 suspend fun delete (accountId : Int ) {
6469 if (accountDao.queryAll().size == 1 ) {
70+ Looper .myLooper() ? : Looper .prepare()
6571 context.showToast(context.getString(R .string.must_have_an_account))
72+ Looper .loop()
6673 return
6774 }
6875 accountDao.queryById(accountId)?.let {
6976 articleDao.deleteByAccountId(accountId)
7077 feedDao.deleteByAccountId(accountId)
7178 groupDao.deleteByAccountId(accountId)
7279 accountDao.delete(it)
73- context.showToastLong(context.getString(R .string.delete_account_toast))
80+ accountDao.queryAll().getOrNull(0 )?.let {
81+ context.dataStore.put(DataStoreKeys .CurrentAccountId , it.id!! )
82+ context.dataStore.put(DataStoreKeys .CurrentAccountType , it.type.id)
83+ }
7484 }
7585 }
86+
87+ suspend fun switch (account : Account ) {
88+ rssRepository.get().cancelSync()
89+ context.dataStore.put(DataStoreKeys .CurrentAccountId , account.id!! )
90+ context.dataStore.put(DataStoreKeys .CurrentAccountType , account.type.id)
91+
92+ // Restart
93+ // context.packageManager.getLaunchIntentForPackage(context.packageName)?.let {
94+ // it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
95+ // context.startActivity(it)
96+ // android.os.Process.killProcess(android.os.Process.myPid())
97+ // }
98+ }
7699}
0 commit comments