Move VtodoCache to kmp

pull/3861/head
Alex Baker 3 months ago
parent 2418b664e9
commit 29cbb33a42

@ -15,6 +15,8 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.BillingClient import org.tasks.billing.BillingClient
import org.tasks.billing.BillingClientImpl import org.tasks.billing.BillingClientImpl
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.caldav.FileStorage
import org.tasks.caldav.VtodoCache
import org.tasks.compose.drawer.DrawerConfiguration import org.tasks.compose.drawer.DrawerConfiguration
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.Astrid2ContentProviderDao import org.tasks.data.dao.Astrid2ContentProviderDao
@ -167,4 +169,14 @@ class ApplicationModule {
taskDao = taskDao, taskDao = taskDao,
tasksPreferences = tasksPreferences, tasksPreferences = tasksPreferences,
) )
@Provides
@Singleton
fun providesFileStorage(@ApplicationContext context: Context) =
FileStorage(context.filesDir.absolutePath)
@Provides
@Singleton
fun providesVtodoCache(caldavDao: CaldavDao, fileStorage: FileStorage) =
VtodoCache(caldavDao, fileStorage)
} }

@ -1,16 +1,13 @@
package org.tasks.caldav package org.tasks.caldav
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
import javax.inject.Inject
class FileStorage @Inject constructor( class FileStorage(
@ApplicationContext context: Context rootPath: String
) { ) {
val root = File(context.filesDir, "vtodo") val root = File(rootPath, "vtodo")
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
fun getFile(vararg segments: String?): File? = fun getFile(vararg segments: String?): File? =

@ -1,18 +1,15 @@
package org.tasks.caldav package org.tasks.caldav
import co.touchlab.kermit.Logger
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import timber.log.Timber
import java.io.File import java.io.File
import javax.inject.Inject
import javax.inject.Singleton
@Singleton class VtodoCache(
class VtodoCache @Inject constructor(
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val fileStorage: FileStorage, private val fileStorage: FileStorage,
) { ) {
@ -30,7 +27,7 @@ class VtodoCache @Inject constructor(
?: return@withContext ?: return@withContext
source.copyTo(target, overwrite = true) source.copyTo(target, overwrite = true)
val deleted = source.delete() val deleted = source.delete()
Timber.d("Moved $source to $target [success=${deleted}]") Logger.d("VtodoCache") { "Moved $source to $target [success=${deleted}]" }
} }
suspend fun getVtodo(caldavTask: CaldavTask?): String? { suspend fun getVtodo(caldavTask: CaldavTask?): String? {
@ -69,28 +66,28 @@ class VtodoCache @Inject constructor(
suspend fun delete(calendar: CaldavCalendar, caldavTask: CaldavTask) = withContext(Dispatchers.IO) { suspend fun delete(calendar: CaldavCalendar, caldavTask: CaldavTask) = withContext(Dispatchers.IO) {
fileStorage.getFile(calendar.account, caldavTask.calendar, caldavTask.obj)?.let { fileStorage.getFile(calendar.account, caldavTask.calendar, caldavTask.obj)?.let {
val deleted = it.delete() val deleted = it.delete()
Timber.d("Deleting $it [success=$deleted]") Logger.d("VtodoCache") { "Deleting $it [success=$deleted]" }
} }
} }
suspend fun delete(calendar: CaldavCalendar) = withContext(Dispatchers.IO) { suspend fun delete(calendar: CaldavCalendar) = withContext(Dispatchers.IO) {
fileStorage.getFile(calendar.account, calendar.uuid)?.let { fileStorage.getFile(calendar.account, calendar.uuid)?.let {
val deleted = it.deleteRecursively() val deleted = it.deleteRecursively()
Timber.d("Deleting $it [success=$deleted]") Logger.d("VtodoCache") { "Deleting $it [success=$deleted]" }
} }
} }
suspend fun delete(account: CaldavAccount) = withContext(Dispatchers.IO) { suspend fun delete(account: CaldavAccount) = withContext(Dispatchers.IO) {
fileStorage.getFile(account.uuid)?.let { fileStorage.getFile(account.uuid)?.let {
val deleted = it.deleteRecursively() val deleted = it.deleteRecursively()
Timber.d("Deleting $it [success=$deleted]") Logger.d("VtodoCache") { "Deleting $it [success=$deleted]" }
} }
} }
suspend fun clear() = withContext(Dispatchers.IO) { suspend fun clear() = withContext(Dispatchers.IO) {
fileStorage.getFile()?.let { fileStorage.getFile()?.let {
val deleted = it.deleteRecursively() val deleted = it.deleteRecursively()
Timber.d("Deleting $it [success=$deleted]") Logger.d("VtodoCache") { "Deleting $it [success=$deleted]" }
} }
} }
} }
Loading…
Cancel
Save