You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/app/src/main/java/org/tasks/ui/ChipListCache.kt

44 lines
1.5 KiB
Kotlin

package org.tasks.ui
import com.todoroo.astrid.api.TagFilter
import org.tasks.LocalBroadcastManager
import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao
import org.tasks.data.TagData
import org.tasks.data.TagDataDao
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class ChipListCache @Inject internal constructor(
caldavDao: CaldavDao,
tagDataDao: TagDataDao,
private val localBroadcastManager: LocalBroadcastManager) {
private val caldavCalendars: MutableMap<String?, CaldavCalendar> = HashMap()
private val tagDatas: MutableMap<String?, TagFilter> = HashMap()
private fun updateCaldavCalendars(updated: List<CaldavCalendar>) {
caldavCalendars.clear()
for (update in updated) {
caldavCalendars[update.uuid] = update
}
localBroadcastManager.broadcastRefresh()
}
private fun updateTags(updated: List<TagData>) {
tagDatas.clear()
for (update in updated) {
tagDatas[update.remoteId] = TagFilter(update)
}
localBroadcastManager.broadcastRefresh()
}
fun getCaldavList(caldav: String?): CaldavCalendar? = caldavCalendars[caldav]
fun getTag(tag: String?): TagFilter? = tagDatas[tag]
init {
caldavDao.subscribeToCalendars().observeForever { updated: List<CaldavCalendar> -> updateCaldavCalendars(updated) }
tagDataDao.subscribeToTags().observeForever { updated: List<TagData> -> updateTags(updated) }
}
}