Merge branch 'master' into chat-relays

This commit is contained in:
spaced4ndy
2026-03-24 22:04:00 +04:00
7 changed files with 55 additions and 4 deletions

View File

@@ -79,12 +79,25 @@ struct DatabaseErrorView: View {
fileNameText(dbFile)
}
case let .downgrade(downMigrations):
let warnings = downMigrationWarnings(downMigrations).reversed()
titleText("Database downgrade")
Spacer()
Image(systemName: "exclamationmark.triangle.fill")
.resizable()
.frame(width: 40, height: 36)
.foregroundColor(.red)
Text("Warning: you may lose some data!")
.bold()
.padding(.horizontal, 25)
.multilineTextAlignment(.center)
if !warnings.isEmpty {
ForEach(warnings, id: \.self) { warning in
Text(warning)
.bold()
.multilineTextAlignment(.center)
.padding(.horizontal, 25)
}
}
migrationsText(downMigrations)
Spacer()
VStack(spacing: 10) {

View File

@@ -374,10 +374,12 @@ struct MigrateToDevice: View {
"Upgrade and open chat",
"",
.yesUp)
case .downgrade:
case let .downgrade(downMigrations):
("Database downgrade",
"Downgrade and open chat",
NSLocalizedString("Warning: you may lose some data!", comment: ""),
([NSLocalizedString("Warning: you may lose some data!", comment: "")]
+ downMigrationWarnings(downMigrations).reversed())
.joined(separator: "\n"),
.yesUpDown)
case let .migrationError(mtrError):
("Incompatible database version",

View File

@@ -369,6 +369,15 @@ public struct UpMigration: Decodable, Equatable {
// public var withDown: Bool
}
public func downMigrationWarnings(_ downMigrations: [String]) -> [String] {
let warnings: [(String, String)] = [
("20260222_chat_relays", NSLocalizedString("If you joined or created channels, they will stop working permanently.", comment: "down migration warning"))
]
return warnings.compactMap { (key, message) in
downMigrations.contains(key) ? message : nil
}
}
public enum MTRError: Decodable, Equatable {
case noDown(dbMigrations: [String])
case different(appMigration: String, dbMigration: String)

View File

@@ -9,6 +9,7 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
@@ -117,12 +118,25 @@ fun DatabaseErrorView(
OpenDatabaseDirectoryButton()
}
is MigrationError.Downgrade -> {
val warnings = downMigrationWarnings(err.downMigrations).reversed()
DatabaseErrorDetails(MR.strings.database_downgrade) {
TextButton({ callRunChat(confirmMigrations = MigrationConfirmation.YesUpDown) }, Modifier.align(Alignment.CenterHorizontally), enabled = !progressIndicator.value) {
Text(generalGetString(MR.strings.downgrade_and_open_chat))
}
Spacer(Modifier.height(20.dp))
Icon(
painterResource(MR.images.ic_warning_filled),
contentDescription = null,
Modifier.size(40.dp).align(Alignment.CenterHorizontally),
tint = Color.Red
)
Spacer(Modifier.height(12.dp))
Text(generalGetString(MR.strings.database_downgrade_warning), fontWeight = FontWeight.Bold)
if (warnings.isNotEmpty()) {
warnings.forEach { warning ->
Text(warning, fontWeight = FontWeight.Bold)
}
}
FileNameText(status.dbFile)
MigrationsText(err.downMigrations)
AppVersionText()

View File

@@ -2,6 +2,7 @@ package chat.simplex.common.views.helpers
import chat.simplex.common.model.*
import chat.simplex.common.platform.*
import chat.simplex.res.MR
import kotlinx.serialization.*
import java.io.File
import java.security.SecureRandom
@@ -108,6 +109,15 @@ data class UpMigration(
// val withDown: Boolean
)
fun downMigrationWarnings(downMigrations: List<String>): List<String> {
val warnings = listOf(
"20260222_chat_relays" to MR.strings.down_migration_warning_chat_relays
)
return warnings.mapNotNull { (key, res) ->
if (downMigrations.contains(key)) generalGetString(res) else null
}
}
@Serializable
sealed class MTRError {
@Serializable @SerialName("noDown") class NoDown(val dbMigrations: List<String>): MTRError()

View File

@@ -474,7 +474,9 @@ private fun MutableState<MigrationToState?>.MigrationConfirmationView(status: DB
Tuple4(
generalGetString(MR.strings.database_downgrade),
generalGetString(MR.strings.downgrade_and_open_chat),
generalGetString(MR.strings.database_downgrade_warning),
(listOf(generalGetString(MR.strings.database_downgrade_warning))
+ downMigrationWarnings(err.downMigrations).reversed())
.joinToString("\n"),
MigrationConfirmation.YesUpDown
)
is MigrationError.Error ->

View File

@@ -1647,6 +1647,7 @@
<string name="mtr_error_different">different migration in the app/database: %s / %s</string>
<string name="database_migrations">Migrations: %s</string>
<string name="database_downgrade_warning">Warning: you may lose some data!</string>
<string name="down_migration_warning_chat_relays">If you joined or created channels, they will stop working permanently.</string>
<!-- ChatModel.chatRunning interactions -->
<string name="chat_is_stopped_indication">Chat is stopped</string>