Add backward compatibility between new message types and old app versions

This commit is contained in:
Mikołaj Pich 2024-05-01 15:27:00 +02:00
parent d26768999e
commit 1926a74e98
No known key found for this signature in database
3 changed files with 78 additions and 58 deletions

View file

@ -14,28 +14,46 @@ fun generateJson(messages: List<Message>): String {
return json.encodeToString(messages.addNewTypeMigration())
}
private val supportedTypes130 = listOf(
MessageType.DASHBOARD_MESSAGE,
)
private val supportedTypes157 = listOf(
MessageType.GENERAL_MESSAGE,
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
MessageType.PASS_RESET_MESSAGE,
MessageType.ERROR_OVERRIDE,
)
@Suppress("DEPRECATION")
private fun List<Message>.addNewTypeMigration(): List<Message> {
return map {
when {
MessageType.DASHBOARD_MESSAGE in it.types.orEmpty() -> it.copy(
type = MessageType.DASHBOARD_MESSAGE,
)
!it.types.isNullOrEmpty() -> {
it.copy(
// first app version, which correctly handles other types
versionMin = 131,
type = it.types?.first(),
)
return map { item ->
item.copy(
type = when {
MessageType.DASHBOARD_MESSAGE in item.types.orEmpty() -> MessageType.DASHBOARD_MESSAGE
// default value up to version 130
item.messageTypes.isNullOrEmpty() -> MessageType.DASHBOARD_MESSAGE
else -> item.type ?: item.messageTypes
?.firstOrNull { it in supportedTypes130 }
},
types = item.types ?: item.messageTypes
?.filter { it in supportedTypes157 }
?.takeIf { it.isNotEmpty() },
versionMin = item.versionMin ?: when {
// limit new message types to first version that will support it
(item.messageTypes.orEmpty().let { types ->
types.isNotEmpty() && types.all { it !in supportedTypes157 }
}) -> 158
// first app version, which correctly handles other types
(item.messageTypes.orEmpty() - supportedTypes130).isNotEmpty() -> 131
else -> null
},
// used up to version 145
isDismissible = when {
item.isXVisible -> true
else -> item.isDismissible
}
it.isXVisible -> it.copy(
isDismissible = true, // used up to version 145
)
else -> it.copy(
type = MessageType.DASHBOARD_MESSAGE, // default value up to version 130
)
}
)
}
}

View file

@ -7,8 +7,8 @@ val messages = listOf(
content = "Poniżej znajdują się szkoły i uczniowie, w których Wulkanowy wykrył uczniów podpiętych do Twojego konta. Jeśli jakiegoś ucznia brakuje to upewnij się najpierw, że po zalogowaniu przez stronę www dziennika go widać",
priority = MessagePriority.LOW,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
MessageType.PASS_RESET_MESSAGE,
messageTypes = listOf(
MessageType.LOGIN_STUDENT_SELECT_MESSAGE,
),
isXVisible = false,
isOkVisible = false,
@ -20,8 +20,8 @@ val messages = listOf(
content = "Symbol jest stały, zależny od szkoły. Jego podanie zazwyczaj nie jest potrzebne. Pierwsze logowanie do dziennika zalecamy wykonać przez stronę www według zaleceń szkoły",
priority = MessagePriority.LOW,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
MessageType.ERROR_OVERRIDE,
messageTypes = listOf(
MessageType.LOGIN_SYMBOL_MESSAGE,
),
isXVisible = false,
isOkVisible = false,
@ -35,7 +35,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -51,7 +51,7 @@ val messages = listOf(
priority = MessagePriority.HIGH,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/856818469794256",
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -65,7 +65,7 @@ val messages = listOf(
title = "O zmianach w średniej",
content = "Firma VULCAN (którą przecież NIE JESTEŚMY) niespodziewania dokonała zmiany w wyświetlaniu średniej w ocenach, na co Wulkanowy nie był gotowy. Dlatego nasza apka nagle mogła zacząć pokazywać inną średnią, która jest tą z tylko biezącego semestru. Niedługo będzie dostępna aktualizacja, która to naprawi",
priority = MessagePriority.MEDIUM,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
isXVisible = false,
@ -80,7 +80,7 @@ val messages = listOf(
destinationUrl = "https://appgallery.huawei.com/#/app/C101440411",
priority = MessagePriority.HIGH,
targetFlavor = AppFlavor.HMS,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
isXVisible = false,
@ -95,7 +95,7 @@ val messages = listOf(
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
priority = MessagePriority.HIGH,
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
isXVisible = false,
@ -109,7 +109,7 @@ val messages = listOf(
content = "Wiemy o problemach z lgoowaniem do Lubelskiego Portalu Oświatowego, ale niestety nie wiemy czym są one spowodowane. Badamy sprawę. Póki co zalecamy korzystanie z oficjalnej apki od VULCANa",
priority = MessagePriority.HIGH,
targetRegisterHost = RegisterAddress.EDU_LUBLIN.url,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
isXVisible = false,
@ -124,7 +124,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
versionMax = 152,
@ -139,7 +139,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=com.google.android.webview",
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
versionMin = 151,
@ -152,7 +152,7 @@ val messages = listOf(
content = "Jeśli jesteś uzytkownikiem eduOne i mimo aktualizacji nic nie działa, to spróbuj wylogować się i zalogować ponownie",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
versionMin = 151,
@ -166,7 +166,7 @@ val messages = listOf(
content = "W poniedziałkowej aktualizacji dziennika, VULCAN wprowadził zmianę, przez którą system eduOne nie działa w Wulkanowym. Wydaliśmy aktualizację, która rozwiązuje większość problemów (kolejna jest w drodze). Uprzejmie prosimy o zaktualizowanie aplikacji w sklepie Play lub AppGallery",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -181,7 +181,7 @@ val messages = listOf(
content = "Obserwujemy zwiększoną liczbę zgłoszeń problemów z dziennikiem od około 1:00 w nocy z piątku na sobotę. Raczej nie się spodziewamy, że VULCAN naprawi to przed poniedziałkiem :) Zalecamy cierpliwość i nieodświeżanie apki \"na siłe\" bo to tylko pogarsza sytuację",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -197,7 +197,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/817776823698421",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
versionMin = 148,
@ -213,7 +213,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
versionMax = 145,
@ -227,7 +227,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/807473091395461",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -242,7 +242,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/807158678093569",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
isXVisible = true,
@ -256,7 +256,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/796088305867273",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -272,7 +272,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -287,7 +287,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.EDU_GDANSK.url,
destinationUrl = "https://edu.gdansk.pl/",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -300,7 +300,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.EDU_GDANSK.url,
destinationUrl = "https://edu.gdansk.pl/",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -312,7 +312,7 @@ val messages = listOf(
content = "„Krótka” informacja na temat tego, co się ostatnio działo z dziennikiem. Kliknij, żeby przeczytać",
priority = MessagePriority.LOW,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/786639613478809",
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -328,7 +328,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://f-droid.org/packages/io.github.wulkanowy/",
targetFlavor = AppFlavor.FDROID,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -344,7 +344,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -360,7 +360,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://appgallery.huawei.com/#/app/C101440411",
targetFlavor = AppFlavor.HMS,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -375,7 +375,7 @@ val messages = listOf(
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/786064996869604",
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
MessageType.DASHBOARD_MESSAGE,
),
@ -389,7 +389,7 @@ val messages = listOf(
content = "Wulkanowy nie działa. Wszystkim. Wiemy o problemie, pracujemy nad jego rozwiązaniem. Nie musicie nam już zgłaszać błędów, bo wiemy o nich :)",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
MessageType.DASHBOARD_MESSAGE,
),
@ -403,7 +403,7 @@ val messages = listOf(
content = "Od paru dni w Wulkanowym nie działa obsługa dziennika EduNet Miasta Tarnowa. Pracujemy nad przywróceniem działania, ale jeszcze nie wiemy ile to potrwa. W razie potrzeby skorzystania dziennika prosimy korzystać ze strony www dziennika lub oficjalnej aplikacji",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.UMT_TARNOW.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -418,7 +418,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://f-droid.org/packages/io.github.wulkanowy/",
targetFlavor = AppFlavor.FDROID,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -434,7 +434,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=message",
targetFlavor = AppFlavor.PLAY,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -450,7 +450,7 @@ val messages = listOf(
targetRegisterHost = RegisterAddress.VULCAN.url,
destinationUrl = "https://appgallery.huawei.com/#/app/C101440411",
targetFlavor = AppFlavor.HMS,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
MessageType.LOGIN_MESSAGE,
),
@ -464,7 +464,7 @@ val messages = listOf(
content = "Widzisz nieznane błędy dziennika? Nie tylko ty! To przez ostatnią aktualizację systemu dziennika. Nic na to nie poradzimy i nie wiemy kiedy zostanie to naprawione",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.DASHBOARD_MESSAGE,
),
versionMax = 137,
@ -477,7 +477,7 @@ val messages = listOf(
content = "Widzisz nieznane błędy dziennika lub komunikat \"Trwa wylogowanie...\"? Nie tylko ty! To przez ostatnią aktualizację systemu dziennika. Nic na to nie poradzimy i nie wiemy kiedy zostanie to naprawione",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
versionMax = 137,
@ -490,7 +490,7 @@ val messages = listOf(
content = "Kliknij tutaj, by zobaczyć najczęstsze znane problemy z logowaniem.\n\nPS. Pierwsze logowanie do dziennika zalecamy robić przez stronę www dziennika według instrukcji szkoły",
priority = MessagePriority.MEDIUM,
destinationUrl = "https://www.facebook.com/wulkanowy/posts/711506164325488",
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
isOkVisible = false,
@ -502,7 +502,7 @@ val messages = listOf(
content = "Jeśli po wpisaniu hasła zobaczysz czerwony komunikat \"Trwa wylogowywanie...\" to... spróbuj ponownie później :)",
priority = MessagePriority.MEDIUM,
targetRegisterHost = RegisterAddress.VULCAN.url,
types = listOf(
messageTypes = listOf(
MessageType.LOGIN_MESSAGE,
),
isOkVisible = false,

View file

@ -9,7 +9,9 @@ data class Message(
val content: String,
@Deprecated("use types")
val type: MessageType? = null,
@Deprecated("use messageTypes")
val types: List<MessageType>? = null,
val messageTypes: List<MessageType>? = null,
val priority: MessagePriority = MessagePriority.LOW,
val destinationUrl: String? = null,
val versionMin: Int? = null,