From 1abb9ac3784239317ff2cfd533d5cdc2c2aeb065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= <kuba@szczodrzynski.pl> Date: Tue, 7 Jan 2020 10:45:21 +0100 Subject: [PATCH] [API] Fix config not reading from DB. Do not sync device if not changed. --- .../szczodrzynski/edziennik/config/Config.kt | 13 ++++-- .../edziennik/config/ProfileConfig.kt | 5 +++ .../edziennik/data/api/szkolny/SzkolnyApi.kt | 45 ++++++++++++++----- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt index d8d523d5..ac8831e3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt @@ -40,6 +40,11 @@ class Config(val db: AppDb) : CoroutineScope, AbstractConfig { get() { mDataVersion = mDataVersion ?: values.get("dataVersion", 0); return mDataVersion ?: 0 } set(value) { set("dataVersion", value); mDataVersion = value } + private var mHash: String? = null + var hash: String + get() { mHash = mHash ?: values.get("hash", ""); return mHash ?: "" } + set(value) { set("hash", value); mHash = value } + private var mAppVersion: Int? = null var appVersion: Int get() { mAppVersion = mAppVersion ?: values.get("appVersion", BuildConfig.VERSION_CODE); return mAppVersion ?: BuildConfig.VERSION_CODE } @@ -90,11 +95,11 @@ class Config(val db: AppDb) : CoroutineScope, AbstractConfig { ConfigMigration(app, this) } fun getFor(profileId: Int): ProfileConfig { - return profileConfigs[profileId] ?: ProfileConfig(db, profileId, rawEntries) - } - fun forProfile(): ProfileConfig { - return profileConfigs[App.profileId] ?: ProfileConfig(db, App.profileId, rawEntries) + return profileConfigs[profileId] ?: ProfileConfig(db, profileId, db.configDao().getAllNow(profileId)).also { + profileConfigs[profileId] = it + } } + fun forProfile() = getFor(App.profileId) fun setProfile(profileId: Int) { } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt index ec5ae3f0..3dd29361 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt @@ -37,6 +37,11 @@ class ProfileConfig(val db: AppDb, val profileId: Int, rawEntries: List<ConfigEn get() { mDataVersion = mDataVersion ?: values.get("dataVersion", 0); return mDataVersion ?: 0 } set(value) { set("dataVersion", value); mDataVersion = value } + private var mHash: String? = null + var hash: String + get() { mHash = mHash ?: values.get("hash", ""); return mHash ?: "" } + set(value) { set("hash", value); mHash = value } + init { rawEntries.toHashMap(profileId, values) /*if (dataVersion < DATA_VERSION) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt index 76007785..26b12c7e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt @@ -21,6 +21,7 @@ import pl.szczodrzynski.edziennik.data.api.szkolny.response.WebPushResponse import pl.szczodrzynski.edziennik.data.db.entity.Event import pl.szczodrzynski.edziennik.data.db.full.EventFull import pl.szczodrzynski.edziennik.data.db.entity.Profile +import pl.szczodrzynski.edziennik.md5 import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.Time import retrofit2.Retrofit @@ -61,25 +62,45 @@ class SzkolnyApi(val app: App) { val response = api.serverSync(ServerSyncRequest( deviceId = app.deviceId, - device = ServerSyncRequest.Device( - osType = "Android", - osVersion = Build.VERSION.RELEASE, - hardware = "${Build.MANUFACTURER} ${Build.MODEL}", - pushToken = app.config.sync.tokenApp, - appVersion = BuildConfig.VERSION_NAME, - appType = BuildConfig.BUILD_TYPE, - appVersionCode = BuildConfig.VERSION_CODE, - syncInterval = app.config.sync.interval - ), + device = run { + val config = app.config + val device = ServerSyncRequest.Device( + osType = "Android", + osVersion = Build.VERSION.RELEASE, + hardware = "${Build.MANUFACTURER} ${Build.MODEL}", + pushToken = app.config.sync.tokenApp, + appVersion = BuildConfig.VERSION_NAME, + appType = BuildConfig.BUILD_TYPE, + appVersionCode = BuildConfig.VERSION_CODE, + syncInterval = app.config.sync.interval + ) + device.toString().md5().let { + if (it == config.hash) + null + else { + config.hash = it + device + } + } + }, userCodes = profiles.map { it.userCode }, - users = profiles.map { profile -> - ServerSyncRequest.User( + users = profiles.mapNotNull { profile -> + val config = app.config.getFor(profile.id) + val user = ServerSyncRequest.User( profile.userCode, profile.studentNameLong ?: "", profile.studentNameShort ?: "", profile.loginStoreType, teams.filter { it.profileId == profile.id }.map { it.code } ) + user.toString().md5().let { + if (it == config.hash) + null + else { + config.hash = it + user + } + } }, notifications = notifications.map { ServerSyncRequest.Notification(it.profileName ?: "", it.type, it.text) } )).execute().body()