Skip to content

Commit 8362065

Browse files
committed
refactor: replace accountDao with accountService everywhere
1 parent adac3af commit 8362065

File tree

10 files changed

+99
-116
lines changed

10 files changed

+99
-116
lines changed

app/src/main/java/me/ash/reader/domain/service/AbstractRssRepository.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ import kotlinx.coroutines.CoroutineDispatcher
1010
import kotlinx.coroutines.ExperimentalCoroutinesApi
1111
import kotlinx.coroutines.flow.Flow
1212
import kotlinx.coroutines.flow.flowOn
13-
import kotlinx.coroutines.flow.mapLatest
1413
import me.ash.reader.domain.model.account.Account
1514
import me.ash.reader.domain.model.article.ArchivedArticle
1615
import me.ash.reader.domain.model.article.Article
1716
import me.ash.reader.domain.model.article.ArticleWithFeed
1817
import me.ash.reader.domain.model.feed.Feed
1918
import me.ash.reader.domain.model.group.Group
2019
import me.ash.reader.domain.model.group.GroupWithFeed
21-
import me.ash.reader.domain.repository.AccountDao
2220
import me.ash.reader.domain.repository.ArticleDao
2321
import me.ash.reader.domain.repository.FeedDao
2422
import me.ash.reader.domain.repository.GroupDao
@@ -32,7 +30,6 @@ import java.util.Date
3230
import java.util.UUID
3331

