mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-10-01 17:00:45 +00:00
Passing collection
directly (#927)
* Passing `collection` directly Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me> * Fixed imports Signed-off-by: Arnau Mora <arnyminerz@proton.me> * Fix tests Signed-off-by: Arnau Mora <arnyminerz@proton.me> * Log sync time using repository; no need for account/service check anymore * SyncManagerTest: don't write SyncStats to DB --------- Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me> Signed-off-by: Arnau Mora <arnyminerz@proton.me> Co-authored-by: Ricki Hirner <hirner@bitfire.at>
This commit is contained in:
parent
bf1bdfc8ab
commit
410c70a47d
|
@ -10,7 +10,6 @@ import android.content.SyncResult
|
|||
import android.util.Log
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.hilt.work.HiltWorkerFactory
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.work.Configuration
|
||||
import androidx.work.testing.WorkManagerTestInitHelper
|
||||
import at.bitfire.dav4jvm.PropStat
|
||||
|
@ -18,15 +17,19 @@ import at.bitfire.dav4jvm.Response
|
|||
import at.bitfire.dav4jvm.Response.HrefRelation
|
||||
import at.bitfire.dav4jvm.property.webdav.GetETag
|
||||
import at.bitfire.davdroid.TestUtils.assertWithin
|
||||
import at.bitfire.davdroid.db.AppDatabase
|
||||
import at.bitfire.davdroid.db.Collection
|
||||
import at.bitfire.davdroid.db.SyncState
|
||||
import at.bitfire.davdroid.network.HttpClient
|
||||
import at.bitfire.davdroid.repository.DavSyncStatsRepository
|
||||
import at.bitfire.davdroid.settings.AccountSettings
|
||||
import at.bitfire.davdroid.sync.account.TestAccountAuthenticator
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.android.testing.HiltAndroidRule
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import okhttp3.Protocol
|
||||
|
@ -46,6 +49,14 @@ import javax.inject.Inject
|
|||
@HiltAndroidTest
|
||||
class SyncManagerTest {
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object SyncManagerTestModule {
|
||||
@Provides
|
||||
fun davSyncStatsRepository(): DavSyncStatsRepository = mockk<DavSyncStatsRepository>(relaxed = true)
|
||||
}
|
||||
|
||||
|
||||
@get:Rule
|
||||
val hiltRule = HiltAndroidRule(this)
|
||||
|
||||
|
@ -55,10 +66,6 @@ class SyncManagerTest {
|
|||
@Inject
|
||||
@ApplicationContext
|
||||
lateinit var context: Context
|
||||
val testContext = InstrumentationRegistry.getInstrumentation().context
|
||||
|
||||
@Inject
|
||||
lateinit var db: AppDatabase
|
||||
|
||||
@Inject
|
||||
lateinit var syncManagerFactory: TestSyncManager.Factory
|
||||
|
@ -510,6 +517,7 @@ class SyncManagerTest {
|
|||
localCollection: LocalTestCollection,
|
||||
syncResult: SyncResult = SyncResult(),
|
||||
collection: Collection = mockk<Collection>() {
|
||||
every { id } returns 1
|
||||
every { url } returns server.url("/")
|
||||
}
|
||||
) = syncManagerFactory.create(
|
||||
|
|
|
@ -7,6 +7,7 @@ package at.bitfire.davdroid.repository
|
|||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import at.bitfire.davdroid.db.AppDatabase
|
||||
import at.bitfire.davdroid.db.SyncStats
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
@ -39,6 +40,15 @@ class DavSyncStatsRepository @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
fun logSyncTime(collectionId: Long, authority: String, lastSync: Long = System.currentTimeMillis()) {
|
||||
dao.insertOrReplace(SyncStats(
|
||||
id = 0,
|
||||
collectionId = collectionId,
|
||||
authority = authority,
|
||||
lastSync = lastSync
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tries to find the application name for given authority. Returns the authority if not
|
||||
|
|
|
@ -37,12 +37,10 @@ import at.bitfire.dav4jvm.property.webdav.GetETag
|
|||
import at.bitfire.dav4jvm.property.webdav.SyncToken
|
||||
import at.bitfire.davdroid.InvalidAccountException
|
||||
import at.bitfire.davdroid.R
|
||||
import at.bitfire.davdroid.db.AppDatabase
|
||||
import at.bitfire.davdroid.db.Collection
|
||||
import at.bitfire.davdroid.db.Service
|
||||
import at.bitfire.davdroid.db.SyncState
|
||||
import at.bitfire.davdroid.db.SyncStats
|
||||
import at.bitfire.davdroid.network.HttpClient
|
||||
import at.bitfire.davdroid.repository.DavSyncStatsRepository
|
||||
import at.bitfire.davdroid.resource.LocalAddressBook
|
||||
import at.bitfire.davdroid.resource.LocalCollection
|
||||
import at.bitfire.davdroid.resource.LocalContact
|
||||
|
@ -151,15 +149,15 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
|
|||
@ApplicationContext
|
||||
lateinit var context: Context
|
||||
|
||||
@Inject
|
||||
lateinit var db: AppDatabase
|
||||
|
||||
@Inject
|
||||
lateinit var logger: Logger
|
||||
|
||||
@Inject
|
||||
lateinit var notificationRegistry: NotificationRegistry
|
||||
|
||||
@Inject
|
||||
lateinit var syncStatsRepository: DavSyncStatsRepository
|
||||
|
||||
|
||||
init {
|
||||
// required for ServiceLoader -> ical4j -> ical4android
|
||||
|
@ -189,9 +187,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
|
|||
logger.info("No reason to synchronize, aborting")
|
||||
return
|
||||
}
|
||||
|
||||
// log sync time
|
||||
saveSyncTime()
|
||||
syncStatsRepository.logSyncTime(collection.id, authority)
|
||||
|
||||
logger.info("Querying server capabilities")
|
||||
var remoteSyncState = queryCapabilities()
|
||||
|
@ -341,34 +337,6 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the sync time of the synced account and service.
|
||||
*/
|
||||
private fun saveSyncTime() {
|
||||
val serviceType = when (authority) {
|
||||
ContactsContract.AUTHORITY -> // contacts
|
||||
Service.TYPE_CARDDAV
|
||||
else -> // calendars and tasks
|
||||
Service.TYPE_CALDAV
|
||||
}
|
||||
|
||||
val accountName =
|
||||
if (localCollection is LocalAddressBook)
|
||||
localCollection.requireMainAccount().name
|
||||
else
|
||||
account.name
|
||||
|
||||
db.runInTransaction {
|
||||
val service = db.serviceDao().getByAccountAndType(accountName, serviceType)
|
||||
?: return@runInTransaction
|
||||
val collection = db.collectionDao().getByServiceAndUrl(service.id, collection.url.toString())
|
||||
?: return@runInTransaction
|
||||
db.syncStatsDao().insertOrReplace(
|
||||
SyncStats(0, collection.id, authority, System.currentTimeMillis())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepares synchronization. Sets the lateinit property [davCollection].
|
||||
|
|
Loading…
Reference in a new issue