mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-03-31 03:16:05 +00:00
Merge branch 'master' into chat-relays
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user