3432
abstract class AbstractRssRepository(
35-
private val accountDao: AccountDao,
3633
private val articleDao: ArticleDao,
3734
private val groupDao: GroupDao,
3835
private val feedDao: FeedDao,
@@ -153,12 +150,12 @@ abstract class AbstractRssRepository(
153150

154151

155152
suspend fun clearKeepArchivedArticles(): List<Article> {
156-
val articleId = accountService.getCurrentAccountId()
157-
val currentAccount = accountDao.queryById(articleId)!!
153+
val accountId = accountService.getCurrentAccountId()
154+
val currentAccount = accountService.getCurrentAccount()
158155
val keepArchived = currentAccount.keepArchived
159156
if (keepArchived != KeepArchivedPreference.Always) {
160157
val archivedArticles = articleDao.queryArchivedArticleBefore(
161-
articleId,
158+
accountId,
162159
Date(System.currentTimeMillis() - keepArchived.value)
163160
)
164161
articleDao.delete(
@@ -188,8 +185,8 @@ abstract class AbstractRssRepository(
188185
)
189186
}
190187

191-
suspend fun initSync() {
192-
accountDao.queryById(accountService.getCurrentAccountId())?.let {
188+
fun initSync() {
189+
accountService.getCurrentAccount().let {
193190
val syncOnStart = it.syncOnStart.value
194191
if (syncOnStart) {
195192
doSyncOneTime()

app/src/main/java/me/ash/reader/domain/service/AccountService.kt

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import android.os.Looper
55
import androidx.datastore.preferences.core.intPreferencesKey
66
import dagger.hilt.android.qualifiers.ApplicationContext
7+
import javax.inject.Inject
78
import kotlinx.coroutines.CoroutineScope
89
import kotlinx.coroutines.flow.Flow
910
import kotlinx.coroutines.flow.SharingStarted
@@ -27,44 +28,44 @@ import me.ash.reader.ui.ext.dataStore
2728
import me.ash.reader.ui.ext.getDefaultGroupId
2829
import me.ash.reader.ui.ext.put
2930
import me.ash.reader.ui.ext.showToast
30-
import javax.inject.Inject
3131

32-
class AccountService @Inject constructor(
33-
@ApplicationContext
34-
private val context: Context,
32+
class AccountService
33+
@Inject
34+
constructor(
35+
@ApplicationContext private val context: Context,
3536
private val accountDao: AccountDao,
3637
private val groupDao: GroupDao,
3738
private val feedDao: FeedDao,
3839
private val articleDao: ArticleDao,
39-
@ApplicationScope
40-
private val coroutineScope: CoroutineScope,
40+
@ApplicationScope private val coroutineScope: CoroutineScope,
4141
settingsProvider: SettingsProvider,
4242
) {
4343

4444
private val accountIdKey = intPreferencesKey(DataStoreKey.currentAccountId)
4545

4646
val currentAccountIdFlow =
47-
settingsProvider.preferencesFlow.map { it[accountIdKey] }
47+
settingsProvider.preferencesFlow
48+
.map { it[accountIdKey] }
4849
.stateIn(scope = coroutineScope, started = SharingStarted.Eagerly, initialValue = null)
4950

5051
val currentAccountFlow =
51-
currentAccountIdFlow.combine(getAccounts()) { id, accounts ->
52-
id?.let { accounts.firstOrNull { it.id == id } }
53-
}.stateIn(
54-
scope = coroutineScope,
55-
SharingStarted.Eagerly,
56-
initialValue = null
57-
)
52+
currentAccountIdFlow
53+
.combine(getAccounts()) { id, accounts ->
54+
id?.let { accounts.firstOrNull { it.id == id } }
55+
}
56+
.stateIn(scope = coroutineScope, SharingStarted.Eagerly, initialValue = null)
5857

5958
fun getAccounts(): Flow<List<Account>> = accountDao.queryAllAsFlow()
6059

6160
fun getAccountById(accountId: Int): Flow<Account?> = accountDao.queryAccount(accountId)
6261

63-
fun getCurrentAccount(): Account =
64-
runBlocking { currentAccountFlow.first { it != null } as Account }
62+
fun getCurrentAccount(): Account = runBlocking {
63+
currentAccountFlow.first { it != null } as Account
64+
}
6565

66-
fun getCurrentAccountId(): Int =
67-
runBlocking { currentAccountIdFlow.first { it != null } as Int }
66+
fun getCurrentAccountId(): Int = runBlocking {
67+
currentAccountIdFlow.first { it != null } as Int
68+
}
6869

6970
suspend fun isNoAccount(): Boolean = accountDao.queryAll().isEmpty()
7071

@@ -87,28 +88,26 @@ class AccountService @Inject constructor(
8788
}
8889
}
8990

90-
private fun getDefaultAccount(): Account = Account(
91-
type = AccountType.Local,
92-
name = context.getString(R.string.read_you),
93-
)
91+
private fun getDefaultAccount(): Account =
92+
Account(type = AccountType.Local, name = context.getString(R.string.read_you))
9493

95-
suspend fun addDefaultAccount(): Account =
96-
addAccount(getDefaultAccount())
94+
suspend fun addDefaultAccount(): Account = addAccount(getDefaultAccount())
9795

98-
fun getDefaultGroup(): Group = getCurrentAccountId().let {
99-
Group(
100-
id = it.getDefaultGroupId(),
101-
name = context.getString(R.string.defaults),
102-
accountId = it,
103-
)
104-
}
96+
fun getDefaultGroup(): Group =
97+
getCurrentAccountId().let {
98+
Group(
99+
id = it.getDefaultGroupId(),
100+
name = context.getString(R.string.defaults),
101+
accountId = it,
102+
)
103+
}
105104

106105
suspend fun update(accountId: Int, block: Account.() -> Account) {
107-
accountDao.queryById(accountId)?.let {
108-
accountDao.update(it.run(block))
109-
}
106+
accountDao.queryById(accountId)?.let { accountDao.update(it.run(block)) }
110107
}
111108

109+
suspend fun update(account: Account) = accountDao.update(account)
110+
112111
suspend fun delete(accountId: Int) {
113112
if (accountDao.queryAll().size == 1) {
114113
Looper.myLooper() ?: Looper.prepare()

app/src/main/java/me/ash/reader/domain/service/FeverRssService.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@ import com.rometools.rome.feed.synd.SyndFeed
99
import dagger.hilt.android.qualifiers.ApplicationContext
1010
import kotlinx.coroutines.CoroutineDispatcher
1111
import kotlinx.coroutines.coroutineScope
12-
import kotlinx.coroutines.supervisorScope
1312
import me.ash.reader.R
1413
import me.ash.reader.domain.model.account.Account
1514
import me.ash.reader.domain.model.account.security.FeverSecurityKey
1615
import me.ash.reader.domain.model.article.Article
1716
import me.ash.reader.domain.model.article.ArticleMeta
1817
import me.ash.reader.domain.model.feed.Feed
1918
import me.ash.reader.domain.model.group.Group
20-
import me.ash.reader.domain.repository.AccountDao
2119
import me.ash.reader.domain.repository.ArticleDao
2220
import me.ash.reader.domain.repository.FeedDao
2321
import me.ash.reader.domain.repository.GroupDao
@@ -45,7 +43,6 @@ class FeverRssService @Inject constructor(
4543
private val feedDao: FeedDao,
4644
private val rssHelper: RssHelper,
4745
private val notificationHelper: NotificationHelper,
48-
private val accountDao: AccountDao,
4946
private val groupDao: GroupDao,
5047
@IODispatcher
5148
private val ioDispatcher: CoroutineDispatcher,
@@ -56,7 +53,7 @@ class FeverRssService @Inject constructor(
5653
workManager: WorkManager,
5754
private val accountService: AccountService,
5855
) : AbstractRssRepository(
59-
accountDao, articleDao, groupDao,
56+
articleDao, groupDao,
6057
feedDao, workManager, rssHelper, notificationHelper, ioDispatcher, defaultDispatcher,
6158
accountService
6259
) {
@@ -275,7 +272,7 @@ class FeverRssService @Inject constructor(
275272

276273

277274
Log.i("RLog", "onCompletion: ${System.currentTimeMillis() - preTime}")
278-
accountDao.update(
275+
accountService.update(
279276
account.copy(
280277
updateAt = Date(),
281278
lastArticleId = if (sinceId.isNotEmpty()) {

app/src/main/java/me/ash/reader/domain/service/GoogleReaderRssService.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import me.ash.reader.domain.model.account.security.GoogleReaderSecurityKey
2727
import me.ash.reader.domain.model.article.Article
2828
import me.ash.reader.domain.model.feed.Feed
2929
import me.ash.reader.domain.model.group.Group
30-
import me.ash.reader.domain.repository.AccountDao
3130
import me.ash.reader.domain.repository.ArticleDao
3231
import me.ash.reader.domain.repository.FeedDao
3332
import me.ash.reader.domain.repository.GroupDao
@@ -59,7 +58,6 @@ constructor(
5958
private val feedDao: FeedDao,
6059
private val rssHelper: RssHelper,
6160
private val notificationHelper: NotificationHelper,
62-
private val accountDao: AccountDao,
6361
private val groupDao: GroupDao,
6462
@IODispatcher private val ioDispatcher: CoroutineDispatcher,
6563
@MainDispatcher private val mainDispatcher: CoroutineDispatcher,
@@ -68,7 +66,6 @@ constructor(
6866
private val accountService: AccountService,
6967
) :
7068
AbstractRssRepository(
71-
accountDao,
7269
articleDao,
7370
groupDao,
7471
feedDao,
@@ -104,7 +101,7 @@ constructor(
104101
if (success)
105102
try {
106103
getGoogleReaderAPI().getUserInfo().userName?.let {
107-
accountDao.update(account.copy(name = it))
104+
accountService.update(account.copy(name = it))
108105
}
109106
} catch (ignore: Exception) {
110107
Log.e("RLog", "get user info is failed: ", ignore)
@@ -430,7 +427,7 @@ constructor(
430427
.filter { it.id !in remoteFeeds.await().map { feed -> feed.id } }
431428
.forEach { super.deleteFeed(it, true) }
432429

433-
accountDao.update(account.copy(updateAt = Date()))
430+
accountService.update(account.copy(updateAt = Date()))
434431
ListenableWorker.Result.success()
435432
} catch (e: Exception) {
436433
Timber.tag("RLog").e(e, "On sync exception: ${e.message}")

app/src/main/java/me/ash/reader/domain/service/LocalRssService.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.content.Context
44
import android.util.Log
55
import androidx.work.ListenableWorker
66
import androidx.work.WorkManager
7-
import androidx.work.workDataOf
87
import dagger.hilt.android.qualifiers.ApplicationContext
98
import kotlinx.coroutines.CoroutineDispatcher
109
import kotlinx.coroutines.Dispatchers
@@ -15,7 +14,6 @@ import kotlinx.coroutines.sync.Semaphore
1514
import kotlinx.coroutines.sync.withPermit
1615
import me.ash.reader.domain.model.feed.Feed
1716
import me.ash.reader.domain.model.feed.FeedWithArticle
18-
import me.ash.reader.domain.repository.AccountDao
1917
import me.ash.reader.domain.repository.ArticleDao
2018
import me.ash.reader.domain.repository.FeedDao
2119
import me.ash.reader.domain.repository.GroupDao
@@ -35,7 +33,6 @@ class LocalRssService @Inject constructor(
3533
private val feedDao: FeedDao,
3634
private val rssHelper: RssHelper,
3735
private val notificationHelper: NotificationHelper,
38-
private val accountDao: AccountDao,
3936
private val groupDao: GroupDao,
4037
@IODispatcher
4138
private val ioDispatcher: CoroutineDispatcher,
@@ -44,7 +41,6 @@ class LocalRssService @Inject constructor(
4441
private val workManager: WorkManager,
4542
private val accountService: AccountService,
4643
) : AbstractRssRepository(
47-
accountDao,
4844
articleDao,
4945
groupDao,
5046
feedDao,
@@ -59,7 +55,8 @@ class LocalRssService @Inject constructor(
5955
override suspend fun sync(feedId: String?, groupId: String?) = supervisorScope {
6056
val preTime = System.currentTimeMillis()
6157
val preDate = Date(preTime)
62-
val accountId = accountService.getCurrentAccountId()
58+
val currentAccount = accountService.getCurrentAccount()
59+
val accountId = currentAccount.id!!
6360
val semaphore = Semaphore(16)
6461

6562
val feedsToSync = when {
@@ -96,9 +93,7 @@ class LocalRssService @Inject constructor(
9693
}.awaitAll()
9794

9895
Log.i("RlOG", "onCompletion: ${System.currentTimeMillis() - preTime}")
99-
accountDao.queryById(accountId)?.let { account ->
100-
accountDao.update(account.copy(updateAt = Date()))
101-
}
96+
accountService.update(currentAccount.copy(updateAt = Date()))
10297
ListenableWorker.Result.success()
10398
}
10499

app/src/main/java/me/ash/reader/domain/service/OpmlService.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
1010
import kotlinx.coroutines.CoroutineDispatcher
1111
import kotlinx.coroutines.withContext
1212
import me.ash.reader.domain.model.feed.Feed
13-
import me.ash.reader.domain.repository.AccountDao
1413
import me.ash.reader.domain.repository.FeedDao
1514
import me.ash.reader.domain.repository.GroupDao
1615
import me.ash.reader.infrastructure.di.IODispatcher
@@ -29,7 +28,7 @@ class OpmlService @Inject constructor(
2928
private val context: Context,
3029
private val groupDao: GroupDao,
3130
private val feedDao: FeedDao,
32-
private val accountDao: AccountDao,
31+
private val accountService: AccountService,
3332
private val rssService: RssService,
3433
private val OPMLDataSource: OPMLDataSource,
3534
@IODispatcher
@@ -73,7 +72,7 @@ class OpmlService @Inject constructor(
7372
Opml(
7473
"2.0",
7574
Head(
76-
accountDao.queryById(accountId)?.name,
75+
accountService.getCurrentAccount().name,
7776
Date().toString(), null, null, null,
7877
null, null, null, null,
7978
null, null, null, null,

app/src/main/java/me/ash/reader/infrastructure/android/MainActivity.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@ import androidx.appcompat.app.AppCompatActivity
1313
import androidx.compose.runtime.DisposableEffect
1414
import androidx.core.app.NotificationManagerCompat
1515
import androidx.core.util.Consumer
16-
import androidx.core.view.WindowCompat
1716
import androidx.hilt.navigation.compose.hiltViewModel
1817
import androidx.navigation.compose.rememberNavController
1918
import androidx.profileinstaller.ProfileInstallerInitializer
2019
import coil.ImageLoader
2120
import dagger.hilt.android.AndroidEntryPoint
22-
import me.ash.reader.domain.repository.AccountDao
21+
import me.ash.reader.domain.service.AccountService
2322
import me.ash.reader.infrastructure.preference.AccountSettingsProvider
2423
import me.ash.reader.infrastructure.preference.LanguagesPreference
2524
import me.ash.reader.infrastructure.preference.SettingsProvider
@@ -39,12 +38,11 @@ class MainActivity : AppCompatActivity() {
3938
@Inject
4039
lateinit var imageLoader: ImageLoader
4140

42-
@Inject
43-
lateinit var accountDao: AccountDao
44-
4541
@Inject
4642
lateinit var settingsProvider: SettingsProvider
4743

44+
@Inject lateinit var accountService: AccountService
45+
4846
override fun onCreate(savedInstanceState: Bundle?) {
4947
super.onCreate(savedInstanceState)
5048
Log.i("RLog", "onCreate: ${ProfileInstallerInitializer().create(this)}")
@@ -83,7 +81,7 @@ class MainActivity : AppCompatActivity() {
8381
}
8482

8583
setContent {
86-
AccountSettingsProvider(accountDao) {
84+
AccountSettingsProvider(accountService = accountService) {
8785
settingsProvider.ProvidesSettings {
8886
val subscribeViewModel: SubscribeViewModel = hiltViewModel()
8987
val navController = rememberNavController()

app/src/main/java/me/ash/reader/infrastructure/di/CacheHolderModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ object CacheHolderModule {
3838
fun provideCacheHelper(
3939
@ApplicationContext context: Context,
4040
@IODispatcher ioDispatcher: CoroutineDispatcher,
41-
settingsProvider: SettingsProvider,
4241
rssHelper: RssHelper,
42+
accountService: AccountService,
4343
): ReaderCacheHelper = ReaderCacheHelper(
4444
context = context, ioDispatcher = ioDispatcher,
4545
rssHelper = rssHelper,
46-
settingsProvider = settingsProvider,
46+
accountService = accountService,
4747
)
4848
}

0 commit comments

Comments
 (0)