mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 20:29:53 +00:00
ui: split servers into lists; allow to enable only tested servers (#4445)
This commit is contained in:
parent
b348979b32
commit
70204e071d
88 changed files with 320 additions and 258 deletions
|
@ -15,7 +15,6 @@ struct ProtocolServerView: View {
|
||||||
let serverProtocol: ServerProtocol
|
let serverProtocol: ServerProtocol
|
||||||
@Binding var server: ServerCfg
|
@Binding var server: ServerCfg
|
||||||
@State var serverToEdit: ServerCfg
|
@State var serverToEdit: ServerCfg
|
||||||
@State var serverEnabled: Bool
|
|
||||||
@State private var showTestFailure = false
|
@State private var showTestFailure = false
|
||||||
@State private var testing = false
|
@State private var testing = false
|
||||||
@State private var testFailure: ProtocolTestFailure?
|
@State private var testFailure: ProtocolTestFailure?
|
||||||
|
@ -113,10 +112,10 @@ struct ProtocolServerView: View {
|
||||||
Spacer()
|
Spacer()
|
||||||
showTestStatus(server: serverToEdit)
|
showTestStatus(server: serverToEdit)
|
||||||
}
|
}
|
||||||
Toggle("Use for new connections", isOn: $serverEnabled)
|
let useForNewDisabled = serverToEdit.tested != true && !serverToEdit.preset
|
||||||
.onChange(of: serverEnabled) { enabled in
|
Toggle("Use for new connections", isOn: $serverToEdit.enabled)
|
||||||
serverToEdit.enabled = enabled ? .enabled : .disabled
|
.disabled(useForNewDisabled)
|
||||||
}
|
.foregroundColor(useForNewDisabled ? theme.colors.secondary : theme.colors.onBackground)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -185,8 +184,7 @@ struct ProtocolServerView_Previews: PreviewProvider {
|
||||||
ProtocolServerView(
|
ProtocolServerView(
|
||||||
serverProtocol: .smp,
|
serverProtocol: .smp,
|
||||||
server: Binding.constant(ServerCfg.sampleData.custom),
|
server: Binding.constant(ServerCfg.sampleData.custom),
|
||||||
serverToEdit: ServerCfg.sampleData.custom,
|
serverToEdit: ServerCfg.sampleData.custom
|
||||||
serverEnabled: true
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,9 @@ struct ProtocolServersView: View {
|
||||||
@Environment(\.editMode) private var editMode
|
@Environment(\.editMode) private var editMode
|
||||||
let serverProtocol: ServerProtocol
|
let serverProtocol: ServerProtocol
|
||||||
@State private var currServers: [ServerCfg] = []
|
@State private var currServers: [ServerCfg] = []
|
||||||
@State private var presetServers: [String] = []
|
@State private var presetServers: [ServerCfg] = []
|
||||||
@State private var servers: [ServerCfg] = []
|
@State private var configuredServers: [ServerCfg] = []
|
||||||
|
@State private var otherServers: [ServerCfg] = []
|
||||||
@State private var selectedServer: String? = nil
|
@State private var selectedServer: String? = nil
|
||||||
@State private var showAddServer = false
|
@State private var showAddServer = false
|
||||||
@State private var showScanProtoServer = false
|
@State private var showScanProtoServer = false
|
||||||
|
@ -53,31 +54,53 @@ struct ProtocolServersView: View {
|
||||||
|
|
||||||
private func protocolServersView() -> some View {
|
private func protocolServersView() -> some View {
|
||||||
List {
|
List {
|
||||||
Section {
|
if !configuredServers.isEmpty {
|
||||||
ForEach($servers) { srv in
|
Section {
|
||||||
protocolServerView(srv)
|
ForEach($configuredServers) { srv in
|
||||||
|
protocolServerView(srv)
|
||||||
|
}
|
||||||
|
.onMove { indexSet, offset in
|
||||||
|
configuredServers.move(fromOffsets: indexSet, toOffset: offset)
|
||||||
|
}
|
||||||
|
.onDelete { indexSet in
|
||||||
|
configuredServers.remove(atOffsets: indexSet)
|
||||||
|
}
|
||||||
|
} header: {
|
||||||
|
Text("Configured \(proto) servers")
|
||||||
|
.foregroundColor(theme.colors.secondary)
|
||||||
|
} footer: {
|
||||||
|
Text("The servers for new connections of your current chat profile **\(m.currentUser?.displayName ?? "")**.")
|
||||||
|
.foregroundColor(theme.colors.secondary)
|
||||||
|
.lineLimit(10)
|
||||||
}
|
}
|
||||||
.onMove { indexSet, offset in
|
}
|
||||||
servers.move(fromOffsets: indexSet, toOffset: offset)
|
|
||||||
|
if !otherServers.isEmpty {
|
||||||
|
Section {
|
||||||
|
ForEach($otherServers) { srv in
|
||||||
|
protocolServerView(srv)
|
||||||
|
}
|
||||||
|
.onMove { indexSet, offset in
|
||||||
|
otherServers.move(fromOffsets: indexSet, toOffset: offset)
|
||||||
|
}
|
||||||
|
.onDelete { indexSet in
|
||||||
|
otherServers.remove(atOffsets: indexSet)
|
||||||
|
}
|
||||||
|
} header: {
|
||||||
|
Text("Other \(proto) servers")
|
||||||
|
.foregroundColor(theme.colors.secondary)
|
||||||
}
|
}
|
||||||
.onDelete { indexSet in
|
|
||||||
servers.remove(atOffsets: indexSet)
|
|
||||||
}
|
|
||||||
Button("Add server…") {
|
|
||||||
showAddServer = true
|
|
||||||
}
|
|
||||||
} header: {
|
|
||||||
Text("\(proto) servers")
|
|
||||||
.foregroundColor(theme.colors.secondary)
|
|
||||||
} footer: {
|
|
||||||
Text("The servers for new connections of your current chat profile **\(m.currentUser?.displayName ?? "")**.")
|
|
||||||
.foregroundColor(theme.colors.secondary)
|
|
||||||
.lineLimit(10)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
Button("Reset") { servers = currServers }
|
Button("Add server") {
|
||||||
.disabled(servers == currServers || testing)
|
showAddServer = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Section {
|
||||||
|
Button("Reset") { partitionServers(currServers) }
|
||||||
|
.disabled(Set(allServers) == Set(currServers) || testing)
|
||||||
Button("Test servers", action: testServers)
|
Button("Test servers", action: testServers)
|
||||||
.disabled(testing || allServersDisabled)
|
.disabled(testing || allServersDisabled)
|
||||||
Button("Save servers", action: saveServers)
|
Button("Save servers", action: saveServers)
|
||||||
|
@ -86,17 +109,17 @@ struct ProtocolServersView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.toolbar { EditButton() }
|
.toolbar { EditButton() }
|
||||||
.confirmationDialog("Add server…", isPresented: $showAddServer, titleVisibility: .hidden) {
|
.confirmationDialog("Add server", isPresented: $showAddServer, titleVisibility: .hidden) {
|
||||||
Button("Enter server manually") {
|
Button("Enter server manually") {
|
||||||
servers.append(ServerCfg.empty)
|
otherServers.append(ServerCfg.empty)
|
||||||
selectedServer = servers.last?.id
|
selectedServer = allServers.last?.id
|
||||||
}
|
}
|
||||||
Button("Scan server QR code") { showScanProtoServer = true }
|
Button("Scan server QR code") { showScanProtoServer = true }
|
||||||
Button("Add preset servers", action: addAllPresets)
|
Button("Add preset servers", action: addAllPresets)
|
||||||
.disabled(hasAllPresets())
|
.disabled(hasAllPresets())
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $showScanProtoServer) {
|
.sheet(isPresented: $showScanProtoServer) {
|
||||||
ScanProtocolServer(servers: $servers)
|
ScanProtocolServer(servers: $otherServers)
|
||||||
.modifier(ThemedBackground(grouped: true))
|
.modifier(ThemedBackground(grouped: true))
|
||||||
}
|
}
|
||||||
.modifier(BackButton(disabled: Binding.constant(false)) {
|
.modifier(BackButton(disabled: Binding.constant(false)) {
|
||||||
|
@ -133,27 +156,39 @@ struct ProtocolServersView: View {
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
// this condition is needed to prevent re-setting the servers when exiting single server view
|
// this condition is needed to prevent re-setting the servers when exiting single server view
|
||||||
if !justOpened { return }
|
if justOpened {
|
||||||
do {
|
do {
|
||||||
let r = try getUserProtoServers(serverProtocol)
|
let r = try getUserProtoServers(serverProtocol)
|
||||||
currServers = r.protoServers
|
currServers = r.protoServers
|
||||||
presetServers = r.presetServers
|
presetServers = r.presetServers
|
||||||
servers = currServers
|
partitionServers(currServers)
|
||||||
} catch let error {
|
} catch let error {
|
||||||
alert = .error(
|
alert = .error(
|
||||||
title: "Error loading \(proto) servers",
|
title: "Error loading \(proto) servers",
|
||||||
error: "Error: \(responseError(error))"
|
error: "Error: \(responseError(error))"
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
justOpened = false
|
||||||
|
} else {
|
||||||
|
partitionServers(allServers)
|
||||||
}
|
}
|
||||||
justOpened = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func partitionServers(_ servers: [ServerCfg]) {
|
||||||
|
configuredServers = servers.filter { $0.preset || $0.enabled }
|
||||||
|
otherServers = servers.filter { !($0.preset || $0.enabled) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private var allServers: [ServerCfg] {
|
||||||
|
configuredServers + otherServers
|
||||||
|
}
|
||||||
|
|
||||||
private var saveDisabled: Bool {
|
private var saveDisabled: Bool {
|
||||||
servers.isEmpty ||
|
allServers.isEmpty ||
|
||||||
servers == currServers ||
|
Set(allServers) == Set(currServers) ||
|
||||||
testing ||
|
testing ||
|
||||||
!servers.allSatisfy { srv in
|
!allServers.allSatisfy { srv in
|
||||||
if let address = parseServerAddress(srv.server) {
|
if let address = parseServerAddress(srv.server) {
|
||||||
return uniqueAddress(srv, address)
|
return uniqueAddress(srv, address)
|
||||||
}
|
}
|
||||||
|
@ -163,7 +198,7 @@ struct ProtocolServersView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private var allServersDisabled: Bool {
|
private var allServersDisabled: Bool {
|
||||||
servers.allSatisfy { $0.enabled != .enabled }
|
allServers.allSatisfy { !$0.enabled }
|
||||||
}
|
}
|
||||||
|
|
||||||
private func protocolServerView(_ server: Binding<ServerCfg>) -> some View {
|
private func protocolServerView(_ server: Binding<ServerCfg>) -> some View {
|
||||||
|
@ -172,8 +207,7 @@ struct ProtocolServersView: View {
|
||||||
ProtocolServerView(
|
ProtocolServerView(
|
||||||
serverProtocol: serverProtocol,
|
serverProtocol: serverProtocol,
|
||||||
server: server,
|
server: server,
|
||||||
serverToEdit: srv,
|
serverToEdit: srv
|
||||||
serverEnabled: srv.enabled == .enabled
|
|
||||||
)
|
)
|
||||||
.navigationBarTitle(srv.preset ? "Preset server" : "Your server")
|
.navigationBarTitle(srv.preset ? "Preset server" : "Your server")
|
||||||
.modifier(ThemedBackground(grouped: true))
|
.modifier(ThemedBackground(grouped: true))
|
||||||
|
@ -187,7 +221,7 @@ struct ProtocolServersView: View {
|
||||||
invalidServer()
|
invalidServer()
|
||||||
} else if !uniqueAddress(srv, address) {
|
} else if !uniqueAddress(srv, address) {
|
||||||
Image(systemName: "exclamationmark.circle").foregroundColor(.red)
|
Image(systemName: "exclamationmark.circle").foregroundColor(.red)
|
||||||
} else if srv.enabled != .enabled {
|
} else if !srv.enabled {
|
||||||
Image(systemName: "slash.circle").foregroundColor(theme.colors.secondary)
|
Image(systemName: "slash.circle").foregroundColor(theme.colors.secondary)
|
||||||
} else {
|
} else {
|
||||||
showTestStatus(server: srv)
|
showTestStatus(server: srv)
|
||||||
|
@ -200,7 +234,7 @@ struct ProtocolServersView: View {
|
||||||
.padding(.trailing, 4)
|
.padding(.trailing, 4)
|
||||||
|
|
||||||
let v = Text(address?.hostnames.first ?? srv.server).lineLimit(1)
|
let v = Text(address?.hostnames.first ?? srv.server).lineLimit(1)
|
||||||
if srv.enabled == .enabled {
|
if srv.enabled {
|
||||||
v
|
v
|
||||||
} else {
|
} else {
|
||||||
v.foregroundColor(theme.colors.secondary)
|
v.foregroundColor(theme.colors.secondary)
|
||||||
|
@ -227,7 +261,7 @@ struct ProtocolServersView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func uniqueAddress(_ s: ServerCfg, _ address: ServerAddress) -> Bool {
|
private func uniqueAddress(_ s: ServerCfg, _ address: ServerAddress) -> Bool {
|
||||||
servers.allSatisfy { srv in
|
allServers.allSatisfy { srv in
|
||||||
address.hostnames.allSatisfy { host in
|
address.hostnames.allSatisfy { host in
|
||||||
srv.id == s.id || !srv.server.contains(host)
|
srv.id == s.id || !srv.server.contains(host)
|
||||||
}
|
}
|
||||||
|
@ -241,13 +275,13 @@ struct ProtocolServersView: View {
|
||||||
private func addAllPresets() {
|
private func addAllPresets() {
|
||||||
for srv in presetServers {
|
for srv in presetServers {
|
||||||
if !hasPreset(srv) {
|
if !hasPreset(srv) {
|
||||||
servers.append(ServerCfg(server: srv, preset: true, tested: nil, enabled: .enabled))
|
configuredServers.append(srv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func hasPreset(_ srv: String) -> Bool {
|
private func hasPreset(_ srv: ServerCfg) -> Bool {
|
||||||
servers.contains(where: { $0.server == srv })
|
allServers.contains(where: { $0.server == srv.server })
|
||||||
}
|
}
|
||||||
|
|
||||||
private func testServers() {
|
private func testServers() {
|
||||||
|
@ -265,19 +299,31 @@ struct ProtocolServersView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func resetTestStatus() {
|
private func resetTestStatus() {
|
||||||
for i in 0..<servers.count {
|
for i in 0..<configuredServers.count {
|
||||||
if servers[i].enabled == .enabled {
|
if configuredServers[i].enabled {
|
||||||
servers[i].tested = nil
|
configuredServers[i].tested = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i in 0..<otherServers.count {
|
||||||
|
if otherServers[i].enabled {
|
||||||
|
otherServers[i].tested = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func runServersTest() async -> [String: ProtocolTestFailure] {
|
private func runServersTest() async -> [String: ProtocolTestFailure] {
|
||||||
var fs: [String: ProtocolTestFailure] = [:]
|
var fs: [String: ProtocolTestFailure] = [:]
|
||||||
for i in 0..<servers.count {
|
for i in 0..<configuredServers.count {
|
||||||
if servers[i].enabled == .enabled {
|
if configuredServers[i].enabled {
|
||||||
if let f = await testServerConnection(server: $servers[i]) {
|
if let f = await testServerConnection(server: $configuredServers[i]) {
|
||||||
fs[serverHostname(servers[i].server)] = f
|
fs[serverHostname(configuredServers[i].server)] = f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i in 0..<otherServers.count {
|
||||||
|
if otherServers[i].enabled {
|
||||||
|
if let f = await testServerConnection(server: $otherServers[i]) {
|
||||||
|
fs[serverHostname(otherServers[i].server)] = f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,9 +333,9 @@ struct ProtocolServersView: View {
|
||||||
func saveServers() {
|
func saveServers() {
|
||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
try await setUserProtoServers(serverProtocol, servers: servers)
|
try await setUserProtoServers(serverProtocol, servers: allServers)
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
currServers = servers
|
currServers = allServers
|
||||||
editMode?.wrappedValue = .inactive
|
editMode?.wrappedValue = .inactive
|
||||||
}
|
}
|
||||||
} catch let error {
|
} catch let error {
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct ScanProtocolServer: View {
|
||||||
switch resp {
|
switch resp {
|
||||||
case let .success(r):
|
case let .success(r):
|
||||||
if parseServerAddress(r.string) != nil {
|
if parseServerAddress(r.string) != nil {
|
||||||
servers.append(ServerCfg(server: r.string, preset: false, tested: nil, enabled: .enabled))
|
servers.append(ServerCfg(server: r.string, preset: false, tested: nil, enabled: false))
|
||||||
dismiss()
|
dismiss()
|
||||||
} else {
|
} else {
|
||||||
showAddressError = true
|
showAddressError = true
|
||||||
|
|
|
@ -367,8 +367,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Добави сървъри чрез сканиране на QR кодове.</target>
|
<target>Добави сървъри чрез сканиране на QR кодове.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Добави сървър…</target>
|
<target>Добави сървър</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -386,8 +386,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -596,9 +596,9 @@
|
||||||
<target>Přidejte servery skenováním QR kódů.</target>
|
<target>Přidejte servery skenováním QR kódů.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Přidat server…</target>
|
<target>Přidat server</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Fügen Sie Server durch Scannen der QR Codes hinzu.</target>
|
<target>Fügen Sie Server durch Scannen der QR Codes hinzu.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Füge Server hinzu…</target>
|
<target>Füge Server hinzu</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -336,8 +336,8 @@ Available in v5.1</source>
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -618,9 +618,9 @@
|
||||||
<target>Add servers by scanning QR codes.</target>
|
<target>Add servers by scanning QR codes.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Add server…</target>
|
<target>Add server</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Añadir servidores mediante el escaneo de códigos QR.</target>
|
<target>Añadir servidores mediante el escaneo de códigos QR.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Añadir servidor…</target>
|
<target>Añadir servidor</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -591,9 +591,9 @@
|
||||||
<target>Lisää palvelimia skannaamalla QR-koodeja.</target>
|
<target>Lisää palvelimia skannaamalla QR-koodeja.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Lisää palvelin…</target>
|
<target>Lisää palvelin</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Ajoutez des serveurs en scannant des codes QR.</target>
|
<target>Ajoutez des serveurs en scannant des codes QR.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Ajouter un serveur…</target>
|
<target>Ajouter un serveur</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -403,9 +403,9 @@ Available in v5.1</source>
|
||||||
<target state="translated">הוספת שרתים על ידי סריקת קוד QR.</target>
|
<target state="translated">הוספת שרתים על ידי סריקת קוד QR.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve" approved="no">
|
<trans-unit id="Add server" xml:space="preserve" approved="no">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target state="translated">הוסף שרת…</target>
|
<target state="translated">הוסף שרת</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
||||||
|
|
|
@ -300,8 +300,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -367,8 +367,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Kiszolgáló hozzáadása QR-kód beolvasásával.</target>
|
<target>Kiszolgáló hozzáadása QR-kód beolvasásával.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Kiszolgáló hozzáadása…</target>
|
<target>Kiszolgáló hozzáadása</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Aggiungi server scansionando codici QR.</target>
|
<target>Aggiungi server scansionando codici QR.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Aggiungi server…</target>
|
<target>Aggiungi server</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -608,9 +608,9 @@
|
||||||
<target>QRコードでサーバを追加する。</target>
|
<target>QRコードでサーバを追加する。</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>サーバを追加…</target>
|
<target>サーバを追加</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -300,8 +300,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -329,9 +329,9 @@
|
||||||
<target state="translated">Pridėti serverius skenuojant QR kodus.</target>
|
<target state="translated">Pridėti serverius skenuojant QR kodus.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve" approved="no">
|
<trans-unit id="Add server" xml:space="preserve" approved="no">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target state="translated">Pridėti serverį…</target>
|
<target state="translated">Pridėti serverį</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -367,8 +367,8 @@
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Servers toevoegen door QR-codes te scannen.</target>
|
<target>Servers toevoegen door QR-codes te scannen.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Server toevoegen…</target>
|
<target>Server toevoegen</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Dodaj serwery, skanując kody QR.</target>
|
<target>Dodaj serwery, skanując kody QR.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Dodaj serwer…</target>
|
<target>Dodaj serwer</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -374,9 +374,9 @@
|
||||||
<target state="translated">Adicione servidores escaneando o QR code.</target>
|
<target state="translated">Adicione servidores escaneando o QR code.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve" approved="no">
|
<trans-unit id="Add server" xml:space="preserve" approved="no">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target state="translated">Adicionar servidor…</target>
|
<target state="translated">Adicionar servidor</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
||||||
|
|
|
@ -359,8 +359,8 @@ Available in v5.1</source>
|
||||||
<source>Add servers by scanning QR codes.</source>
|
<source>Add servers by scanning QR codes.</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Добавить серверы через QR код.</target>
|
<target>Добавить серверы через QR код.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Добавить сервер…</target>
|
<target>Добавить сервер</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -583,9 +583,9 @@
|
||||||
<target>เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัสคิวอาร์โค้ด</target>
|
<target>เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัสคิวอาร์โค้ด</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>เพิ่มเซิร์ฟเวอร์…</target>
|
<target>เพิ่มเซิร์ฟเวอร์</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Karekod taratarak sunucuları ekleyin.</target>
|
<target>Karekod taratarak sunucuları ekleyin.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Sunucu ekle…</target>
|
<target>Sunucu ekle</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -615,9 +615,9 @@
|
||||||
<target>Додайте сервери, відсканувавши QR-код.</target>
|
<target>Додайте сервери, відсканувавши QR-код.</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>Додати сервер…</target>
|
<target>Додати сервер</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -603,9 +603,9 @@
|
||||||
<target>扫描二维码来添加服务器。</target>
|
<target>扫描二维码来添加服务器。</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve">
|
<trans-unit id="Add server" xml:space="preserve">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target>添加服务器…</target>
|
<target>添加服务器</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve">
|
<trans-unit id="Add to another device" xml:space="preserve">
|
||||||
|
|
|
@ -358,9 +358,9 @@
|
||||||
<target state="translated">使用二維碼掃描以新增伺服器。</target>
|
<target state="translated">使用二維碼掃描以新增伺服器。</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add server…" xml:space="preserve" approved="no">
|
<trans-unit id="Add server" xml:space="preserve" approved="no">
|
||||||
<source>Add server…</source>
|
<source>Add server</source>
|
||||||
<target state="translated">新增伺服器…</target>
|
<target state="translated">新增伺服器</target>
|
||||||
<note>No comment provided by engineer.</note>
|
<note>No comment provided by engineer.</note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
||||||
|
|
|
@ -1122,20 +1122,20 @@ public struct ProtoServersConfig: Codable {
|
||||||
public struct UserProtoServers: Decodable {
|
public struct UserProtoServers: Decodable {
|
||||||
public var serverProtocol: ServerProtocol
|
public var serverProtocol: ServerProtocol
|
||||||
public var protoServers: [ServerCfg]
|
public var protoServers: [ServerCfg]
|
||||||
public var presetServers: [String]
|
public var presetServers: [ServerCfg]
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct ServerCfg: Identifiable, Equatable, Codable {
|
public struct ServerCfg: Identifiable, Equatable, Codable, Hashable {
|
||||||
public var server: String
|
public var server: String
|
||||||
public var preset: Bool
|
public var preset: Bool
|
||||||
public var tested: Bool?
|
public var tested: Bool?
|
||||||
public var enabled: ServerEnabled
|
public var enabled: Bool
|
||||||
var createdAt = Date()
|
var createdAt = Date()
|
||||||
// public var sendEnabled: Bool // can we potentially want to prevent sending on the servers we use to receive?
|
// public var sendEnabled: Bool // can we potentially want to prevent sending on the servers we use to receive?
|
||||||
// Even if we don't see the use case, it's probably better to allow it in the model
|
// Even if we don't see the use case, it's probably better to allow it in the model
|
||||||
// In any case, "trusted/known" servers are out of scope of this change
|
// In any case, "trusted/known" servers are out of scope of this change
|
||||||
|
|
||||||
public init(server: String, preset: Bool, tested: Bool?, enabled: ServerEnabled) {
|
public init(server: String, preset: Bool, tested: Bool?, enabled: Bool) {
|
||||||
self.server = server
|
self.server = server
|
||||||
self.preset = preset
|
self.preset = preset
|
||||||
self.tested = tested
|
self.tested = tested
|
||||||
|
@ -1148,7 +1148,7 @@ public struct ServerCfg: Identifiable, Equatable, Codable {
|
||||||
|
|
||||||
public var id: String { "\(server) \(createdAt)" }
|
public var id: String { "\(server) \(createdAt)" }
|
||||||
|
|
||||||
public static var empty = ServerCfg(server: "", preset: false, tested: nil, enabled: .enabled)
|
public static var empty = ServerCfg(server: "", preset: false, tested: nil, enabled: false)
|
||||||
|
|
||||||
public var isEmpty: Bool {
|
public var isEmpty: Bool {
|
||||||
server.trimmingCharacters(in: .whitespaces) == ""
|
server.trimmingCharacters(in: .whitespaces) == ""
|
||||||
|
@ -1165,19 +1165,19 @@ public struct ServerCfg: Identifiable, Equatable, Codable {
|
||||||
server: "smp://abcd@smp8.simplex.im",
|
server: "smp://abcd@smp8.simplex.im",
|
||||||
preset: true,
|
preset: true,
|
||||||
tested: true,
|
tested: true,
|
||||||
enabled: .enabled
|
enabled: true
|
||||||
),
|
),
|
||||||
custom: ServerCfg(
|
custom: ServerCfg(
|
||||||
server: "smp://abcd@smp9.simplex.im",
|
server: "smp://abcd@smp9.simplex.im",
|
||||||
preset: false,
|
preset: false,
|
||||||
tested: false,
|
tested: false,
|
||||||
enabled: .disabled
|
enabled: false
|
||||||
),
|
),
|
||||||
untested: ServerCfg(
|
untested: ServerCfg(
|
||||||
server: "smp://abcd@smp10.simplex.im",
|
server: "smp://abcd@smp10.simplex.im",
|
||||||
preset: false,
|
preset: false,
|
||||||
tested: nil,
|
tested: nil,
|
||||||
enabled: .enabled
|
enabled: true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1189,12 +1189,6 @@ public struct ServerCfg: Identifiable, Equatable, Codable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ServerEnabled: String, Codable {
|
|
||||||
case disabled
|
|
||||||
case enabled
|
|
||||||
case known
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ProtocolTestStep: String, Decodable, Equatable {
|
public enum ProtocolTestStep: String, Decodable, Equatable {
|
||||||
case connect
|
case connect
|
||||||
case disconnect
|
case disconnect
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Добави профил";
|
"Add profile" = "Добави профил";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Добави сървър…";
|
"Add server" = "Добави сървър";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Добави сървъри чрез сканиране на QR кодове.";
|
"Add servers by scanning QR codes." = "Добави сървъри чрез сканиране на QR кодове.";
|
||||||
|
|
|
@ -318,7 +318,7 @@
|
||||||
"Add profile" = "Přidat profil";
|
"Add profile" = "Přidat profil";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Přidat server…";
|
"Add server" = "Přidat server";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Přidejte servery skenováním QR kódů.";
|
"Add servers by scanning QR codes." = "Přidejte servery skenováním QR kódů.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Profil hinzufügen";
|
"Add profile" = "Profil hinzufügen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Füge Server hinzu…";
|
"Add server" = "Füge Server hinzu";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Fügen Sie Server durch Scannen der QR Codes hinzu.";
|
"Add servers by scanning QR codes." = "Fügen Sie Server durch Scannen der QR Codes hinzu.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Añadir perfil";
|
"Add profile" = "Añadir perfil";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Añadir servidor…";
|
"Add server" = "Añadir servidor";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Añadir servidores mediante el escaneo de códigos QR.";
|
"Add servers by scanning QR codes." = "Añadir servidores mediante el escaneo de códigos QR.";
|
||||||
|
|
|
@ -309,7 +309,7 @@
|
||||||
"Add profile" = "Lisää profiili";
|
"Add profile" = "Lisää profiili";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Lisää palvelin…";
|
"Add server" = "Lisää palvelin";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Lisää palvelimia skannaamalla QR-koodeja.";
|
"Add servers by scanning QR codes." = "Lisää palvelimia skannaamalla QR-koodeja.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Ajouter un profil";
|
"Add profile" = "Ajouter un profil";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Ajouter un serveur…";
|
"Add server" = "Ajouter un serveur";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Ajoutez des serveurs en scannant des codes QR.";
|
"Add servers by scanning QR codes." = "Ajoutez des serveurs en scannant des codes QR.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Profil hozzáadása";
|
"Add profile" = "Profil hozzáadása";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Kiszolgáló hozzáadása…";
|
"Add server" = "Kiszolgáló hozzáadása";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Kiszolgáló hozzáadása QR-kód beolvasásával.";
|
"Add servers by scanning QR codes." = "Kiszolgáló hozzáadása QR-kód beolvasásával.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Aggiungi profilo";
|
"Add profile" = "Aggiungi profilo";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Aggiungi server…";
|
"Add server" = "Aggiungi server";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Aggiungi server scansionando codici QR.";
|
"Add servers by scanning QR codes." = "Aggiungi server scansionando codici QR.";
|
||||||
|
|
|
@ -360,7 +360,7 @@
|
||||||
"Add profile" = "プロフィールを追加";
|
"Add profile" = "プロフィールを追加";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "サーバを追加…";
|
"Add server" = "サーバを追加";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "QRコードでサーバを追加する。";
|
"Add servers by scanning QR codes." = "QRコードでサーバを追加する。";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Profiel toevoegen";
|
"Add profile" = "Profiel toevoegen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Server toevoegen…";
|
"Add server" = "Server toevoegen";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Servers toevoegen door QR-codes te scannen.";
|
"Add servers by scanning QR codes." = "Servers toevoegen door QR-codes te scannen.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Dodaj profil";
|
"Add profile" = "Dodaj profil";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Dodaj serwer…";
|
"Add server" = "Dodaj serwer";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Dodaj serwery, skanując kody QR.";
|
"Add servers by scanning QR codes." = "Dodaj serwery, skanując kody QR.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Добавить профиль";
|
"Add profile" = "Добавить профиль";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Добавить сервер…";
|
"Add server" = "Добавить сервер";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Добавить серверы через QR код.";
|
"Add servers by scanning QR codes." = "Добавить серверы через QR код.";
|
||||||
|
|
|
@ -285,7 +285,7 @@
|
||||||
"Add profile" = "เพิ่มโปรไฟล์";
|
"Add profile" = "เพิ่มโปรไฟล์";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "เพิ่มเซิร์ฟเวอร์…";
|
"Add server" = "เพิ่มเซิร์ฟเวอร์";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัสคิวอาร์โค้ด";
|
"Add servers by scanning QR codes." = "เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัสคิวอาร์โค้ด";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Profil ekle";
|
"Add profile" = "Profil ekle";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Sunucu ekle…";
|
"Add server" = "Sunucu ekle";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Karekod taratarak sunucuları ekleyin.";
|
"Add servers by scanning QR codes." = "Karekod taratarak sunucuları ekleyin.";
|
||||||
|
|
|
@ -369,7 +369,7 @@
|
||||||
"Add profile" = "Додати профіль";
|
"Add profile" = "Додати профіль";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "Додати сервер…";
|
"Add server" = "Додати сервер";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "Додайте сервери, відсканувавши QR-код.";
|
"Add servers by scanning QR codes." = "Додайте сервери, відсканувавши QR-код.";
|
||||||
|
|
|
@ -333,7 +333,7 @@
|
||||||
"Add profile" = "添加个人资料";
|
"Add profile" = "添加个人资料";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add server…" = "添加服务器…";
|
"Add server" = "添加服务器";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Add servers by scanning QR codes." = "扫描二维码来添加服务器。";
|
"Add servers by scanning QR codes." = "扫描二维码来添加服务器。";
|
||||||
|
|
|
@ -3138,7 +3138,7 @@ data class ProtoServersConfig(
|
||||||
data class UserProtocolServers(
|
data class UserProtocolServers(
|
||||||
val serverProtocol: ServerProtocol,
|
val serverProtocol: ServerProtocol,
|
||||||
val protoServers: List<ServerCfg>,
|
val protoServers: List<ServerCfg>,
|
||||||
val presetServers: List<String>,
|
val presetServers: List<ServerCfg>,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@ -3147,7 +3147,7 @@ data class ServerCfg(
|
||||||
val server: String,
|
val server: String,
|
||||||
val preset: Boolean,
|
val preset: Boolean,
|
||||||
val tested: Boolean? = null,
|
val tested: Boolean? = null,
|
||||||
val enabled: ServerEnabled
|
val enabled: Boolean
|
||||||
) {
|
) {
|
||||||
@Transient
|
@Transient
|
||||||
private val createdAt: Date = Date()
|
private val createdAt: Date = Date()
|
||||||
|
@ -3161,7 +3161,7 @@ data class ServerCfg(
|
||||||
get() = server.isBlank()
|
get() = server.isBlank()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val empty = ServerCfg(remoteHostId = null, server = "", preset = false, tested = null, enabled = ServerEnabled.Enabled)
|
val empty = ServerCfg(remoteHostId = null, server = "", preset = false, tested = null, enabled = false)
|
||||||
|
|
||||||
class SampleData(
|
class SampleData(
|
||||||
val preset: ServerCfg,
|
val preset: ServerCfg,
|
||||||
|
@ -3175,33 +3175,26 @@ data class ServerCfg(
|
||||||
server = "smp://abcd@smp8.simplex.im",
|
server = "smp://abcd@smp8.simplex.im",
|
||||||
preset = true,
|
preset = true,
|
||||||
tested = true,
|
tested = true,
|
||||||
enabled = ServerEnabled.Enabled
|
enabled = true
|
||||||
),
|
),
|
||||||
custom = ServerCfg(
|
custom = ServerCfg(
|
||||||
remoteHostId = null,
|
remoteHostId = null,
|
||||||
server = "smp://abcd@smp9.simplex.im",
|
server = "smp://abcd@smp9.simplex.im",
|
||||||
preset = false,
|
preset = false,
|
||||||
tested = false,
|
tested = false,
|
||||||
enabled = ServerEnabled.Disabled
|
enabled = false
|
||||||
),
|
),
|
||||||
untested = ServerCfg(
|
untested = ServerCfg(
|
||||||
remoteHostId = null,
|
remoteHostId = null,
|
||||||
server = "smp://abcd@smp10.simplex.im",
|
server = "smp://abcd@smp10.simplex.im",
|
||||||
preset = false,
|
preset = false,
|
||||||
tested = null,
|
tested = null,
|
||||||
enabled = ServerEnabled.Enabled
|
enabled = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
|
||||||
enum class ServerEnabled {
|
|
||||||
@SerialName("disabled") Disabled,
|
|
||||||
@SerialName("enabled") Enabled,
|
|
||||||
@SerialName("known") Known;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
enum class ProtocolTestStep {
|
enum class ProtocolTestStep {
|
||||||
@SerialName("connect") Connect,
|
@SerialName("connect") Connect,
|
||||||
|
|
|
@ -66,7 +66,7 @@ private fun LinkAMobileLayout(
|
||||||
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
||||||
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
||||||
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
||||||
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), remember { ChatModel.controller.appPrefs.offerRemoteMulticast.state }.value) {
|
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { ChatModel.controller.appPrefs.offerRemoteMulticast.state }.value) {
|
||||||
ChatModel.controller.appPrefs.offerRemoteMulticast.set(it)
|
ChatModel.controller.appPrefs.offerRemoteMulticast.set(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -432,14 +432,14 @@ private fun LinkedDesktopsView(remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
|
||||||
SectionDividerSpaced()
|
SectionDividerSpaced()
|
||||||
|
|
||||||
SectionView(stringResource(MR.strings.linked_desktop_options).uppercase()) {
|
SectionView(stringResource(MR.strings.linked_desktop_options).uppercase()) {
|
||||||
PreferenceToggle(stringResource(MR.strings.verify_connections), remember { controller.appPrefs.confirmRemoteSessions.state }.value) {
|
PreferenceToggle(stringResource(MR.strings.verify_connections), checked = remember { controller.appPrefs.confirmRemoteSessions.state }.value) {
|
||||||
controller.appPrefs.confirmRemoteSessions.set(it)
|
controller.appPrefs.confirmRemoteSessions.set(it)
|
||||||
}
|
}
|
||||||
PreferenceToggle(stringResource(MR.strings.discover_on_network), remember { controller.appPrefs.connectRemoteViaMulticast.state }.value) {
|
PreferenceToggle(stringResource(MR.strings.discover_on_network), checked = remember { controller.appPrefs.connectRemoteViaMulticast.state }.value) {
|
||||||
controller.appPrefs.connectRemoteViaMulticast.set(it)
|
controller.appPrefs.connectRemoteViaMulticast.set(it)
|
||||||
}
|
}
|
||||||
if (remember { controller.appPrefs.connectRemoteViaMulticast.state }.value) {
|
if (remember { controller.appPrefs.connectRemoteViaMulticast.state }.value) {
|
||||||
PreferenceToggle(stringResource(MR.strings.multicast_connect_automatically), remember { controller.appPrefs.connectRemoteViaMulticastAuto.state }.value) {
|
PreferenceToggle(stringResource(MR.strings.multicast_connect_automatically), checked = remember { controller.appPrefs.connectRemoteViaMulticastAuto.state }.value) {
|
||||||
controller.appPrefs.connectRemoteViaMulticastAuto.set(it)
|
controller.appPrefs.connectRemoteViaMulticastAuto.set(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ fun ConnectMobileLayout(
|
||||||
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
||||||
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
||||||
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
||||||
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), remember { controller.appPrefs.offerRemoteMulticast.state }.value) {
|
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { controller.appPrefs.offerRemoteMulticast.state }.value) {
|
||||||
controller.appPrefs.offerRemoteMulticast.set(it)
|
controller.appPrefs.offerRemoteMulticast.set(it)
|
||||||
}
|
}
|
||||||
SectionDividerSpaced(maxBottomPadding = false)
|
SectionDividerSpaced(maxBottomPadding = false)
|
||||||
|
|
|
@ -175,10 +175,16 @@ private fun UseServerSection(
|
||||||
Text(stringResource(MR.strings.smp_servers_test_server), color = if (valid && !testing) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
|
Text(stringResource(MR.strings.smp_servers_test_server), color = if (valid && !testing) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
|
||||||
ShowTestStatus(server)
|
ShowTestStatus(server)
|
||||||
}
|
}
|
||||||
val enabled = rememberUpdatedState(server.enabled == ServerEnabled.Enabled)
|
|
||||||
PreferenceToggle(stringResource(MR.strings.smp_servers_use_server_for_new_conn), enabled.value) { enable ->
|
val enabled = rememberUpdatedState(server.enabled)
|
||||||
onUpdate(server.copy(enabled = if (enable) ServerEnabled.Enabled else ServerEnabled.Disabled))
|
PreferenceToggle(
|
||||||
|
stringResource(MR.strings.smp_servers_use_server_for_new_conn),
|
||||||
|
disabled = server.tested != true && !server.preset,
|
||||||
|
checked = enabled.value
|
||||||
|
) {
|
||||||
|
onUpdate(server.copy(enabled = it))
|
||||||
}
|
}
|
||||||
|
|
||||||
SectionItemView(onDelete, disabled = testing) {
|
SectionItemView(onDelete, disabled = testing) {
|
||||||
Text(stringResource(MR.strings.smp_servers_delete_server), color = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.error)
|
Text(stringResource(MR.strings.smp_servers_delete_server), color = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.error)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,13 @@ import chat.simplex.res.MR
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: ServerProtocol, close: () -> Unit) {
|
fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: ServerProtocol, close: () -> Unit) {
|
||||||
var presetServers by remember(rhId) { mutableStateOf(emptyList<String>()) }
|
var presetServers by remember(rhId) { mutableStateOf(emptyList<ServerCfg>()) }
|
||||||
var servers by remember { stateGetOrPut("servers") { emptyList<ServerCfg>() } }
|
var servers by remember { stateGetOrPut("servers") { emptyList<ServerCfg>() } }
|
||||||
var serversAlreadyLoaded by remember { stateGetOrPut("serversAlreadyLoaded") { false } }
|
var serversAlreadyLoaded by remember { stateGetOrPut("serversAlreadyLoaded") { false } }
|
||||||
val currServers = remember(rhId) { mutableStateOf(servers) }
|
val currServers = remember(rhId) { mutableStateOf(servers) }
|
||||||
val testing = rememberSaveable(rhId) { mutableStateOf(false) }
|
val testing = rememberSaveable(rhId) { mutableStateOf(false) }
|
||||||
val serversUnchanged = remember(servers) { derivedStateOf { servers == currServers.value || testing.value } }
|
val serversUnchanged = remember(servers) { derivedStateOf { servers == currServers.value || testing.value } }
|
||||||
val allServersDisabled = remember { derivedStateOf { servers.none { it.enabled == ServerEnabled.Enabled } } }
|
val allServersDisabled = remember { derivedStateOf { servers.none { it.enabled } } }
|
||||||
val saveDisabled = remember(servers) {
|
val saveDisabled = remember(servers) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
servers.isEmpty() ||
|
servers.isEmpty() ||
|
||||||
|
@ -198,12 +198,42 @@ private fun ProtocolServersLayout(
|
||||||
) {
|
) {
|
||||||
AppBarTitle(stringResource(if (serverProtocol == ServerProtocol.SMP) MR.strings.your_SMP_servers else MR.strings.your_XFTP_servers))
|
AppBarTitle(stringResource(if (serverProtocol == ServerProtocol.SMP) MR.strings.your_SMP_servers else MR.strings.your_XFTP_servers))
|
||||||
|
|
||||||
SectionView(stringResource(if (serverProtocol == ServerProtocol.SMP) MR.strings.smp_servers else MR.strings.xftp_servers).uppercase()) {
|
val configuredServers = servers.filter { it.preset || it.enabled }
|
||||||
for (srv in servers) {
|
val otherServers = servers.filter { !(it.preset || it.enabled) }
|
||||||
SectionItemView({ showServer(srv) }, disabled = testing) {
|
|
||||||
ProtocolServerView(serverProtocol, srv, servers, testing)
|
if (configuredServers.isNotEmpty()) {
|
||||||
|
SectionView(stringResource(if (serverProtocol == ServerProtocol.SMP) MR.strings.smp_servers_configured else MR.strings.xftp_servers_configured).uppercase()) {
|
||||||
|
for (srv in configuredServers) {
|
||||||
|
SectionItemView({ showServer(srv) }, disabled = testing) {
|
||||||
|
ProtocolServerView(serverProtocol, srv, servers, testing)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SectionTextFooter(
|
||||||
|
remember(currentUser?.displayName) {
|
||||||
|
buildAnnotatedString {
|
||||||
|
append(generalGetString(MR.strings.smp_servers_per_user) + " ")
|
||||||
|
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
||||||
|
append(currentUser?.displayName ?: "")
|
||||||
|
}
|
||||||
|
append(".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (otherServers.isNotEmpty()) {
|
||||||
|
SectionView(stringResource(if (serverProtocol == ServerProtocol.SMP) MR.strings.smp_servers_other else MR.strings.xftp_servers_other).uppercase()) {
|
||||||
|
for (srv in otherServers.filter { !(it.preset || it.enabled) }) {
|
||||||
|
SectionItemView({ showServer(srv) }, disabled = testing) {
|
||||||
|
ProtocolServerView(serverProtocol, srv, servers, testing)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SectionView {
|
||||||
SettingsActionItem(
|
SettingsActionItem(
|
||||||
painterResource(MR.images.ic_add),
|
painterResource(MR.images.ic_add),
|
||||||
stringResource(MR.strings.smp_servers_add),
|
stringResource(MR.strings.smp_servers_add),
|
||||||
|
@ -212,19 +242,9 @@ private fun ProtocolServersLayout(
|
||||||
textColor = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.primary,
|
textColor = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.primary,
|
||||||
iconColor = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
|
iconColor = if (testing) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
|
||||||
)
|
)
|
||||||
|
SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false)
|
||||||
}
|
}
|
||||||
SectionTextFooter(
|
|
||||||
remember(currentUser?.displayName) {
|
|
||||||
buildAnnotatedString {
|
|
||||||
append(generalGetString(MR.strings.smp_servers_per_user) + " ")
|
|
||||||
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
|
||||||
append(currentUser?.displayName ?: "")
|
|
||||||
}
|
|
||||||
append(".")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
|
|
||||||
SectionView {
|
SectionView {
|
||||||
SectionItemView(resetServers, disabled = serversUnchanged) {
|
SectionItemView(resetServers, disabled = serversUnchanged) {
|
||||||
Text(stringResource(MR.strings.reset_verb), color = if (!serversUnchanged) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
|
Text(stringResource(MR.strings.reset_verb), color = if (!serversUnchanged) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
|
||||||
|
@ -250,12 +270,12 @@ private fun ProtocolServerView(serverProtocol: ServerProtocol, srv: ServerCfg, s
|
||||||
val address = parseServerAddress(srv.server)
|
val address = parseServerAddress(srv.server)
|
||||||
when {
|
when {
|
||||||
address == null || !address.valid || address.serverProtocol != serverProtocol || !uniqueAddress(srv, address, servers) -> InvalidServer()
|
address == null || !address.valid || address.serverProtocol != serverProtocol || !uniqueAddress(srv, address, servers) -> InvalidServer()
|
||||||
srv.enabled != ServerEnabled.Enabled -> Icon(painterResource(MR.images.ic_do_not_disturb_on), null, tint = MaterialTheme.colors.secondary)
|
!srv.enabled -> Icon(painterResource(MR.images.ic_do_not_disturb_on), null, tint = MaterialTheme.colors.secondary)
|
||||||
else -> ShowTestStatus(srv)
|
else -> ShowTestStatus(srv)
|
||||||
}
|
}
|
||||||
Spacer(Modifier.padding(horizontal = 4.dp))
|
Spacer(Modifier.padding(horizontal = 4.dp))
|
||||||
val text = address?.hostnames?.firstOrNull() ?: srv.server
|
val text = address?.hostnames?.firstOrNull() ?: srv.server
|
||||||
if (srv.enabled == ServerEnabled.Enabled) {
|
if (srv.enabled) {
|
||||||
Text(text, color = if (disabled) MaterialTheme.colors.secondary else MaterialTheme.colors.onBackground, maxLines = 1)
|
Text(text, color = if (disabled) MaterialTheme.colors.secondary else MaterialTheme.colors.onBackground, maxLines = 1)
|
||||||
} else {
|
} else {
|
||||||
Text(text, maxLines = 1, color = MaterialTheme.colors.secondary)
|
Text(text, maxLines = 1, color = MaterialTheme.colors.secondary)
|
||||||
|
@ -285,21 +305,21 @@ private fun uniqueAddress(s: ServerCfg, address: ServerAddress, servers: List<Se
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hasAllPresets(presetServers: List<String>, servers: List<ServerCfg>, m: ChatModel): Boolean =
|
private fun hasAllPresets(presetServers: List<ServerCfg>, servers: List<ServerCfg>, m: ChatModel): Boolean =
|
||||||
presetServers.all { hasPreset(it, servers) } ?: true
|
presetServers.all { hasPreset(it, servers) } ?: true
|
||||||
|
|
||||||
private fun addAllPresets(rhId: Long?, presetServers: List<String>, servers: List<ServerCfg>, m: ChatModel): List<ServerCfg> {
|
private fun addAllPresets(rhId: Long?, presetServers: List<ServerCfg>, servers: List<ServerCfg>, m: ChatModel): List<ServerCfg> {
|
||||||
val toAdd = ArrayList<ServerCfg>()
|
val toAdd = ArrayList<ServerCfg>()
|
||||||
for (srv in presetServers) {
|
for (srv in presetServers) {
|
||||||
if (!hasPreset(srv, servers)) {
|
if (!hasPreset(srv, servers)) {
|
||||||
toAdd.add(ServerCfg(remoteHostId = rhId, srv, preset = true, tested = null, enabled = ServerEnabled.Enabled))
|
toAdd.add(srv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return toAdd
|
return toAdd
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hasPreset(srv: String, servers: List<ServerCfg>): Boolean =
|
private fun hasPreset(srv: ServerCfg, servers: List<ServerCfg>): Boolean =
|
||||||
servers.any { it.server == srv }
|
servers.any { it.server == srv.server }
|
||||||
|
|
||||||
private suspend fun testServers(testing: MutableState<Boolean>, servers: List<ServerCfg>, m: ChatModel, onUpdated: (List<ServerCfg>) -> Unit) {
|
private suspend fun testServers(testing: MutableState<Boolean>, servers: List<ServerCfg>, m: ChatModel, onUpdated: (List<ServerCfg>) -> Unit) {
|
||||||
val resetStatus = resetTestStatus(servers)
|
val resetStatus = resetTestStatus(servers)
|
||||||
|
@ -319,7 +339,7 @@ private suspend fun testServers(testing: MutableState<Boolean>, servers: List<Se
|
||||||
private fun resetTestStatus(servers: List<ServerCfg>): List<ServerCfg> {
|
private fun resetTestStatus(servers: List<ServerCfg>): List<ServerCfg> {
|
||||||
val copy = ArrayList(servers)
|
val copy = ArrayList(servers)
|
||||||
for ((index, server) in servers.withIndex()) {
|
for ((index, server) in servers.withIndex()) {
|
||||||
if (server.enabled == ServerEnabled.Enabled) {
|
if (server.enabled) {
|
||||||
copy.removeAt(index)
|
copy.removeAt(index)
|
||||||
copy.add(index, server.copy(tested = null))
|
copy.add(index, server.copy(tested = null))
|
||||||
}
|
}
|
||||||
|
@ -331,7 +351,7 @@ private suspend fun runServersTest(servers: List<ServerCfg>, m: ChatModel, onUpd
|
||||||
val fs: MutableMap<String, ProtocolTestFailure> = mutableMapOf()
|
val fs: MutableMap<String, ProtocolTestFailure> = mutableMapOf()
|
||||||
val updatedServers = ArrayList<ServerCfg>(servers)
|
val updatedServers = ArrayList<ServerCfg>(servers)
|
||||||
for ((index, server) in servers.withIndex()) {
|
for ((index, server) in servers.withIndex()) {
|
||||||
if (server.enabled == ServerEnabled.Enabled) {
|
if (server.enabled) {
|
||||||
interruptIfCancelled()
|
interruptIfCancelled()
|
||||||
val (updatedServer, f) = testServerConnection(server, m)
|
val (updatedServer, f) = testServerConnection(server, m)
|
||||||
updatedServers.removeAt(index)
|
updatedServers.removeAt(index)
|
||||||
|
|
|
@ -7,7 +7,6 @@ import dev.icerock.moko.resources.compose.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import chat.simplex.common.model.ServerAddress.Companion.parseServerAddress
|
import chat.simplex.common.model.ServerAddress.Companion.parseServerAddress
|
||||||
import chat.simplex.common.model.ServerCfg
|
import chat.simplex.common.model.ServerCfg
|
||||||
import chat.simplex.common.model.ServerEnabled
|
|
||||||
import chat.simplex.common.ui.theme.DEFAULT_PADDING
|
import chat.simplex.common.ui.theme.DEFAULT_PADDING
|
||||||
import chat.simplex.common.views.helpers.*
|
import chat.simplex.common.views.helpers.*
|
||||||
import chat.simplex.common.views.newchat.QRCodeScanner
|
import chat.simplex.common.views.newchat.QRCodeScanner
|
||||||
|
@ -26,7 +25,7 @@ fun ScanProtocolServerLayout(rhId: Long?, onNext: (ServerCfg) -> Unit) {
|
||||||
QRCodeScanner { text ->
|
QRCodeScanner { text ->
|
||||||
val res = parseServerAddress(text)
|
val res = parseServerAddress(text)
|
||||||
if (res != null) {
|
if (res != null) {
|
||||||
onNext(ServerCfg(remoteHostId = rhId, text, false, null, ServerEnabled.Enabled))
|
onNext(ServerCfg(remoteHostId = rhId, text, false, null, false))
|
||||||
} else {
|
} else {
|
||||||
AlertManager.shared.showAlertMsg(
|
AlertManager.shared.showAlertMsg(
|
||||||
title = generalGetString(MR.strings.smp_servers_invalid_address),
|
title = generalGetString(MR.strings.smp_servers_invalid_address),
|
||||||
|
|
|
@ -416,13 +416,15 @@ fun SettingsPreferenceItem(
|
||||||
@Composable
|
@Composable
|
||||||
fun PreferenceToggle(
|
fun PreferenceToggle(
|
||||||
text: String,
|
text: String,
|
||||||
|
disabled: Boolean = false,
|
||||||
checked: Boolean,
|
checked: Boolean,
|
||||||
onChange: (Boolean) -> Unit = {},
|
onChange: (Boolean) -> Unit = {},
|
||||||
) {
|
) {
|
||||||
SettingsActionItemWithContent(null, text, extraPadding = true,) {
|
SettingsActionItemWithContent(null, text, disabled = disabled, extraPadding = true,) {
|
||||||
DefaultSwitch(
|
DefaultSwitch(
|
||||||
checked = checked,
|
checked = checked,
|
||||||
onCheckedChange = onChange,
|
onCheckedChange = onChange,
|
||||||
|
enabled = !disabled
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<string name="smp_servers_add_to_another_device">أضِف إلى جهاز آخر</string>
|
<string name="smp_servers_add_to_another_device">أضِف إلى جهاز آخر</string>
|
||||||
<string name="users_delete_all_chats_deleted">سيتم حذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا!</string>
|
<string name="users_delete_all_chats_deleted">سيتم حذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا!</string>
|
||||||
<string name="network_enable_socks_info">الوصول إلى الخوادم عبر بروكسي SOCKS على المنفذ %d؟ يجب بدء تشغيل الوكيل قبل تمكين هذا الخيار.</string>
|
<string name="network_enable_socks_info">الوصول إلى الخوادم عبر بروكسي SOCKS على المنفذ %d؟ يجب بدء تشغيل الوكيل قبل تمكين هذا الخيار.</string>
|
||||||
<string name="smp_servers_add">أضِف خادم…</string>
|
<string name="smp_servers_add">أضِف خادم</string>
|
||||||
<string name="network_settings">إعدادات الشبكة المتقدمة</string>
|
<string name="network_settings">إعدادات الشبكة المتقدمة</string>
|
||||||
<string name="all_group_members_will_remain_connected">سيبقى جميع أعضاء المجموعة على اتصال.</string>
|
<string name="all_group_members_will_remain_connected">سيبقى جميع أعضاء المجموعة على اتصال.</string>
|
||||||
<string name="allow_disappearing_messages_only_if">السماح باختفاء الرسائل فقط إذا سمحت جهة اتصالك بذلك.</string>
|
<string name="allow_disappearing_messages_only_if">السماح باختفاء الرسائل فقط إذا سمحت جهة اتصالك بذلك.</string>
|
||||||
|
|
|
@ -673,9 +673,11 @@
|
||||||
<string name="chat_lock">SimpleX Lock</string>
|
<string name="chat_lock">SimpleX Lock</string>
|
||||||
<string name="chat_console">Chat console</string>
|
<string name="chat_console">Chat console</string>
|
||||||
<string name="smp_servers">SMP servers</string>
|
<string name="smp_servers">SMP servers</string>
|
||||||
|
<string name="smp_servers_configured">Configured SMP servers</string>
|
||||||
|
<string name="smp_servers_other">Other SMP servers</string>
|
||||||
<string name="smp_servers_preset_address">Preset server address</string>
|
<string name="smp_servers_preset_address">Preset server address</string>
|
||||||
<string name="smp_servers_preset_add">Add preset servers</string>
|
<string name="smp_servers_preset_add">Add preset servers</string>
|
||||||
<string name="smp_servers_add">Add server…</string>
|
<string name="smp_servers_add">Add server</string>
|
||||||
<string name="smp_servers_test_server">Test server</string>
|
<string name="smp_servers_test_server">Test server</string>
|
||||||
<string name="smp_servers_test_servers">Test servers</string>
|
<string name="smp_servers_test_servers">Test servers</string>
|
||||||
<string name="smp_servers_save">Save servers</string>
|
<string name="smp_servers_save">Save servers</string>
|
||||||
|
@ -695,6 +697,8 @@
|
||||||
<string name="smp_servers_per_user">The servers for new connections of your current chat profile</string>
|
<string name="smp_servers_per_user">The servers for new connections of your current chat profile</string>
|
||||||
<string name="smp_save_servers_question">Save servers?</string>
|
<string name="smp_save_servers_question">Save servers?</string>
|
||||||
<string name="xftp_servers">XFTP servers</string>
|
<string name="xftp_servers">XFTP servers</string>
|
||||||
|
<string name="xftp_servers_configured">Configured XFTP servers</string>
|
||||||
|
<string name="xftp_servers_other">Other XFTP servers</string>
|
||||||
<string name="subscription_percentage">Subscription percentage</string>
|
<string name="subscription_percentage">Subscription percentage</string>
|
||||||
<string name="install_simplex_chat_for_terminal">Install SimpleX Chat for terminal</string>
|
<string name="install_simplex_chat_for_terminal">Install SimpleX Chat for terminal</string>
|
||||||
<string name="star_on_github">Star on GitHub</string>
|
<string name="star_on_github">Star on GitHub</string>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<string name="contact_wants_to_connect_via_call">%1$s иска да се свърже с вас чрез</string>
|
<string name="contact_wants_to_connect_via_call">%1$s иска да се свърже с вас чрез</string>
|
||||||
<string name="send_disappearing_message_1_minute">1 минута</string>
|
<string name="send_disappearing_message_1_minute">1 минута</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">Добави сървъри чрез сканиране на QR кодове.</string>
|
<string name="v4_3_improved_server_configuration_desc">Добави сървъри чрез сканиране на QR кодове.</string>
|
||||||
<string name="smp_servers_add">Добави сървър…</string>
|
<string name="smp_servers_add">Добави сървър</string>
|
||||||
<string name="group_member_role_admin">админ</string>
|
<string name="group_member_role_admin">админ</string>
|
||||||
<string name="button_add_welcome_message">Добави съобщение при посрещане</string>
|
<string name="button_add_welcome_message">Добави съобщение при посрещане</string>
|
||||||
<string name="v5_1_self_destruct_passcode_descr">Всички данни се изтриват при въвеждане.</string>
|
<string name="v5_1_self_destruct_passcode_descr">Всички данни се изтриват при въвеждане.</string>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<string name="color_secondary_variant">আনুষঙ্গিক রং</string>
|
<string name="color_secondary_variant">আনুষঙ্গিক রং</string>
|
||||||
<string name="v4_2_group_links_desc">অ্যাডমিনরা গ্রুপে যোগদানের সংযোগ-সূত্র তৈরি করতে পারবেন।</string>
|
<string name="v4_2_group_links_desc">অ্যাডমিনরা গ্রুপে যোগদানের সংযোগ-সূত্র তৈরি করতে পারবেন।</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">QR কোড স্ক্যান করে সার্ভার যুক্ত করুন।</string>
|
<string name="v4_3_improved_server_configuration_desc">QR কোড স্ক্যান করে সার্ভার যুক্ত করুন।</string>
|
||||||
<string name="smp_servers_add">সার্ভার যুক্ত করুন…</string>
|
<string name="smp_servers_add">সার্ভার যুক্ত করুন</string>
|
||||||
<string name="address_section_title">ঠিকানা</string>
|
<string name="address_section_title">ঠিকানা</string>
|
||||||
<string name="abort_switch_receiving_address_desc">ঠিকানা পরিবর্তন বাতিল করা হবে। বার্তা গ্রহণের পুরনো ঠিকানা ব্যবহার করা হবে।</string>
|
<string name="abort_switch_receiving_address_desc">ঠিকানা পরিবর্তন বাতিল করা হবে। বার্তা গ্রহণের পুরনো ঠিকানা ব্যবহার করা হবে।</string>
|
||||||
<string name="all_app_data_will_be_cleared">অ্যাপের সকল তথ্য মুছে ফেলা হয়েছে।</string>
|
<string name="all_app_data_will_be_cleared">অ্যাপের সকল তথ্য মুছে ফেলা হয়েছে।</string>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<string name="smp_servers_preset_add">Přidat přednastavené servery</string>
|
<string name="smp_servers_preset_add">Přidat přednastavené servery</string>
|
||||||
<string name="network_settings">Pokročilá nastavení sítě</string>
|
<string name="network_settings">Pokročilá nastavení sítě</string>
|
||||||
<string name="accept">Přijmout</string>
|
<string name="accept">Přijmout</string>
|
||||||
<string name="smp_servers_add">Přidat server…</string>
|
<string name="smp_servers_add">Přidat server</string>
|
||||||
<string name="network_enable_socks_info">Přistupovat k serverům přes SOCKS proxy na portu %d\? Před povolením této možnosti musí být spuštěna proxy.</string>
|
<string name="network_enable_socks_info">Přistupovat k serverům přes SOCKS proxy na portu %d\? Před povolením této možnosti musí být spuštěna proxy.</string>
|
||||||
<string name="accept_feature">Přijmout</string>
|
<string name="accept_feature">Přijmout</string>
|
||||||
<string name="allow_your_contacts_to_send_disappearing_messages">Povolit svým kontaktům odesílat mizící zprávy.</string>
|
<string name="allow_your_contacts_to_send_disappearing_messages">Povolit svým kontaktům odesílat mizící zprávy.</string>
|
||||||
|
|
|
@ -355,7 +355,7 @@
|
||||||
<string name="smp_servers">SMP-Server</string>
|
<string name="smp_servers">SMP-Server</string>
|
||||||
<string name="smp_servers_preset_address">Voreingestellte Serveradresse</string>
|
<string name="smp_servers_preset_address">Voreingestellte Serveradresse</string>
|
||||||
<string name="smp_servers_preset_add">Füge voreingestellte Server hinzu</string>
|
<string name="smp_servers_preset_add">Füge voreingestellte Server hinzu</string>
|
||||||
<string name="smp_servers_add">Füge Server hinzu…</string>
|
<string name="smp_servers_add">Füge Server hinzu</string>
|
||||||
<string name="smp_servers_test_server">Teste Server</string>
|
<string name="smp_servers_test_server">Teste Server</string>
|
||||||
<string name="smp_servers_test_servers">Teste alle Server</string>
|
<string name="smp_servers_test_servers">Teste alle Server</string>
|
||||||
<string name="smp_servers_save">Alle Server speichern</string>
|
<string name="smp_servers_save">Alle Server speichern</string>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<string name="accept_connection_request__question">Αποδοχή αιτήματος σύνδεσης;</string>
|
<string name="accept_connection_request__question">Αποδοχή αιτήματος σύνδεσης;</string>
|
||||||
<string name="callstatus_accepted">αποδεκτή κλήση</string>
|
<string name="callstatus_accepted">αποδεκτή κλήση</string>
|
||||||
<string name="network_enable_socks_info">Πρόσβαση στους διακομιστές μέσω SOCKS proxy στην πόρτα %d; Ο διακομιστής μεσολάβησης (proxy server) πρέπει να είναι ενεργός πριν ενεργοποιηθεί αυτή η ρύθμιση.</string>
|
<string name="network_enable_socks_info">Πρόσβαση στους διακομιστές μέσω SOCKS proxy στην πόρτα %d; Ο διακομιστής μεσολάβησης (proxy server) πρέπει να είναι ενεργός πριν ενεργοποιηθεί αυτή η ρύθμιση.</string>
|
||||||
<string name="smp_servers_add">Προσθήκη διακομιστή…</string>
|
<string name="smp_servers_add">Προσθήκη διακομιστή</string>
|
||||||
<string name="network_settings">Προχωρημένες ρυθμίσεις δικτύου</string>
|
<string name="network_settings">Προχωρημένες ρυθμίσεις δικτύου</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">Προσθήκη διακομιστών μέσω σάρωσης QR κωδικών.</string>
|
<string name="v4_3_improved_server_configuration_desc">Προσθήκη διακομιστών μέσω σάρωσης QR κωδικών.</string>
|
||||||
<string name="v4_2_group_links_desc">Οι διαχειριστές μπορούν να δημιουργήσουν τους συνδέσμους συμμετοχής σε ομάδες.</string>
|
<string name="v4_2_group_links_desc">Οι διαχειριστές μπορούν να δημιουργήσουν τους συνδέσμους συμμετοχής σε ομάδες.</string>
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<string name="accept_connection_request__question">¿Aceptar solicitud de conexión\?</string>
|
<string name="accept_connection_request__question">¿Aceptar solicitud de conexión\?</string>
|
||||||
<string name="accept_contact_incognito_button">Aceptar incógnito</string>
|
<string name="accept_contact_incognito_button">Aceptar incógnito</string>
|
||||||
<string name="clear_chat_warning">Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!</string>
|
<string name="clear_chat_warning">Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!</string>
|
||||||
<string name="smp_servers_add">Añadir servidor…</string>
|
<string name="smp_servers_add">Añadir servidor</string>
|
||||||
<string name="network_enable_socks_info">¿Acceder a los servidores a través del proxy SOCKS en el puerto %d\? El proxy debe iniciarse antes de activar esta opción.</string>
|
<string name="network_enable_socks_info">¿Acceder a los servidores a través del proxy SOCKS en el puerto %d\? El proxy debe iniciarse antes de activar esta opción.</string>
|
||||||
<string name="all_your_contacts_will_remain_connected">Todos tus contactos permanecerán conectados.</string>
|
<string name="all_your_contacts_will_remain_connected">Todos tus contactos permanecerán conectados.</string>
|
||||||
<string name="appearance_settings">Apariencia</string>
|
<string name="appearance_settings">Apariencia</string>
|
||||||
|
|
|
@ -539,7 +539,7 @@
|
||||||
<string name="chat_with_the_founder">ایدهها و سوالات را ارسال کنید</string>
|
<string name="chat_with_the_founder">ایدهها و سوالات را ارسال کنید</string>
|
||||||
<string name="send_us_an_email">به ما ایمیل بفرستید</string>
|
<string name="send_us_an_email">به ما ایمیل بفرستید</string>
|
||||||
<string name="chat_lock">قفل SimpleX</string>
|
<string name="chat_lock">قفل SimpleX</string>
|
||||||
<string name="smp_servers_add">افزودن سرور…</string>
|
<string name="smp_servers_add">افزودن سرور</string>
|
||||||
<string name="smp_servers_test_servers">آزمایش سرورها</string>
|
<string name="smp_servers_test_servers">آزمایش سرورها</string>
|
||||||
<string name="smp_servers_save">ذخیره سرورها</string>
|
<string name="smp_servers_save">ذخیره سرورها</string>
|
||||||
<string name="smp_servers_test_failed">عدم موفقیت آزمایش سرور!</string>
|
<string name="smp_servers_test_failed">عدم موفقیت آزمایش سرور!</string>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<string name="send_disappearing_message_30_seconds">30 sekuntia</string>
|
<string name="send_disappearing_message_30_seconds">30 sekuntia</string>
|
||||||
<string name="send_disappearing_message_5_minutes">5 minuuttia</string>
|
<string name="send_disappearing_message_5_minutes">5 minuuttia</string>
|
||||||
<string name="allow_disappearing_messages_only_if">Salli katoavat viestit vain, jos kontaktisi sallii ne.</string>
|
<string name="allow_disappearing_messages_only_if">Salli katoavat viestit vain, jos kontaktisi sallii ne.</string>
|
||||||
<string name="smp_servers_add">Lisää palvelin…</string>
|
<string name="smp_servers_add">Lisää palvelin</string>
|
||||||
<string name="button_add_welcome_message">Lisää tervetuloviesti</string>
|
<string name="button_add_welcome_message">Lisää tervetuloviesti</string>
|
||||||
<string name="allow_to_send_voice">Salli ääniviestien lähettäminen.</string>
|
<string name="allow_to_send_voice">Salli ääniviestien lähettäminen.</string>
|
||||||
<string name="one_time_link_short">Kertakäyttölinkki</string>
|
<string name="one_time_link_short">Kertakäyttölinkki</string>
|
||||||
|
|
|
@ -313,7 +313,7 @@
|
||||||
<string name="scan_code_from_contacts_app">Scannez le code de sécurité depuis l\'application de votre contact.</string>
|
<string name="scan_code_from_contacts_app">Scannez le code de sécurité depuis l\'application de votre contact.</string>
|
||||||
<string name="to_verify_compare">Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.</string>
|
<string name="to_verify_compare">Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.</string>
|
||||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link"><![CDATA[Si vous ne pouvez pas vous rencontrer en personne, vous pouvez <b>scanner un code QR lors d\'un appel vidéo</b>, ou votre contact peut partager un lien d\'invitation.]]></string>
|
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link"><![CDATA[Si vous ne pouvez pas vous rencontrer en personne, vous pouvez <b>scanner un code QR lors d\'un appel vidéo</b>, ou votre contact peut partager un lien d\'invitation.]]></string>
|
||||||
<string name="smp_servers_add">Ajouter un serveur…</string>
|
<string name="smp_servers_add">Ajouter un serveur</string>
|
||||||
<string name="markdown_in_messages">Markdown dans les messages</string>
|
<string name="markdown_in_messages">Markdown dans les messages</string>
|
||||||
<string name="smp_servers_preset_add">Ajouter des serveurs prédéfinis</string>
|
<string name="smp_servers_preset_add">Ajouter des serveurs prédéfinis</string>
|
||||||
<string name="use_simplex_chat_servers__question">Utiliser les serveurs SimpleX Chat \?</string>
|
<string name="use_simplex_chat_servers__question">Utiliser les serveurs SimpleX Chat \?</string>
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<string name="accept_contact_incognito_button">गुप्त स्वीकार करें</string>
|
<string name="accept_contact_incognito_button">गुप्त स्वीकार करें</string>
|
||||||
<string name="smp_servers_preset_add">पूर्वनिर्धारित सर्वर जोड़ें</string>
|
<string name="smp_servers_preset_add">पूर्वनिर्धारित सर्वर जोड़ें</string>
|
||||||
<string name="users_add">प्रोफ़ाइल जोड़ें</string>
|
<string name="users_add">प्रोफ़ाइल जोड़ें</string>
|
||||||
<string name="smp_servers_add">सर्वर जोड़े…</string>
|
<string name="smp_servers_add">सर्वर जोड़े</string>
|
||||||
<string name="notifications_mode_service">हमेशा बने रहें</string>
|
<string name="notifications_mode_service">हमेशा बने रहें</string>
|
||||||
<string name="attach">संलग्न करना</string>
|
<string name="attach">संलग्न करना</string>
|
||||||
<string name="network_settings">उन्नत संजाल समायोजन</string>
|
<string name="network_settings">उन्नत संजाल समायोजन</string>
|
||||||
|
|
|
@ -165,7 +165,7 @@
|
||||||
<string name="block_member_desc">Minden %s által írt új üzenet elrejtésre kerül!</string>
|
<string name="block_member_desc">Minden %s által írt új üzenet elrejtésre kerül!</string>
|
||||||
<string name="app_version_name">Alkalmazás verzió: v%s</string>
|
<string name="app_version_name">Alkalmazás verzió: v%s</string>
|
||||||
<string name="allow_calls_only_if">A hívások kezdeményezése kizárólag abban az esetben van engedélyezve, ha az ismerőse is engedélyezi.</string>
|
<string name="allow_calls_only_if">A hívások kezdeményezése kizárólag abban az esetben van engedélyezve, ha az ismerőse is engedélyezi.</string>
|
||||||
<string name="smp_servers_add">Kiszolgáló hozzáadása…</string>
|
<string name="smp_servers_add">Kiszolgáló hozzáadása</string>
|
||||||
<string name="icon_descr_audio_on">Hang bekapcsolva</string>
|
<string name="icon_descr_audio_on">Hang bekapcsolva</string>
|
||||||
<string name="audio_call_no_encryption">hanghívás (nem e2e titkosított)</string>
|
<string name="audio_call_no_encryption">hanghívás (nem e2e titkosított)</string>
|
||||||
<string name="blocked_item_description">letiltva</string>
|
<string name="blocked_item_description">letiltva</string>
|
||||||
|
|
|
@ -249,7 +249,7 @@
|
||||||
<string name="accept_contact_incognito_button">Accetta in incognito</string>
|
<string name="accept_contact_incognito_button">Accetta in incognito</string>
|
||||||
<string name="clear_chat_warning">Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te.</string>
|
<string name="clear_chat_warning">Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te.</string>
|
||||||
<string name="smp_servers_preset_add">Aggiungi server preimpostati</string>
|
<string name="smp_servers_preset_add">Aggiungi server preimpostati</string>
|
||||||
<string name="smp_servers_add">Aggiungi server…</string>
|
<string name="smp_servers_add">Aggiungi server</string>
|
||||||
<string name="network_settings">Impostazioni di rete avanzate</string>
|
<string name="network_settings">Impostazioni di rete avanzate</string>
|
||||||
<string name="about_simplex">Riguardo SimpleX</string>
|
<string name="about_simplex">Riguardo SimpleX</string>
|
||||||
<string name="callstatus_accepted">chiamata accettata</string>
|
<string name="callstatus_accepted">chiamata accettata</string>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<string name="clear_chat_warning">כל ההודעות יימחקו – לא ניתן לבטל זאת! ההודעות יימחקו רק עבורך.</string>
|
<string name="clear_chat_warning">כל ההודעות יימחקו – לא ניתן לבטל זאת! ההודעות יימחקו רק עבורך.</string>
|
||||||
<string name="accept_contact_incognito_button">אשר זהות נסתרת</string>
|
<string name="accept_contact_incognito_button">אשר זהות נסתרת</string>
|
||||||
<string name="smp_servers_preset_add">הוסף שרתים מוגדרים מראש</string>
|
<string name="smp_servers_preset_add">הוסף שרתים מוגדרים מראש</string>
|
||||||
<string name="smp_servers_add">הוסף שרת…</string>
|
<string name="smp_servers_add">הוסף שרת</string>
|
||||||
<string name="network_enable_socks_info">לגשת לשרתים דרך פרוקסי SOCKS בפורט %d\? הפרוקסי חייב לפעול לפני הפעלת אפשרות זו.</string>
|
<string name="network_enable_socks_info">לגשת לשרתים דרך פרוקסי SOCKS בפורט %d\? הפרוקסי חייב לפעול לפני הפעלת אפשרות זו.</string>
|
||||||
<string name="network_settings">הגדרות רשת מתקדמות</string>
|
<string name="network_settings">הגדרות רשת מתקדמות</string>
|
||||||
<string name="appearance_settings">מראה</string>
|
<string name="appearance_settings">מראה</string>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<string name="v4_3_improved_server_configuration_desc">QRコードでサーバを追加</string>
|
<string name="v4_3_improved_server_configuration_desc">QRコードでサーバを追加</string>
|
||||||
<string name="smp_servers_add_to_another_device">別の端末に追加</string>
|
<string name="smp_servers_add_to_another_device">別の端末に追加</string>
|
||||||
<string name="users_add">プロフィールを追加</string>
|
<string name="users_add">プロフィールを追加</string>
|
||||||
<string name="smp_servers_add">サーバを追加…</string>
|
<string name="smp_servers_add">サーバを追加</string>
|
||||||
<string name="network_enable_socks_info">SOCKSプロキシ(ポート%d)経由で接続しますか?(※設定する前にプロキシ起動が必要※)</string>
|
<string name="network_enable_socks_info">SOCKSプロキシ(ポート%d)経由で接続しますか?(※設定する前にプロキシ起動が必要※)</string>
|
||||||
<string name="users_delete_all_chats_deleted">全チャットとメッセージが削除されます(※元に戻せません※)!</string>
|
<string name="users_delete_all_chats_deleted">全チャットとメッセージが削除されます(※元に戻せません※)!</string>
|
||||||
<string name="allow_your_contacts_to_send_voice_messages">送信相手からの音声メッセージを許可する。</string>
|
<string name="allow_your_contacts_to_send_voice_messages">送信相手からの音声メッセージを許可する。</string>
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
<string name="connection_request_sent">연결 요청이 전송되었습니다!</string>
|
<string name="connection_request_sent">연결 요청이 전송되었습니다!</string>
|
||||||
<string name="connect_via_link">링크로 연결</string>
|
<string name="connect_via_link">링크로 연결</string>
|
||||||
<string name="smp_servers_preset_add">프리셋 서버 추가</string>
|
<string name="smp_servers_preset_add">프리셋 서버 추가</string>
|
||||||
<string name="smp_servers_add">서버 추가…</string>
|
<string name="smp_servers_add">서버 추가</string>
|
||||||
<string name="chat_console">채팅 콘솔</string>
|
<string name="chat_console">채팅 콘솔</string>
|
||||||
<string name="smp_servers_check_address">서버 주소를 확인 후 다시 시도해 주세요.</string>
|
<string name="smp_servers_check_address">서버 주소를 확인 후 다시 시도해 주세요.</string>
|
||||||
<string name="configure_ICE_servers">ICE 서버 설정</string>
|
<string name="configure_ICE_servers">ICE 서버 설정</string>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<string name="chat_item_ttl_day">1 diena</string>
|
<string name="chat_item_ttl_day">1 diena</string>
|
||||||
<string name="a_plus_b">a + b</string>
|
<string name="a_plus_b">a + b</string>
|
||||||
<string name="about_simplex">Apie SimpleX</string>
|
<string name="about_simplex">Apie SimpleX</string>
|
||||||
<string name="smp_servers_add">Pridėti serverį…</string>
|
<string name="smp_servers_add">Pridėti serverį</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">Pridėti serverius nuskanuojant QR kodus.</string>
|
<string name="v4_3_improved_server_configuration_desc">Pridėti serverius nuskanuojant QR kodus.</string>
|
||||||
<string name="appearance_settings">Išvaizda</string>
|
<string name="appearance_settings">Išvaizda</string>
|
||||||
<string name="app_version_title">Programėlės versija</string>
|
<string name="app_version_title">Programėlės versija</string>
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
<string name="back">തിരികെ</string>
|
<string name="back">തിരികെ</string>
|
||||||
<string name="mute_chat">നിശബ്ദമാക്കുക</string>
|
<string name="mute_chat">നിശബ്ദമാക്കുക</string>
|
||||||
<string name="icon_descr_help">സഹായം</string>
|
<string name="icon_descr_help">സഹായം</string>
|
||||||
<string name="smp_servers_add">സെർവർ ചേർക്കുക…</string>
|
<string name="smp_servers_add">സെർവർ ചേർക്കുക</string>
|
||||||
<string name="smp_servers_add_to_another_device">മറ്റൊരു ഉപകരണത്തിലേക്ക് ചേർക്കുക</string>
|
<string name="smp_servers_add_to_another_device">മറ്റൊരു ഉപകരണത്തിലേക്ക് ചേർക്കുക</string>
|
||||||
<string name="auto_accept_contact">സ്വയമേവ സ്വീകരിക്കുക</string>
|
<string name="auto_accept_contact">സ്വയമേവ സ്വീകരിക്കുക</string>
|
||||||
<string name="callstate_waiting_for_confirmation">സ്ഥിരീകരണത്തിനായി കാത്തിരിക്കുന്നു…</string>
|
<string name="callstate_waiting_for_confirmation">സ്ഥിരീകരണത്തിനായി കാത്തിരിക്കുന്നു…</string>
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
<string name="accept_contact_incognito_button">Accepteer incognito</string>
|
<string name="accept_contact_incognito_button">Accepteer incognito</string>
|
||||||
<string name="smp_servers_preset_add">Vooraf ingestelde servers toevoegen</string>
|
<string name="smp_servers_preset_add">Vooraf ingestelde servers toevoegen</string>
|
||||||
<string name="users_add">Profiel toevoegen</string>
|
<string name="users_add">Profiel toevoegen</string>
|
||||||
<string name="smp_servers_add">Server toevoegen…</string>
|
<string name="smp_servers_add">Server toevoegen</string>
|
||||||
<string name="smp_servers_add_to_another_device">Toevoegen aan een ander apparaat</string>
|
<string name="smp_servers_add_to_another_device">Toevoegen aan een ander apparaat</string>
|
||||||
<string name="v4_2_group_links_desc">Beheerders kunnen de uitnodiging links naar groepen aanmaken.</string>
|
<string name="v4_2_group_links_desc">Beheerders kunnen de uitnodiging links naar groepen aanmaken.</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">Servers toevoegen door QR-codes te scannen.</string>
|
<string name="v4_3_improved_server_configuration_desc">Servers toevoegen door QR-codes te scannen.</string>
|
||||||
|
|
|
@ -290,7 +290,7 @@
|
||||||
<string name="you_will_be_connected_when_group_host_device_is_online">Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później!</string>
|
<string name="you_will_be_connected_when_group_host_device_is_online">Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później!</string>
|
||||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później!</string>
|
<string name="you_will_be_connected_when_your_contacts_device_is_online">Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później!</string>
|
||||||
<string name="smp_servers_preset_add">Dodaj gotowe serwery</string>
|
<string name="smp_servers_preset_add">Dodaj gotowe serwery</string>
|
||||||
<string name="smp_servers_add">Dodaj serwer…</string>
|
<string name="smp_servers_add">Dodaj serwer</string>
|
||||||
<string name="smp_servers_add_to_another_device">Dodaj do innego urządzenia</string>
|
<string name="smp_servers_add_to_another_device">Dodaj do innego urządzenia</string>
|
||||||
<string name="chat_console">Konsola czatu</string>
|
<string name="chat_console">Konsola czatu</string>
|
||||||
<string name="smp_servers_check_address">Sprawdź adres serwera i spróbuj ponownie.</string>
|
<string name="smp_servers_check_address">Sprawdź adres serwera i spróbuj ponownie.</string>
|
||||||
|
|
|
@ -110,7 +110,7 @@
|
||||||
<string name="connect_via_link_or_qr">Conectar via link/QR code</string>
|
<string name="connect_via_link_or_qr">Conectar via link/QR code</string>
|
||||||
<string name="clear_chat_warning">Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você.</string>
|
<string name="clear_chat_warning">Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você.</string>
|
||||||
<string name="smp_servers_preset_add">Adicionar servidores pré-definidos</string>
|
<string name="smp_servers_preset_add">Adicionar servidores pré-definidos</string>
|
||||||
<string name="smp_servers_add">Adicionar servidor…</string>
|
<string name="smp_servers_add">Adicionar servidor</string>
|
||||||
<string name="create_your_profile">Crie seu perfil</string>
|
<string name="create_your_profile">Crie seu perfil</string>
|
||||||
<string name="icon_descr_context">Ícone de contexto</string>
|
<string name="icon_descr_context">Ícone de contexto</string>
|
||||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contato e todas as mensagens serão excluídas - isso não pode ser desfeito!</string>
|
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contato e todas as mensagens serão excluídas - isso não pode ser desfeito!</string>
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
<string name="chat_item_ttl_week">1 semana</string>
|
<string name="chat_item_ttl_week">1 semana</string>
|
||||||
<string name="accept_contact_button">Aceitar</string>
|
<string name="accept_contact_button">Aceitar</string>
|
||||||
<string name="callstatus_accepted">aceitar chamada</string>
|
<string name="callstatus_accepted">aceitar chamada</string>
|
||||||
<string name="smp_servers_add">Adicionar servidor…</string>
|
<string name="smp_servers_add">Adicionar servidor</string>
|
||||||
<string name="accept">Aceitar</string>
|
<string name="accept">Aceitar</string>
|
||||||
<string name="accept_connection_request__question">Aceitar pedido de ligação\?</string>
|
<string name="accept_connection_request__question">Aceitar pedido de ligação\?</string>
|
||||||
<string name="accept_contact_incognito_button">Aceitar modo anónimo</string>
|
<string name="accept_contact_incognito_button">Aceitar modo anónimo</string>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<string name="send_disappearing_message_30_seconds">30 secunde</string>
|
<string name="send_disappearing_message_30_seconds">30 secunde</string>
|
||||||
<string name="accept_contact_button">Acceptă</string>
|
<string name="accept_contact_button">Acceptă</string>
|
||||||
<string name="accept_contact_incognito_button">Acceptă incognito</string>
|
<string name="accept_contact_incognito_button">Acceptă incognito</string>
|
||||||
<string name="smp_servers_add">Adaugă server…</string>
|
<string name="smp_servers_add">Adaugă server</string>
|
||||||
<string name="network_settings">Setări de rețea avansate</string>
|
<string name="network_settings">Setări de rețea avansate</string>
|
||||||
<string name="contact_wants_to_connect_via_call">%1$s dorește să se conecteze cu tine prin</string>
|
<string name="contact_wants_to_connect_via_call">%1$s dorește să se conecteze cu tine prin</string>
|
||||||
<string name="accept_call_on_lock_screen">Acceptă</string>
|
<string name="accept_call_on_lock_screen">Acceptă</string>
|
||||||
|
|
|
@ -354,7 +354,7 @@
|
||||||
<string name="smp_servers">SMP серверы</string>
|
<string name="smp_servers">SMP серверы</string>
|
||||||
<string name="smp_servers_preset_address">Адрес сервера по умолчанию</string>
|
<string name="smp_servers_preset_address">Адрес сервера по умолчанию</string>
|
||||||
<string name="smp_servers_preset_add">Добавить серверы по умолчанию</string>
|
<string name="smp_servers_preset_add">Добавить серверы по умолчанию</string>
|
||||||
<string name="smp_servers_add">Добавить сервер…</string>
|
<string name="smp_servers_add">Добавить сервер</string>
|
||||||
<string name="smp_servers_test_server">Тестировать сервер</string>
|
<string name="smp_servers_test_server">Тестировать сервер</string>
|
||||||
<string name="smp_servers_test_servers">Тестировать серверы</string>
|
<string name="smp_servers_test_servers">Тестировать серверы</string>
|
||||||
<string name="smp_servers_save">Сохранить серверы</string>
|
<string name="smp_servers_save">Сохранить серверы</string>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<string name="icon_descr_asked_to_receive">ขอรับภาพ</string>
|
<string name="icon_descr_asked_to_receive">ขอรับภาพ</string>
|
||||||
<string name="icon_descr_video_asked_to_receive">ขอรับวิดีโอ</string>
|
<string name="icon_descr_video_asked_to_receive">ขอรับวิดีโอ</string>
|
||||||
<string name="clear_chat_warning">ข้อความทั้งหมดจะถูกลบ - การดำเนินการนี้ไม่สามารถยกเลิกได้! ข้อความจะถูกลบสำหรับคุณเท่านั้น</string>
|
<string name="clear_chat_warning">ข้อความทั้งหมดจะถูกลบ - การดำเนินการนี้ไม่สามารถยกเลิกได้! ข้อความจะถูกลบสำหรับคุณเท่านั้น</string>
|
||||||
<string name="smp_servers_add">เพิ่มเซิร์ฟเวอร์…</string>
|
<string name="smp_servers_add">เพิ่มเซิร์ฟเวอร์</string>
|
||||||
<string name="app_version_title">เวอร์ชันแอป</string>
|
<string name="app_version_title">เวอร์ชันแอป</string>
|
||||||
<string name="app_version_name">เวอร์ชันแอป: v%s</string>
|
<string name="app_version_name">เวอร์ชันแอป: v%s</string>
|
||||||
<string name="all_your_contacts_will_remain_connected">ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่.</string>
|
<string name="all_your_contacts_will_remain_connected">ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่.</string>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<string name="abort_switch_receiving_address_desc">Adres değişikliği iptal edilecek. Eski alıcı adresi kullanılacaktır.</string>
|
<string name="abort_switch_receiving_address_desc">Adres değişikliği iptal edilecek. Eski alıcı adresi kullanılacaktır.</string>
|
||||||
<string name="send_disappearing_message_1_minute">1 dakika</string>
|
<string name="send_disappearing_message_1_minute">1 dakika</string>
|
||||||
<string name="clear_chat_warning">Tüm mesajlar silinecektir. Bu, geri alınamaz! Mesajlar, YALNIZCA senin için silinecektir.</string>
|
<string name="clear_chat_warning">Tüm mesajlar silinecektir. Bu, geri alınamaz! Mesajlar, YALNIZCA senin için silinecektir.</string>
|
||||||
<string name="smp_servers_add">Sunucu ekle…</string>
|
<string name="smp_servers_add">Sunucu ekle</string>
|
||||||
<string name="database_passphrase_and_export">Veri tabanı ayarları</string>
|
<string name="database_passphrase_and_export">Veri tabanı ayarları</string>
|
||||||
<string name="one_time_link_short">tek kullanımlık bağlantı</string>
|
<string name="one_time_link_short">tek kullanımlık bağlantı</string>
|
||||||
<string name="network_settings">Gelişmiş ağ ayarları</string>
|
<string name="network_settings">Gelişmiş ağ ayarları</string>
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
<string name="keychain_allows_to_receive_ntfs">Після перезапуску додатка або зміни ключової фрази буде використано сховище ключів Android для безпечного збереження ключової фрази - це дозволить отримувати сповіщення.</string>
|
<string name="keychain_allows_to_receive_ntfs">Після перезапуску додатка або зміни ключової фрази буде використано сховище ключів Android для безпечного збереження ключової фрази - це дозволить отримувати сповіщення.</string>
|
||||||
<string name="allow_your_contacts_to_send_voice_messages">Дозвольте вашим контактам надсилати голосові повідомлення.</string>
|
<string name="allow_your_contacts_to_send_voice_messages">Дозвольте вашим контактам надсилати голосові повідомлення.</string>
|
||||||
<string name="accept_contact_incognito_button">Прийняти інкогніто</string>
|
<string name="accept_contact_incognito_button">Прийняти інкогніто</string>
|
||||||
<string name="smp_servers_add">Додати сервер…</string>
|
<string name="smp_servers_add">Додати сервер</string>
|
||||||
<string name="group_member_role_admin">адміністратор</string>
|
<string name="group_member_role_admin">адміністратор</string>
|
||||||
<string name="button_add_welcome_message">Додати привітання</string>
|
<string name="button_add_welcome_message">Додати привітання</string>
|
||||||
<string name="all_group_members_will_remain_connected">Всі члени групи залишаться підключеними.</string>
|
<string name="all_group_members_will_remain_connected">Всі члени групи залишаться підключеними.</string>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<string name="one_time_link_short">liên kết dùng một lần</string>
|
<string name="one_time_link_short">liên kết dùng một lần</string>
|
||||||
<string name="add_contact_tab">Thêm liên hệ</string>
|
<string name="add_contact_tab">Thêm liên hệ</string>
|
||||||
<string name="about_simplex_chat">Thông tin về SimpleX Chat</string>
|
<string name="about_simplex_chat">Thông tin về SimpleX Chat</string>
|
||||||
<string name="smp_servers_add">Thêm máy chủ…</string>
|
<string name="smp_servers_add">Thêm máy chủ</string>
|
||||||
<string name="about_simplex">Thông tin về SimpleX</string>
|
<string name="about_simplex">Thông tin về SimpleX</string>
|
||||||
<string name="group_member_role_admin">quản trị viên</string>
|
<string name="group_member_role_admin">quản trị viên</string>
|
||||||
<string name="button_add_welcome_message">Thêm lời chào</string>
|
<string name="button_add_welcome_message">Thêm lời chào</string>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<string name="callstatus_accepted">已接受通话</string>
|
<string name="callstatus_accepted">已接受通话</string>
|
||||||
<string name="accept">接受</string>
|
<string name="accept">接受</string>
|
||||||
<string name="network_enable_socks_info">通过在 %d 端口的 SOCKS 代理访问服务器?启用该选项前必须先启动代理。</string>
|
<string name="network_enable_socks_info">通过在 %d 端口的 SOCKS 代理访问服务器?启用该选项前必须先启动代理。</string>
|
||||||
<string name="smp_servers_add">添加服务器……</string>
|
<string name="smp_servers_add">添加服务器</string>
|
||||||
<string name="smp_servers_add_to_another_device">添加另一设备</string>
|
<string name="smp_servers_add_to_another_device">添加另一设备</string>
|
||||||
<string name="group_member_role_admin">管理员</string>
|
<string name="group_member_role_admin">管理员</string>
|
||||||
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器。</string>
|
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器。</string>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<string name="group_member_role_admin">管理員</string>
|
<string name="group_member_role_admin">管理員</string>
|
||||||
<string name="above_then_preposition_continuation">然後,選按:</string>
|
<string name="above_then_preposition_continuation">然後,選按:</string>
|
||||||
<string name="smp_servers_preset_add">新增預設伺服器</string>
|
<string name="smp_servers_preset_add">新增預設伺服器</string>
|
||||||
<string name="smp_servers_add">新增伺服器…</string>
|
<string name="smp_servers_add">新增伺服器</string>
|
||||||
<string name="accept">接受</string>
|
<string name="accept">接受</string>
|
||||||
<string name="auth_unavailable">認證無效</string>
|
<string name="auth_unavailable">認證無效</string>
|
||||||
<string name="allow_verb">允許</string>
|
<string name="allow_verb">允許</string>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue