mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 09f916b5e4 | |||
| ea4927c9b0 | |||
| fe0d811bf7 | |||
| 554cfbfcc7 | |||
| cbb3da8f83 | |||
| 83f0bd9fd3 | |||
| 615c483912 | |||
| e0c2272fcb | |||
| 362581432c | |||
| df1a471c56 | |||
| 7d43a43e82 | |||
| ae8ad5c639 | |||
| 1408d75eb3 | |||
| f408988035 | |||
| 945c5015d8 | |||
| 2e431c5afa | |||
| 924273191e | |||
| 9b82cc3303 | |||
| 19e2cebd68 | |||
| eff4f2f603 |
@@ -519,7 +519,14 @@ func testProtoServer(server: String) async throws -> Result<(), ProtocolTestFail
|
||||
throw r
|
||||
}
|
||||
|
||||
func getServerOperators() throws -> ServerOperatorConditions {
|
||||
func getServerOperators() async throws -> ServerOperatorConditions {
|
||||
let r = await chatSendCmd(.apiGetServerOperators)
|
||||
if case let .serverOperatorConditions(conditions) = r { return conditions }
|
||||
logger.error("getServerOperators error: \(String(describing: r))")
|
||||
throw r
|
||||
}
|
||||
|
||||
func getServerOperatorsSync() throws -> ServerOperatorConditions {
|
||||
let r = chatSendCmdSync(.apiGetServerOperators)
|
||||
if case let .serverOperatorConditions(conditions) = r { return conditions }
|
||||
logger.error("getServerOperators error: \(String(describing: r))")
|
||||
@@ -1599,7 +1606,7 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni
|
||||
try apiSetEncryptLocalFiles(privacyEncryptLocalFilesGroupDefault.get())
|
||||
m.chatInitialized = true
|
||||
m.currentUser = try apiGetActiveUser()
|
||||
m.conditions = try getServerOperators()
|
||||
m.conditions = try getServerOperatorsSync()
|
||||
if shouldImportAppSettingsDefault.get() {
|
||||
do {
|
||||
let appSettings = try apiGetAppSettings(settings: AppSettings.current.prepareForExport())
|
||||
|
||||
@@ -96,6 +96,8 @@ struct ChatInfoView: View {
|
||||
@ObservedObject var chat: Chat
|
||||
@State var contact: Contact
|
||||
@State var localAlias: String
|
||||
@State var featuresAllowed: ContactFeaturesAllowed
|
||||
@State var currentFeaturesAllowed: ContactFeaturesAllowed
|
||||
var onSearch: () -> Void
|
||||
@State private var connectionStats: ConnectionStats? = nil
|
||||
@State private var customUserProfile: Profile? = nil
|
||||
@@ -327,6 +329,16 @@ struct ChatInfoView: View {
|
||||
$0.content
|
||||
}
|
||||
}
|
||||
.onDisappear {
|
||||
if currentFeaturesAllowed != featuresAllowed {
|
||||
showAlert(
|
||||
title: NSLocalizedString("Save preferences?", comment: "alert title"),
|
||||
buttonTitle: NSLocalizedString("Save and notify contact", comment: "alert button"),
|
||||
buttonAction: { savePreferences() },
|
||||
cancelButton: true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func contactInfoHeader() -> some View {
|
||||
@@ -447,8 +459,9 @@ struct ChatInfoView: View {
|
||||
NavigationLink {
|
||||
ContactPreferencesView(
|
||||
contact: $contact,
|
||||
featuresAllowed: contactUserPrefsToFeaturesAllowed(contact.mergedPreferences),
|
||||
currentFeaturesAllowed: contactUserPrefsToFeaturesAllowed(contact.mergedPreferences)
|
||||
featuresAllowed: $featuresAllowed,
|
||||
currentFeaturesAllowed: $currentFeaturesAllowed,
|
||||
savePreferences: savePreferences
|
||||
)
|
||||
.navigationBarTitle("Contact preferences")
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
@@ -617,6 +630,23 @@ struct ChatInfoView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func savePreferences() {
|
||||
Task {
|
||||
do {
|
||||
let prefs = contactFeaturesAllowedToPrefs(featuresAllowed)
|
||||
if let toContact = try await apiSetContactPrefs(contactId: contact.contactId, preferences: prefs) {
|
||||
await MainActor.run {
|
||||
contact = toContact
|
||||
chatModel.updateContact(toContact)
|
||||
currentFeaturesAllowed = featuresAllowed
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
logger.error("ContactPreferencesView apiSetContactPrefs error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct AudioCallButton: View {
|
||||
@@ -1173,6 +1203,8 @@ struct ChatInfoView_Previews: PreviewProvider {
|
||||
chat: Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: []),
|
||||
contact: Contact.sampleData,
|
||||
localAlias: "",
|
||||
featuresAllowed: contactUserPrefsToFeaturesAllowed(Contact.sampleData.mergedPreferences),
|
||||
currentFeaturesAllowed: contactUserPrefsToFeaturesAllowed(Contact.sampleData.mergedPreferences),
|
||||
onSearch: {}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -133,7 +133,12 @@ struct ChatView: View {
|
||||
.appSheet(item: $selectedMember) { member in
|
||||
Group {
|
||||
if case let .group(groupInfo) = chat.chatInfo {
|
||||
GroupMemberInfoView(groupInfo: groupInfo, groupMember: member, navigation: true)
|
||||
GroupMemberInfoView(
|
||||
groupInfo: groupInfo,
|
||||
chat: chat,
|
||||
groupMember: member,
|
||||
navigation: true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,6 +231,8 @@ struct ChatView: View {
|
||||
chat: chat,
|
||||
contact: contact,
|
||||
localAlias: chat.chatInfo.localAlias,
|
||||
featuresAllowed: contactUserPrefsToFeaturesAllowed(contact.mergedPreferences),
|
||||
currentFeaturesAllowed: contactUserPrefsToFeaturesAllowed(contact.mergedPreferences),
|
||||
onSearch: { focusSearch() }
|
||||
)
|
||||
}
|
||||
@@ -1122,6 +1129,7 @@ struct ChatView: View {
|
||||
} else {
|
||||
let mem = GMember.init(member)
|
||||
m.groupMembers.append(mem)
|
||||
m.groupMembersIndexes[member.groupMemberId] = m.groupMembers.count - 1
|
||||
selectedMember = mem
|
||||
}
|
||||
}
|
||||
@@ -1877,6 +1885,7 @@ struct ReactionContextMenu: View {
|
||||
} else {
|
||||
let member = GMember.init(mem)
|
||||
m.groupMembers.append(member)
|
||||
m.groupMembersIndexes[member.groupMemberId] = m.groupMembers.count - 1
|
||||
selectedMember = member
|
||||
}
|
||||
} label: {
|
||||
|
||||
@@ -14,9 +14,10 @@ struct ContactPreferencesView: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Binding var contact: Contact
|
||||
@State var featuresAllowed: ContactFeaturesAllowed
|
||||
@State var currentFeaturesAllowed: ContactFeaturesAllowed
|
||||
@Binding var featuresAllowed: ContactFeaturesAllowed
|
||||
@Binding var currentFeaturesAllowed: ContactFeaturesAllowed
|
||||
@State private var showSaveDialogue = false
|
||||
let savePreferences: () -> Void
|
||||
|
||||
var body: some View {
|
||||
let user: User = chatModel.currentUser!
|
||||
@@ -48,7 +49,10 @@ struct ContactPreferencesView: View {
|
||||
savePreferences()
|
||||
dismiss()
|
||||
}
|
||||
Button("Exit without saving") { dismiss() }
|
||||
Button("Exit without saving") {
|
||||
featuresAllowed = currentFeaturesAllowed
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,31 +122,15 @@ struct ContactPreferencesView: View {
|
||||
private func featureFooter(_ feature: ChatFeature, _ enabled: FeatureEnabled) -> some View {
|
||||
Text(feature.enabledDescription(enabled))
|
||||
}
|
||||
|
||||
private func savePreferences() {
|
||||
Task {
|
||||
do {
|
||||
let prefs = contactFeaturesAllowedToPrefs(featuresAllowed)
|
||||
if let toContact = try await apiSetContactPrefs(contactId: contact.contactId, preferences: prefs) {
|
||||
await MainActor.run {
|
||||
contact = toContact
|
||||
chatModel.updateContact(toContact)
|
||||
currentFeaturesAllowed = featuresAllowed
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
logger.error("ContactPreferencesView apiSetContactPrefs error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ContactPreferencesView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContactPreferencesView(
|
||||
contact: Binding.constant(Contact.sampleData),
|
||||
featuresAllowed: ContactFeaturesAllowed.sampleData,
|
||||
currentFeaturesAllowed: ContactFeaturesAllowed.sampleData
|
||||
featuresAllowed: Binding.constant(ContactFeaturesAllowed.sampleData),
|
||||
currentFeaturesAllowed: Binding.constant(ContactFeaturesAllowed.sampleData),
|
||||
savePreferences: {}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,12 @@ struct AddGroupMembersViewCommon: View {
|
||||
let count = selectedContacts.count
|
||||
Section {
|
||||
if creatingGroup {
|
||||
groupPreferencesButton($groupInfo, true)
|
||||
GroupPreferencesButton(
|
||||
groupInfo: $groupInfo,
|
||||
preferences: groupInfo.fullGroupPreferences,
|
||||
currentPreferences: groupInfo.fullGroupPreferences,
|
||||
creatingGroup: true
|
||||
)
|
||||
}
|
||||
rolePicker()
|
||||
inviteMembersButton()
|
||||
|
||||
@@ -87,7 +87,7 @@ struct GroupChatInfoView: View {
|
||||
if groupInfo.groupProfile.description != nil || (groupInfo.isOwner && groupInfo.businessChat == nil) {
|
||||
addOrEditWelcomeMessage()
|
||||
}
|
||||
groupPreferencesButton($groupInfo)
|
||||
GroupPreferencesButton(groupInfo: $groupInfo, preferences: groupInfo.fullGroupPreferences, currentPreferences: groupInfo.fullGroupPreferences)
|
||||
if members.filter({ $0.wrapped.memberCurrent }).count <= SMALL_GROUPS_RCPS_MEM_LIMIT {
|
||||
sendReceiptsOption()
|
||||
} else {
|
||||
@@ -439,7 +439,7 @@ struct GroupChatInfoView: View {
|
||||
}
|
||||
|
||||
private func memberInfoView(_ groupMember: GMember) -> some View {
|
||||
GroupMemberInfoView(groupInfo: groupInfo, groupMember: groupMember)
|
||||
GroupMemberInfoView(groupInfo: groupInfo, chat: chat, groupMember: groupMember)
|
||||
.navigationBarHidden(false)
|
||||
}
|
||||
|
||||
@@ -654,27 +654,72 @@ func deleteGroupAlertMessage(_ groupInfo: GroupInfo) -> Text {
|
||||
)
|
||||
}
|
||||
|
||||
func groupPreferencesButton(_ groupInfo: Binding<GroupInfo>, _ creatingGroup: Bool = false) -> some View {
|
||||
let label: LocalizedStringKey = groupInfo.wrappedValue.businessChat == nil ? "Group preferences" : "Chat preferences"
|
||||
return NavigationLink {
|
||||
GroupPreferencesView(
|
||||
groupInfo: groupInfo,
|
||||
preferences: groupInfo.wrappedValue.fullGroupPreferences,
|
||||
currentPreferences: groupInfo.wrappedValue.fullGroupPreferences,
|
||||
creatingGroup: creatingGroup
|
||||
)
|
||||
.navigationBarTitle(label)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
} label: {
|
||||
if creatingGroup {
|
||||
Text("Set group preferences")
|
||||
} else {
|
||||
Label(label, systemImage: "switch.2")
|
||||
struct GroupPreferencesButton: View {
|
||||
@Binding var groupInfo: GroupInfo
|
||||
@State var preferences: FullGroupPreferences
|
||||
@State var currentPreferences: FullGroupPreferences
|
||||
var creatingGroup: Bool = false
|
||||
|
||||
private var label: LocalizedStringKey {
|
||||
groupInfo.businessChat == nil ? "Group preferences" : "Chat preferences"
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationLink {
|
||||
GroupPreferencesView(
|
||||
groupInfo: $groupInfo,
|
||||
preferences: $preferences,
|
||||
currentPreferences: currentPreferences,
|
||||
creatingGroup: creatingGroup,
|
||||
savePreferences: savePreferences
|
||||
)
|
||||
.navigationBarTitle(label)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.onDisappear {
|
||||
let saveText = NSLocalizedString(
|
||||
creatingGroup ? "Save" : "Save and notify group members",
|
||||
comment: "alert button"
|
||||
)
|
||||
|
||||
if groupInfo.fullGroupPreferences != preferences {
|
||||
showAlert(
|
||||
title: NSLocalizedString("Save preferences?", comment: "alert title"),
|
||||
buttonTitle: saveText,
|
||||
buttonAction: { savePreferences() },
|
||||
cancelButton: true
|
||||
)
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
if creatingGroup {
|
||||
Text("Set group preferences")
|
||||
} else {
|
||||
Label(label, systemImage: "switch.2")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func savePreferences() {
|
||||
Task {
|
||||
do {
|
||||
var gp = groupInfo.groupProfile
|
||||
gp.groupPreferences = toGroupPreferences(preferences)
|
||||
let gInfo = try await apiUpdateGroup(groupInfo.groupId, gp)
|
||||
await MainActor.run {
|
||||
groupInfo = gInfo
|
||||
ChatModel.shared.updateGroup(gInfo)
|
||||
currentPreferences = preferences
|
||||
}
|
||||
} catch {
|
||||
logger.error("GroupPreferencesView apiUpdateGroup error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
func cantInviteIncognitoAlert() -> Alert {
|
||||
Alert(
|
||||
title: Text("Can't invite contacts!"),
|
||||
|
||||
@@ -14,6 +14,7 @@ struct GroupMemberInfoView: View {
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Environment(\.dismiss) var dismiss: DismissAction
|
||||
@State var groupInfo: GroupInfo
|
||||
@ObservedObject var chat: Chat
|
||||
@ObservedObject var groupMember: GMember
|
||||
var navigation: Bool = false
|
||||
@State private var connectionStats: ConnectionStats? = nil
|
||||
@@ -261,6 +262,11 @@ struct GroupMemberInfoView: View {
|
||||
ProgressView().scaleEffect(2)
|
||||
}
|
||||
}
|
||||
.onChange(of: chat.chatInfo) { c in
|
||||
if case let .group(gI) = chat.chatInfo {
|
||||
groupInfo = gI
|
||||
}
|
||||
}
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
|
||||
@@ -758,6 +764,7 @@ struct GroupMemberInfoView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GroupMemberInfoView(
|
||||
groupInfo: GroupInfo.sampleData,
|
||||
chat: Chat.sampleData,
|
||||
groupMember: GMember.sampleData
|
||||
)
|
||||
}
|
||||
|
||||
@@ -20,9 +20,10 @@ struct GroupPreferencesView: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Binding var groupInfo: GroupInfo
|
||||
@State var preferences: FullGroupPreferences
|
||||
@State var currentPreferences: FullGroupPreferences
|
||||
@Binding var preferences: FullGroupPreferences
|
||||
var currentPreferences: FullGroupPreferences
|
||||
let creatingGroup: Bool
|
||||
let savePreferences: () -> Void
|
||||
@State private var showSaveDialogue = false
|
||||
|
||||
var body: some View {
|
||||
@@ -68,7 +69,10 @@ struct GroupPreferencesView: View {
|
||||
savePreferences()
|
||||
dismiss()
|
||||
}
|
||||
Button("Exit without saving") { dismiss() }
|
||||
Button("Exit without saving") {
|
||||
preferences = currentPreferences
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,32 +136,16 @@ struct GroupPreferencesView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func savePreferences() {
|
||||
Task {
|
||||
do {
|
||||
var gp = groupInfo.groupProfile
|
||||
gp.groupPreferences = toGroupPreferences(preferences)
|
||||
let gInfo = try await apiUpdateGroup(groupInfo.groupId, gp)
|
||||
await MainActor.run {
|
||||
groupInfo = gInfo
|
||||
chatModel.updateGroup(gInfo)
|
||||
currentPreferences = preferences
|
||||
}
|
||||
} catch {
|
||||
logger.error("GroupPreferencesView apiUpdateGroup error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GroupPreferencesView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GroupPreferencesView(
|
||||
groupInfo: Binding.constant(GroupInfo.sampleData),
|
||||
preferences: FullGroupPreferences.sampleData,
|
||||
preferences: Binding.constant(FullGroupPreferences.sampleData),
|
||||
currentPreferences: FullGroupPreferences.sampleData,
|
||||
creatingGroup: false
|
||||
creatingGroup: false,
|
||||
savePreferences: {}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,6 @@ struct ChooseServerOperators: View {
|
||||
var onboarding: Bool
|
||||
@State private var serverOperators: [ServerOperator] = []
|
||||
@State private var selectedOperatorIds = Set<Int64>()
|
||||
@State private var reviewConditionsNavLinkActive = false
|
||||
@State private var sheetItem: ChooseServerOperatorsSheet? = nil
|
||||
@State private var notificationsModeNavLinkActive = false
|
||||
@State private var justOpened = true
|
||||
@@ -79,7 +78,7 @@ struct ChooseServerOperators: View {
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
|
||||
if onboarding {
|
||||
title.padding(.top, 50)
|
||||
title.padding(.top, 25)
|
||||
} else {
|
||||
title
|
||||
}
|
||||
@@ -92,11 +91,14 @@ struct ChooseServerOperators: View {
|
||||
ForEach(serverOperators) { srvOperator in
|
||||
operatorCheckView(srvOperator)
|
||||
}
|
||||
Text("You can configure servers via settings.")
|
||||
.font(.footnote)
|
||||
.multilineTextAlignment(.center)
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
.padding(.horizontal, 32)
|
||||
VStack {
|
||||
Text("SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.").padding(.bottom, 8)
|
||||
Text("You can configure servers via settings.")
|
||||
}
|
||||
.font(.footnote)
|
||||
.multilineTextAlignment(.center)
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
.padding(.horizontal, 16)
|
||||
|
||||
Spacer()
|
||||
|
||||
@@ -166,8 +168,9 @@ struct ChooseServerOperators: View {
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
.padding(onboarding ? 25 : 16)
|
||||
}
|
||||
|
||||
@@ -214,23 +217,15 @@ struct ChooseServerOperators: View {
|
||||
}
|
||||
|
||||
private func reviewConditionsButton() -> some View {
|
||||
ZStack {
|
||||
Button {
|
||||
reviewConditionsNavLinkActive = true
|
||||
} label: {
|
||||
Text("Review conditions")
|
||||
}
|
||||
.buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty))
|
||||
.disabled(selectedOperatorIds.isEmpty)
|
||||
|
||||
NavigationLink(isActive: $reviewConditionsNavLinkActive) {
|
||||
reviewConditionsDestinationView()
|
||||
} label: {
|
||||
EmptyView()
|
||||
}
|
||||
.frame(width: 1, height: 1)
|
||||
.hidden()
|
||||
NavigationLink("Review conditions") {
|
||||
reviewConditionsView()
|
||||
.navigationTitle("Conditions of use")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
.buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty))
|
||||
.disabled(selectedOperatorIds.isEmpty)
|
||||
}
|
||||
|
||||
private func setOperatorsButton() -> some View {
|
||||
@@ -309,20 +304,12 @@ struct ChooseServerOperators: View {
|
||||
.modifier(ThemedBackground())
|
||||
}
|
||||
|
||||
private func reviewConditionsDestinationView() -> some View {
|
||||
reviewConditionsView()
|
||||
.navigationTitle("Conditions of use")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
|
||||
@ViewBuilder private func reviewConditionsView() -> some View {
|
||||
let operatorsWithConditionsAccepted = ChatModel.shared.conditions.serverOperators.filter { $0.conditionsAcceptance.conditionsAccepted }
|
||||
let acceptForOperators = selectedOperators.filter { !$0.conditionsAcceptance.conditionsAccepted }
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
if !operatorsWithConditionsAccepted.isEmpty {
|
||||
Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
Text("Conditions are already accepted for these operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
Text("The same conditions will apply to operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
} else {
|
||||
Text("Conditions will be accepted for operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
@@ -409,26 +396,53 @@ struct ChooseServerOperators: View {
|
||||
let operatorsPostLink = URL(string: "https://simplex.chat/blog/20241125-servers-operated-by-flux-true-privacy-and-decentralization-for-all-users.html")!
|
||||
|
||||
struct ChooseServerOperatorsInfoView: View {
|
||||
@Environment(\.colorScheme) var colorScheme: ColorScheme
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Server operators")
|
||||
.font(.largeTitle)
|
||||
.bold()
|
||||
.padding(.vertical)
|
||||
ScrollView {
|
||||
VStack(alignment: .leading) {
|
||||
Group {
|
||||
Text("The app protects your privacy by using different operators in each conversation.")
|
||||
Text("When more than one operator is enabled, none of them has metadata to learn who communicates with whom.")
|
||||
Text("For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.")
|
||||
NavigationView {
|
||||
List {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
Text("The app protects your privacy by using different operators in each conversation.")
|
||||
Text("When more than one operator is enabled, none of them has metadata to learn who communicates with whom.")
|
||||
Text("For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.")
|
||||
}
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.listRowBackground(Color.clear)
|
||||
.listRowSeparator(.hidden)
|
||||
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
.padding(.top)
|
||||
|
||||
Section {
|
||||
ForEach(ChatModel.shared.conditions.serverOperators) { op in
|
||||
operatorInfoNavLinkView(op)
|
||||
}
|
||||
.padding(.bottom)
|
||||
} header: {
|
||||
Text("About operators")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
.navigationTitle("Server operators")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
}
|
||||
|
||||
private func operatorInfoNavLinkView(_ op: ServerOperator) -> some View {
|
||||
NavigationLink() {
|
||||
OperatorInfoView(serverOperator: op)
|
||||
.navigationBarTitle("Network operator")
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
} label: {
|
||||
HStack {
|
||||
Image(op.logo(colorScheme))
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 24, height: 24)
|
||||
Text(op.tradeName)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
|
||||
.modifier(ThemedBackground())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -136,7 +136,6 @@ struct CreateFirstProfile: View {
|
||||
.multilineTextAlignment(.center)
|
||||
}
|
||||
.frame(maxWidth: .infinity) // Ensures it takes up the full width
|
||||
.padding(.top, 25)
|
||||
.padding(.horizontal, 10)
|
||||
|
||||
HStack {
|
||||
|
||||
@@ -22,7 +22,7 @@ struct SetNotificationsMode: View {
|
||||
Text("Push notifications")
|
||||
.font(.largeTitle)
|
||||
.bold()
|
||||
.padding(.top, 50)
|
||||
.padding(.top, 25)
|
||||
|
||||
infoText()
|
||||
|
||||
|
||||
@@ -331,9 +331,12 @@ struct OperatorInfoView: View {
|
||||
Text(d)
|
||||
}
|
||||
}
|
||||
Link(serverOperator.info.website.absoluteString, destination: serverOperator.info.website)
|
||||
}
|
||||
Section {
|
||||
Link("\(serverOperator.info.website)", destination: URL(string: serverOperator.info.website)!)
|
||||
if let selfhost = serverOperator.info.selfhost {
|
||||
Section {
|
||||
Link(selfhost.text, destination: selfhost.link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -421,7 +424,6 @@ struct SingleOperatorUsageConditionsView: View {
|
||||
@Binding var userServers: [UserOperatorServers]
|
||||
@Binding var serverErrors: [UserServersError]
|
||||
var operatorIndex: Int
|
||||
@State private var usageConditionsNavLinkActive: Bool = false
|
||||
|
||||
var body: some View {
|
||||
viewBody()
|
||||
@@ -433,52 +435,45 @@ struct SingleOperatorUsageConditionsView: View {
|
||||
|
||||
// In current UI implementation this branch doesn't get shown - as conditions can't be opened from inside operator once accepted
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
Group {
|
||||
viewHeader()
|
||||
ConditionsTextView()
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
viewHeader()
|
||||
ConditionsTextView()
|
||||
}
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
.padding(.horizontal)
|
||||
.frame(maxHeight: .infinity)
|
||||
|
||||
} else if !operatorsWithConditionsAccepted.isEmpty {
|
||||
|
||||
NavigationView {
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
Group {
|
||||
viewHeader()
|
||||
Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
Text("The same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.")
|
||||
conditionsAppliedToOtherOperatorsText()
|
||||
usageConditionsNavLinkButton()
|
||||
viewHeader()
|
||||
Text("Conditions are already accepted for these operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
|
||||
Text("The same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.")
|
||||
conditionsAppliedToOtherOperatorsText()
|
||||
Spacer()
|
||||
|
||||
Spacer()
|
||||
|
||||
acceptConditionsButton()
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
acceptConditionsButton()
|
||||
usageConditionsNavLinkButton()
|
||||
}
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
.padding(.horizontal)
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
Group {
|
||||
viewHeader()
|
||||
Text("To use the servers of **\(userServers[operatorIndex].operator_.legalName_)**, accept conditions of use.")
|
||||
conditionsAppliedToOtherOperatorsText()
|
||||
ConditionsTextView()
|
||||
acceptConditionsButton()
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
viewHeader()
|
||||
Text("To use the servers of **\(userServers[operatorIndex].operator_.legalName_)**, accept conditions of use.")
|
||||
conditionsAppliedToOtherOperatorsText()
|
||||
ConditionsTextView()
|
||||
acceptConditionsButton()
|
||||
.padding(.bottom)
|
||||
.padding(.bottom)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
.frame(maxHeight: .infinity)
|
||||
|
||||
}
|
||||
@@ -545,31 +540,16 @@ struct SingleOperatorUsageConditionsView: View {
|
||||
}
|
||||
|
||||
private func usageConditionsNavLinkButton() -> some View {
|
||||
ZStack {
|
||||
Button {
|
||||
usageConditionsNavLinkActive = true
|
||||
} label: {
|
||||
Text("View conditions")
|
||||
}
|
||||
|
||||
NavigationLink(isActive: $usageConditionsNavLinkActive) {
|
||||
usageConditionsDestinationView()
|
||||
} label: {
|
||||
EmptyView()
|
||||
}
|
||||
.frame(width: 1, height: 1)
|
||||
.hidden()
|
||||
NavigationLink("View conditions") {
|
||||
ConditionsTextView()
|
||||
.padding()
|
||||
.navigationTitle("Conditions of use")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
}
|
||||
|
||||
private func usageConditionsDestinationView() -> some View {
|
||||
ConditionsTextView()
|
||||
.padding()
|
||||
.padding(.bottom)
|
||||
.navigationTitle("Conditions of use")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.font(.callout)
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -566,6 +566,10 @@
|
||||
<target>За SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1533,8 +1537,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5762,7 +5766,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Запази и уведоми контакта</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5796,7 +5800,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Запази настройките?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6376,6 +6380,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX Адрес</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Сигурността на SimpleX Chat беше одитирана от Trail of Bits.</target>
|
||||
@@ -8118,6 +8126,10 @@ Repeat connection request?</source>
|
||||
<target>обаждането прието</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>админ</target>
|
||||
@@ -8304,7 +8316,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>свързване…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -8788,6 +8800,10 @@ Repeat connection request?</source>
|
||||
<target>ви острани</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>запазено</target>
|
||||
|
||||
@@ -548,6 +548,10 @@
|
||||
<target>O SimpleX chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1488,8 +1492,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5572,7 +5576,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Uložit a upozornit kontakt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5606,7 +5610,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Uložit předvolby?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6174,6 +6178,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX Adresa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Zabezpečení SimpleX chatu bylo auditováno společností Trail of Bits.</target>
|
||||
@@ -7849,6 +7857,10 @@ Repeat connection request?</source>
|
||||
<target>přijatý hovor</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>správce</target>
|
||||
@@ -8028,7 +8040,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>připojení…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -8503,6 +8515,10 @@ Repeat connection request?</source>
|
||||
<target>odstranil vás</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>Über SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Akzent</target>
|
||||
@@ -1602,8 +1606,8 @@
|
||||
<target>Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6030,7 +6034,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Speichern und Kontakt benachrichtigen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6065,7 +6069,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Präferenzen speichern?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6688,6 +6692,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>SimpleX-Adresse</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<target>SimpleX-Chat und Flux haben vereinbart, die von Flux betriebenen Server in die App aufzunehmen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.</target>
|
||||
@@ -8517,6 +8526,10 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<target>Anruf angenommen</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>Admin</target>
|
||||
@@ -8705,7 +8718,7 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>Verbinde…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9199,6 +9212,10 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<target>hat Sie aus der Gruppe entfernt</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>abgespeichert</target>
|
||||
|
||||
@@ -577,6 +577,11 @@
|
||||
<target>About SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<target>About operators</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Accent</target>
|
||||
@@ -1612,9 +1617,9 @@
|
||||
<target>Conditions are accepted for the operator(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<target>Conditions are already accepted for following operator(s): **%@**.</target>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Conditions are already accepted for these operator(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -6051,7 +6056,7 @@ Enable in *Network & servers* settings.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Save and notify contact</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6086,7 +6091,7 @@ Enable in *Network & servers* settings.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Save preferences?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6709,6 +6714,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>SimpleX Address</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<target>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>SimpleX Chat security was audited by Trail of Bits.</target>
|
||||
@@ -8541,6 +8551,11 @@ Repeat connection request?</target>
|
||||
<target>accepted call</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<target>accepted invitation</target>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>admin</target>
|
||||
@@ -8729,7 +8744,7 @@ Repeat connection request?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>connecting…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9223,6 +9238,11 @@ Repeat connection request?</target>
|
||||
<target>removed you</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<target>requested to connect</target>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>saved</target>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>Sobre SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Color</target>
|
||||
@@ -1602,8 +1606,8 @@
|
||||
<target>Las condiciones se han aceptado para el(los) operador(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6030,7 +6034,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Guardar y notificar contacto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6065,7 +6069,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>¿Guardar preferencias?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6688,6 +6692,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Dirección SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<target>Simplex Chat y Flux han acordado incluir servidores operados por Flux en la aplicación</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>La seguridad de SimpleX Chat ha sido auditada por Trail of Bits.</target>
|
||||
@@ -8517,6 +8526,10 @@ Repeat connection request?</source>
|
||||
<target>llamada aceptada</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>administrador</target>
|
||||
@@ -8705,7 +8718,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>conectando…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9199,6 +9212,10 @@ Repeat connection request?</source>
|
||||
<target>te ha expulsado</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>guardado</target>
|
||||
|
||||
@@ -543,6 +543,10 @@
|
||||
<target>Tietoja SimpleX Chatistä</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1481,8 +1485,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5560,7 +5564,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Tallenna ja ilmoita kontaktille</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5594,7 +5598,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Tallenna asetukset?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6161,6 +6165,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX-osoite</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Trail of Bits on tarkastanut SimpleX Chatin tietoturvan.</target>
|
||||
@@ -7834,6 +7842,10 @@ Repeat connection request?</source>
|
||||
<target>hyväksytty puhelu</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>ylläpitäjä</target>
|
||||
@@ -8012,7 +8024,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>yhdistää…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -8488,6 +8500,10 @@ Repeat connection request?</source>
|
||||
<target>poisti sinut</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -572,6 +572,10 @@
|
||||
<target>À propos de SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Principale</target>
|
||||
@@ -1585,8 +1589,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5968,7 +5972,7 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Enregistrer et en informer le contact</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6003,7 +6007,7 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Enregistrer les préférences ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6619,6 +6623,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Adresse SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>La sécurité de SimpleX Chat a été auditée par Trail of Bits.</target>
|
||||
@@ -8421,6 +8429,10 @@ Répéter la demande de connexion ?</target>
|
||||
<target>appel accepté</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>admin</target>
|
||||
@@ -8609,7 +8621,7 @@ Répéter la demande de connexion ?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>connexion…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9102,6 +9114,10 @@ Répéter la demande de connexion ?</target>
|
||||
<target>vous a retiré</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>enregistré</target>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>A SimpleX Chatről</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Kiemelés</target>
|
||||
@@ -1612,8 +1616,8 @@
|
||||
<target>A következő üzemeltető(k) számára elfogadott feltételek: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6051,7 +6055,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Mentés és az ismerős értesítése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6086,7 +6090,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Beállítások mentése?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6709,6 +6713,10 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<target>SimpleX-cím</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>A SimpleX Chat biztonsága a Trail of Bits által lett auditálva.</target>
|
||||
@@ -8541,6 +8549,10 @@ Kapcsolatkérés megismétlése?</target>
|
||||
<target>elfogadott hívás</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>adminisztrátor</target>
|
||||
@@ -8729,7 +8741,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>kapcsolódás…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9223,6 +9235,10 @@ Kapcsolatkérés megismétlése?</target>
|
||||
<target>eltávolította Önt</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>mentett</target>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>Riguardo SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Principale</target>
|
||||
@@ -1612,8 +1616,8 @@
|
||||
<target>Le condizioni sono state accettate per gli operatori: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Le condizioni sono già state accettate per i seguenti operatori: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6051,7 +6055,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Salva e avvisa il contatto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6086,7 +6090,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Salvare le preferenze?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6709,6 +6713,10 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Indirizzo SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>La sicurezza di SimpleX Chat è stata verificata da Trail of Bits.</target>
|
||||
@@ -8541,6 +8549,10 @@ Ripetere la richiesta di connessione?</target>
|
||||
<target>chiamata accettata</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>amministratore</target>
|
||||
@@ -8729,7 +8741,7 @@ Ripetere la richiesta di connessione?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>in connessione…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9223,6 +9235,10 @@ Ripetere la richiesta di connessione?</target>
|
||||
<target>ti ha rimosso/a</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>salvato</target>
|
||||
|
||||
@@ -560,6 +560,10 @@
|
||||
<target>SimpleX Chat について</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1511,8 +1515,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5609,7 +5613,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>保存して、連絡先にに知らせる</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5643,7 +5647,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>この設定でよろしいですか?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6203,6 +6207,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleXアドレス</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>SimpleX Chat のセキュリティは Trail of Bits によって監査されました。</target>
|
||||
@@ -7876,6 +7884,10 @@ Repeat connection request?</source>
|
||||
<target>受けた通話</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>管理者</target>
|
||||
@@ -8054,7 +8066,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>接続待ち…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -8530,6 +8542,10 @@ Repeat connection request?</source>
|
||||
<target>あなたを除名しました</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>Over SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Accent</target>
|
||||
@@ -1612,8 +1616,8 @@
|
||||
<target>Voorwaarden worden geaccepteerd voor de operator(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6051,7 +6055,7 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Opslaan en Contact melden</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6086,7 +6090,7 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Voorkeuren opslaan?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6709,6 +6713,11 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<target>SimpleX adres</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<target>Simplex-chat en flux hebben een overeenkomst gemaakt om door flux geëxploiteerde servers in de app op te nemen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.</target>
|
||||
@@ -8541,6 +8550,10 @@ Verbindingsverzoek herhalen?</target>
|
||||
<target>geaccepteerde oproep</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>Beheerder</target>
|
||||
@@ -8729,7 +8742,7 @@ Verbindingsverzoek herhalen?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>Verbinden…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9223,6 +9236,10 @@ Verbindingsverzoek herhalen?</target>
|
||||
<target>heeft je verwijderd</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>opgeslagen</target>
|
||||
|
||||
@@ -572,6 +572,10 @@
|
||||
<target>O SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Akcent</target>
|
||||
@@ -1580,8 +1584,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5958,7 +5962,7 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Zapisz i powiadom kontakt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5993,7 +5997,7 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Zapisać preferencje?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6609,6 +6613,10 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Adres SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Bezpieczeństwo SimpleX Chat zostało zaudytowane przez Trail of Bits.</target>
|
||||
@@ -8408,6 +8416,10 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<target>zaakceptowane połączenie</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>administrator</target>
|
||||
@@ -8596,7 +8608,7 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>łączenie…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9089,6 +9101,10 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<target>usunął cię</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>zapisane</target>
|
||||
|
||||
@@ -577,6 +577,11 @@
|
||||
<target>Информация о SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<target>Об операторах</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Акцент</target>
|
||||
@@ -1612,8 +1617,8 @@
|
||||
<target>Условия приняты для оператора(ов): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Условия уже приняты для следующих оператора(ов): **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6050,7 +6055,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Сохранить и уведомить контакт</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6085,7 +6090,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Сохранить предпочтения?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6708,6 +6713,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Адрес SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<target>SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Безопасность SimpleX Chat была проверена Trail of Bits.</target>
|
||||
@@ -8145,7 +8155,7 @@ Repeat join request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can configure servers via settings." xml:space="preserve">
|
||||
<source>You can configure servers via settings.</source>
|
||||
<target>Вы можете сконфигурировать серверы через настройки.</target>
|
||||
<target>Вы можете настроить серверы позже.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can create it later" xml:space="preserve">
|
||||
@@ -8540,6 +8550,11 @@ Repeat connection request?</source>
|
||||
<target>принятый звонок</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<target>принятое приглашение</target>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>админ</target>
|
||||
@@ -8728,7 +8743,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>соединяется…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9222,6 +9237,11 @@ Repeat connection request?</source>
|
||||
<target>удалил(а) Вас из группы</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<target>запрошено соединение</target>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>сохранено</target>
|
||||
|
||||
@@ -536,6 +536,10 @@
|
||||
<target>เกี่ยวกับ SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1473,8 +1477,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5537,7 +5541,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>บันทึกและแจ้งผู้ติดต่อ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5571,7 +5575,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>บันทึกการตั้งค่า?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6135,6 +6139,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>ที่อยู่ SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>ความปลอดภัยของ SimpleX Chat ได้รับการตรวจสอบโดย Trail of Bits</target>
|
||||
@@ -7802,6 +7810,10 @@ Repeat connection request?</source>
|
||||
<target>รับสายแล้ว</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>ผู้ดูแลระบบ</target>
|
||||
@@ -7980,7 +7992,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>กำลังเชื่อมต่อ…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -8454,6 +8466,10 @@ Repeat connection request?</source>
|
||||
<target>ลบคุณออกแล้ว</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -572,6 +572,10 @@
|
||||
<target>SimpleX Chat hakkında</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Ana renk</target>
|
||||
@@ -1585,8 +1589,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5968,7 +5972,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Kaydet ve kişilere bildir</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6003,7 +6007,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Tercihler kaydedilsin mi?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6619,6 +6623,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX Adresi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>SimpleX Chat güvenliği Trails of Bits tarafından denetlenmiştir.</target>
|
||||
@@ -8421,6 +8429,10 @@ Bağlantı isteği tekrarlansın mı?</target>
|
||||
<target>kabul edilen arama</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>yönetici</target>
|
||||
@@ -8609,7 +8621,7 @@ Bağlantı isteği tekrarlansın mı?</target>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>bağlanılıyor…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9102,6 +9114,10 @@ Bağlantı isteği tekrarlansın mı?</target>
|
||||
<target>sen kaldırıldın</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>kaydedildi</target>
|
||||
|
||||
@@ -577,6 +577,10 @@
|
||||
<target>Про чат SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>Акцент</target>
|
||||
@@ -1602,8 +1606,8 @@
|
||||
<target>Для оператора(ів) приймаються умови: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<target>Умови вже прийняті для наступних операторів: **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6030,7 +6034,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>Зберегти та повідомити контакт</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -6065,7 +6069,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>Зберегти настройки?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6688,6 +6692,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Адреса SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>Безпека SimpleX Chat була перевірена компанією Trail of Bits.</target>
|
||||
@@ -8517,6 +8525,10 @@ Repeat connection request?</source>
|
||||
<target>прийнято виклик</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>адмін</target>
|
||||
@@ -8705,7 +8717,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>з'єднання…</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9199,6 +9211,10 @@ Repeat connection request?</source>
|
||||
<target>прибрали вас</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>збережено</target>
|
||||
|
||||
@@ -566,6 +566,10 @@
|
||||
<target>关于SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About operators" xml:space="preserve">
|
||||
<source>About operators</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent" xml:space="preserve">
|
||||
<source>Accent</source>
|
||||
<target>强调</target>
|
||||
@@ -1571,8 +1575,8 @@
|
||||
<source>Conditions are accepted for the operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for following operator(s): **%@**.</source>
|
||||
<trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
|
||||
<source>Conditions are already accepted for these operator(s): **%@**.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conditions of use" xml:space="preserve">
|
||||
@@ -5921,7 +5925,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
<target>保存并通知联系人</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify group members" xml:space="preserve">
|
||||
<source>Save and notify group members</source>
|
||||
@@ -5956,7 +5960,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save preferences?" xml:space="preserve">
|
||||
<source>Save preferences?</source>
|
||||
<target>保存偏好设置?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save profile password" xml:space="preserve">
|
||||
<source>Save profile password</source>
|
||||
@@ -6566,6 +6570,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX 地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
|
||||
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX Chat security was audited by Trail of Bits.</source>
|
||||
<target>SimpleX Chat 的安全性 由 Trail of Bits 审核。</target>
|
||||
@@ -8354,6 +8362,10 @@ Repeat connection request?</source>
|
||||
<target>已接受通话</target>
|
||||
<note>call status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted invitation" xml:space="preserve">
|
||||
<source>accepted invitation</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>管理员</target>
|
||||
@@ -8542,7 +8554,7 @@ Repeat connection request?</source>
|
||||
<trans-unit id="connecting…" xml:space="preserve">
|
||||
<source>connecting…</source>
|
||||
<target>连接中……</target>
|
||||
<note>chat list item title</note>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connection established" xml:space="preserve">
|
||||
<source>connection established</source>
|
||||
@@ -9035,6 +9047,10 @@ Repeat connection request?</source>
|
||||
<target>已将您移除</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="requested to connect" xml:space="preserve">
|
||||
<source>requested to connect</source>
|
||||
<note>chat list item title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>已保存</target>
|
||||
|
||||
@@ -1212,13 +1212,12 @@ public enum ServerProtocol: String, Decodable {
|
||||
public enum OperatorTag: String, Codable {
|
||||
case simplex = "simplex"
|
||||
case flux = "flux"
|
||||
case xyz = "xyz"
|
||||
case demo = "demo"
|
||||
}
|
||||
|
||||
public struct ServerOperatorInfo: Decodable {
|
||||
public struct ServerOperatorInfo {
|
||||
public var description: [String]
|
||||
public var website: String
|
||||
public var website: URL
|
||||
public var selfhost: (text: String, link: URL)? = nil
|
||||
public var logo: String
|
||||
public var largeLogo: String
|
||||
public var logoDarkMode: String
|
||||
@@ -1228,10 +1227,10 @@ public struct ServerOperatorInfo: Decodable {
|
||||
public let operatorsInfo: Dictionary<OperatorTag, ServerOperatorInfo> = [
|
||||
.simplex: ServerOperatorInfo(
|
||||
description: [
|
||||
"SimpleX Chat is the first communication network that has no user profile IDs of any kind, not even random numbers or keys that identify the users.",
|
||||
"SimpleX Chat is the first communication network that has no user profile IDs of any kind, not even random numbers or identity keys.",
|
||||
"SimpleX Chat Ltd develops the communication software for SimpleX network."
|
||||
],
|
||||
website: "https://simplex.chat",
|
||||
website: URL(string: "https://simplex.chat")!,
|
||||
logo: "decentralized",
|
||||
largeLogo: "logo",
|
||||
logoDarkMode: "decentralized-light",
|
||||
@@ -1239,31 +1238,17 @@ public let operatorsInfo: Dictionary<OperatorTag, ServerOperatorInfo> = [
|
||||
),
|
||||
.flux: ServerOperatorInfo(
|
||||
description: [
|
||||
"Flux is the largest decentralized cloud infrastructure, leveraging a global network of user-operated computational nodes.",
|
||||
"Flux offers a powerful, scalable, and affordable platform designed to support individuals, businesses, and cutting-edge technologies like AI. With high uptime and worldwide distribution, Flux ensures reliable, accessible cloud computing for all."
|
||||
"Flux is the largest decentralized cloud, based on a global network of user-operated nodes.",
|
||||
"Flux offers a powerful, scalable, and affordable cutting edge technology platform for all.",
|
||||
"Flux operates servers in SimpleX network to improve its privacy and decentralization."
|
||||
],
|
||||
website: "https://runonflux.com",
|
||||
website: URL(string: "https://runonflux.com")!,
|
||||
selfhost: (text: "Self-host SimpleX servers on Flux", link: URL(string: "https://home.runonflux.io/apps/marketplace?q=simplex")!),
|
||||
logo: "flux_logo_symbol",
|
||||
largeLogo: "flux_logo",
|
||||
logoDarkMode: "flux_logo_symbol",
|
||||
largeLogoDarkMode: "flux_logo-light"
|
||||
),
|
||||
.xyz: ServerOperatorInfo(
|
||||
description: ["XYZ servers"],
|
||||
website: "XYZ website",
|
||||
logo: "shield",
|
||||
largeLogo: "logo",
|
||||
logoDarkMode: "shield",
|
||||
largeLogoDarkMode: "logo-light"
|
||||
),
|
||||
.demo: ServerOperatorInfo(
|
||||
description: ["Demo operator"],
|
||||
website: "Demo website",
|
||||
logo: "decentralized",
|
||||
largeLogo: "logo",
|
||||
logoDarkMode: "decentralized-light",
|
||||
largeLogoDarkMode: "logo-light"
|
||||
)
|
||||
]
|
||||
|
||||
public struct UsageConditions: Decodable {
|
||||
@@ -1358,7 +1343,7 @@ public struct ServerOperator: Identifiable, Equatable, Codable {
|
||||
|
||||
public static let dummyOperatorInfo = ServerOperatorInfo(
|
||||
description: ["Default"],
|
||||
website: "Default",
|
||||
website: URL(string: "https://simplex.chat")!,
|
||||
logo: "decentralized",
|
||||
largeLogo: "logo",
|
||||
logoDarkMode: "decentralized-light",
|
||||
@@ -1384,30 +1369,6 @@ public struct ServerOperator: Identifiable, Equatable, Codable {
|
||||
smpRoles: ServerRoles(storage: true, proxy: true),
|
||||
xftpRoles: ServerRoles(storage: true, proxy: true)
|
||||
)
|
||||
|
||||
public static var sampleData2 = ServerOperator(
|
||||
operatorId: 2,
|
||||
operatorTag: .xyz,
|
||||
tradeName: "XYZ",
|
||||
legalName: nil,
|
||||
serverDomains: ["xyz.com"],
|
||||
conditionsAcceptance: .required(deadline: nil),
|
||||
enabled: false,
|
||||
smpRoles: ServerRoles(storage: false, proxy: true),
|
||||
xftpRoles: ServerRoles(storage: false, proxy: true)
|
||||
)
|
||||
|
||||
public static var sampleData3 = ServerOperator(
|
||||
operatorId: 3,
|
||||
operatorTag: .demo,
|
||||
tradeName: "Demo",
|
||||
legalName: nil,
|
||||
serverDomains: ["demo.com"],
|
||||
conditionsAcceptance: .required(deadline: nil),
|
||||
enabled: false,
|
||||
smpRoles: ServerRoles(storage: true, proxy: false),
|
||||
xftpRoles: ServerRoles(storage: true, proxy: false)
|
||||
)
|
||||
}
|
||||
|
||||
public struct ServerRoles: Equatable, Codable {
|
||||
@@ -2725,7 +2686,7 @@ public struct AppSettings: Codable, Equatable {
|
||||
uiDarkColorScheme: DefaultTheme.SIMPLEX.themeName,
|
||||
uiCurrentThemeIds: nil as [String: String]?,
|
||||
uiThemes: nil as [ThemeOverrides]?,
|
||||
oneHandUI: false,
|
||||
oneHandUI: true,
|
||||
chatBottomBar: true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1782,9 +1782,11 @@ public struct PendingContactConnection: Decodable, NamedChat, Hashable {
|
||||
public var displayName: String {
|
||||
get {
|
||||
if let initiated = pccConnStatus.initiated {
|
||||
return initiated && !viaContactUri
|
||||
return viaContactUri
|
||||
? NSLocalizedString("requested to connect", comment: "chat list item title")
|
||||
: initiated
|
||||
? NSLocalizedString("invited to connect", comment: "chat list item title")
|
||||
: NSLocalizedString("connecting…", comment: "chat list item title")
|
||||
: NSLocalizedString("accepted invitation", comment: "chat list item title")
|
||||
} else {
|
||||
// this should not be in the list
|
||||
return NSLocalizedString("connection established", comment: "chat list item title (it should not be shown")
|
||||
|
||||
@@ -918,7 +918,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Свързване с настолно устройство";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "свързване…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3139,7 +3139,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Запази (и уведоми контактите)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Запази и уведоми контакта";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3157,7 +3157,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Запази паролата в Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Запази настройките?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -729,7 +729,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting server… (error: %@)" = "Připojování k serveru... (chyba: %@)";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "připojení…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2538,7 +2538,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Uložit (a informovat kontakty)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Uložit a upozornit kontakt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2556,7 +2556,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Uložit přístupovou frázi do Klíčenky";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Uložit předvolby?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -863,6 +863,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Ändern";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Chat-Profile wechseln";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Datenbank-Passwort ändern?";
|
||||
|
||||
@@ -891,9 +894,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Chat-Profile wechseln";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "Wechselte die Empfängeradresse von Ihnen";
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Nutzungsbedingungen";
|
||||
@@ -1173,7 +1173,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Mit dem Desktop verbinden";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "Verbinde…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3945,12 +3945,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Sicherere Gruppen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Speichern";
|
||||
@@ -3958,7 +3952,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Speichern (und Kontakte benachrichtigen)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Speichern und Kontakt benachrichtigen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,7 +3973,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Passwort im Schlüsselbund speichern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Präferenzen speichern?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4397,6 +4391,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX address or 1-time link?" = "SimpleX-Adresse oder Einmal-Link?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "SimpleX-Chat und Flux haben vereinbart, die von Flux betriebenen Server in die App aufzunehmen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.";
|
||||
|
||||
@@ -4691,6 +4688,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "Das Profil wird nur mit Ihren Kontakten geteilt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "Der zweite voreingestellte Netzwerk-Betreiber in der App!";
|
||||
|
||||
|
||||
@@ -863,6 +863,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Cambiar";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Cambiar perfil de usuario";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "¿Cambiar contraseña de la base de datos?";
|
||||
|
||||
@@ -891,9 +894,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Cambiar código autodestrucción";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Cambiar perfil de usuario";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "ha cambiado tu servidor de envío";
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Las condiciones se han aceptado para el(los) operador(s): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Condiciones de uso";
|
||||
@@ -1173,7 +1173,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Conectando con ordenador";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "conectando…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3945,12 +3945,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Grupos más seguros";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Las mismas condiciones se aplicarán a el/los operador(es) **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Guardar";
|
||||
@@ -3958,7 +3952,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Guardar (y notificar contactos)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Guardar y notificar contacto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,7 +3973,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Guardar la contraseña en Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "¿Guardar preferencias?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4397,6 +4391,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX address or 1-time link?" = "Dirección SimpleX o enlace de un uso?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "Simplex Chat y Flux han acordado incluir servidores operados por Flux en la aplicación";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "La seguridad de SimpleX Chat ha sido auditada por Trail of Bits.";
|
||||
|
||||
@@ -4691,6 +4688,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "El perfil sólo se comparte con tus contactos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Las mismas condiciones se aplicarán a el/los operador(es) **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "El segundo operador predefinido!";
|
||||
|
||||
|
||||
@@ -711,7 +711,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting server… (error: %@)" = "Yhteyden muodostaminen palvelimeen... (virhe: %@)";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "yhdistää…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2508,7 +2508,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Tallenna (ja ilmoita kontakteille)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Tallenna ja ilmoita kontaktille";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2526,7 +2526,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Tallenna tunnuslause Avainnippuun";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Tallenna asetukset?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -1101,7 +1101,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Connexion au bureau";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "connexion…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3763,7 +3763,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Enregistrer (et en informer les contacts)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Enregistrer et en informer le contact";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3784,7 +3784,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Enregistrer la phrase secrète dans la Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Enregistrer les préférences ?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -878,6 +878,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Változtatás";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Felhasználói profilok megváltoztatása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Adatbázis-jelmondat megváltoztatása?";
|
||||
|
||||
@@ -906,9 +909,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Önmegsemmisító jelkód megváltoztatása";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Felhasználói profilok megváltoztatása";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "cím megváltoztatva";
|
||||
|
||||
@@ -1060,7 +1060,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "A következő üzemeltető(k) számára elfogadott feltételek: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Használati feltételek";
|
||||
@@ -1203,7 +1203,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Kapcsolódás a számítógéphez";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "kapcsolódás…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4008,12 +4008,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Biztonságosabb csoportok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Mentés";
|
||||
@@ -4021,7 +4015,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Mentés és az ismerősök értesítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Mentés és az ismerős értesítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4042,7 +4036,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Jelmondat mentése a kulcstartóba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Beállítások mentése?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4757,6 +4751,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "A profilja csak az ismerőseivel kerül megosztásra.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "A második előre beállított üzemeltető az alkalmazásban!";
|
||||
|
||||
|
||||
@@ -878,6 +878,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Cambia";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Modifica profili utente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Cambiare password del database?";
|
||||
|
||||
@@ -906,9 +909,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Cambia codice di autodistruzione";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Modifica profili utente";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "indirizzo cambiato per te";
|
||||
|
||||
@@ -1060,7 +1060,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Le condizioni sono state accettate per gli operatori: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Le condizioni sono già state accettate per i seguenti operatori: **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Le condizioni sono già state accettate per i seguenti operatori: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Condizioni d'uso";
|
||||
@@ -1203,7 +1203,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Connessione al desktop";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "in connessione…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4008,12 +4008,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Gruppi più sicuri";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Le stesse condizioni si applicheranno agli operatori **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Salva";
|
||||
@@ -4021,7 +4015,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Salva (e avvisa i contatti)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Salva e avvisa il contatto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4042,7 +4036,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Salva password nel portachiavi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Salvare le preferenze?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4757,6 +4751,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "Il profilo è condiviso solo con i tuoi contatti.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Le stesse condizioni si applicheranno agli operatori **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "Il secondo operatore preimpostato nell'app!";
|
||||
|
||||
|
||||
@@ -828,7 +828,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "デスクトップに接続中";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "接続待ち…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2655,7 +2655,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "保存(連絡先に通知)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "保存して、連絡先にに知らせる";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2673,7 +2673,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "パスフレーズをキーチェーンに保存";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "この設定でよろしいですか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -878,6 +878,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Veranderen";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Gebruikersprofielen wijzigen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Wachtwoord database wijzigen?";
|
||||
|
||||
@@ -906,9 +909,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Zelfvernietigings code wijzigen";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Gebruikersprofielen wijzigen";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "adres voor u gewijzigd";
|
||||
|
||||
@@ -1060,7 +1060,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor de operator(s): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Gebruiksvoorwaarden";
|
||||
@@ -1203,7 +1203,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Verbinding maken met desktop";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "Verbinden…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4008,12 +4008,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Veiligere groepen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Dezelfde voorwaarden gelden voor operator(s): **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Opslaan";
|
||||
@@ -4021,7 +4015,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Bewaar (en informeer contacten)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Opslaan en Contact melden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4042,7 +4036,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Sla het wachtwoord op in de Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Voorkeuren opslaan?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4460,6 +4454,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX address or 1-time link?" = "SimpleX adres of eenmalige link?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "Simplex-chat en flux hebben een overeenkomst gemaakt om door flux geëxploiteerde servers in de app op te nemen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.";
|
||||
|
||||
@@ -4757,6 +4754,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "Het profiel wordt alleen gedeeld met uw contacten.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Dezelfde voorwaarden gelden voor operator(s): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "De tweede vooraf ingestelde operator in de app!";
|
||||
|
||||
|
||||
@@ -1086,7 +1086,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Łączenie z komputerem";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "łączenie…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,7 +3736,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Zapisz (i powiadom kontakty)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Zapisz i powiadom kontakt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3757,7 +3757,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Zapisz hasło w pęku kluczy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Zapisać preferencje?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -343,6 +343,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Abort changing address?" = "Прекратить изменение адреса?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"About operators" = "Об операторах";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"About SimpleX Chat" = "Информация о SimpleX Chat";
|
||||
|
||||
@@ -376,6 +379,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Accepted conditions" = "Принятые условия";
|
||||
|
||||
/* chat list item title */
|
||||
"accepted invitation" = "принятое приглашение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Acknowledged" = "Подтверждено";
|
||||
|
||||
@@ -878,6 +884,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Поменять";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Поменять профили";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Поменять пароль базы данных?";
|
||||
|
||||
@@ -906,9 +915,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Изменить код самоуничтожения";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Поменять профили";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "поменял(а) адрес для Вас";
|
||||
|
||||
@@ -1060,7 +1066,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Условия приняты для оператора(ов): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Условия уже приняты для следующих оператора(ов): **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Условия уже приняты для следующих оператора(ов): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Условия использования";
|
||||
@@ -1203,7 +1209,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Подключение к компьютеру";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "соединяется…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3930,6 +3936,9 @@
|
||||
/* chat item action */
|
||||
"Reply" = "Ответить";
|
||||
|
||||
/* chat list item title */
|
||||
"requested to connect" = "запрошено соединение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Required" = "Обязательно";
|
||||
|
||||
@@ -4008,12 +4017,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Более безопасные группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Те же самые условия будут приняты для оператора **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Те же самые условия будут приняты для оператора(ов): **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Сохранить";
|
||||
@@ -4021,7 +4024,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Сохранить (и уведомить контакты)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Сохранить и уведомить контакт";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4042,7 +4045,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Сохранить пароль в Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Сохранить предпочтения?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4460,6 +4463,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX address or 1-time link?" = "Адрес SimpleX или одноразовая ссылка?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "Безопасность SimpleX Chat была проверена Trail of Bits.";
|
||||
|
||||
@@ -4757,6 +4763,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "Профиль отправляется только Вашим контактам.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Те же самые условия будут приняты для оператора **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Те же самые условия будут приняты для оператора(ов): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "Второй оператор серверов в приложении!";
|
||||
|
||||
|
||||
@@ -681,7 +681,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting server… (error: %@)" = "กำลังเชื่อมต่อกับเซิร์ฟเวอร์... (ข้อผิดพลาด: %@)";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "กำลังเชื่อมต่อ…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2439,7 +2439,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "บันทึก (และแจ้งผู้ติดต่อ)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "บันทึกและแจ้งผู้ติดต่อ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2457,7 +2457,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "บันทึกข้อความรหัสผ่านใน Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "บันทึกการตั้งค่า?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -1101,7 +1101,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Bilgisayara bağlanıyor";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "bağlanılıyor…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3763,7 +3763,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Kaydet (ve kişilere bildir)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Kaydet ve kişilere bildir";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3784,7 +3784,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Parolayı Anahtar Zincirinde kaydet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Tercihler kaydedilsin mi?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
@@ -863,6 +863,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Зміна";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Зміна профілів користувачів";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Змінити пароль до бази даних?";
|
||||
|
||||
@@ -891,9 +894,6 @@
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Змінити пароль самознищення";
|
||||
|
||||
/* authentication reason */
|
||||
"Change chat profiles" = "Зміна профілів користувачів";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "змінили для вас адресу";
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
"Conditions are accepted for the operator(s): **%@**." = "Для оператора(ів) приймаються умови: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions are already accepted for following operator(s): **%@**." = "Умови вже прийняті для наступних операторів: **%@**.";
|
||||
"Conditions are already accepted for these operator(s): **%@**." = "Умови вже прийняті для наступних операторів: **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conditions of use" = "Умови використання";
|
||||
@@ -1173,7 +1173,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "Підключення до ПК";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "з'єднання…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3668,9 +3668,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Проксі вимагає пароль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Push-повідомлення";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Push-сповіщення";
|
||||
|
||||
@@ -3948,12 +3945,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Безпечніші групи";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Такі ж умови діятимуть і для оператора **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Такі ж умови будуть застосовуватися до оператора(ів): **%@**.";
|
||||
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Зберегти";
|
||||
@@ -3961,7 +3952,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Зберегти (і повідомити контактам)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "Зберегти та повідомити контакт";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3982,7 +3973,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Збережіть парольну фразу в Keychain";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "Зберегти настройки?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4694,6 +4685,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The profile is only shared with your contacts." = "Профіль доступний лише вашим контактам.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator **%@**." = "Такі ж умови діятимуть і для оператора **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The same conditions will apply to operator(s): **%@**." = "Такі ж умови будуть застосовуватися до оператора(ів): **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second preset operator in the app!" = "Другий попередньо встановлений оператор у застосунку!";
|
||||
|
||||
|
||||
@@ -1059,7 +1059,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Connecting to desktop" = "正连接到桌面";
|
||||
|
||||
/* chat list item title */
|
||||
/* No comment provided by engineer. */
|
||||
"connecting…" = "连接中……";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3634,7 +3634,7 @@
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "保存(并通知联系人)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save and notify contact" = "保存并通知联系人";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3655,7 +3655,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "在钥匙串中保存密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Save preferences?" = "保存偏好设置?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
|
||||
+3
-2
@@ -1895,8 +1895,9 @@ class PendingContactConnection(
|
||||
generalGetString(MR.strings.display_name_connection_established)
|
||||
} else {
|
||||
generalGetString(
|
||||
if (initiated && !viaContactUri) MR.strings.display_name_invited_to_connect
|
||||
else MR.strings.display_name_connecting
|
||||
if (viaContactUri) MR.strings.display_name_requested_to_connect
|
||||
else if (initiated) MR.strings.display_name_invited_to_connect
|
||||
else MR.strings.display_name_accepted_invitation
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-46
@@ -3669,14 +3669,13 @@ enum class ServerProtocol {
|
||||
@Serializable
|
||||
enum class OperatorTag {
|
||||
@SerialName("simplex") SimpleX,
|
||||
@SerialName("flux") Flux,
|
||||
@SerialName("xyz") XYZ,
|
||||
@SerialName("demo") Demo
|
||||
@SerialName("flux") Flux
|
||||
}
|
||||
|
||||
data class ServerOperatorInfo(
|
||||
val description: List<String>,
|
||||
val website: String,
|
||||
val selfhost: Pair<String, String>? = null,
|
||||
val logo: ImageResource,
|
||||
val largeLogo: ImageResource,
|
||||
val logoDarkMode: ImageResource,
|
||||
@@ -3696,31 +3695,17 @@ val operatorsInfo: Map<OperatorTag, ServerOperatorInfo> = mapOf(
|
||||
),
|
||||
OperatorTag.Flux to ServerOperatorInfo(
|
||||
description = listOf(
|
||||
"Flux is the largest decentralized cloud infrastructure, leveraging a global network of user-operated computational nodes.",
|
||||
"Flux offers a powerful, scalable, and affordable platform designed to support individuals, businesses, and cutting-edge technologies like AI. With high uptime and worldwide distribution, Flux ensures reliable, accessible cloud computing for all."
|
||||
"Flux is the largest decentralized cloud, based on a global network of user-operated nodes.",
|
||||
"Flux offers a powerful, scalable, and affordable cutting edge technology platform for all.",
|
||||
"Flux operates servers in SimpleX network to improve its privacy and decentralization."
|
||||
),
|
||||
website = "https://runonflux.com",
|
||||
selfhost = "Self-host SimpleX servers on Flux" to "https://home.runonflux.io/apps/marketplace?q=simplex",
|
||||
logo = MR.images.flux_logo_symbol,
|
||||
largeLogo = MR.images.flux_logo,
|
||||
logoDarkMode = MR.images.flux_logo_symbol,
|
||||
largeLogoDarkMode = MR.images.flux_logo_light
|
||||
),
|
||||
OperatorTag.XYZ to ServerOperatorInfo(
|
||||
description = listOf("XYZ servers"),
|
||||
website = "XYZ website",
|
||||
logo = MR.images.shield,
|
||||
largeLogo = MR.images.logo,
|
||||
logoDarkMode = MR.images.shield,
|
||||
largeLogoDarkMode = MR.images.logo_light
|
||||
),
|
||||
OperatorTag.Demo to ServerOperatorInfo(
|
||||
description = listOf("Demo operator"),
|
||||
website = "Demo website",
|
||||
logo = MR.images.decentralized,
|
||||
largeLogo = MR.images.logo,
|
||||
logoDarkMode = MR.images.decentralized_light,
|
||||
largeLogoDarkMode = MR.images.logo_light
|
||||
)
|
||||
)
|
||||
|
||||
@Serializable
|
||||
@@ -3800,7 +3785,7 @@ data class ServerOperator(
|
||||
companion object {
|
||||
val dummyOperatorInfo = ServerOperatorInfo(
|
||||
description = listOf("Default"),
|
||||
website = "Default",
|
||||
website = "https://simplex.chat",
|
||||
logo = MR.images.decentralized,
|
||||
largeLogo = MR.images.logo,
|
||||
logoDarkMode = MR.images.decentralized_light,
|
||||
@@ -3818,30 +3803,6 @@ data class ServerOperator(
|
||||
smpRoles = ServerRoles(storage = true, proxy = true),
|
||||
xftpRoles = ServerRoles(storage = true, proxy = true)
|
||||
)
|
||||
|
||||
val sampleData2 = ServerOperator(
|
||||
operatorId = 2,
|
||||
operatorTag = OperatorTag.XYZ,
|
||||
tradeName = "XYZ",
|
||||
legalName = null,
|
||||
serverDomains = listOf("xyz.com"),
|
||||
conditionsAcceptance = ConditionsAcceptance.Required(deadline = null),
|
||||
enabled = false,
|
||||
smpRoles = ServerRoles(storage = false, proxy = true),
|
||||
xftpRoles = ServerRoles(storage = false, proxy = true)
|
||||
)
|
||||
|
||||
val sampleData3 = ServerOperator(
|
||||
operatorId = 3,
|
||||
operatorTag = OperatorTag.Demo,
|
||||
tradeName = "Demo",
|
||||
legalName = null,
|
||||
serverDomains = listOf("demo.com"),
|
||||
conditionsAcceptance = ConditionsAcceptance.Required(deadline = null),
|
||||
enabled = false,
|
||||
smpRoles = ServerRoles(storage = true, proxy = false),
|
||||
xftpRoles = ServerRoles(storage = true, proxy = false)
|
||||
)
|
||||
}
|
||||
|
||||
val id: Long
|
||||
|
||||
@@ -609,6 +609,7 @@ fun themedBackgroundBrush(): Brush = Brush.linearGradient(
|
||||
)
|
||||
|
||||
val DEFAULT_PADDING = 20.dp
|
||||
val DEFAULT_ONBOARDING_HORIZONTAL_PADDING = 25.dp
|
||||
val DEFAULT_SPACE_AFTER_ICON = 4.dp
|
||||
val DEFAULT_PADDING_HALF = DEFAULT_PADDING / 2
|
||||
val DEFAULT_BOTTOM_PADDING = 48.dp
|
||||
|
||||
+2
-2
@@ -117,7 +117,7 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) {
|
||||
ColumnWithScrollBar {
|
||||
val displayName = rememberSaveable { mutableStateOf("") }
|
||||
val focusRequester = remember { FocusRequester() }
|
||||
Column(if (appPlatform.isAndroid) Modifier.fillMaxSize().padding(start = DEFAULT_PADDING * 2, end = DEFAULT_PADDING * 2, bottom = DEFAULT_PADDING) else Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally)) {
|
||||
Column(if (appPlatform.isAndroid) Modifier.fillMaxSize().padding(start = DEFAULT_ONBOARDING_HORIZONTAL_PADDING * 2, end = DEFAULT_ONBOARDING_HORIZONTAL_PADDING * 2, bottom = DEFAULT_PADDING) else Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
Box(Modifier.align(Alignment.CenterHorizontally)) {
|
||||
AppBarTitle(stringResource(MR.strings.create_your_profile), bottomPadding = DEFAULT_PADDING, withPadding = false)
|
||||
}
|
||||
@@ -130,7 +130,7 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) {
|
||||
Spacer(Modifier.fillMaxHeight().weight(1f))
|
||||
Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
OnboardingActionButton(
|
||||
if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
labelId = MR.strings.create_profile_button,
|
||||
onboarding = null,
|
||||
enabled = canCreateProfile(displayName.value),
|
||||
|
||||
+1
-7
@@ -192,13 +192,7 @@ fun DatabaseLayout(
|
||||
}
|
||||
RunChatSetting(stopped, toggleEnabled && !progressIndicator, startChat, stopChatAlert)
|
||||
}
|
||||
SectionTextFooter(
|
||||
if (stopped) {
|
||||
stringResource(MR.strings.you_must_use_the_most_recent_version_of_database)
|
||||
} else {
|
||||
stringResource(MR.strings.stop_chat_to_enable_database_actions)
|
||||
}
|
||||
)
|
||||
if (stopped) SectionTextFooter(stringResource(MR.strings.you_must_use_the_most_recent_version_of_database))
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
}
|
||||
|
||||
|
||||
+54
-12
@@ -1,7 +1,11 @@
|
||||
package chat.simplex.common.views.onboarding
|
||||
|
||||
import SectionBottomSpacer
|
||||
import SectionDividerSpaced
|
||||
import SectionItemView
|
||||
import SectionTextFooter
|
||||
import SectionView
|
||||
import TextIconSpaced
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.*
|
||||
@@ -10,10 +14,12 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import chat.simplex.common.model.*
|
||||
import chat.simplex.common.model.ChatController.appPrefs
|
||||
import chat.simplex.common.model.ServerOperator
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.common.views.helpers.*
|
||||
@@ -57,7 +63,8 @@ fun ModalData.ChooseServerOperators(
|
||||
Column((
|
||||
if (appPlatform.isDesktop) Modifier.width(600.dp).align(Alignment.CenterHorizontally) else Modifier)
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = DEFAULT_PADDING)
|
||||
.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
serverOperators.value.forEachIndexed { index, srvOperator ->
|
||||
OperatorCheckView(srvOperator, selectedOperatorIds)
|
||||
@@ -67,6 +74,7 @@ fun ModalData.ChooseServerOperators(
|
||||
}
|
||||
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
|
||||
|
||||
SectionTextFooter(annotatedStringResource(MR.strings.onboarding_network_operators_simplex_flux_agreement), textAlign = TextAlign.Center)
|
||||
SectionTextFooter(annotatedStringResource(MR.strings.onboarding_network_operators_configure_via_settings), textAlign = TextAlign.Center)
|
||||
}
|
||||
Spacer(Modifier.weight(1f))
|
||||
@@ -169,7 +177,7 @@ private fun ReviewConditionsButton(
|
||||
modalManager: ModalManager
|
||||
) {
|
||||
OnboardingActionButton(
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
labelId = MR.strings.operator_review_conditions,
|
||||
onboarding = null,
|
||||
enabled = enabled,
|
||||
@@ -184,7 +192,7 @@ private fun ReviewConditionsButton(
|
||||
@Composable
|
||||
private fun SetOperatorsButton(enabled: Boolean, onboarding: Boolean, serverOperators: State<List<ServerOperator>>, selectedOperatorIds: State<Set<Long>>, close: () -> Unit) {
|
||||
OnboardingActionButton(
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
labelId = MR.strings.onboarding_network_operators_update,
|
||||
onboarding = null,
|
||||
enabled = enabled,
|
||||
@@ -206,7 +214,7 @@ private fun SetOperatorsButton(enabled: Boolean, onboarding: Boolean, serverOper
|
||||
@Composable
|
||||
private fun ContinueButton(enabled: Boolean, onboarding: Boolean, close: () -> Unit) {
|
||||
OnboardingActionButton(
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
labelId = MR.strings.onboarding_network_operators_continue,
|
||||
onboarding = null,
|
||||
enabled = enabled,
|
||||
@@ -234,7 +242,7 @@ private fun ReviewConditionsView(
|
||||
// remembering both since we don't want to reload the view after the user accepts conditions
|
||||
val operatorsWithConditionsAccepted = remember { chatModel.conditions.value.serverOperators.filter { it.conditionsAcceptance.conditionsAccepted } }
|
||||
val acceptForOperators = remember { selectedOperators.value.filter { !it.conditionsAcceptance.conditionsAccepted } }
|
||||
ColumnWithScrollBar(modifier = Modifier.fillMaxSize().padding(horizontal = DEFAULT_PADDING)) {
|
||||
ColumnWithScrollBar(modifier = Modifier.fillMaxSize().padding(horizontal = if (onboarding) DEFAULT_ONBOARDING_HORIZONTAL_PADDING else DEFAULT_PADDING)) {
|
||||
AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), withPadding = false, enableAlphaChanges = false, bottomPadding = DEFAULT_PADDING)
|
||||
if (operatorsWithConditionsAccepted.isNotEmpty()) {
|
||||
ReadableText(MR.strings.operator_conditions_accepted_for_some, args = operatorsWithConditionsAccepted.joinToString(", ") { it.legalName_ })
|
||||
@@ -267,7 +275,7 @@ private fun AcceptConditionsButton(
|
||||
}
|
||||
}
|
||||
OnboardingActionButton(
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier,
|
||||
modifier = if (appPlatform.isAndroid) Modifier.fillMaxWidth() else Modifier,
|
||||
labelId = MR.strings.accept_conditions,
|
||||
onboarding = null,
|
||||
onclick = {
|
||||
@@ -339,11 +347,45 @@ private fun enabledOperators(operators: List<ServerOperator>, selectedOperatorId
|
||||
|
||||
@Composable
|
||||
private fun ChooseServerOperatorsInfoView() {
|
||||
ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING)) {
|
||||
AppBarTitle(stringResource(MR.strings.onboarding_network_operators), withPadding = false)
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_different_operators))
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_cant_see_who_talks_to_whom))
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_for_routing))
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(stringResource(MR.strings.onboarding_network_operators))
|
||||
|
||||
Column(
|
||||
Modifier.padding(horizontal = DEFAULT_PADDING)
|
||||
) {
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_different_operators))
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_cant_see_who_talks_to_whom))
|
||||
ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_for_routing))
|
||||
}
|
||||
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(title = stringResource(MR.strings.onboarding_network_about_operators).uppercase()) {
|
||||
chatModel.conditions.value.serverOperators.forEach { op ->
|
||||
ServerOperatorRow(op)
|
||||
}
|
||||
}
|
||||
SectionBottomSpacer()
|
||||
}
|
||||
}
|
||||
|
||||
@Composable()
|
||||
private fun ServerOperatorRow(
|
||||
operator: ServerOperator
|
||||
) {
|
||||
SectionItemView(
|
||||
{
|
||||
ModalManager.start.showModalCloseable { close ->
|
||||
OperatorInfoView(operator)
|
||||
}
|
||||
}
|
||||
) {
|
||||
Image(
|
||||
painterResource(operator.logo),
|
||||
operator.tradeName,
|
||||
modifier = Modifier.size(24.dp)
|
||||
)
|
||||
TextIconSpaced()
|
||||
Text(operator.tradeName)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -35,14 +35,14 @@ fun SetNotificationsMode(m: ChatModel) {
|
||||
AppBarTitle(stringResource(MR.strings.onboarding_notifications_mode_title), bottomPadding = DEFAULT_PADDING)
|
||||
}
|
||||
val currentMode = rememberSaveable { mutableStateOf(NotificationsMode.default) }
|
||||
Column(Modifier.padding(horizontal = DEFAULT_PADDING).fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
Column(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
OnboardingInformationButton(
|
||||
stringResource(MR.strings.onboarding_notifications_mode_subtitle),
|
||||
onClick = { ModalManager.fullscreen.showModalCloseable { NotificationBatteryUsageInfo() } }
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.weight(1f))
|
||||
Column(Modifier.padding(horizontal = DEFAULT_PADDING)) {
|
||||
Column(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING)) {
|
||||
SelectableCard(currentMode, NotificationsMode.SERVICE, stringResource(MR.strings.onboarding_notifications_mode_service), annotatedStringResource(MR.strings.onboarding_notifications_mode_service_desc_short)) {
|
||||
currentMode.value = NotificationsMode.SERVICE
|
||||
}
|
||||
@@ -56,7 +56,7 @@ fun SetNotificationsMode(m: ChatModel) {
|
||||
Spacer(Modifier.weight(1f))
|
||||
Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
OnboardingActionButton(
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier,
|
||||
modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier,
|
||||
labelId = MR.strings.use_chat,
|
||||
onboarding = OnboardingStage.OnboardingComplete,
|
||||
onclick = {
|
||||
|
||||
+1
-1
@@ -190,7 +190,7 @@ private fun SetupDatabasePassphraseLayout(
|
||||
@Composable
|
||||
private fun SetPassphraseButton(disabled: Boolean, onClick: () -> Unit) {
|
||||
OnboardingActionButton(
|
||||
if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp),
|
||||
labelId = MR.strings.set_database_passphrase,
|
||||
onboarding = null,
|
||||
onclick = onClick,
|
||||
|
||||
+39
-6
@@ -5,6 +5,7 @@ import androidx.compose.desktop.ui.tooling.preview.Preview
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -13,6 +14,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.layout.layout
|
||||
import androidx.compose.ui.text.TextLayoutResult
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
@@ -27,6 +30,8 @@ import chat.simplex.common.views.migration.MigrateToDeviceView
|
||||
import chat.simplex.common.views.migration.MigrationToState
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.floor
|
||||
|
||||
@Composable
|
||||
fun SimpleXInfo(chatModel: ChatModel, onboarding: Boolean = true) {
|
||||
@@ -52,7 +57,7 @@ fun SimpleXInfoLayout(
|
||||
user: User?,
|
||||
onboardingStage: SharedPreference<OnboardingStage>?
|
||||
) {
|
||||
ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
Box(Modifier.widthIn(max = if (appPlatform.isAndroid) 250.dp else 500.dp).padding(top = DEFAULT_PADDING + 8.dp), contentAlignment = Alignment.Center) {
|
||||
SimpleXLogo()
|
||||
}
|
||||
@@ -73,7 +78,7 @@ fun SimpleXInfoLayout(
|
||||
Column(Modifier.fillMaxHeight().weight(1f)) { }
|
||||
|
||||
if (onboardingStage != null) {
|
||||
Column(Modifier.padding(horizontal = DEFAULT_PADDING).widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally,) {
|
||||
Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally,) {
|
||||
OnboardingActionButton(user, onboardingStage)
|
||||
TextButtonBelowOnboardingButton(stringResource(MR.strings.migrate_from_another_device)) {
|
||||
chatModel.migrationState.value = MigrationToState.PasteOrScanLink
|
||||
@@ -139,7 +144,7 @@ fun OnboardingActionButton(
|
||||
shape = CircleShape,
|
||||
enabled = enabled,
|
||||
// elevation = ButtonDefaults.elevation(defaultElevation = 0.dp, focusedElevation = 0.dp, pressedElevation = 0.dp, hoveredElevation = 0.dp),
|
||||
contentPadding = PaddingValues(horizontal = if (icon == null) DEFAULT_PADDING * 2 else DEFAULT_PADDING * 1.5f, vertical = DEFAULT_PADDING),
|
||||
contentPadding = PaddingValues(horizontal = if (icon == null) DEFAULT_PADDING * 2 else DEFAULT_PADDING * 1.5f, vertical = 17.dp),
|
||||
colors = ButtonDefaults.buttonColors(MaterialTheme.colors.primary, disabledBackgroundColor = MaterialTheme.colors.secondary)
|
||||
) {
|
||||
if (icon != null) {
|
||||
@@ -153,8 +158,8 @@ fun OnboardingActionButton(
|
||||
fun TextButtonBelowOnboardingButton(text: String, onClick: (() -> Unit)?) {
|
||||
val state = getKeyboardState()
|
||||
val enabled = onClick != null
|
||||
val topPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else DEFAULT_PADDING_HALF)
|
||||
val bottomPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else DEFAULT_PADDING_HALF)
|
||||
val topPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else 7.5.dp)
|
||||
val bottomPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else 7.5.dp)
|
||||
if ((appPlatform.isAndroid && state.value == KeyboardState.Closed) || topPadding > 0.dp) {
|
||||
TextButton({ onClick?.invoke() }, Modifier.padding(top = topPadding, bottom = bottomPadding).clip(CircleShape), enabled = enabled) {
|
||||
Text(
|
||||
@@ -187,7 +192,35 @@ fun OnboardingInformationButton(
|
||||
null,
|
||||
tint = MaterialTheme.colors.primary
|
||||
)
|
||||
Text(text, style = MaterialTheme.typography.button, color = MaterialTheme.colors.primary)
|
||||
// https://issuetracker.google.com/issues/206039942#comment32
|
||||
var textLayoutResult: TextLayoutResult? by remember { mutableStateOf(null) }
|
||||
Text(
|
||||
text,
|
||||
Modifier
|
||||
.layout { measurable, constraints ->
|
||||
val placeable = measurable.measure(constraints)
|
||||
val newTextLayoutResult = textLayoutResult
|
||||
|
||||
if (newTextLayoutResult == null || newTextLayoutResult.lineCount == 0) {
|
||||
// Default behavior if there is no text or the text layout is not measured yet
|
||||
layout(placeable.width, placeable.height) {
|
||||
placeable.placeRelative(0, 0)
|
||||
}
|
||||
} else {
|
||||
val minX = (0 until newTextLayoutResult.lineCount).minOf(newTextLayoutResult::getLineLeft)
|
||||
val maxX = (0 until newTextLayoutResult.lineCount).maxOf(newTextLayoutResult::getLineRight)
|
||||
|
||||
layout(ceil(maxX - minX).toInt(), placeable.height) {
|
||||
placeable.place(-floor(minX).toInt(), 0)
|
||||
}
|
||||
}
|
||||
},
|
||||
onTextLayout = {
|
||||
textLayoutResult = it
|
||||
},
|
||||
style = MaterialTheme.typography.button,
|
||||
color = MaterialTheme.colors.primary
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-8
@@ -410,7 +410,7 @@ fun OperatorViewLayout(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun OperatorInfoView(serverOperator: ServerOperator) {
|
||||
fun OperatorInfoView(serverOperator: ServerOperator) {
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(stringResource(MR.strings.operator_info_title))
|
||||
|
||||
@@ -427,23 +427,27 @@ private fun OperatorInfoView(serverOperator: ServerOperator) {
|
||||
|
||||
SectionDividerSpaced(maxBottomPadding = false)
|
||||
|
||||
val uriHandler = LocalUriHandler.current
|
||||
SectionView {
|
||||
SectionItemView {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(10.dp)) {
|
||||
serverOperator.info.description.forEach { d ->
|
||||
Text(d)
|
||||
}
|
||||
val website = serverOperator.info.website
|
||||
Text(website, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(website) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(generalGetString(MR.strings.operator_website).uppercase()) {
|
||||
SectionItemView {
|
||||
val website = serverOperator.info.website
|
||||
val uriHandler = LocalUriHandler.current
|
||||
Text(website, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(website) })
|
||||
val selfhost = serverOperator.info.selfhost
|
||||
if (selfhost != null) {
|
||||
SectionDividerSpaced(maxBottomPadding = false)
|
||||
SectionView {
|
||||
SectionItemView {
|
||||
val (text, link) = selfhost
|
||||
Text(text, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(link) })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1049,7 +1049,6 @@
|
||||
<string name="stop_sharing_address">إيقاف مشاركة العنوان؟</string>
|
||||
<string name="stop_sharing">إيقاف المشاركة</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">أوقف الدردشة لتصدير أو استيراد أو حذف قاعدة بيانات الدردشة. لن تتمكّن من استلام الرسائل وإرسالها أثناء إيقاف الدردشة.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">أوقف الدردشة لتمكين إجراءات قاعدة البيانات.</string>
|
||||
<string name="chat_item_ttl_seconds">%s ثانية/ثواني</string>
|
||||
<string name="callstate_starting">يبدأ…</string>
|
||||
<string name="auth_simplex_lock_turned_on">تم تشغيل القفل SimpleX</string>
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
<string name="connection_local_display_name">connection %1$d</string>
|
||||
<string name="display_name_connection_established">connection established</string>
|
||||
<string name="display_name_invited_to_connect">invited to connect</string>
|
||||
<string name="display_name_requested_to_connect">requested to connect</string>
|
||||
<string name="display_name_accepted_invitation">accepted invitation</string>
|
||||
<string name="display_name_connecting">connecting…</string>
|
||||
<string name="description_you_shared_one_time_link">you shared one-time link</string>
|
||||
<string name="description_you_shared_one_time_link_incognito">you shared one-time link incognito</string>
|
||||
@@ -1075,9 +1077,11 @@
|
||||
<!-- ChooseServerOperators.kt -->
|
||||
<string name="onboarding_choose_server_operators">Server operators</string>
|
||||
<string name="onboarding_network_operators">Network operators</string>
|
||||
<string name="onboarding_network_operators_simplex_flux_agreement">SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</string>
|
||||
<string name="onboarding_network_operators_app_will_use_different_operators">The app protects your privacy by using different operators in each conversation.</string>
|
||||
<string name="onboarding_network_operators_cant_see_who_talks_to_whom">When more than one operator is enabled, none of them has metadata to learn who communicates with whom.</string>
|
||||
<string name="onboarding_network_operators_app_will_use_for_routing">For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.</string>
|
||||
<string name="onboarding_network_about_operators">About operators</string>
|
||||
<string name="onboarding_select_network_operators_to_use">Select network operators to use.</string>
|
||||
<string name="how_it_helps_privacy">How it helps privacy</string>
|
||||
<string name="onboarding_network_operators_configure_via_settings">You can configure servers via settings.</string>
|
||||
@@ -1306,7 +1310,6 @@
|
||||
<string name="chat_database_deleted">Chat database deleted</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Restart the app to create a new chat profile.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Stop chat to enable database actions.</string>
|
||||
<string name="files_and_media_section">Files & media</string>
|
||||
<string name="delete_files_and_media_for_all_users">Delete files for all chat profiles</string>
|
||||
<string name="delete_files_and_media_all">Delete all files</string>
|
||||
|
||||
@@ -1133,7 +1133,6 @@
|
||||
<string name="save_preferences_question">Запази настройките\?</string>
|
||||
<string name="icon_descr_speaker_on">Високоговорителят е включен</string>
|
||||
<string name="icon_descr_speaker_off">Високоговорителят е изключен</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Спрете чата, за да активирате действията с базата данни.</string>
|
||||
<string name="role_in_group">Роля</string>
|
||||
<string name="network_options_save">Запази</string>
|
||||
<string name="reset_color">Нулирай цветовете</string>
|
||||
|
||||
@@ -280,7 +280,6 @@
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">Tuto akci nelze vzít zpět! Váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny.</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Restartujte aplikaci a vytvořte nový chat profil.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">Nejnovější verzi databáze chatu musíte používat POUZE v jednom zařízení, jinak se může stát, že přestanete přijímat zprávy od některých kontaktů.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Zastavte chat a povolte akce s databází.</string>
|
||||
<string name="files_and_media_section">Soubory a média</string>
|
||||
<string name="delete_files_and_media_question">Smazat soubory a média\?</string>
|
||||
<string name="delete_messages">Odstranit zprávy</string>
|
||||
|
||||
@@ -597,7 +597,6 @@
|
||||
<string name="chat_database_deleted">Chat-Datenbank gelöscht</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Starten Sie die App neu, um ein neues Chat-Profil zu erstellen.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">Sie dürfen die neueste Version Ihrer Chat-Datenbank NUR auf einem Gerät verwenden, andernfalls erhalten Sie möglicherweise keine Nachrichten mehr von einigen Ihrer Kontakte.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Chat beenden, um Datenbankaktionen zu erlauben.</string>
|
||||
<string name="delete_files_and_media_question">Dateien und Medien löschen?</string>
|
||||
<string name="delete_files_and_media_desc">Diese Aktion kann nicht rückgängig gemacht werden! Es werden alle empfangenen und gesendeten Dateien und Medien gelöscht. Bilder mit niedriger Auflösung bleiben erhalten.</string>
|
||||
<string name="no_received_app_files">Keine empfangenen oder gesendeten Dateien</string>
|
||||
|
||||
@@ -733,7 +733,6 @@
|
||||
<string name="share_invitation_link">Compartir enlace de un uso</string>
|
||||
<string name="update_network_session_mode_question">¿Actualizar el modo de aislamiento de transporte\?</string>
|
||||
<string name="icon_descr_speaker_on">Altavoz activado</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Para habilitar las acciones sobre la base de datos, debes parar SimpleX</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">¡La conexión que has aceptado se cancelará!</string>
|
||||
<string name="database_initialization_error_desc">La base de datos no funciona correctamente. Pulsa para conocer más</string>
|
||||
<string name="moderate_message_will_be_marked_warning">El mensaje será marcado como moderado para todos los miembros.</string>
|
||||
|
||||
@@ -942,7 +942,6 @@
|
||||
<string name="delete_files_and_media_desc">این عمل قابل برگشت نیست - تمام پروندهها و رسانه دریافتی حذف خواهند شد. عکسهای با کیفیت پایین باقی خواهند ماند.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">شما باید از تازهترین نسخه پایگاه داده گپ خود روی فقط یک دستگاه استفاده کنید، در غیر این صورت ممکن است از بعضی از مخاطبها دیگر پیامی دریافت نکنید.</string>
|
||||
<string name="messages_section_title">پیامها</string>
|
||||
<string name="stop_chat_to_enable_database_actions">به منظور فعالسازی اقدامات پایگاه داده، گپ را متوقف کنید.</string>
|
||||
<string name="enable_automatic_deletion_message">این عمل قابل برگشت نیست - پیامهای ارسالی و دریافتی قدیمیتر از زمان انتخابی حذف خواهند شد. این کار ممکن است چندین دقیقه زمان ببرد.</string>
|
||||
<string name="error_changing_message_deletion">خطا در تغییر تنظیمات</string>
|
||||
<string name="save_passphrase_in_settings">ذخیره عبارت عبور در تنظیمات</string>
|
||||
|
||||
@@ -666,7 +666,6 @@
|
||||
<string name="self_destruct_passcode">Itsetuhoutuva pääsykoodi</string>
|
||||
<string name="restart_the_app_to_use_imported_chat_database">Käynnistä sovellus uudelleen käyttääksesi tuotua keskustelutietokantaa.</string>
|
||||
<string name="old_database_archive">Vanha tietokanta-arkisto</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Pysäytä keskustelu, jotta tietokantatoiminnot voidaan ottaa käyttöön.</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Luo uusi keskusteluprofiili käynnistämällä sovellus uudelleen.</string>
|
||||
<string name="messages_section_title">Viestit</string>
|
||||
<string name="chat_item_ttl_none">ei koskaan</string>
|
||||
|
||||
@@ -617,7 +617,6 @@
|
||||
<string name="error_importing_database">Erreur lors de l\'importation de la base de données du chat</string>
|
||||
<string name="chat_database_imported">Base de données du chat importée</string>
|
||||
<string name="delete_chat_profile_question">Supprimer le profil du chat \?</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Arrêter le chat pour agir sur la base de données.</string>
|
||||
<string name="delete_files_and_media_question">Supprimer les fichiers et médias \?</string>
|
||||
<string name="delete_files_and_media_desc">Cette action ne peut être annulée - tous les fichiers et médias reçus et envoyés seront supprimés. Les photos à faible résolution seront conservées.</string>
|
||||
<string name="no_received_app_files">Aucun fichier reçu ou envoyé</string>
|
||||
|
||||
@@ -922,7 +922,6 @@
|
||||
<string name="only_your_contact_can_make_calls">Csak az ismerőse tud hívást indítani.</string>
|
||||
<string name="settings_section_title_themes">TÉMÁK</string>
|
||||
<string name="videos_limit_title">Túl sok videó!</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Csevegési szolgáltatás megállítása az adatbázis műveletek elvégzéséhez.</string>
|
||||
<string name="welcome">Üdvözöljük!</string>
|
||||
<string name="v5_1_self_destruct_passcode">Önmegsemmisítési jelkód</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(beolvasás, vagy beillesztés a vágólapról)</string>
|
||||
|
||||
@@ -874,7 +874,6 @@
|
||||
<string name="remove_passphrase_from_keychain">Rimuovere la password dal Keystore\?</string>
|
||||
<string name="save_passphrase_in_keychain">Salva la password nel Keystore</string>
|
||||
<string name="chat_item_ttl_seconds">%s secondo/i</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Ferma la chat per attivare le azioni del database.</string>
|
||||
<string name="delete_files_and_media_desc">Questa azione non può essere annullata: tutti i file e i media ricevuti e inviati verranno eliminati. Rimarranno le immagini a bassa risoluzione.</string>
|
||||
<string name="enable_automatic_deletion_message">Questa azione non può essere annullata: i messaggi inviati e ricevuti prima di quanto selezionato verranno eliminati. Potrebbe richiedere diversi minuti.</string>
|
||||
<string name="update_database">Aggiorna</string>
|
||||
|
||||
@@ -981,7 +981,6 @@
|
||||
<string name="stop_chat_question">לעצור צ׳אט\?</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">עיצרו את הצ׳אט כדי לייצא, לייבא או למחוק את מסד הנתונים. לא תוכלו לקבל ולשלוח הודעות בזמן שהצ׳אט מופסק.</string>
|
||||
<string name="stop_chat_confirmation">עצור</string>
|
||||
<string name="stop_chat_to_enable_database_actions">עיצרו את הצ׳אט כדי לאפשר פעולות מסד נתונים.</string>
|
||||
<string name="skip_inviting_button">דלג על הזמנת חברים</string>
|
||||
<string name="share_address">שתף כתובת</string>
|
||||
<string name="theme_simplex">SimpleX</string>
|
||||
|
||||
@@ -662,7 +662,6 @@
|
||||
<string name="icon_descr_speaker_off">スピーカーオフ</string>
|
||||
<string name="your_chat_database">あなたのチャットデータベース</string>
|
||||
<string name="stop_chat_confirmation">停止</string>
|
||||
<string name="stop_chat_to_enable_database_actions">データベース操作をするにはチャットを停止する必要があります。</string>
|
||||
<string name="simplex_link_contact">SimpleX連絡先アドレス</string>
|
||||
<string name="simplex_link_invitation">SimpleX使い捨て招待リンク</string>
|
||||
<string name="description_via_contact_address_link">連絡先アドレスリンク経由</string>
|
||||
|
||||
@@ -851,7 +851,6 @@
|
||||
<string name="submit_passcode">제출하기</string>
|
||||
<string name="store_passphrase_securely_without_recover">암호를 모르면 채팅에 액세스할 수 없으니 암호를 안전하게 보관해 주세요.</string>
|
||||
<string name="stop_chat_question">채팅 기능을 중지할까요\?</string>
|
||||
<string name="stop_chat_to_enable_database_actions">데이터베이스 작업을 할 수 있도록 채팅 기능을 중지하기</string>
|
||||
<string name="switch_receiving_address">수신 주소 바꾸기</string>
|
||||
<string name="decryption_error">복호화 오류</string>
|
||||
<string name="confirm_passcode">패스코드 확인</string>
|
||||
|
||||
@@ -1219,7 +1219,6 @@
|
||||
<string name="set_database_passphrase">Nustatyti duomenų slaptafrazę</string>
|
||||
<string name="set_passphrase">Nustatyti slaptafrazę</string>
|
||||
<string name="privacy_show_last_messages">Rodyti paskutines žinutes</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Sustabdykite pokalbius, kad įgalinti duomenų bazės veiksmus.</string>
|
||||
<string name="settings_section_title_support">PALAIKYKITE SIMPLEX CHAT</string>
|
||||
<string name="receipts_section_description_1">Jų galima nepaisyti kontaktų ir grupių nustatymuose.</string>
|
||||
<string name="enable_automatic_deletion_message">Šis veiksmas negali būti atšauktas - žinutės išsiųstos ir gautos anksčiau nei pasirinkta bus ištrintos. Tai gali užtrukti kelias minutes.</string>
|
||||
|
||||
@@ -740,7 +740,6 @@
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Start de app opnieuw om een nieuw chatprofiel aan te maken.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">U mag ALLEEN de meest recente versie van uw chat-database op één apparaat gebruiken, anders ontvangt u mogelijk geen berichten meer van sommige contacten.</string>
|
||||
<string name="restart_the_app_to_use_imported_chat_database">Start de app opnieuw om de geïmporteerde chat database te gebruiken.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Stop de chat om database acties mogelijk te maken.</string>
|
||||
<string name="delete_files_and_media_desc">Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden.</string>
|
||||
<string name="remove_passphrase_from_keychain">Wachtwoord verwijderen uit Keychain\?</string>
|
||||
<string name="remove_passphrase">Verwijderen</string>
|
||||
|
||||
@@ -562,7 +562,6 @@
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Uruchom ponownie aplikację, aby utworzyć nowy profil czatu.</string>
|
||||
<string name="save_passphrase_in_keychain">Zapisz hasło w Keystore</string>
|
||||
<string name="chat_item_ttl_seconds">%s sekund(y)</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Zatrzymaj czat, aby umożliwić działania na bazie danych.</string>
|
||||
<string name="enable_automatic_deletion_message">Tego działania nie można cofnąć - wiadomości wysłane i odebrane wcześniej niż wybrane zostaną usunięte. Może to potrwać kilka minut.</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone.</string>
|
||||
<string name="messages_section_description">To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu</string>
|
||||
|
||||
@@ -853,7 +853,6 @@
|
||||
<string name="settings_section_title_socks">PROXY SOCKS</string>
|
||||
<string name="database_backup_can_be_restored">A tentativa de alterar a senha do banco de dados não foi concluída.</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">Pare o bate-papo para exportar, importar ou excluir o banco de dados do chat. Você não poderá receber e enviar mensagens enquanto o chat estiver interrompido.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Pare o bate-papo para ativar ações no banco de dados.</string>
|
||||
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
|
||||
<string name="unknown_database_error_with_info">Erro de banco de dados desconhecido: %s</string>
|
||||
<string name="unknown_error">Erro desconhecido</string>
|
||||
|
||||
@@ -760,7 +760,6 @@
|
||||
<string name="group_members_n">%s, %s e %d membros</string>
|
||||
<string name="add_contact_or_create_group">Iniciar nova conversa</string>
|
||||
<string name="la_mode_system">Sistema</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Parar conversa para habilitar ações do banco de dados</string>
|
||||
<string name="group_invitation_tap_to_join">Toque para participar</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s e %s conectado</string>
|
||||
<string name="network_option_tcp_connection_timeout">Tempo esgotado da conexão TCP</string>
|
||||
|
||||
@@ -600,7 +600,6 @@
|
||||
<string name="chat_database_deleted">Данные чата удалены</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Перезапустите приложение, чтобы создать новый профиль.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">Используйте самую последнюю версию архива чата и ТОЛЬКО на одном устройстве, иначе Вы можете перестать получать сообщения от некоторых контактов.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Остановите чат, чтобы разблокировать операции с архивом чата.</string>
|
||||
<string name="delete_files_and_media_for_all_users">Удалить файлы во всех профилях чата</string>
|
||||
<string name="delete_files_and_media_all">Удалить все файлы</string>
|
||||
<string name="delete_files_and_media_question">Удалить файлы и медиа?</string>
|
||||
@@ -2321,6 +2320,7 @@
|
||||
<string name="one_time_link_can_be_used_with_one_contact_only"><![CDATA[Одноразовая ссылка может быть использована <i>только с одним контактом</i> - поделитесь при встрече или через любой мессенджер.]]></string>
|
||||
<string name="no_message_servers_configured_for_private_routing">Нет серверов для доставки сообщений.</string>
|
||||
<string name="onboarding_network_operators_configure_via_settings">Вы можете настроить серверы позже.</string>
|
||||
<string name="onboarding_network_operators_simplex_flux_agreement">SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.</string>
|
||||
<string name="onboarding_network_operators_app_will_use_different_operators">Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре.</string>
|
||||
<string name="onboarding_network_operators_cant_see_who_talks_to_whom">Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем.</string>
|
||||
<string name="failed_to_save_servers">Ошибка сохранения серверов</string>
|
||||
|
||||
@@ -937,7 +937,6 @@
|
||||
<string name="star_on_github">ติดดาวบน GitHub</string>
|
||||
<string name="switch_verb">เปลี่ยน</string>
|
||||
<string name="callstate_starting">กำลังเริ่มต้น…</string>
|
||||
<string name="stop_chat_to_enable_database_actions">หยุดการแชทเพื่อเปิดใช้งานการดำเนินการกับฐานข้อมูล</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">หยุดแชทเพื่อส่งออก นำเข้า หรือลบฐานข้อมูลแชท คุณจะไม่สามารถรับและส่งข้อความได้ในขณะที่การแชทหยุดลง</string>
|
||||
<string name="v4_6_audio_video_calls_descr">รองรับบลูทูธและการปรับปรุงอื่นๆ</string>
|
||||
<string name="stop_sharing_address">หยุดแชร์ที่อยู่ไหม\?</string>
|
||||
|
||||
@@ -1034,7 +1034,6 @@
|
||||
<string name="stop_file__action">Dosyayı durdur</string>
|
||||
<string name="error_alert_title">Hata</string>
|
||||
<string name="create_another_profile_button">ProfilProfil oluştur</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Veri tabanı eylemlerini etkinleştirmek için sohbeti durdur.</string>
|
||||
<string name="stop_snd_file__title">Dosya göndermeyi durdur?</string>
|
||||
<string name="auth_stop_chat">Sohbeti durdur</string>
|
||||
<string name="connect_use_current_profile">Mevcut profili kullan</string>
|
||||
|
||||
@@ -899,7 +899,6 @@
|
||||
<string name="enable_lock">Увімкнути блокування</string>
|
||||
<string name="passcode_not_changed">Пароль не змінено!</string>
|
||||
<string name="change_lock_mode">Змінити режим блокування</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Зупиніть чат, щоб увімкнути дії з базою даних.</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Перезапустіть додаток, щоб створити новий профіль чату.</string>
|
||||
<string name="delete_files_and_media_for_all_users">Видалити файли для всіх профілів чату</string>
|
||||
<string name="delete_files_and_media_question">Видалити файли та медіа?</string>
|
||||
|
||||
@@ -799,7 +799,6 @@
|
||||
<string name="prohibit_direct_messages">禁止向成员发送私信。</string>
|
||||
<string name="protect_app_screen">保护应用程序屏幕</string>
|
||||
<string name="settings_section_title_themes">主题</string>
|
||||
<string name="stop_chat_to_enable_database_actions">停止聊天以启用数据库操作。</string>
|
||||
<string name="chat_item_ttl_seconds">%s 秒</string>
|
||||
<string name="alert_message_no_group">该群已不存在。</string>
|
||||
<string name="group_invitation_tap_to_join">点击加入</string>
|
||||
|
||||
@@ -119,7 +119,6 @@
|
||||
<string name="chat_is_stopped">聊天室已停止運作</string>
|
||||
<string name="stop_chat_confirmation">停止</string>
|
||||
<string name="chat_database_deleted">已刪除數據庫的對話內容</string>
|
||||
<string name="stop_chat_to_enable_database_actions">停止聊天室以啟用數據庫功能。</string>
|
||||
<string name="change_database_passphrase_question">修改數據庫密碼?</string>
|
||||
<string name="leave_group_question">確定要退出群組?</string>
|
||||
<string name="leave_group_button">退出</string>
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd
|
||||
source-repository-package
|
||||
type: git
|
||||
location: https://github.com/simplex-chat/simplexmq.git
|
||||
tag: 3f177b8c8a91de124dfe871af82bd7433f275efb
|
||||
tag: 79e9447b73cc315ce35042b0a5f210c07ea39b07
|
||||
|
||||
source-repository-package
|
||||
type: git
|
||||
|
||||
+4
-1
@@ -1,5 +1,5 @@
|
||||
name: simplex-chat
|
||||
version: 6.2.0.6
|
||||
version: 6.2.0.7
|
||||
#synopsis:
|
||||
#description:
|
||||
homepage: https://github.com/simplex-chat/simplex-chat#readme
|
||||
@@ -181,3 +181,6 @@ ghc-options:
|
||||
- -Wredundant-constraints
|
||||
- -Wincomplete-record-updates
|
||||
- -Wunused-type-patterns
|
||||
|
||||
default-extensions:
|
||||
- StrictData
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"https://github.com/simplex-chat/simplexmq.git"."3f177b8c8a91de124dfe871af82bd7433f275efb" = "18lhllv1w6wnvvphpqcib4fa7fqiyqf01swix2afs80mnxjip01v";
|
||||
"https://github.com/simplex-chat/simplexmq.git"."79e9447b73cc315ce35042b0a5f210c07ea39b07" = "16z7z5a3f7gw0h188manykp008d1bqpydlrj7h497mgyjmp4cy9m";
|
||||
"https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38";
|
||||
"https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d";
|
||||
"https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl";
|
||||
|
||||
+15
-1
@@ -5,7 +5,7 @@ cabal-version: 1.12
|
||||
-- see: https://github.com/sol/hpack
|
||||
|
||||
name: simplex-chat
|
||||
version: 6.2.0.6
|
||||
version: 6.2.0.7
|
||||
category: Web, System, Services, Cryptography
|
||||
homepage: https://github.com/simplex-chat/simplex-chat#readme
|
||||
author: simplex.chat
|
||||
@@ -201,6 +201,8 @@ library
|
||||
Paths_simplex_chat
|
||||
hs-source-dirs:
|
||||
src
|
||||
default-extensions:
|
||||
StrictData
|
||||
ghc-options: -O2 -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-unused-packages -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=missing-methods -Werror=incomplete-uni-patterns -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns
|
||||
build-depends:
|
||||
aeson ==2.2.*
|
||||
@@ -264,6 +266,8 @@ executable simplex-bot
|
||||
Paths_simplex_chat
|
||||
hs-source-dirs:
|
||||
apps/simplex-bot
|
||||
default-extensions:
|
||||
StrictData
|
||||
ghc-options: -O2 -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-unused-packages -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=missing-methods -Werror=incomplete-uni-patterns -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -threaded
|
||||
build-depends:
|
||||
aeson ==2.2.*
|
||||
@@ -328,6 +332,8 @@ executable simplex-bot-advanced
|
||||
Paths_simplex_chat
|
||||
hs-source-dirs:
|
||||
apps/simplex-bot-advanced
|
||||
default-extensions:
|
||||
StrictData
|
||||
ghc-options: -O2 -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-unused-packages -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=missing-methods -Werror=incomplete-uni-patterns -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -threaded
|
||||
build-depends:
|
||||
aeson ==2.2.*
|
||||
@@ -391,6 +397,8 @@ executable simplex-broadcast-bot
|
||||
hs-source-dirs:
|
||||
apps/simplex-broadcast-bot
|
||||
apps/simplex-broadcast-bot/src
|
||||
default-extensions:
|
||||
StrictData
|
||||
other-modules:
|
||||
Broadcast.Bot
|
||||
Broadcast.Options
|
||||
@@ -460,6 +468,8 @@ executable simplex-chat
|
||||
Paths_simplex_chat
|
||||
hs-source-dirs:
|
||||
apps/simplex-chat
|
||||
default-extensions:
|
||||
StrictData
|
||||
ghc-options: -O2 -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-unused-packages -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=missing-methods -Werror=incomplete-uni-patterns -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -threaded
|
||||
build-depends:
|
||||
aeson ==2.2.*
|
||||
@@ -524,6 +534,8 @@ executable simplex-directory-service
|
||||
hs-source-dirs:
|
||||
apps/simplex-directory-service
|
||||
apps/simplex-directory-service/src
|
||||
default-extensions:
|
||||
StrictData
|
||||
other-modules:
|
||||
Directory.Events
|
||||
Directory.Options
|
||||
@@ -629,6 +641,8 @@ test-suite simplex-chat-test
|
||||
tests
|
||||
apps/simplex-broadcast-bot/src
|
||||
apps/simplex-directory-service/src
|
||||
default-extensions:
|
||||
StrictData
|
||||
ghc-options: -O2 -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-unused-packages -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=missing-methods -Werror=incomplete-uni-patterns -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -threaded
|
||||
build-depends:
|
||||
QuickCheck ==2.14.*
|
||||
|
||||
+2
-13
@@ -2872,27 +2872,19 @@ processChatCommand' vr = \case
|
||||
updateProfile_ user@User {profile = p@LocalProfile {displayName = n}} p'@Profile {displayName = n'} updateUser
|
||||
| p' == fromLocalProfile p = pure $ CRUserProfileNoChange user
|
||||
| otherwise = do
|
||||
liftIO $ putStrLn $ "*** updateProfile_ profile: " <> show p'
|
||||
when (n /= n') $ checkValidName n'
|
||||
-- read contacts before user update to correctly merge preferences
|
||||
contacts <- withFastStore' $ \db -> getUserContacts db vr user
|
||||
liftIO $ putStrLn $ "*** updateProfile_ contacts: " <> show contacts
|
||||
user' <- updateUser
|
||||
asks currentUser >>= atomically . (`writeTVar` Just user')
|
||||
withChatLock "updateProfile" . procCmd $ do
|
||||
let changedCts_ = L.nonEmpty $ foldr (addChangedProfileContact user') [] contacts
|
||||
summary <- case changedCts_ of
|
||||
Nothing -> do
|
||||
liftIO $ putStrLn $ "*** updateProfile_ no changed contacts"
|
||||
pure $ UserProfileUpdateSummary 0 0 []
|
||||
Nothing -> pure $ UserProfileUpdateSummary 0 0 []
|
||||
Just changedCts -> do
|
||||
liftIO $ putStrLn $ "*** updateProfile_ changed contacts: " <> show changedCts_
|
||||
let idsEvts = L.map ctSndEvent changedCts
|
||||
liftIO $ putStrLn $ "*** updateProfile_ before sending"
|
||||
msgReqs_ <- lift $ L.zipWith ctMsgReq changedCts <$> createSndMessages idsEvts
|
||||
liftIO $ putStrLn $ "*** updateProfile_ created messages"
|
||||
(errs, cts) <- partitionEithers . L.toList . L.zipWith (second . const) changedCts <$> deliverMessagesB msgReqs_
|
||||
liftIO $ putStrLn $ "*** updateProfile_ delivered messages to contacts: " <> show (length cts) <> ", errors: " <> show errs
|
||||
unless (null errs) $ toView $ CRChatErrors (Just user) errs
|
||||
let changedCts' = filter (\ChangedProfileContact {ct, ct'} -> directOrUsed ct' && mergedPreferences ct' /= mergedPreferences ct) cts
|
||||
lift $ createContactsSndFeatureItems user' changedCts'
|
||||
@@ -2900,7 +2892,7 @@ processChatCommand' vr = \case
|
||||
UserProfileUpdateSummary
|
||||
{ updateSuccesses = length cts,
|
||||
updateFailures = length errs,
|
||||
changedContacts = map (\ChangedProfileContact {ct'} -> ct') $ L.toList changedCts
|
||||
changedContacts = map (\ChangedProfileContact {ct'} -> ct') changedCts'
|
||||
}
|
||||
pure $ CRUserProfileUpdated user' (fromLocalProfile p) p' summary
|
||||
where
|
||||
@@ -3513,7 +3505,6 @@ data ChangedProfileContact = ChangedProfileContact
|
||||
mergedProfile' :: Profile,
|
||||
conn :: Connection
|
||||
}
|
||||
deriving (Show)
|
||||
|
||||
prepareGroupMsg :: User -> GroupInfo -> MsgContent -> Maybe ChatItemId -> Maybe CIForwardedFrom -> Maybe FileInvitation -> Maybe CITimed -> Bool -> CM (MsgContainer, Maybe (CIQuote 'CTGroup))
|
||||
prepareGroupMsg user GroupInfo {groupId, membership} mc quotedItemId_ itemForwarded fInv_ timed_ live = case (quotedItemId_, itemForwarded) of
|
||||
@@ -7643,9 +7634,7 @@ deliverMessages msgs = deliverMessagesB $ L.map Right msgs
|
||||
deliverMessagesB :: NonEmpty (Either ChatError ChatMsgReq) -> CM (NonEmpty (Either ChatError ([Int64], PQEncryption)))
|
||||
deliverMessagesB msgReqs = do
|
||||
msgReqs' <- liftIO compressBodies
|
||||
liftIO $ putStrLn "deliverMessagesB"
|
||||
sent <- L.zipWith prepareBatch msgReqs' <$> withAgent (`sendMessagesB` snd (mapAccumL toAgent Nothing msgReqs'))
|
||||
liftIO $ putStrLn $ "deliverMessagesB sent: " <> show sent
|
||||
lift . void $ withStoreBatch' $ \db -> map (updatePQSndEnabled db) (rights . L.toList $ sent)
|
||||
lift . withStoreBatch $ \db -> L.map (bindRight $ createDelivery db) sent
|
||||
where
|
||||
|
||||
@@ -10,7 +10,6 @@ module Simplex.Chat.Mobile where
|
||||
|
||||
import Control.Concurrent.STM
|
||||
import Control.Exception (SomeException, catch)
|
||||
import Control.Logger.Simple
|
||||
import Control.Monad.Except
|
||||
import Control.Monad.Reader
|
||||
import qualified Data.Aeson as J
|
||||
@@ -54,7 +53,7 @@ import Simplex.Messaging.Encoding.String
|
||||
import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, sumTypeJSON)
|
||||
import Simplex.Messaging.Protocol (AProtoServerWithAuth (..), AProtocolType (..), BasicAuth (..), CorrId (..), ProtoServerWithAuth (..), ProtocolServer (..))
|
||||
import Simplex.Messaging.Util (catchAll, liftEitherWith, safeDecodeUtf8)
|
||||
import System.IO (BufferMode (..), hSetBuffering, stderr, stdout, utf8)
|
||||
import System.IO (utf8)
|
||||
import System.Timeout (timeout)
|
||||
|
||||
data DBMigrationResult
|
||||
@@ -193,7 +192,7 @@ mobileChatOpts dbFilePrefix =
|
||||
smpServers = [],
|
||||
xftpServers = [],
|
||||
simpleNetCfg = defaultSimpleNetCfg,
|
||||
logLevel = CLLDebug,
|
||||
logLevel = CLLImportant,
|
||||
logConnections = False,
|
||||
logServerHosts = True,
|
||||
logAgent = Nothing,
|
||||
@@ -221,7 +220,7 @@ defaultMobileConfig :: ChatConfig
|
||||
defaultMobileConfig =
|
||||
defaultChatConfig
|
||||
{ confirmMigrations = MCYesUp,
|
||||
logLevel = CLLDebug,
|
||||
logLevel = CLLError,
|
||||
coreApi = True,
|
||||
deviceNameForRemote = "Mobile"
|
||||
}
|
||||
@@ -267,10 +266,7 @@ handleErr :: IO () -> IO String
|
||||
handleErr a = (a $> "") `catch` (pure . show @SomeException)
|
||||
|
||||
chatSendCmd :: ChatController -> B.ByteString -> IO JSONByteString
|
||||
chatSendCmd cc cmd = withGlobalLogging logCfg $ do
|
||||
hSetBuffering stdout LineBuffering
|
||||
hSetBuffering stderr LineBuffering
|
||||
chatSendRemoteCmd cc Nothing cmd
|
||||
chatSendCmd cc = chatSendRemoteCmd cc Nothing
|
||||
|
||||
chatSendRemoteCmd :: ChatController -> Maybe RemoteHostId -> B.ByteString -> IO JSONByteString
|
||||
chatSendRemoteCmd cc rh s = J.encode . APIResponse Nothing rh <$> runReaderT (execChatCommand rh s) cc
|
||||
|
||||
@@ -73,11 +73,11 @@ import UnliftIO.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExis
|
||||
|
||||
-- when acting as host
|
||||
minRemoteCtrlVersion :: AppVersion
|
||||
minRemoteCtrlVersion = AppVersion [6, 2, 0, 4]
|
||||
minRemoteCtrlVersion = AppVersion [6, 2, 0, 7]
|
||||
|
||||
-- when acting as controller
|
||||
minRemoteHostVersion :: AppVersion
|
||||
minRemoteHostVersion = AppVersion [6, 2, 0, 4]
|
||||
minRemoteHostVersion = AppVersion [6, 2, 0, 7]
|
||||
|
||||
currentAppVersion :: AppVersion
|
||||
currentAppVersion = AppVersion SC.version
|
||||
|
||||
@@ -85,7 +85,7 @@ where
|
||||
import Control.Monad
|
||||
import Control.Monad.Except
|
||||
import Control.Monad.IO.Class
|
||||
import Data.Either (partitionEithers, rights)
|
||||
import Data.Either (rights)
|
||||
import Data.Functor (($>))
|
||||
import Data.Int (Int64)
|
||||
import Data.Maybe (fromMaybe, isJust, isNothing)
|
||||
@@ -590,13 +590,8 @@ getContactByName db vr user localDisplayName = do
|
||||
getUserContacts :: DB.Connection -> VersionRangeChat -> User -> IO [Contact]
|
||||
getUserContacts db vr user@User {userId} = do
|
||||
contactIds <- map fromOnly <$> DB.query db "SELECT contact_id FROM contacts WHERE user_id = ? AND deleted = 0" (Only userId)
|
||||
putStrLn $ "*** getUserContacts contactIds" <> show contactIds
|
||||
(errs, contacts) <- partitionEithers <$> mapM (runExceptT . getContact db vr user) contactIds
|
||||
putStrLn $ "*** getUserContacts contacts" <> show contacts
|
||||
putStrLn $ "*** getUserContacts errors" <> show errs
|
||||
r <- pure $ filter (\Contact {activeConn} -> isJust activeConn) contacts
|
||||
putStrLn $ "*** getUserContacts filtered contacts" <> show r
|
||||
pure r
|
||||
contacts <- rights <$> mapM (runExceptT . getContact db vr user) contactIds
|
||||
pure $ filter (\Contact {activeConn} -> isJust activeConn) contacts
|
||||
|
||||
createOrUpdateContactRequest :: DB.Connection -> VersionRangeChat -> User -> Int64 -> InvitationId -> VersionRangeChat -> Profile -> Maybe XContactId -> PQSupport -> ExceptT StoreError IO ChatOrRequest
|
||||
createOrUpdateContactRequest db vr user@User {userId, userContactId} userContactLinkId invId (VersionRange minV maxV) Profile {displayName, fullName, image, contactLink, preferences} xContactId_ pqSup =
|
||||
|
||||
@@ -1472,7 +1472,7 @@ updateGroupPreferences db User {userId} g@GroupInfo {groupId, groupProfile = p}
|
||||
)
|
||||
|]
|
||||
(ps, currentTs, userId, groupId)
|
||||
pure (g :: GroupInfo) {groupProfile = p {groupPreferences = Just ps}}
|
||||
pure (g :: GroupInfo) {groupProfile = p {groupPreferences = Just ps}, fullGroupPreferences = mergeGroupPreferences $ Just ps}
|
||||
|
||||
updateGroupProfileFromMember :: DB.Connection -> User -> GroupInfo -> Profile -> ExceptT StoreError IO GroupInfo
|
||||
updateGroupProfileFromMember db user g@GroupInfo {groupId} Profile {displayName = n, fullName = fn, image = img} = do
|
||||
|
||||
@@ -22,7 +22,7 @@ import qualified Data.Aeson.TH as J
|
||||
import qualified Data.ByteString.Base64 as B64
|
||||
import Data.ByteString.Char8 (ByteString)
|
||||
import Data.Int (Int64)
|
||||
import Data.Maybe (fromMaybe, isJust, isNothing, listToMaybe)
|
||||
import Data.Maybe (fromMaybe, isJust, listToMaybe)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Data.Time.Clock (UTCTime (..), getCurrentTime)
|
||||
@@ -46,7 +46,6 @@ import Simplex.Messaging.Parsers (dropPrefix, sumTypeJSON)
|
||||
import Simplex.Messaging.Protocol (SubscriptionMode (..))
|
||||
import Simplex.Messaging.Util (allFinally)
|
||||
import Simplex.Messaging.Version
|
||||
import System.IO.Unsafe (unsafePerformIO)
|
||||
import UnliftIO.STM
|
||||
|
||||
data ChatLockEntity
|
||||
@@ -211,26 +210,7 @@ toConnection vr ((connId, acId, connLevel, viaContact, viaUserContactLink, viaGr
|
||||
toMaybeConnection :: VersionRangeChat -> MaybeConnectionRow -> Maybe Connection
|
||||
toMaybeConnection vr ((Just connId, Just agentConnId, Just connLevel, viaContact, viaUserContactLink, Just viaGroupLink, groupLinkId, customUserProfileId, Just connStatus, Just connType, Just contactConnInitiated, Just localAlias) :. (contactId, groupMemberId, sndFileId, rcvFileId, userContactLinkId) :. (Just createdAt, code_, verifiedAt_, Just pqSupport, Just pqEncryption, pqSndEnabled_, pqRcvEnabled_, Just authErrCounter, Just quotaErrCounter, connChatVersion, Just minVer, Just maxVer)) =
|
||||
Just $ toConnection vr ((connId, agentConnId, connLevel, viaContact, viaUserContactLink, viaGroupLink, groupLinkId, customUserProfileId, connStatus, connType, contactConnInitiated, localAlias) :. (contactId, groupMemberId, sndFileId, rcvFileId, userContactLinkId) :. (createdAt, code_, verifiedAt_, pqSupport, pqEncryption, pqSndEnabled_, pqRcvEnabled_, authErrCounter, quotaErrCounter, connChatVersion, minVer, maxVer))
|
||||
toMaybeConnection _ ((connId_, agentConnId_, connLevel_, viaContact, viaUserContactLink, viaGroupLink_, groupLinkId, customUserProfileId, connStatus_, connType_, contactConnInitiated_, localAlias_) :. (contactId, groupMemberId, sndFileId, rcvFileId, userContactLinkId) :. (createdAt_, code_, verifiedAt_, pqSupport_, pqEncryption_, pqSndEnabled_, pqRcvEnabled_, authErrCounter_, quotaErrCounter_, connChatVersion, minVer_, maxVer_)) =
|
||||
unsafePerformIO logRow `seq` Nothing
|
||||
where
|
||||
logRow = do
|
||||
putStrLn $ "connId_ = " <> show connId_
|
||||
when (isNothing agentConnId_) $ putStrLn "agentConnId_ = Nothing"
|
||||
when (isNothing connLevel_) $ putStrLn "connLevel_ = Nothing"
|
||||
when (isNothing viaGroupLink_) $ putStrLn "viaGroupLink_ = Nothing"
|
||||
when (isNothing connStatus_) $ putStrLn "connStatus_ = Nothing"
|
||||
when (isNothing connType_) $ putStrLn "connType_ = Nothing"
|
||||
when (isNothing contactConnInitiated_) $ putStrLn "contactConnInitiated_ = Nothing"
|
||||
when (isNothing localAlias_) $ putStrLn "localAlias_ = Nothing"
|
||||
when (isNothing contactId) $ putStrLn "contactId = Nothing"
|
||||
when (isNothing createdAt_) $ putStrLn "createdAt_ = Nothing"
|
||||
when (isNothing pqSupport_) $ putStrLn "pqSupport_ = Nothing"
|
||||
when (isNothing pqEncryption_) $ putStrLn "pqEncryption_ = Nothing"
|
||||
when (isNothing authErrCounter_) $ putStrLn "authErrCounter_ = Nothing"
|
||||
when (isNothing quotaErrCounter_) $ putStrLn "quotaErrCounter_ = Nothing"
|
||||
when (isNothing minVer_) $ putStrLn "minVer_ = Nothing"
|
||||
when (isNothing maxVer_) $ putStrLn "maxVer_ = Nothing"
|
||||
toMaybeConnection _ _ = Nothing
|
||||
|
||||
createConnection_ :: DB.Connection -> UserId -> ConnType -> Maybe Int64 -> ConnId -> ConnStatus -> VersionChat -> VersionRangeChat -> Maybe ContactId -> Maybe Int64 -> Maybe ProfileId -> Int -> UTCTime -> SubscriptionMode -> PQSupport -> IO Connection
|
||||
createConnection_ db userId connType entityId acId connStatus connChatVersion peerChatVRange@(VersionRange minV maxV) viaContact viaUserContactLink customUserProfileId connLevel currentTs subMode pqSup = do
|
||||
@@ -414,7 +394,7 @@ type ContactRow = Only ContactId :. ContactRow'
|
||||
toContact :: VersionRangeChat -> User -> ContactRow :. MaybeConnectionRow -> Contact
|
||||
toContact vr user ((Only contactId :. (profileId, localDisplayName, viaGroup, displayName, fullName, image, contactLink, localAlias, contactUsed, contactStatus) :. (enableNtfs_, sendRcpts, favorite, preferences, userPreferences, createdAt, updatedAt, chatTs) :. (contactGroupMemberId, contactGrpInvSent, uiThemes, chatDeleted, customData)) :. connRow) =
|
||||
let profile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias}
|
||||
activeConn = unsafePerformIO (putStrLn $ "contactId " <> show contactId) `seq` toMaybeConnection vr connRow
|
||||
activeConn = toMaybeConnection vr connRow
|
||||
chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts, favorite}
|
||||
incognito = maybe False connIncognito activeConn
|
||||
mergedPreferences = contactUserPreferences user userPreferences preferences incognito
|
||||
|
||||
@@ -857,6 +857,10 @@ testBusinessUpdateProfiles = testChat4 businessProfile aliceProfile bobProfile c
|
||||
cath <## "updated group preferences:"
|
||||
cath <## "Voice messages: on"
|
||||
]
|
||||
biz #$> ("/_get chat #1 count=1", chat, [(1, "Voice messages: on")])
|
||||
alice #$> ("/_get chat #1 count=1", chat, [(0, "Voice messages: on")])
|
||||
bob #$> ("/_get chat #1 count=1", chat, [(0, "Voice messages: on")])
|
||||
cath #$> ("/_get chat #1 count=1", chat, [(0, "Voice messages: on")])
|
||||
|
||||
testPlanAddressOkKnown :: HasCallStack => FilePath -> IO ()
|
||||
testPlanAddressOkKnown =
|
||||
|
||||
Reference in New Issue
Block a user