Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,19 @@ abstract class AbstractRssRepository(
}
}

open suspend fun sync(coroutineWorker: CoroutineWorker): ListenableWorker.Result =
open suspend fun sync(coroutineWorker: CoroutineWorker, group: String?, feed: String?): ListenableWorker.Result =
supervisorScope {
coroutineWorker.setProgress(SyncWorker.setIsSyncing(true))
val preTime = System.currentTimeMillis()
val preDate = Date(preTime)
val accountId = context.currentAccountId
val semaphore = Semaphore(16)
feedDao.queryAll(accountId).mapIndexed { _, feed ->
val feeds = when {
feed != null -> listOfNotNull(feedDao.queryById(feed))
group != null -> feedDao.queryByGroupId(accountId, group)
else -> feedDao.queryAll(accountId)
}
feeds.mapIndexed { _, feed ->
async(Dispatchers.IO) {
semaphore.withPermit {
val feedWithArticle = syncFeed(feed, preDate)
Expand Down Expand Up @@ -226,15 +231,15 @@ abstract class AbstractRssRepository(
SyncWorker.cancelOneTimeWork(workManager)
}

fun doSyncOneTime() {
SyncWorker.enqueueOneTimeWork(workManager)
fun doSyncOneTime(group: String?, feed: String?) {
SyncWorker.enqueueOneTimeWork(workManager, group, feed)
}

suspend fun initSync() {
accountDao.queryById(context.currentAccountId)?.let {
val syncOnStart = it.syncOnStart.value
if (syncOnStart) {
doSyncOneTime()
doSyncOneTime(null, null)
}
if (it.syncInterval.value != SyncIntervalPreference.Manually.value) {
SyncWorker.enqueuePeriodicWork(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class FeverRssService @Inject constructor(
* 3. Fetch the Fever articles
* 4. Synchronize read/unread and starred/un-starred items
*/
override suspend fun sync(coroutineWorker: CoroutineWorker): ListenableWorker.Result =
override suspend fun sync(coroutineWorker: CoroutineWorker, group: String?, feed: String?): ListenableWorker.Result =
supervisorScope {
coroutineWorker.setProgress(SyncWorker.setIsSyncing(true))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ class GoogleReaderRssService @Inject constructor(
* @link https://github.com/bazqux/bazqux-api?tab=readme-ov-file
* @link https://github.com/theoldreader/api
*/
override suspend fun sync(coroutineWorker: CoroutineWorker): ListenableWorker.Result =
override suspend fun sync(coroutineWorker: CoroutineWorker, group: String?, feed: String?): ListenableWorker.Result =
supervisorScope {
coroutineWorker.setProgress(SyncWorker.setIsSyncing(true))

Expand Down
13 changes: 10 additions & 3 deletions app/src/main/java/me/ash/reader/domain/service/SyncWorker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ class SyncWorker @AssistedInject constructor(
override suspend fun doWork(): Result =
withContext(Dispatchers.Default) {
Log.i("RLog", "doWork: ")
rssService.get().sync(this@SyncWorker).also {
val group = inputData.getString("group")
val feed = inputData.getString("feed")
rssService.get().sync(this@SyncWorker, group, feed).also {
rssService.get().clearKeepArchivedArticles()
}
}
Expand All @@ -44,14 +46,19 @@ class SyncWorker @AssistedInject constructor(
fun cancelPeriodicWork(workManager: WorkManager) {
workManager.cancelUniqueWork(WORK_NAME_PERIODIC)
}

fun enqueueOneTimeWork(
workManager: WorkManager,
group: String?,
feed: String?,
) {
val inputData = Data.Builder()
.putString("group", group)
.putString("feed", feed)
.build()
workManager.enqueueUniqueWork(
WORK_NAME_ONETIME,
ExistingWorkPolicy.KEEP,
OneTimeWorkRequestBuilder<SyncWorker>().addTag(WORK_TAG).build()
OneTimeWorkRequestBuilder<SyncWorker>().setInputData(inputData).addTag(WORK_TAG).build()
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class HomeViewModel @Inject constructor(

fun sync() {
applicationScope.launch(ioDispatcher) {
rssService.get().doSyncOneTime()
rssService.get().doSyncOneTime(null, null)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class SubscribeViewModel @Inject constructor(
fun importFromInputStream(inputStream: InputStream) {
applicationScope.launch {
opmlService.saveToDatabase(inputStream)
rssService.get().doSyncOneTime()
rssService.get().doSyncOneTime(null, null)
}
}

Expand Down
5 changes: 3 additions & 2 deletions app/src/main/java/me/ash/reader/ui/page/home/flow/FlowPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,10 @@ fun FlowPage(
val syncingScope = rememberCoroutineScope()
val doSync: () -> Unit = {
isSyncing = true
val group = filterUiState.group?.id
val feed = filterUiState.feed?.id
syncingScope.launch {
flowViewModel.sync()
flowViewModel.sync(group, feed)
}
}

Expand Down Expand Up @@ -236,7 +238,6 @@ fun FlowPage(
}
}
}

LaunchedEffect(onSearch) {
if (!onSearch) {
keyboardController?.hide()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ class FlowViewModel @Inject constructor(
val flowUiState: StateFlow<FlowUiState> = _flowUiState.asStateFlow()
val diffMap = mutableStateMapOf<String, Diff>()

fun sync() {
fun sync(group: String?, feed: String?) {
applicationScope.launch(ioDispatcher) {
rssService.get().doSyncOneTime()
rssService.get().doSyncOneTime(group, feed)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ class AccountViewModel @Inject constructor(
try {
val rssService = rssService.get(addAccount.type.id)
if (rssService.validCredentials(account)) {
rssService.doSyncOneTime()
rssService.doSyncOneTime(null, null)
withContext(mainDispatcher) {
callback(addAccount, null)
}
Expand Down