Improve Nextcloud News updateFeed performance

This commit is contained in:
Shinokuni 2024-07-11 14:30:02 +02:00
parent 85b830b82b
commit 49fc62edc2
2 changed files with 14 additions and 6 deletions

View File

@ -52,10 +52,10 @@ interface NewNextcloudNewsService {
@DELETE("feeds/{feedId}")
suspend fun deleteFeed(@Path("feedId") feedId: Int)
@PUT("feeds/{feedId}/move")
@POST("feeds/{feedId}/move")
suspend fun changeFeedFolder(@Path("feedId") feedId: Int, @Body folderIdMap: Map<String, Int?>)
@PUT("feeds/{feedId}/rename")
@POST("feeds/{feedId}/rename")
suspend fun renameFeed(@Path("feedId") feedId: Int, @Body feedTitleMap: Map<String, String>)
@POST("folders")

View File

@ -12,6 +12,11 @@ import com.readrops.db.entities.Feed
import com.readrops.db.entities.Folder
import com.readrops.db.entities.Item
import com.readrops.db.entities.account.Account
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.withContext
import org.joda.time.DateTime
import org.koin.core.component.KoinComponent
import org.koin.core.component.get
@ -19,7 +24,8 @@ import org.koin.core.component.get
class NextcloudNewsRepository(
database: Database,
account: Account,
private val dataSource: NewNextcloudNewsDataSource
private val dataSource: NewNextcloudNewsDataSource,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : BaseRepository(database, account), KoinComponent {
override suspend fun login(account: Account) {
@ -95,12 +101,14 @@ class NextcloudNewsRepository(
return errors
}
override suspend fun updateFeed(feed: Feed) {
override suspend fun updateFeed(feed: Feed) = withContext(dispatcher) {
val folder =
if (feed.folderId != null) database.folderDao().select(feed.folderId!!) else null
dataSource.renameFeed(feed.name!!, feed.remoteId!!.toInt())
dataSource.changeFeedFolder(folder?.remoteId?.toInt(), feed.remoteId!!.toInt())
listOf(
async { dataSource.renameFeed(feed.name!!, feed.remoteId!!.toInt()) },
async { dataSource.changeFeedFolder(folder?.remoteId?.toInt(), feed.remoteId!!.toInt()) }
).awaitAll()
super.updateFeed(feed)
}