Merge branch 'master' into master-android

This commit is contained in:
Evgeny Poberezkin
2024-08-08 13:19:17 +01:00
54 changed files with 1558 additions and 736 deletions
@@ -44,6 +44,7 @@ struct ChatListNavLink: View {
@EnvironmentObject var chatModel: ChatModel
@EnvironmentObject var theme: AppTheme
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = false
@ObservedObject var chat: Chat
@State private var showContactRequestDialog = false
@State private var showJoinGroupDialog = false
@@ -56,7 +57,7 @@ struct ChatListNavLink: View {
@State private var inProgress = false
@State private var progressByTimeout = false
var dynamicRowHeight: CGFloat { dynamicSizes[userFont]?.rowHeight ?? 80 }
var dynamicRowHeight: CGFloat { dynamicSize(userFont).rowHeight }
var body: some View {
Group {
@@ -102,7 +103,7 @@ struct ChatListNavLink: View {
showSheetContent: { sheet = $0 }
)
} label: {
Label("Delete", systemImage: "trash")
deleteLabel
}
.tint(.red)
}
@@ -120,7 +121,7 @@ struct ChatListNavLink: View {
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
ToggleNtfsButton(chat: chat)
toggleNtfsButton(chat: chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
@@ -136,7 +137,7 @@ struct ChatListNavLink: View {
showSheetContent: { sheet = $0 }
)
} label: {
Label("Delete", systemImage: "trash")
deleteLabel
}
.tint(.red)
}
@@ -202,7 +203,7 @@ struct ChatListNavLink: View {
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
ToggleNtfsButton(chat: chat)
toggleNtfsButton(chat: chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
@@ -243,7 +244,7 @@ struct ChatListNavLink: View {
await MainActor.run { inProgress = false }
}
} label: {
Label("Join", systemImage: chat.chatInfo.incognito ? "theatermasks" : "ipad.and.arrow.forward")
SwipeLabel(NSLocalizedString("Join", comment: "swipe action"), systemImage: chat.chatInfo.incognito ? "theatermasks" : "ipad.and.arrow.forward", inverted: oneHandUI)
}
.tint(chat.chatInfo.incognito ? .indigo : theme.colors.primary)
}
@@ -253,14 +254,14 @@ struct ChatListNavLink: View {
Button {
Task { await markChatRead(chat) }
} label: {
Label("Read", systemImage: "checkmark")
SwipeLabel(NSLocalizedString("Read", comment: "swipe action"), systemImage: "checkmark", inverted: oneHandUI)
}
.tint(theme.colors.primary)
} else {
Button {
Task { await markChatUnread(chat) }
} label: {
Label("Unread", systemImage: "circlebadge.fill")
SwipeLabel(NSLocalizedString("Unread", comment: "swipe action"), systemImage: "circlebadge.fill", inverted: oneHandUI)
}
.tint(theme.colors.primary)
}
@@ -272,24 +273,36 @@ struct ChatListNavLink: View {
Button {
toggleChatFavorite(chat, favorite: false)
} label: {
Label("Unfav.", systemImage: "star.slash")
SwipeLabel(NSLocalizedString("Unfav.", comment: "swipe action"), systemImage: "star.slash.fill", inverted: oneHandUI)
}
.tint(.green)
} else {
Button {
toggleChatFavorite(chat, favorite: true)
} label: {
Label("Favorite", systemImage: "star.fill")
SwipeLabel(NSLocalizedString("Favorite", comment: "swipe action"), systemImage: "star.fill", inverted: oneHandUI)
}
.tint(.green)
}
}
@ViewBuilder private func toggleNtfsButton(chat: Chat) -> some View {
Button {
toggleNotifications(chat, enableNtfs: !chat.chatInfo.ntfsEnabled)
} label: {
if chat.chatInfo.ntfsEnabled {
SwipeLabel(NSLocalizedString("Mute", comment: "swipe action"), systemImage: "speaker.slash.fill", inverted: oneHandUI)
} else {
SwipeLabel(NSLocalizedString("Unmute", comment: "swipe action"), systemImage: "speaker.wave.2.fill", inverted: oneHandUI)
}
}
}
private func clearChatButton() -> some View {
Button {
AlertManager.shared.showAlert(clearChatAlert())
} label: {
Label("Clear", systemImage: "gobackward")
SwipeLabel(NSLocalizedString("Clear", comment: "swipe action"), systemImage: "gobackward", inverted: oneHandUI)
}
.tint(Color.orange)
}
@@ -298,7 +311,7 @@ struct ChatListNavLink: View {
Button {
AlertManager.shared.showAlert(clearNoteFolderAlert())
} label: {
Label("Clear", systemImage: "gobackward")
SwipeLabel(NSLocalizedString("Clear", comment: "swipe action"), systemImage: "gobackward", inverted: oneHandUI)
}
.tint(Color.orange)
}
@@ -307,7 +320,7 @@ struct ChatListNavLink: View {
Button {
AlertManager.shared.showAlert(leaveGroupAlert(groupInfo))
} label: {
Label("Leave", systemImage: "rectangle.portrait.and.arrow.right")
SwipeLabel(NSLocalizedString("Leave", comment: "swipe action"), systemImage: "rectangle.portrait.and.arrow.right.fill", inverted: oneHandUI)
}
.tint(Color.yellow)
}
@@ -316,7 +329,7 @@ struct ChatListNavLink: View {
Button {
AlertManager.shared.showAlert(deleteGroupAlert(groupInfo))
} label: {
Label("Delete", systemImage: "trash")
deleteLabel
}
.tint(.red)
}
@@ -326,18 +339,18 @@ struct ChatListNavLink: View {
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
Button {
Task { await acceptContactRequest(incognito: false, contactRequest: contactRequest) }
} label: { Label("Accept", systemImage: "checkmark") }
} label: { SwipeLabel(NSLocalizedString("Accept", comment: "swipe action"), systemImage: "checkmark", inverted: oneHandUI) }
.tint(theme.colors.primary)
Button {
Task { await acceptContactRequest(incognito: true, contactRequest: contactRequest) }
} label: {
Label("Accept incognito", systemImage: "theatermasks")
SwipeLabel(NSLocalizedString("Accept incognito", comment: "swipe action"), systemImage: "theatermasks.fill", inverted: oneHandUI)
}
.tint(.indigo)
Button {
AlertManager.shared.showAlert(rejectContactRequestAlert(contactRequest))
} label: {
Label("Reject", systemImage: "multiply")
SwipeLabel(NSLocalizedString("Reject", comment: "swipe action"), systemImage: "multiply.fill", inverted: oneHandUI)
}
.tint(.red)
}
@@ -358,14 +371,14 @@ struct ChatListNavLink: View {
AlertManager.shared.showAlertMsg(title: a.title, message: a.message)
})
} label: {
Label("Delete", systemImage: "trash")
deleteLabel
}
.tint(.red)
Button {
showContactConnectionInfo = true
} label: {
Label("Name", systemImage: "pencil")
SwipeLabel(NSLocalizedString("Name", comment: "swipe action"), systemImage: "pencil", inverted: oneHandUI)
}
.tint(theme.colors.primary)
}
@@ -384,6 +397,10 @@ struct ChatListNavLink: View {
}
}
private var deleteLabel: some View {
SwipeLabel(NSLocalizedString("Delete", comment: "swipe action"), systemImage: "trash.fill", inverted: oneHandUI)
}
private func deleteGroupAlert(_ groupInfo: GroupInfo) -> Alert {
Alert(
title: Text("Delete group?"),
+130 -71
View File
@@ -20,10 +20,12 @@ struct ChatListView: View {
@State private var searchChatFilteredBySimplexLink: String? = nil
@State private var userPickerVisible = false
@State private var showConnectDesktop = false
@State private var scrollToSearchBar = false
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
@AppStorage(DEFAULT_ONE_HAND_UI) private var oneHandUI = false
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
@AppStorage(DEFAULT_ONE_HAND_UI_CARD_SHOWN) private var oneHandUICardShown = false
var body: some View {
if #available(iOS 16.0, *) {
viewBody.scrollDismissesKeyboard(.immediately)
@@ -33,18 +35,14 @@ struct ChatListView: View {
}
private var viewBody: some View {
ZStack(alignment: .topLeading) {
ZStack(alignment: oneHandUI ? .bottomLeading : .topLeading) {
NavStackCompat(
isActive: Binding(
get: { chatModel.chatId != nil },
set: { _ in }
),
destination: chatView
) {
VStack {
chatListView
}
}
) { chatListView }
if userPickerVisible {
Rectangle().fill(.white.opacity(0.001)).onTapGesture {
withAnimation {
@@ -64,9 +62,11 @@ struct ChatListView: View {
}
private var chatListView: some View {
VStack {
withToolbar {
chatList
toolbar
.background(theme.colors.background)
.navigationBarTitleDisplayMode(.inline)
.navigationBarHidden(searchMode || oneHandUI)
}
.scaleEffect(x: 1, y: oneHandUI ? -1 : 1, anchor: .center)
.onDisappear() { withAnimation { userPickerVisible = false } }
@@ -86,66 +86,110 @@ struct ChatListView: View {
secondaryButton: .cancel()
))
}
.listStyle(.plain)
.background(theme.colors.background)
.navigationBarTitleDisplayMode(.inline)
.navigationBarHidden(searchMode)
}
@ViewBuilder private var toolbar: some View {
let t = VStack{}.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
let user = chatModel.currentUser ?? User.sampleData
ZStack(alignment: .topTrailing) {
ProfileImage(imageStr: user.image, size: 32, color: Color(uiColor: .quaternaryLabel))
.padding(.trailing, 4)
let allRead = chatModel.users
.filter { u in !u.user.activeUser && !u.user.hidden }
.allSatisfy { u in u.unreadCount == 0 }
if !allRead {
unreadBadge(size: 12)
}
}
.onTapGesture {
if chatModel.users.filter({ u in u.user.activeUser || !u.user.hidden }).count > 1 {
withAnimation {
userPickerVisible.toggle()
}
} else {
showSettings = true
}
}
}
ToolbarItem(placement: .principal) {
HStack(spacing: 4) {
Text("Chats")
.font(.headline)
SubsStatusIndicator()
}
.frame(maxWidth: .infinity, alignment: .center)
}
ToolbarItem(placement: .navigationBarTrailing) {
switch chatModel.chatRunning {
case .some(true): NewChatMenuButton()
case .some(false): chatStoppedIcon()
case .none: EmptyView()
}
.safeAreaInset(edge: .top) {
if oneHandUI { Divider().background(Material.ultraThin) }
}
.safeAreaInset(edge: .bottom) {
if oneHandUI {
Divider().padding(.bottom, Self.hasHomeIndicator ? 0 : 8).background(Material.ultraThin)
}
}
if #unavailable(iOS 16) {
t
} else if oneHandUI {
t.toolbarBackground(.visible, for: .navigationBar)
}
static var hasHomeIndicator: Bool = {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first {
window.safeAreaInsets.bottom > 0
} else { false }
}()
@ViewBuilder func withToolbar(content: () -> some View) -> some View {
if #available(iOS 16.0, *) {
if oneHandUI {
content()
.toolbarBackground(.hidden, for: .bottomBar)
.toolbar { bottomToolbar }
} else {
content()
.toolbarBackground(.automatic, for: .navigationBar)
.toolbar { topToolbar }
}
} else {
t.toolbarBackground(.visible, for: .bottomBar)
if oneHandUI {
content().toolbar { bottomToolbarGroup }
} else {
content().toolbar { topToolbar }
}
}
}
@ToolbarContentBuilder var topToolbar: some ToolbarContent {
ToolbarItem(placement: .topBarLeading) { leadingToolbarItem }
ToolbarItem(placement: .principal) { SubsStatusIndicator() }
ToolbarItem(placement: .topBarTrailing) { trailingToolbarItem }
}
@ToolbarContentBuilder var bottomToolbar: some ToolbarContent {
let padding: Double = Self.hasHomeIndicator ? 0 : 14
ToolbarItem(placement: .bottomBar) {
HStack {
leadingToolbarItem.padding(.bottom, padding)
Spacer()
SubsStatusIndicator().padding(.bottom, padding)
Spacer()
trailingToolbarItem.padding(.bottom, padding)
}
.contentShape(Rectangle())
.onTapGesture { scrollToSearchBar = true }
}
}
@ToolbarContentBuilder var bottomToolbarGroup: some ToolbarContent {
let padding: Double = Self.hasHomeIndicator ? 0 : 14
ToolbarItemGroup(placement: .bottomBar) {
leadingToolbarItem.padding(.bottom, padding)
Spacer()
SubsStatusIndicator().padding(.bottom, padding)
Spacer()
trailingToolbarItem.padding(.bottom, padding)
}
}
@ViewBuilder var leadingToolbarItem: some View {
let user = chatModel.currentUser ?? User.sampleData
ZStack(alignment: .topTrailing) {
ProfileImage(imageStr: user.image, size: 32, color: Color(uiColor: .quaternaryLabel))
.padding(.trailing, 4)
let allRead = chatModel.users
.filter { u in !u.user.activeUser && !u.user.hidden }
.allSatisfy { u in u.unreadCount == 0 }
if !allRead {
unreadBadge(size: 12)
}
}
.onTapGesture {
if chatModel.users.filter({ u in u.user.activeUser || !u.user.hidden }).count > 1 {
withAnimation {
userPickerVisible.toggle()
}
} else {
showSettings = true
}
}
}
@ViewBuilder var trailingToolbarItem: some View {
switch chatModel.chatRunning {
case .some(true): NewChatMenuButton()
case .some(false): chatStoppedIcon()
case .none: EmptyView()
}
}
@ViewBuilder private var chatList: some View {
let cs = filteredChats()
ZStack {
VStack {
ScrollViewReader { scrollProxy in
List {
if !chatModel.chats.isEmpty {
ChatListSearchBar(
@@ -159,6 +203,14 @@ struct ChatListView: View {
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
.frame(maxWidth: .infinity)
.padding(.top, oneHandUI ? 8 : 0)
.id("searchBar")
}
if !oneHandUICardShown {
OneHandUICard()
.scaleEffect(x: 1, y: oneHandUI ? -1 : 1, anchor: .center)
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
}
ForEach(cs, id: \.viewId) { chat in
ChatListNavLink(chat: chat)
@@ -169,16 +221,23 @@ struct ChatListView: View {
}
.offset(x: -8)
}
}
.onChange(of: chatModel.chatId) { chId in
if chId == nil, let chatId = chatModel.chatToTop {
chatModel.chatToTop = nil
chatModel.popChat(chatId)
.listStyle(.plain)
.onChange(of: chatModel.chatId) { chId in
if chId == nil, let chatId = chatModel.chatToTop {
chatModel.chatToTop = nil
chatModel.popChat(chatId)
}
stopAudioPlayer()
}
.onChange(of: chatModel.currentUser?.userId) { _ in
stopAudioPlayer()
}
.onChange(of: scrollToSearchBar) { scrollToSearchBar in
if scrollToSearchBar {
Task { self.scrollToSearchBar = false }
withAnimation { scrollProxy.scrollTo("searchBar") }
}
}
stopAudioPlayer()
}
.onChange(of: chatModel.currentUser?.userId) { _ in
stopAudioPlayer()
}
if cs.isEmpty && !chatModel.chats.isEmpty {
Text("No filtered chats")
@@ -270,6 +329,7 @@ struct SubsStatusIndicator: View {
showServersSummary = true
} label: {
HStack(spacing: 4) {
Text("Chats").foregroundStyle(Color.primary).fixedSize().font(.headline)
SubscriptionStatusIndicatorView(subs: subs, hasSess: hasSess)
if showSubscriptionPercentage {
SubscriptionStatusPercentageView(subs: subs, hasSess: hasSess)
@@ -356,7 +416,6 @@ struct ChatListSearchBar: View {
toggleFilterButton()
}
}
Divider()
}
.onChange(of: searchFocussed) { sf in
withAnimation { searchMode = sf }
@@ -0,0 +1,52 @@
//
// OneHandUICard.swift
// SimpleX (iOS)
//
// Created by EP on 06/08/2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
struct OneHandUICard: View {
@EnvironmentObject var theme: AppTheme
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
@AppStorage(DEFAULT_ONE_HAND_UI_CARD_SHOWN) private var oneHandUICardShown = false
@State private var showOneHandUIAlert = false
var body: some View {
ZStack(alignment: .topTrailing) {
VStack(alignment: .leading, spacing: 8) {
Text("Toggle chat list:").font(.title3)
Toggle("Reachable chat toolbar", isOn: $oneHandUI)
}
Image(systemName: "multiply")
.foregroundColor(theme.colors.secondary)
.onTapGesture {
showOneHandUIAlert = true
}
}
.padding()
.background(theme.appColors.sentMessage)
.cornerRadius(12)
.frame(height: dynamicSize(userFont).rowHeight)
.padding(.vertical, 12)
.alert(isPresented: $showOneHandUIAlert) {
Alert(
title: Text("Reachable chat toolbar"),
message: Text("You can change it in Appearance settings."),
dismissButton: .default(Text("Ok")) {
withAnimation {
oneHandUICardShown = true
}
}
)
}
}
}
#Preview {
OneHandUICard()
}
@@ -0,0 +1,80 @@
//
// SwipeLabel.swift
// SimpleX (iOS)
//
// Created by Levitating Pineapple on 06/08/2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct SwipeLabel: View {
private let text: String
private let systemImage: String
private let inverted: Bool
init(_ text: String, systemImage: String, inverted: Bool) {
self.text = text
self.systemImage = systemImage
self.inverted = inverted
}
var body: some View {
if inverted {
Image(
uiImage: SwipeActionView(
systemName: systemImage,
text: text
).snapshot(inverted: inverted)
)
} else {
Label(text, systemImage: systemImage)
}
}
private class SwipeActionView: UIView {
private let imageView = UIImageView()
private let label = UILabel()
private let fontSize: CGFloat
init(systemName: String, text: String) {
fontSize = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .subheadline).pointSize
super.init(frame: CGRect(x: 0, y: 0, width: 64, height: 32 + fontSize))
imageView.image = UIImage(systemName: systemName)
imageView.contentMode = .scaleAspectFit
label.text = text
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: fontSize, weight: .medium)
addSubview(imageView)
addSubview(label)
}
override func layoutSubviews() {
imageView.frame = CGRect(
x: 20,
y: 0,
width: 24,
height: 24
)
label.frame = CGRect(
x: 0,
y: 32,
width: 64,
height: fontSize
)
}
@available(*, unavailable)
required init?(coder: NSCoder) { fatalError("not implemented") }
func snapshot(inverted: Bool) -> UIImage {
UIGraphicsImageRenderer(bounds: bounds).image { context in
if inverted {
context.cgContext.scaleBy(x: 1, y: -1)
context.cgContext.translateBy(x: 0, y: -bounds.height)
}
layer.render(in: context.cgContext)
}.withRenderingMode(.alwaysTemplate)
}
}
}
@@ -112,7 +112,7 @@ struct NewChatSheet: View {
.modifier(ThemedBackground(grouped: true))
.navigationBarTitleDisplayMode(.large)
} label: {
Label("Create group", systemImage: "person.2")
Label("Create group", systemImage: "person.2.circle.fill")
}
}
@@ -142,7 +142,10 @@ struct NewChatSheet: View {
func newChatActionButton<Content : View>(_ icon: String, color: Color/* = .secondary*/, content: @escaping () -> Content) -> some View {
ZStack(alignment: .leading) {
Image(systemName: icon).frame(maxWidth: 24, maxHeight: 24, alignment: .center)
Image(systemName: icon)
.resizable()
.scaledToFit()
.frame(maxWidth: 24, maxHeight: 24, alignment: .center)
.symbolRenderingMode(.monochrome)
.foregroundColor(color)
content().foregroundColor(theme.colors.onBackground).padding(.leading, indent)
@@ -340,7 +343,7 @@ struct ContactsListSearchBar: View {
}
.padding(EdgeInsets(top: 7, leading: 7, bottom: 7, trailing: 7))
.foregroundColor(theme.colors.secondary)
.background(theme.colors.isLight ? theme.colors.background : theme.colors.secondaryVariant)
.background(Color(uiColor: .secondarySystemGroupedBackground))
.cornerRadius(10.0)
if searchFocussed {
@@ -354,6 +357,7 @@ struct ContactsListSearchBar: View {
toggleFilterButton()
}
}
.padding(.top, 24)
.onChange(of: searchFocussed) { sf in
withAnimation { searchMode = sf }
}
@@ -447,8 +451,8 @@ struct DeletedChats: View {
showDeletedChatIcon: false
)
}
.navigationTitle("Deleted chats")
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("Archived contacts")
.navigationBarTitleDisplayMode(.large)
.navigationBarHidden(searchMode)
.modifier(ThemedBackground(grouped: true))
@@ -15,9 +15,10 @@ private struct VersionDescription {
}
private struct FeatureDescription {
var icon: String
var icon: String?
var title: LocalizedStringKey
var description: LocalizedStringKey
var description: LocalizedStringKey?
var subfeatures: [(icon: String, description: LocalizedStringKey)] = []
}
private let versionDescriptions: [VersionDescription] = [
@@ -432,34 +433,36 @@ private let versionDescriptions: [VersionDescription] = [
version: "v6.0",
post: URL(string: "https://simplex.chat/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.html"),
features: [
FeatureDescription(
icon: nil,
title: "New chat experience 🎉",
description: nil,
subfeatures: [
("link.badge.plus", "Connect to your friends faster."),
("archivebox", "Archive contacts to chat later."),
("trash", "Delete up to 20 messages at once."),
("platter.filled.bottom.and.arrow.down.iphone", "Use the app with one hand."),
("paintpalette", "Color chats with the new themes."),
]
),
FeatureDescription(
icon: nil,
title: "New media options",
description: nil,
subfeatures: [
("square.and.arrow.up", "Share from other apps."),
("play.circle", "Play from the chat list."),
("circle.filled.pattern.diagonalline.rectangle", "Blur for better privacy.")
]
),
FeatureDescription(
icon: "arrow.forward",
title: "Private message routing 🚀",
description: "It protects your IP address and connections."
),
FeatureDescription(
icon: "person.text.rectangle",
title: "Your contacts your way",
description: "- Search contacts when starting chat.\n- Archive contacts to chat later."
),
FeatureDescription(
icon: "platter.filled.bottom.iphone",
title: "Reachable chat toolbar 👋",
description: "Use the app with one hand."
),
FeatureDescription(
icon: "link",
title: "Connect to your friends faster",
description: "Even when they are offline."
),
FeatureDescription(
icon: "trash",
title: "Moderate like a pro ✋",
description: "Delete up to 20 messages at once."
),
FeatureDescription(
icon: "network",
title: "Control your network",
title: "Better networking",
description: "Connection and servers status."
)
]
@@ -489,35 +492,37 @@ struct WhatsNewView: View {
VStack {
TabView(selection: $currentVersion) {
ForEach(Array(versionDescriptions.enumerated()), id: \.0) { (i, v) in
VStack(alignment: .leading, spacing: 16) {
Text("New in \(v.version)")
.font(.title)
.foregroundColor(theme.colors.secondary)
.frame(maxWidth: .infinity)
.padding(.vertical)
ForEach(v.features, id: \.icon) { f in
featureDescription(f.icon, f.title, f.description)
.padding(.bottom, 8)
}
if let post = v.post {
Link(destination: post) {
HStack {
Text("Read more")
Image(systemName: "arrow.up.right.circle")
ScrollView {
VStack(alignment: .leading, spacing: 16) {
Text("New in \(v.version)")
.font(.title)
.foregroundColor(theme.colors.secondary)
.frame(maxWidth: .infinity)
.padding(.vertical)
ForEach(v.features, id: \.title) { f in
featureDescription(f)
.padding(.bottom, 8)
}
if let post = v.post {
Link(destination: post) {
HStack {
Text("Read more")
Image(systemName: "arrow.up.right.circle")
}
}
}
}
if !viaSettings {
Spacer()
Button("Ok") {
dismiss()
if !viaSettings {
Spacer()
Button("Ok") {
dismiss()
}
.font(.title3)
.frame(maxWidth: .infinity, alignment: .center)
Spacer()
}
.font(.title3)
.frame(maxWidth: .infinity, alignment: .center)
Spacer()
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.tag(i)
}
}
@@ -531,18 +536,37 @@ struct WhatsNewView: View {
}
}
private func featureDescription(_ icon: String, _ title: LocalizedStringKey, _ description: LocalizedStringKey) -> some View {
private func featureDescription(_ f: FeatureDescription) -> some View {
VStack(alignment: .leading, spacing: 4) {
HStack(alignment: .center, spacing: 4) {
Image(systemName: icon)
.symbolRenderingMode(.monochrome)
.foregroundColor(theme.colors.secondary)
.frame(minWidth: 30, alignment: .center)
Text(title).font(.title3).bold()
if let icon = f.icon {
HStack(alignment: .center, spacing: 4) {
Image(systemName: icon)
.symbolRenderingMode(.monochrome)
.foregroundColor(theme.colors.secondary)
.frame(minWidth: 30, alignment: .center)
Text(f.title).font(.title3).bold()
}
} else {
Text(f.title).font(.title3).bold()
}
if let d = f.description {
Text(d)
.multilineTextAlignment(.leading)
.lineLimit(10)
}
if f.subfeatures.count > 0 {
ForEach(f.subfeatures, id: \.icon) { s in
HStack(alignment: .center, spacing: 4) {
Image(systemName: s.icon)
.symbolRenderingMode(.monochrome)
.foregroundColor(theme.colors.secondary)
.frame(minWidth: 30, alignment: .center)
Text(s.description)
.multilineTextAlignment(.leading)
.lineLimit(3)
}
}
}
Text(description)
.multilineTextAlignment(.leading)
.lineLimit(10)
}
}
@@ -28,7 +28,10 @@ extension AppSettings {
privacyAcceptImagesGroupDefault.set(val)
def.setValue(val, forKey: DEFAULT_PRIVACY_ACCEPT_IMAGES)
}
if let val = privacyLinkPreviews { def.setValue(val, forKey: DEFAULT_PRIVACY_LINK_PREVIEWS) }
if let val = privacyLinkPreviews {
privacyLinkPreviewsGroupDefault.set(val)
def.setValue(val, forKey: DEFAULT_PRIVACY_LINK_PREVIEWS)
}
if let val = privacyShowChatPreviews { def.setValue(val, forKey: DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS) }
if let val = privacySaveLastDraft { def.setValue(val, forKey: DEFAULT_PRIVACY_SAVE_LAST_DRAFT) }
if let val = privacyProtectScreen { def.setValue(val, forKey: DEFAULT_PRIVACY_PROTECT_SCREEN) }
@@ -45,12 +48,15 @@ extension AppSettings {
if let val = androidCallOnLockScreen { def.setValue(val.rawValue, forKey: ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN) }
if let val = iosCallKitEnabled { callKitEnabledGroupDefault.set(val) }
if let val = iosCallKitCallsInRecents { def.setValue(val, forKey: DEFAULT_CALL_KIT_CALLS_IN_RECENTS) }
if let val = uiProfileImageCornerRadius { def.setValue(val, forKey: DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) }
if let val = uiProfileImageCornerRadius {
profileImageCornerRadiusGroupDefault.set(val)
def.setValue(val, forKey: DEFAULT_PROFILE_IMAGE_CORNER_RADIUS)
}
if let val = uiColorScheme { def.setValue(val, forKey: DEFAULT_CURRENT_THEME) }
if let val = uiDarkColorScheme { def.setValue(val, forKey: DEFAULT_SYSTEM_DARK_THEME) }
if let val = uiCurrentThemeIds { def.setValue(val, forKey: DEFAULT_CURRENT_THEME_IDS) }
if let val = uiThemes { def.setValue(val.skipDuplicates(), forKey: DEFAULT_THEME_OVERRIDES) }
if let val = oneHandUI { def.setValue(val, forKey: DEFAULT_ONE_HAND_UI) }
if let val = oneHandUI { groupDefaults.setValue(val, forKey: GROUP_DEFAULT_ONE_HAND_UI) }
}
public static var current: AppSettings {
@@ -82,7 +88,7 @@ extension AppSettings {
c.uiDarkColorScheme = systemDarkThemeDefault.get()
c.uiCurrentThemeIds = currentThemeIdsDefault.get()
c.uiThemes = themeOverridesDefault.get()
c.oneHandUI = def.bool(forKey: DEFAULT_ONE_HAND_UI)
c.oneHandUI = groupDefaults.bool(forKey: GROUP_DEFAULT_ONE_HAND_UI)
return c
}
}
@@ -33,7 +33,7 @@ struct AppearanceSettings: View {
}()
@State private var darkModeTheme: String = UserDefaults.standard.string(forKey: DEFAULT_SYSTEM_DARK_THEME) ?? DefaultTheme.DARK.themeName
@AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var profileImageCornerRadius = defaultProfileImageCorner
@AppStorage(DEFAULT_ONE_HAND_UI) private var oneHandUI = false
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
@State var themeUserDestination: (Int64, ThemeModeOverrides?)? = {
if let currentUser = ChatModel.shared.currentUser, let uiThemes = currentUser.uiThemes, uiThemes.preferredMode(!CurrentColors.colors.isLight) != nil {
@@ -63,6 +63,10 @@ struct AppearanceSettings: View {
}
}
Section("Chat list") {
Toggle("Reachable chat toolbar", isOn: $oneHandUI)
}
Section {
ThemeDestinationPicker(themeUserDestination: $themeUserDestination, themeUserDest: themeUserDestination?.0, customizeThemeIsOpen: $customizeThemeIsOpen)
@@ -13,7 +13,8 @@ struct DeveloperView: View {
@EnvironmentObject var theme: AppTheme
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false
@AppStorage(DEFAULT_ONE_HAND_UI) private var oneHandUI = false
@State private var hintsUnchanged = hintDefaultsUnchanged()
@Environment(\.colorScheme) var colorScheme
var body: some View {
@@ -34,6 +35,10 @@ struct DeveloperView: View {
} label: {
settingsRow("terminal", color: theme.colors.secondary) { Text("Chat console") }
}
settingsRow("lightbulb.max", color: theme.colors.secondary) {
Button("Reset all hints", action: resetHintDefaults)
.disabled(hintsUnchanged)
}
settingsRow("chevron.left.forwardslash.chevron.right", color: theme.colors.secondary) {
Toggle("Show developer options", isOn: $developerTools)
}
@@ -49,9 +54,6 @@ struct DeveloperView: View {
settingsRow("internaldrive", color: theme.colors.secondary) {
Toggle("Confirm database upgrades", isOn: $confirmDatabaseUpgrades)
}
settingsRow("hand.wave", color: theme.colors.secondary) {
Toggle("One-hand UI", isOn: $oneHandUI)
}
} header: {
Text("Developer options")
}
@@ -59,6 +61,21 @@ struct DeveloperView: View {
}
}
}
private func resetHintDefaults() {
for def in hintDefaults {
if let val = appDefaults[def] as? Bool {
UserDefaults.standard.set(val, forKey: def)
}
}
hintsUnchanged = true
}
}
private func hintDefaultsUnchanged() -> Bool {
hintDefaults.allSatisfy { def in
appDefaults[def] as? Bool == UserDefaults.standard.bool(forKey: def)
}
}
struct DeveloperView_Previews: PreviewProvider {
@@ -117,7 +117,7 @@ struct PrivacySettings: View {
privacyAcceptImagesGroupDefault.set($0)
}
}
settingsRow("circle.rectangle.filled.pattern.diagonalline", color: theme.colors.secondary) {
settingsRow("circle.filled.pattern.diagonalline.rectangle", color: theme.colors.secondary) {
Picker("Blur media", selection: $privacyMediaBlurRadius) {
let values = [0, 12, 24, 48] + ([0, 12, 24, 48].contains(privacyMediaBlurRadius) ? [] : [privacyMediaBlurRadius])
ForEach(values, id: \.self) { radius in
@@ -47,7 +47,7 @@ let DEFAULT_ACCENT_COLOR_GREEN = "accentColorGreen" // deprecated, only used for
let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue" // deprecated, only used for migration
let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle" // deprecated, only used for migration
let DEFAULT_PROFILE_IMAGE_CORNER_RADIUS = "profileImageCornerRadius"
let DEFAULT_ONE_HAND_UI = "oneHandUI"
let DEFAULT_ONE_HAND_UI_CARD_SHOWN = "oneHandUICardShown"
let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab"
let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown"
let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
@@ -97,7 +97,7 @@ let appDefaults: [String: Any] = [
DEFAULT_DEVELOPER_TOOLS: false,
DEFAULT_ENCRYPTION_STARTED: false,
DEFAULT_PROFILE_IMAGE_CORNER_RADIUS: defaultProfileImageCorner,
DEFAULT_ONE_HAND_UI: false,
DEFAULT_ONE_HAND_UI_CARD_SHOWN: false,
DEFAULT_CONNECT_VIA_LINK_TAB: ConnectViaLinkTab.scan.rawValue,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
@@ -120,6 +120,18 @@ let appDefaults: [String: Any] = [
DEFAULT_CURRENT_THEME_IDS: "{}"
]
// only Bool defaults can be used here,
// or hintDefaultsUnchanged and resetHintDefaults need to be changed
let hintDefaults = [
DEFAULT_LA_NOTICE_SHOWN,
DEFAULT_ONE_HAND_UI_CARD_SHOWN,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE,
DEFAULT_SHOW_MUTE_PROFILE_ALERT,
DEFAULT_SHOW_DELETE_CONVERSATION_NOTICE,
DEFAULT_SHOW_DELETE_CONTACT_NOTICE
]
// not used anymore
enum ConnectViaLinkTab: String {
case scan
@@ -565,7 +565,8 @@
<source>Accept</source>
<target>Приеми</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -580,7 +581,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Приеми инкогнито</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1287,6 +1289,10 @@
<target>Чатът е спрян. Ако вече сте използвали тази база данни на друго устройство, трябва да я прехвърлите обратно, преди да стартирате чата отново.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Чатът е мигриран!</target>
@@ -1346,7 +1352,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Изчисти</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1923,7 +1929,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Изтрий</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2125,10 +2132,6 @@ This is your own one-time link!</source>
<target>Изтрито на: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2991,7 +2994,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Любим</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3750,7 +3753,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Присъединяване</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3841,7 +3844,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Напусни</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4221,7 +4224,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Без звук</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4231,7 +4234,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Име</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4442,10 +4445,6 @@ This is your link for group %@!</source>
<target>Стар архив на база данни</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Линк за еднократна покана</target>
@@ -5003,6 +5002,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Оценете приложението</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5015,7 +5018,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Прочетено</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5166,7 +5169,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Отхвърляне</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5267,6 +5271,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Нулиране</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6551,6 +6559,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>За да проверите криптирането от край до край с вашия контакт, сравнете (или сканирайте) кода на вашите устройства.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Избор на инкогнито при свързване.</target>
@@ -6632,7 +6644,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Премахни от любимите</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6708,12 +6720,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Уведомявай</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Непрочетено</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7191,6 +7203,10 @@ Repeat join request?</source>
<target>Можете да приемате обаждания от заключен екран, без идентификация на устройство и приложението.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Можете да го създадете по-късно</target>
@@ -547,7 +547,8 @@
<source>Accept</source>
<target>Přijmout</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -562,7 +563,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Přijmout inkognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1244,6 +1246,10 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
@@ -1301,7 +1307,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Vyčistit</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1853,7 +1859,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Smazat</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2052,10 +2059,6 @@ This is your own one-time link!</source>
<target>Smazáno v: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2888,7 +2891,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Oblíbené</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3620,7 +3623,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Připojte se na</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3703,7 +3706,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Opustit</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4067,7 +4070,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Ztlumit</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4077,7 +4080,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Jméno</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4282,10 +4285,6 @@ This is your link for group %@!</source>
<target>Archiv staré databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Jednorázový zvací odkaz</target>
@@ -4820,6 +4819,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Ohodnoťte aplikaci</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -4832,7 +4835,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Číst</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -4980,7 +4983,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Odmítnout</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5076,6 +5080,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Obnovit</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6328,6 +6336,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
<target>Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Změnit inkognito režim při připojení.</target>
@@ -6403,7 +6415,7 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Odobl.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6477,12 +6489,12 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Zrušit ztlumení</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Nepřečtený</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -6928,6 +6940,10 @@ Repeat join request?</source>
<target>Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Můžete vytvořit později</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Annehmen</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Inkognito akzeptieren</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1308,6 +1310,10 @@
<target>Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat wurde migriert!</target>
@@ -1371,7 +1377,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Löschen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1964,7 +1970,8 @@ Das ist Ihr eigener Einmal-Link!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Löschen</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2168,10 +2175,6 @@ Das ist Ihr eigener Einmal-Link!</target>
<target>Gelöscht um: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Fehler beim Löschen</target>
@@ -3054,7 +3057,7 @@ Das ist Ihr eigener Einmal-Link!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favorit</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3830,7 +3833,7 @@ Fehler: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Beitreten</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3921,7 +3924,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Verlassen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4315,7 +4318,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Stummschalten</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4325,7 +4328,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Name</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4540,10 +4543,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Altes Datenbankarchiv</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Einmal-Einladungslink</target>
@@ -5117,6 +5116,10 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<target>Bewerten Sie die App</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5129,7 +5132,7 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Gelesen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5289,7 +5292,8 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Ablehnen</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5391,6 +5395,10 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<target>Zurücksetzen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Alle Statistiken zurücksetzen</target>
@@ -6729,6 +6737,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Inkognito beim Verbinden einschalten.</target>
@@ -6812,7 +6824,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Fav. entf.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6889,12 +6901,12 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Stummschaltung aufheben</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Ungelesen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7387,6 +7399,10 @@ Verbindungsanfrage wiederholen?</target>
<target>Sie können Anrufe ohne Geräte- und App-Authentifizierung vom Sperrbildschirm aus annehmen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Sie können dies später erstellen</target>
@@ -568,7 +568,8 @@
<source>Accept</source>
<target>Accept</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -583,7 +584,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Accept incognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1316,6 +1318,11 @@
<target>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<target>Chat list</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat migrated!</target>
@@ -1379,7 +1386,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Clear</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1981,7 +1988,8 @@ This is your own one-time link!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Delete</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2188,11 +2196,6 @@ This is your own one-time link!</target>
<target>Deleted at: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<target>Deleted chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Deletion errors</target>
@@ -3077,7 +3080,7 @@ This is your own one-time link!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favorite</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3854,7 +3857,7 @@ Error: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Join</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3946,7 +3949,7 @@ This is your link for group %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Leave</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4341,7 +4344,7 @@ This is your link for group %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Mute</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4351,7 +4354,7 @@ This is your link for group %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Name</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4567,11 +4570,6 @@ This is your link for group %@!</target>
<target>Old database archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<target>One-hand UI</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>One-time invitation link</target>
@@ -5147,6 +5145,11 @@ Enable in *Network &amp; servers* settings.</target>
<target>Rate the app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<target>Reachable chat toolbar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<target>Reachable chat toolbar 👋</target>
@@ -5160,7 +5163,7 @@ Enable in *Network &amp; servers* settings.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Read</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5320,7 +5323,8 @@ Enable in *Network &amp; servers* settings.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Reject</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5422,6 +5426,11 @@ Enable in *Network &amp; servers* settings.</target>
<target>Reset</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<target>Reset all hints</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Reset all statistics</target>
@@ -6761,6 +6770,11 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<target>Toggle chat list:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Toggle incognito when connecting.</target>
@@ -6844,7 +6858,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Unfav.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6921,12 +6935,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Unmute</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Unread</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7420,6 +7434,11 @@ Repeat join request?</target>
<target>You can accept calls from lock screen, without device and app authentication.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<target>You can change it in Appearance settings.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>You can create it later</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Aceptar</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Aceptar incógnito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1305,6 +1307,10 @@
<target>Chat parado. Si has usado esta base de datos en otro dispositivo, debes transferirla de vuelta antes de iniciar Chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>¡Chat migrado!</target>
@@ -1368,7 +1374,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Vaciar</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1960,7 +1966,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Eliminar</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2163,10 +2170,6 @@ This is your own one-time link!</source>
<target>Eliminado: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Errores de borrado</target>
@@ -3044,7 +3047,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favoritos</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3817,7 +3820,7 @@ Error: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Unirte</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3908,7 +3911,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Salir</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4299,7 +4302,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Silenciar</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4309,7 +4312,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nombre</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4523,10 +4526,6 @@ This is your link for group %@!</source>
<target>Archivo de bases de datos antiguas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Enlace de invitación de un solo uso</target>
@@ -5100,6 +5099,10 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<target>Valora la aplicación</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5112,7 +5115,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Leer</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5272,7 +5275,8 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Rechazar</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5374,6 +5378,10 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<target>Restablecer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Restablecer estadísticas</target>
@@ -6702,6 +6710,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
<target>Para verificar el cifrado de extremo a extremo con tu contacto, compara (o escanea) el código en ambos dispositivos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Activa incógnito al conectar.</target>
@@ -6785,7 +6797,7 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>No fav.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6862,12 +6874,12 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Activar audio</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>No leído</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7359,6 +7371,10 @@ Repeat join request?</source>
<target>Puede aceptar llamadas desde la pantalla de bloqueo, sin autenticación de dispositivos y aplicaciones.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Puedes crearla más tarde</target>
@@ -542,7 +542,8 @@
<source>Accept</source>
<target>Hyväksy</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -557,7 +558,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Hyväksy tuntematon</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1237,6 +1239,10 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
@@ -1294,7 +1300,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Tyhjennä</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1846,7 +1852,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Poista</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2045,10 +2052,6 @@ This is your own one-time link!</source>
<target>Poistettu klo: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2878,7 +2881,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Suosikki</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3610,7 +3613,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Liity</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3693,7 +3696,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Poistu</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4057,7 +4060,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Mykistä</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4067,7 +4070,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nimi</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4271,10 +4274,6 @@ This is your link for group %@!</source>
<target>Vanha tietokanta-arkisto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Kertakutsulinkki</target>
@@ -4808,6 +4807,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Arvioi sovellus</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -4820,7 +4823,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Lue</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -4968,7 +4971,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Hylkää</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5064,6 +5068,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Oletustilaan</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6314,6 +6322,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
<target>Voit tarkistaa päästä päähän -salauksen kontaktisi kanssa vertaamalla (tai skannaamalla) laitteidenne koodia.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
@@ -6388,7 +6400,7 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Epäsuotuisa.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6462,12 +6474,12 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Poista mykistys</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Lukematon</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -6913,6 +6925,10 @@ Repeat join request?</source>
<target>Voit vastaanottaa puheluita lukitusnäytöltä ilman laitteen ja sovelluksen todennusta.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Voit luoda sen myöhemmin</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Accepter</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Accepter en incognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1307,6 +1309,10 @@
<target>Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Messagerie transférée!</target>
@@ -1370,7 +1376,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Effacer</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1963,7 +1969,8 @@ Il s'agit de votre propre lien unique !</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Supprimer</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2167,10 +2174,6 @@ Il s'agit de votre propre lien unique !</target>
<target>Supprimé à : %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Erreurs de suppression</target>
@@ -3053,7 +3056,7 @@ Il s'agit de votre propre lien unique !</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favoris</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3829,7 +3832,7 @@ Erreur: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Rejoindre</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3920,7 +3923,7 @@ Voici votre lien pour le groupe %@ !</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Quitter</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4312,7 +4315,7 @@ Voici votre lien pour le groupe %@ !</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Muet</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4322,7 +4325,7 @@ Voici votre lien pour le groupe %@ !</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nom</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4537,10 +4540,6 @@ Voici votre lien pour le groupe %@ !</target>
<target>Archives de l'ancienne base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Lien d'invitation unique</target>
@@ -5114,6 +5113,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<target>Évaluer l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5126,7 +5129,7 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Lire</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5286,7 +5289,8 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Rejeter</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5388,6 +5392,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<target>Réinitialisation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Réinitialiser toutes les statistiques</target>
@@ -6722,6 +6730,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Basculer en mode incognito lors de la connexion.</target>
@@ -6805,7 +6817,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Unfav.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6882,12 +6894,12 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Démute</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Non lu</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7379,6 +7391,10 @@ Répéter la demande d'adhésion ?</target>
<target>Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Vous pouvez la créer plus tard</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Elfogadás</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Fogadás inkognítóban</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1308,6 +1310,10 @@
<target>A csevegés leállt. Ha már használta ezt az adatbázist egy másik eszközön, úgy visszaállítás szükséges a csevegés megkezdése előtt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>A csevegés átköltöztetve!</target>
@@ -1371,7 +1377,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Kiürítés</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1964,7 +1970,8 @@ Ez az egyszer használatos hivatkozása!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Törlés</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2168,10 +2175,6 @@ Ez az egyszer használatos hivatkozása!</target>
<target>Törölve ekkor: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Törlési hibák</target>
@@ -3054,7 +3057,7 @@ Ez az egyszer használatos hivatkozása!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Kedvenc</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3830,7 +3833,7 @@ Hiba: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Csatlakozás</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3921,7 +3924,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Elhagyás</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4315,7 +4318,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Elnémítás</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4325,7 +4328,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Név</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4540,10 +4543,6 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
<target>Régi adatbázis archívum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Egyszer használatos meghívó hivatkozás</target>
@@ -5117,6 +5116,10 @@ Engedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban.<
<target>Értékelje az alkalmazást</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5129,7 +5132,7 @@ Engedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban.<
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Olvasd el</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5289,7 +5292,8 @@ Engedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban.<
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Elutasítás</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5391,6 +5395,10 @@ Engedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban.<
<target>Alaphelyzetbe állítás</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Minden statisztika visszaállítása</target>
@@ -6729,6 +6737,10 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
<target>A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Inkognitó mód kapcsolódáskor.</target>
@@ -6812,7 +6824,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Nem kedvelt.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6889,12 +6901,12 @@ A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsol
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Némítás feloldása</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Olvasatlan</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7387,6 +7399,10 @@ Csatlakozási kérés megismétlése?</target>
<target>Hívásokat fogadhat a lezárási képernyőről, eszköz- és alkalmazáshitelesítés nélkül.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Létrehozás később</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Accetta</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Accetta in incognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1308,6 +1310,10 @@
<target>La chat è ferma. Se hai già usato questo database su un altro dispositivo, dovresti trasferirlo prima di avviare la chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat migrata!</target>
@@ -1371,7 +1377,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Svuota</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1964,7 +1970,8 @@ Questo è il tuo link una tantum!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Elimina</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2168,10 +2175,6 @@ Questo è il tuo link una tantum!</target>
<target>Eliminato il: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Errori di eliminazione</target>
@@ -3054,7 +3057,7 @@ Questo è il tuo link una tantum!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Preferito</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3830,7 +3833,7 @@ Errore: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Entra</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3921,7 +3924,7 @@ Questo è il tuo link per il gruppo %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Esci</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4315,7 +4318,7 @@ Questo è il tuo link per il gruppo %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Silenzia</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4325,7 +4328,7 @@ Questo è il tuo link per il gruppo %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nome</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4540,10 +4543,6 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Vecchio archivio del database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Link di invito una tantum</target>
@@ -5117,6 +5116,10 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<target>Valuta l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5129,7 +5132,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Leggi</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5289,7 +5292,8 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Rifiuta</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5391,6 +5395,10 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<target>Ripristina</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Azzera tutte le statistiche</target>
@@ -6729,6 +6737,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Attiva/disattiva l'incognito quando ti colleghi.</target>
@@ -6812,7 +6824,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Non pref.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6889,12 +6901,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Riattiva notifiche</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Non letto</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7387,6 +7399,10 @@ Ripetere la richiesta di ingresso?</target>
<target>Puoi accettare chiamate dalla schermata di blocco, senza l'autenticazione del dispositivo e dell'app.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Puoi crearlo più tardi</target>
@@ -559,7 +559,8 @@
<source>Accept</source>
<target>承諾</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -574,7 +575,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>シークレットモードで承諾</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1261,6 +1263,10 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
@@ -1318,7 +1324,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>消す</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1870,7 +1876,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>削除</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2069,10 +2076,6 @@ This is your own one-time link!</source>
<target>削除完了: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2903,7 +2906,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>お気に入り</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3635,7 +3638,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>参加</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3718,7 +3721,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>脱退</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4081,7 +4084,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>ミュート</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4091,7 +4094,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>名前</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4296,10 +4299,6 @@ This is your link for group %@!</source>
<target>過去のデータベースアーカイブ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>使い捨ての招待リンク</target>
@@ -4834,6 +4833,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>アプリを評価</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -4846,7 +4849,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>読む</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -4993,7 +4996,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>拒否</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5089,6 +5093,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>戻す</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6332,6 +6340,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
@@ -6406,7 +6418,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>お気に入りを取り消す。</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6480,12 +6492,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>ミュート解除</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>未読</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -6931,6 +6943,10 @@ Repeat join request?</source>
<target>デバイスやアプリの認証を行わずに、ロック画面から通話を受けることができます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>後からでも作成できます</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Accepteer</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Accepteer incognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1308,6 +1310,10 @@
<target>Chat is gestopt. Als je deze database al op een ander apparaat hebt gebruikt, moet je deze terugzetten voordat je met chatten begint.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat gemigreerd!</target>
@@ -1371,7 +1377,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Wissen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1964,7 +1970,8 @@ Dit is uw eigen eenmalige link!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Verwijderen</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2168,10 +2175,6 @@ Dit is uw eigen eenmalige link!</target>
<target>Verwijderd om: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Verwijderingsfouten</target>
@@ -3054,7 +3057,7 @@ Dit is uw eigen eenmalige link!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favoriet</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3830,7 +3833,7 @@ Fout: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Word lid van</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3921,7 +3924,7 @@ Dit is jouw link voor groep %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Verlaten</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4315,7 +4318,7 @@ Dit is jouw link voor groep %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Dempen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4325,7 +4328,7 @@ Dit is jouw link voor groep %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Naam</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4540,10 +4543,6 @@ Dit is jouw link voor groep %@!</target>
<target>Oud database archief</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Eenmalige uitnodiging link</target>
@@ -5117,6 +5116,10 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<target>Beoordeel de app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5129,7 +5132,7 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Lees</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5289,7 +5292,8 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Afwijzen</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5391,6 +5395,10 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<target>Resetten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Reset alle statistieken</target>
@@ -6729,6 +6737,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
<target>Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contact te verifiëren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Schakel incognito in tijdens het verbinden.</target>
@@ -6812,7 +6824,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Niet fav.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6889,12 +6901,12 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Dempen opheffen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Ongelezen</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7387,6 +7399,10 @@ Deelnameverzoek herhalen?</target>
<target>U kunt oproepen van het vergrendelingsscherm accepteren, zonder apparaat- en app-verificatie.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>U kan het later maken</target>
@@ -566,7 +566,8 @@
<source>Accept</source>
<target>Akceptuj</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -581,7 +582,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Akceptuj incognito</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1305,6 +1307,10 @@
<target>Czat został zatrzymany. Jeśli korzystałeś już z tej bazy danych na innym urządzeniu, powinieneś przenieść ją z powrotem przed rozpoczęciem czatu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Czat zmigrowany!</target>
@@ -1368,7 +1374,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Wyczyść</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1960,7 +1966,8 @@ To jest twój jednorazowy link!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Usuń</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2163,10 +2170,6 @@ To jest twój jednorazowy link!</target>
<target>Usunięto o: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<target>Błędy usuwania</target>
@@ -3044,7 +3047,7 @@ To jest twój jednorazowy link!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Ulubione</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3817,7 +3820,7 @@ Błąd: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Dołącz</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3908,7 +3911,7 @@ To jest twój link do grupy %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Opuść</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4299,7 +4302,7 @@ To jest twój link do grupy %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Wycisz</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4309,7 +4312,7 @@ To jest twój link do grupy %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Nazwa</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4523,10 +4526,6 @@ To jest twój link do grupy %@!</target>
<target>Stare archiwum bazy danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Jednorazowy link zaproszenia</target>
@@ -5100,6 +5099,10 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<target>Oceń aplikację</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5112,7 +5115,7 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Czytaj</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5272,7 +5275,8 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Odrzuć</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5374,6 +5378,10 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<target>Resetuj</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<target>Resetuj wszystkie statystyki</target>
@@ -6702,6 +6710,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
<target>Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Przełącz incognito przy połączeniu.</target>
@@ -6785,7 +6797,7 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Nie ulub.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6862,12 +6874,12 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Wyłącz wyciszenie</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Nieprzeczytane</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7359,6 +7371,10 @@ Powtórzyć prośbę dołączenia?</target>
<target>Możesz przyjmować połączenia z ekranu blokady, bez uwierzytelniania urządzenia i aplikacji.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Możesz go utworzyć później</target>
@@ -565,7 +565,8 @@
<source>Accept</source>
<target>Принять</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -580,7 +581,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Принять инкогнито</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1290,6 +1292,10 @@
<target>Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Чат мигрирован!</target>
@@ -1349,7 +1355,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Очистить</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1927,7 +1933,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Удалить</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2129,10 +2136,6 @@ This is your own one-time link!</source>
<target>Удалено: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2998,7 +3001,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Избранный</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3762,7 +3765,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Вступить</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3853,7 +3856,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Выйти</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4234,7 +4237,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Без звука</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4244,7 +4247,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Имя</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4456,10 +4459,6 @@ This is your link for group %@!</source>
<target>Старый архив чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Одноразовая ссылка</target>
@@ -5023,6 +5022,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Оценить приложение</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5035,7 +5038,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Прочитано</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5186,7 +5189,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Отклонить</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5287,6 +5291,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Сбросить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6580,6 +6588,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Чтобы подтвердить end-to-end шифрование с Вашим контактом сравните (или сканируйте) код безопасности на Ваших устройствах.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Установите режим Инкогнито при соединении.</target>
@@ -6661,7 +6673,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Не избр.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6738,12 +6750,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Уведомлять</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Не прочитано</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7226,6 +7238,10 @@ Repeat join request?</source>
<target>Вы можете принимать звонки на экране блокировки, без аутентификации.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Вы можете создать его позже</target>
@@ -535,7 +535,8 @@
<source>Accept</source>
<target>รับ</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -549,7 +550,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>ยอมรับโหมดไม่ระบุตัวตน</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1229,6 +1231,10 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
@@ -1286,7 +1292,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>ลบ</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1835,7 +1841,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>ลบ</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2034,10 +2041,6 @@ This is your own one-time link!</source>
<target>ลบที่: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2863,7 +2866,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>ที่ชอบ</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3593,7 +3596,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>เข้าร่วม</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3676,7 +3679,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>ออกจาก</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4039,7 +4042,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>ปิดเสียง</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4049,7 +4052,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>ชื่อ</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4252,10 +4255,6 @@ This is your link for group %@!</source>
<target>คลังฐานข้อมูลเก่า</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>ลิงก์คำเชิญแบบใช้ครั้งเดียว</target>
@@ -4787,6 +4786,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>ให้คะแนนแอป</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -4799,7 +4802,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>อ่าน</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -4946,7 +4949,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>ปฏิเสธ</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5041,6 +5045,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>รีเซ็ต</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6286,6 +6294,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>ในการตรวจสอบการเข้ารหัสแบบ encrypt จากต้นจนจบ กับผู้ติดต่อของคุณ ให้เปรียบเทียบ (หรือสแกน) รหัสบนอุปกรณ์ของคุณ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
@@ -6360,7 +6372,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>เลิกชอบ</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6434,12 +6446,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>เปิดเสียง</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>เปลี่ยนเป็นยังไม่ได้อ่าน</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -6883,6 +6895,10 @@ Repeat join request?</source>
<target>คุณสามารถรับสายจากหน้าจอล็อกโดยไม่ต้องมีการตรวจสอบสิทธิ์อุปกรณ์และแอป</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>คุณสามารถสร้างได้ในภายหลัง</target>
@@ -565,7 +565,8 @@
<source>Accept</source>
<target>Kabul et</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -580,7 +581,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Takma adla kabul et</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1290,6 +1292,10 @@
<target>Sohbet durduruldu. Bu veritabanını zaten başka bir cihazda kullandıysanız, sohbete başlamadan önce onu geri aktarmalısınız.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Sohbet taşındı!</target>
@@ -1349,7 +1355,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Temizle</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1928,7 +1934,8 @@ Bu senin kendi tek kullanımlık bağlantın!</target>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Sil</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2130,10 +2137,6 @@ Bu senin kendi tek kullanımlık bağlantın!</target>
<target>%@ de silindi</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2999,7 +3002,7 @@ Bu senin kendi tek kullanımlık bağlantın!</target>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favori</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3763,7 +3766,7 @@ Hata: %2$@</target>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Katıl</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3854,7 +3857,7 @@ Bu senin grup için bağlantın %@!</target>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Ayrıl</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4236,7 +4239,7 @@ Bu senin grup için bağlantın %@!</target>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Sustur</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4246,7 +4249,7 @@ Bu senin grup için bağlantın %@!</target>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>İsim</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4458,10 +4461,6 @@ Bu senin grup için bağlantın %@!</target>
<target>Eski veritabanı arşivi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Tek zamanlı bağlantı daveti</target>
@@ -5025,6 +5024,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Uygulamayı değerlendir</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5037,7 +5040,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Oku</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5188,7 +5191,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Reddet</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5289,6 +5293,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Sıfırla</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6582,6 +6590,10 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec
<target>Kişinizle uçtan uca şifrelemeyi doğrulamak için cihazlarınızdaki kodu karşılaştırın (veya tarayın).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Bağlanırken gizli moda geçiş yap.</target>
@@ -6663,7 +6675,7 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Favorilerden çık.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6740,12 +6752,12 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Susturmayı kaldır</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Okunmamış</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7228,6 +7240,10 @@ Katılma isteği tekrarlansın mı?</target>
<target>Cihaz ve uygulama kimlik doğrulaması olmadan kilit ekranından çağrı kabul edebilirsiniz.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Daha sonra oluşturabilirsiniz</target>
@@ -565,7 +565,8 @@
<source>Accept</source>
<target>Прийняти</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -580,7 +581,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>Прийняти інкогніто</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1290,6 +1292,10 @@
<target>Чат зупинено. Якщо ви вже використовували цю базу даних на іншому пристрої, перенесіть її назад перед запуском чату.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Чат перемістився!</target>
@@ -1349,7 +1355,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Чисто</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1928,7 +1934,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>Видалити</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2130,10 +2137,6 @@ This is your own one-time link!</source>
<target>Видалено за: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2999,7 +3002,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Улюблений</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3763,7 +3766,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Приєднуйтесь</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3854,7 +3857,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>Залишити</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4236,7 +4239,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Вимкнути звук</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4246,7 +4249,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>Ім'я</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4458,10 +4461,6 @@ This is your link for group %@!</source>
<target>Старий архів бази даних</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>Посилання на одноразове запрошення</target>
@@ -5025,6 +5024,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Оцініть додаток</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -5037,7 +5040,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Читати</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5188,7 +5191,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Відхилити</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5289,6 +5293,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Перезавантаження</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6582,6 +6590,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Щоб перевірити наскрізне шифрування з вашим контактом, порівняйте (або відскануйте) код на ваших пристроях.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>Увімкніть інкогніто при підключенні.</target>
@@ -6663,7 +6675,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Нелюб.</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6740,12 +6752,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Увімкнути звук</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>Непрочитане</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7228,6 +7240,10 @@ Repeat join request?</source>
<target>Ви можете приймати дзвінки з екрана блокування без автентифікації пристрою та програми.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>Ви можете створити його пізніше</target>
@@ -553,7 +553,8 @@
<source>Accept</source>
<target>接受</target>
<note>accept contact request via notification
accept incoming call via notification</note>
accept incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
@@ -568,7 +569,8 @@
<trans-unit id="Accept incognito" xml:space="preserve">
<source>Accept incognito</source>
<target>接受隐身聊天</target>
<note>accept contact request via notification</note>
<note>accept contact request via notification
swipe action</note>
</trans-unit>
<trans-unit id="Acknowledged" xml:space="preserve">
<source>Acknowledged</source>
@@ -1274,6 +1276,10 @@
<target>聊天已停止。如果你已经在另一台设备商使用过此数据库,你应该在启动聊天前将数据库传输回来。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat list" xml:space="preserve">
<source>Chat list</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>已迁移聊天!</target>
@@ -1332,7 +1338,7 @@
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>清除</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
<source>Clear conversation</source>
@@ -1901,7 +1907,8 @@ This is your own one-time link!</source>
<trans-unit id="Delete" xml:space="preserve">
<source>Delete</source>
<target>删除</target>
<note>chat item action</note>
<note>chat item action
swipe action</note>
</trans-unit>
<trans-unit id="Delete %lld messages of members?" xml:space="preserve">
<source>Delete %lld messages of members?</source>
@@ -2102,10 +2109,6 @@ This is your own one-time link!</source>
<target>已删除于:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted chats" xml:space="preserve">
<source>Deleted chats</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deletion errors" xml:space="preserve">
<source>Deletion errors</source>
<note>No comment provided by engineer.</note>
@@ -2962,7 +2965,7 @@ This is your own one-time link!</source>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>最喜欢</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="File error" xml:space="preserve">
<source>File error</source>
@@ -3718,7 +3721,7 @@ Error: %2$@</source>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>加入</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
@@ -3805,7 +3808,7 @@ This is your link for group %@!</source>
<trans-unit id="Leave" xml:space="preserve">
<source>Leave</source>
<target>离开</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Leave group" xml:space="preserve">
<source>Leave group</source>
@@ -4182,7 +4185,7 @@ This is your link for group %@!</source>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>静音</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Muted when inactive!" xml:space="preserve">
<source>Muted when inactive!</source>
@@ -4192,7 +4195,7 @@ This is your link for group %@!</source>
<trans-unit id="Name" xml:space="preserve">
<source>Name</source>
<target>名称</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
@@ -4403,10 +4406,6 @@ This is your link for group %@!</source>
<target>旧数据库存档</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-hand UI" xml:space="preserve">
<source>One-hand UI</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="One-time invitation link" xml:space="preserve">
<source>One-time invitation link</source>
<target>一次性邀请链接</target>
@@ -4954,6 +4953,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>评价此应用程序</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
<source>Reachable chat toolbar</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reachable chat toolbar 👋" xml:space="preserve">
<source>Reachable chat toolbar 👋</source>
<note>No comment provided by engineer.</note>
@@ -4966,7 +4969,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>已读</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve">
<source>Read more</source>
@@ -5116,7 +5119,8 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>拒绝</target>
<note>reject incoming call via notification</note>
<note>reject incoming call via notification
swipe action</note>
</trans-unit>
<trans-unit id="Reject (sender NOT notified)" xml:space="preserve">
<source>Reject (sender NOT notified)</source>
@@ -5217,6 +5221,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>重置</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all hints" xml:space="preserve">
<source>Reset all hints</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reset all statistics" xml:space="preserve">
<source>Reset all statistics</source>
<note>No comment provided by engineer.</note>
@@ -6501,6 +6509,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle chat list:" xml:space="preserve">
<source>Toggle chat list:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
<source>Toggle incognito when connecting.</source>
<target>在连接时切换隐身模式。</target>
@@ -6581,7 +6593,7 @@ You will be prompted to complete authentication before this feature is enabled.<
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>取消最喜欢</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
@@ -6657,12 +6669,12 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>取消静音</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
<source>Unread</source>
<target>未读</target>
<note>No comment provided by engineer.</note>
<note>swipe action</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
@@ -7131,6 +7143,10 @@ Repeat join request?</source>
<target>您可以从锁屏上接听电话,无需设备和应用程序的认证。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can change it in Appearance settings." xml:space="preserve">
<source>You can change it in Appearance settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can create it later" xml:space="preserve">
<source>You can create it later</source>
<target>您可以以后创建它</target>
+42 -34
View File
@@ -205,6 +205,7 @@
CE3097FB2C4C0C9F00180898 /* ErrorAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3097FA2C4C0C9F00180898 /* ErrorAlert.swift */; };
CE38A29A2C3FCA54005ED185 /* ImageUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBD2859295711D700EC2CF4 /* ImageUtils.swift */; };
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = CE38A29B2C3FCD72005ED185 /* SwiftyGif */; };
CE75480A2C622630009579B7 /* SwipeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7548092C622630009579B7 /* SwipeLabel.swift */; };
CE984D4B2C36C5D500E3AEFF /* ChatItemClipShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */; };
CEDE70222C48FD9500233B1F /* SEChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE70212C48FD9500233B1F /* SEChatState.swift */; };
CEE723AA2C3BD3D70009AE93 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE723A92C3BD3D70009AE93 /* ShareViewController.swift */; };
@@ -219,12 +220,13 @@
D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = D77B92DB2952372200A5A1CC /* SwiftyGif */; };
D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; };
E50581062C3DDD9D009C3F71 /* Yams in Frameworks */ = {isa = PBXBuildFile; productRef = E50581052C3DDD9D009C3F71 /* Yams */; };
E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51CC1E52C62085600DB91FE /* OneHandUICard.swift */; };
E51CC1F62C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51CC1F12C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a */; };
E51CC1F72C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51CC1F22C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a */; };
E51CC1F82C62BAB900DB91FE /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51CC1F32C62BAB900DB91FE /* libgmp.a */; };
E51CC1F92C62BAB900DB91FE /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51CC1F42C62BAB900DB91FE /* libgmpxx.a */; };
E51CC1FA2C62BAB900DB91FE /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51CC1F52C62BAB900DB91FE /* libffi.a */; };
E5DCF8DB2C56FAC1007928CC /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; };
E5DCF8E12C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DCF8DC2C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a */; };
E5DCF8E22C5847EB007928CC /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DCF8DD2C5847EB007928CC /* libgmp.a */; };
E5DCF8E32C5847EB007928CC /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DCF8DE2C5847EB007928CC /* libgmpxx.a */; };
E5DCF8E42C5847EB007928CC /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DCF8DF2C5847EB007928CC /* libffi.a */; };
E5DCF8E52C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DCF8E02C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a */; };
E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; };
E5DCF9842C5902CE007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9822C5902CE007928CC /* Localizable.strings */; };
E5DCF9982C5906FF007928CC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9962C5906FF007928CC /* InfoPlist.strings */; };
@@ -546,6 +548,7 @@
CE1EB0E32C459A660099D896 /* ShareAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareAPI.swift; sourceTree = "<group>"; };
CE2AD9CD2C452A4D00E844E3 /* ChatUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatUtils.swift; sourceTree = "<group>"; };
CE3097FA2C4C0C9F00180898 /* ErrorAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorAlert.swift; sourceTree = "<group>"; };
CE7548092C622630009579B7 /* SwipeLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeLabel.swift; sourceTree = "<group>"; };
CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemClipShape.swift; sourceTree = "<group>"; };
CEDE70212C48FD9500233B1F /* SEChatState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SEChatState.swift; sourceTree = "<group>"; };
CEE723A72C3BD3D70009AE93 /* SimpleX SE.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SimpleX SE.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -559,11 +562,12 @@
D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; };
D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; };
D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
E5DCF8DC2C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a"; sourceTree = "<group>"; };
E5DCF8DD2C5847EB007928CC /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
E5DCF8DE2C5847EB007928CC /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
E5DCF8DF2C5847EB007928CC /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
E5DCF8E02C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a"; sourceTree = "<group>"; };
E51CC1E52C62085600DB91FE /* OneHandUICard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneHandUICard.swift; sourceTree = "<group>"; };
E51CC1F12C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a"; sourceTree = "<group>"; };
E51CC1F22C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a"; sourceTree = "<group>"; };
E51CC1F32C62BAB900DB91FE /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
E51CC1F42C62BAB900DB91FE /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
E51CC1F52C62BAB900DB91FE /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
E5DCF9702C590272007928CC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
E5DCF9722C590274007928CC /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = "<group>"; };
E5DCF9732C590275007928CC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
@@ -654,15 +658,15 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E51CC1F72C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a in Frameworks */,
E51CC1F82C62BAB900DB91FE /* libgmp.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
E51CC1F92C62BAB900DB91FE /* libgmpxx.a in Frameworks */,
E50581062C3DDD9D009C3F71 /* Yams in Frameworks */,
E5DCF8E52C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a in Frameworks */,
E5DCF8E42C5847EB007928CC /* libffi.a in Frameworks */,
E5DCF8E12C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a in Frameworks */,
E5DCF8E22C5847EB007928CC /* libgmp.a in Frameworks */,
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */,
E5DCF8E32C5847EB007928CC /* libgmpxx.a in Frameworks */,
E51CC1FA2C62BAB900DB91FE /* libffi.a in Frameworks */,
E51CC1F62C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -739,11 +743,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
E5DCF8DF2C5847EB007928CC /* libffi.a */,
E5DCF8DD2C5847EB007928CC /* libgmp.a */,
E5DCF8DE2C5847EB007928CC /* libgmpxx.a */,
E5DCF8E02C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB-ghc9.6.3.a */,
E5DCF8DC2C5847EB007928CC /* libHSsimplex-chat-6.0.0.3-5yF58NJ20MV4vZ7jQKFAxB.a */,
E51CC1F52C62BAB900DB91FE /* libffi.a */,
E51CC1F32C62BAB900DB91FE /* libgmp.a */,
E51CC1F42C62BAB900DB91FE /* libgmpxx.a */,
E51CC1F12C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu-ghc9.6.3.a */,
E51CC1F22C62BAB900DB91FE /* libHSsimplex-chat-6.0.0.4-3xUPNxPQ4Yz9H0nVfm7Usu.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -799,6 +803,7 @@
8C74C3ED2C1B942300039E77 /* ChatWallpaper.swift */,
8C9BC2642C240D5100875A27 /* ThemeModeEditor.swift */,
CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */,
CE7548092C622630009579B7 /* SwipeLabel.swift */,
);
path = Helpers;
sourceTree = "<group>";
@@ -945,6 +950,7 @@
5C10D88728EED12E00E58BF0 /* ContactConnectionInfo.swift */,
18415835CBD939A9ABDC108A /* UserPicker.swift */,
64EEB0F62C353F1C00972D62 /* ServersSummaryView.swift */,
E51CC1E52C62085600DB91FE /* OneHandUICard.swift */,
);
path = ChatList;
sourceTree = "<group>";
@@ -1371,6 +1377,7 @@
5C93292F29239A170090FFF9 /* ProtocolServersView.swift in Sources */,
5CB924D727A8563F00ACCCDD /* SettingsView.swift in Sources */,
5CEACCE327DE9246000BD591 /* ComposeView.swift in Sources */,
E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */,
5C65DAF929D0CC20003CEE45 /* DeveloperView.swift in Sources */,
5C36027327F47AD5009F19D9 /* AppDelegate.swift in Sources */,
5CB924E127A867BA00ACCCDD /* UserProfile.swift in Sources */,
@@ -1453,6 +1460,7 @@
64D0C2C229FA57AB00B38D5F /* UserAddressLearnMore.swift in Sources */,
8CE848A32C5A0FA000D5C7C8 /* SelectableChatItemToolbars.swift in Sources */,
64466DCC29FFE3E800E3D48D /* MailView.swift in Sources */,
CE75480A2C622630009579B7 /* SwipeLabel.swift in Sources */,
5C971E2127AEBF8300C8A3CE /* ChatInfoImage.swift in Sources */,
5C55A921283CCCB700C4E99E /* IncomingCallView.swift in Sources */,
6454036F2822A9750090DDFF /* ComposeFileView.swift in Sources */,
@@ -1888,7 +1896,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1937,7 +1945,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1978,11 +1986,11 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.Tests-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -1998,11 +2006,11 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.Tests-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -2023,7 +2031,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GCC_OPTIMIZATION_LEVEL = s;
@@ -2060,7 +2068,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_CODE_COVERAGE = NO;
@@ -2097,7 +2105,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2148,7 +2156,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 229;
CURRENT_PROJECT_VERSION = 230;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2199,7 +2207,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
@@ -2214,7 +2222,7 @@
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-SE";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -2233,7 +2241,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 230;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
@@ -2248,7 +2256,7 @@
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 6.0;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-SE";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
+1 -1
View File
@@ -1933,7 +1933,7 @@ public enum DatabaseError: Decodable, Hashable {
public enum SQLiteError: Decodable, Hashable {
case errorNotADatabase
case error(String)
case error(dbError: String)
}
public enum AgentErrorType: Decodable, Hashable {
+3 -1
View File
@@ -55,6 +55,7 @@ public let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphra
public let GROUP_DEFAULT_CONFIRM_DB_UPGRADES = "confirmDBUpgrades"
public let GROUP_DEFAULT_CALL_KIT_ENABLED = "callKitEnabled"
public let GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED = "pqExperimentalEnabled" // no longer used
public let GROUP_DEFAULT_ONE_HAND_UI = "oneHandUI"
public let APP_GROUP_NAME = "group.chat.simplex.app"
@@ -81,7 +82,7 @@ public func registerGroupDefaults() {
GROUP_DEFAULT_INCOGNITO: false,
GROUP_DEFAULT_STORE_DB_PASSPHRASE: true,
GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false,
GROUP_DEFAULT_PERFORM_LA: true,
GROUP_DEFAULT_PERFORM_LA: false,
GROUP_DEFAULT_ALLOW_SHARE_EXTENSION: false,
GROUP_DEFAULT_PRIVACY_LINK_PREVIEWS: false,
GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
@@ -92,6 +93,7 @@ public func registerGroupDefaults() {
GROUP_DEFAULT_CONFIRM_DB_UPGRADES: false,
GROUP_DEFAULT_CALL_KIT_ENABLED: true,
GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED: false,
GROUP_DEFAULT_ONE_HAND_UI: true
])
}
@@ -19,6 +19,8 @@ import chat.simplex.res.MR
import dev.icerock.moko.resources.ImageResource
import dev.icerock.moko.resources.StringResource
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.flow.internal.ChannelFlow
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.datetime.*
@@ -301,9 +303,7 @@ object ChatModel {
else
chat.chatStats
)
if (i > 0) {
chats.add(index = 0, chats.removeAt(i))
}
popChatCollector.addChat(chat.remoteHostId, chat.id)
} else {
addChat(Chat(remoteHostId = rhId, chatInfo = cInfo, chatItems = arrayListOf(cItem)))
}
@@ -421,6 +421,32 @@ object ChatModel {
}
}
private val popChatCollector = PopChatCollector()
class PopChatCollector {
private val subject = MutableSharedFlow<Unit>()
init {
withLongRunningApi {
subject
.throttleLatest(2000)
.collect {
withChats {
chats.replaceAll(chats.value.sortedByDescending { it.popTs })
}
}
}
}
suspend fun addChat(remoteHostId: Long?, chatId: ChatId) {
val index = getChatIndex(remoteHostId, chatId)
if (index >= 0) {
chats.value[index].popTs = Clock.System.now()
subject.emit(Unit)
}
}
}
fun markChatItemsRead(remoteHostId: Long?, chatInfo: ChatInfo, range: CC.ItemRange? = null, unreadCountAfter: Int? = null) {
val cInfo = chatInfo
val markedRead = markItemsReadInCurrentChat(chatInfo, range)
@@ -671,6 +697,7 @@ object ChatModel {
showingInvitation.value = null
chatModel.chatItems.clear()
chatModel.chatId.value = withId
ModalManager.start.closeModals()
ModalManager.end.closeModals()
}
}
@@ -681,6 +708,7 @@ object ChatModel {
chatModel.chatItems.clear()
chatModel.chatId.value = null
// Close NewChatView
ModalManager.start.closeModals()
ModalManager.center.closeModals()
ModalManager.end.closeModals()
}
@@ -845,6 +873,9 @@ data class Chat(
val chatItems: List<ChatItem>,
val chatStats: ChatStats = ChatStats()
) {
@Transient
var popTs: Instant? = null
val nextSendGrpInv: Boolean
get() = when (chatInfo) {
is ChatInfo.Direct -> chatInfo.contact.nextSendGrpInv
@@ -159,6 +159,7 @@ class AppPreferences {
val incognito = mkBoolPreference(SHARED_PREFS_INCOGNITO, false)
val liveMessageAlertShown = mkBoolPreference(SHARED_PREFS_LIVE_MESSAGE_ALERT_SHOWN, false)
val showHiddenProfilesNotice = mkBoolPreference(SHARED_PREFS_SHOW_HIDDEN_PROFILES_NOTICE, true)
val oneHandUICardShown = mkBoolPreference(SHARED_PREFS_ONE_HAND_UI_CARD_SHOWN, false)
val showMuteProfileAlert = mkBoolPreference(SHARED_PREFS_SHOW_MUTE_PROFILE_ALERT, true)
val appLanguage = mkStrPreference(SHARED_PREFS_APP_LANGUAGE, null)
val appUpdateChannel = mkEnumPreference(SHARED_PREFS_APP_UPDATE_CHANNEL, AppUpdatesChannel.DISABLED) { AppUpdatesChannel.entries.firstOrNull { it.name == this } }
@@ -227,6 +228,16 @@ class AppPreferences {
val oneHandUI = mkBoolPreference(SHARED_PREFS_ONE_HAND_UI, appPlatform.isAndroid)
val hintPreferences: List<Pair<SharedPreference<Boolean>, Boolean>> = listOf(
laNoticeShown to false,
oneHandUICardShown to false,
liveMessageAlertShown to false,
showHiddenProfilesNotice to true,
showMuteProfileAlert to true,
showDeleteConversationNotice to true,
showDeleteContactNotice to true,
)
private fun mkIntPreference(prefName: String, default: Int) =
SharedPreference(
get = fun() = settings.getInt(prefName, default),
@@ -372,6 +383,7 @@ class AppPreferences {
private const val SHARED_PREFS_INCOGNITO = "Incognito"
private const val SHARED_PREFS_LIVE_MESSAGE_ALERT_SHOWN = "LiveMessageAlertShown"
private const val SHARED_PREFS_SHOW_HIDDEN_PROFILES_NOTICE = "ShowHiddenProfilesNotice"
private const val SHARED_PREFS_ONE_HAND_UI_CARD_SHOWN = "OneHandUICardShown"
private const val SHARED_PREFS_SHOW_MUTE_PROFILE_ALERT = "ShowMuteProfileAlert"
private const val SHARED_PREFS_STORE_DB_PASSPHRASE = "StoreDBPassphrase"
private const val SHARED_PREFS_INITIAL_RANDOM_DB_PASSPHRASE = "InitialRandomDBPassphrase"
@@ -519,7 +531,10 @@ object ChatController {
suspend fun startChatWithTemporaryDatabase(ctrl: ChatCtrl, netCfg: NetCfg): User? {
Log.d(TAG, "startChatWithTemporaryDatabase")
val migrationActiveUser = apiGetActiveUser(null, ctrl) ?: apiCreateActiveUser(null, Profile(displayName = "Temp", fullName = ""), ctrl = ctrl)
apiSetNetworkConfig(netCfg, ctrl)
if (!apiSetNetworkConfig(netCfg, ctrl)) {
Log.e(TAG, "Error setting network config, stopping migration")
return null
}
apiSetAppFilePaths(
getMigrationTempFilesDirectory().absolutePath,
getMigrationTempFilesDirectory().absolutePath,
@@ -5759,7 +5774,7 @@ sealed class DatabaseError {
@Serializable
sealed class SQLiteError {
@Serializable @SerialName("errorNotADatabase") object ErrorNotADatabase: SQLiteError()
@Serializable @SerialName("error") class Error(val error: String): SQLiteError()
@Serializable @SerialName("error") class Error(val dbError: String): SQLiteError()
}
@Serializable
@@ -31,8 +31,7 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.unit.*
import chat.simplex.common.model.*
import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.model.ChatModel.controller
@@ -545,20 +544,22 @@ fun ChatInfoLayout(
SectionSpacer()
Row(
Modifier
.fillMaxWidth()
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
Box(
Modifier.fillMaxWidth(),
contentAlignment = Alignment.Center
) {
SearchButton(chat, contact, close, onSearchClicked)
Spacer(Modifier.weight(1f))
AudioCallButton(chat, contact)
Spacer(Modifier.weight(1f))
VideoButton(chat, contact)
Spacer(Modifier.weight(1f))
MuteButton(chat, contact)
Row(
Modifier
.widthIn(max = 460.dp)
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically
) {
SearchButton(modifier = Modifier.fillMaxWidth(0.25f), chat, contact, close, onSearchClicked)
AudioCallButton(modifier = Modifier.fillMaxWidth(0.33f), chat, contact)
VideoButton(modifier = Modifier.fillMaxWidth(0.5f), chat, contact)
MuteButton(modifier = Modifier.fillMaxWidth(1f), chat, contact)
}
}
SectionSpacer()
@@ -779,9 +780,16 @@ fun LocalAliasEditor(
}
@Composable
fun SearchButton(chat: Chat, contact: Contact, close: () -> Unit, onSearchClicked: () -> Unit) {
fun SearchButton(
modifier: Modifier,
chat: Chat,
contact: Contact,
close: () -> Unit,
onSearchClicked: () -> Unit
) {
val disabled = !contact.ready || chat.chatItems.isEmpty()
InfoViewActionButton(
modifier = modifier,
icon = painterResource(MR.images.ic_search),
title = generalGetString(MR.strings.info_view_search_button),
disabled = disabled,
@@ -796,11 +804,16 @@ fun SearchButton(chat: Chat, contact: Contact, close: () -> Unit, onSearchClicke
}
@Composable
fun MuteButton(chat: Chat, contact: Contact) {
fun MuteButton(
modifier: Modifier,
chat: Chat,
contact: Contact
) {
val ntfsEnabled = remember { mutableStateOf(chat.chatInfo.ntfsEnabled) }
val disabled = !contact.ready || !contact.active
InfoViewActionButton(
modifier = modifier,
icon = if (ntfsEnabled.value) painterResource(MR.images.ic_notifications_off) else painterResource(MR.images.ic_notifications),
title = if (ntfsEnabled.value) stringResource(MR.strings.mute_chat) else stringResource(MR.strings.unmute_chat),
disabled = disabled,
@@ -812,8 +825,13 @@ fun MuteButton(chat: Chat, contact: Contact) {
}
@Composable
fun AudioCallButton(chat: Chat, contact: Contact) {
fun AudioCallButton(
modifier: Modifier,
chat: Chat,
contact: Contact
) {
CallButton(
modifier = modifier,
chat,
contact,
icon = painterResource(MR.images.ic_call),
@@ -823,8 +841,13 @@ fun AudioCallButton(chat: Chat, contact: Contact) {
}
@Composable
fun VideoButton(chat: Chat, contact: Contact) {
fun VideoButton(
modifier: Modifier,
chat: Chat,
contact: Contact
) {
CallButton(
modifier = modifier,
chat,
contact,
icon = painterResource(MR.images.ic_videocam),
@@ -834,7 +857,14 @@ fun VideoButton(chat: Chat, contact: Contact) {
}
@Composable
fun CallButton(chat: Chat, contact: Contact, icon: Painter, title: String, mediaType: CallMediaType) {
fun CallButton(
modifier: Modifier,
chat: Chat,
contact: Contact,
icon: Painter,
title: String,
mediaType: CallMediaType
) {
val canCall = contact.ready && contact.active && contact.mergedPreferences.calls.enabled.forUser && chatModel.activeCall.value == null
val needToAllowCallsToContact = remember(chat.chatInfo) {
chat.chatInfo is ChatInfo.Direct && with(chat.chatInfo.contact.mergedPreferences.calls) {
@@ -845,6 +875,7 @@ fun CallButton(chat: Chat, contact: Contact, icon: Painter, title: String, media
val allowedCallsByPrefs = remember(chat.chatInfo) { chat.chatInfo.featureEnabled(ChatFeature.Calls) }
InfoViewActionButton(
modifier = modifier,
icon = icon,
title = title,
disabled = chatModel.activeCall.value != null,
@@ -907,42 +938,52 @@ private fun showCallsProhibitedAlert() {
)
}
// for ChatInfoView (it has most buttons - 4) we use Spacer(Modifier.weight(1f)) to fit,
// for GroupChat And GroupMemberInfoViews (2 to 3 buttons) we use this as approximately equal to spacing in ChatInfoView
val INFO_VIEW_BUTTONS_PADDING = 36.dp
@Composable
fun InfoViewActionButton(icon: Painter, title: String, disabled: Boolean, disabledLook: Boolean, onClick: () -> Unit) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
IconButton(
onClick = onClick,
enabled = !disabled
fun InfoViewActionButton(
modifier: Modifier,
icon: Painter,
title: String,
disabled: Boolean,
disabledLook: Boolean,
onClick: () -> Unit
) {
Box(modifier) {
Column(
Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Box(
modifier = Modifier
.background(
if (disabledLook) MaterialTheme.colors.secondaryVariant else MaterialTheme.colors.primary,
shape = CircleShape
)
.padding(16.dp)
IconButton(
onClick = onClick,
enabled = !disabled
) {
Icon(
icon,
contentDescription = null,
Modifier.size(24.dp * fontSizeSqrtMultiplier),
tint = if (disabledLook) MaterialTheme.colors.secondary else MaterialTheme.colors.onPrimary
)
Box(
Modifier
.size(56.dp)
.background(
if (disabledLook) MaterialTheme.colors.secondaryVariant else MaterialTheme.colors.primary,
shape = CircleShape
),
contentAlignment = Alignment.Center
) {
Icon(
icon,
contentDescription = null,
Modifier.size(24.dp * fontSizeSqrtMultiplier),
tint = if (disabledLook) MaterialTheme.colors.secondary else MaterialTheme.colors.onPrimary
)
}
}
Text(
title.capitalize(Locale.current),
Modifier.padding(top = DEFAULT_SPACE_AFTER_ICON),
style = MaterialTheme.typography.subtitle2.copy(fontWeight = FontWeight.Normal, fontSize = 12.sp),
color = MaterialTheme.colors.secondary,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
Text(
title.capitalize(Locale.current),
style = MaterialTheme.typography.subtitle2.copy(fontWeight = FontWeight.Normal),
color = MaterialTheme.colors.secondary,
modifier = Modifier.padding(top = DEFAULT_SPACE_AFTER_ICON)
)
}
}
@@ -23,8 +23,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.unit.*
import chat.simplex.common.model.*
import chat.simplex.common.model.ChatModel.withChats
import chat.simplex.common.ui.theme.*
@@ -184,10 +183,17 @@ private fun removeMemberAlert(rhId: Long?, groupInfo: GroupInfo, mem: GroupMembe
}
@Composable
fun SearchButton(chat: Chat, group: GroupInfo, close: () -> Unit, onSearchClicked: () -> Unit) {
fun SearchButton(
modifier: Modifier,
chat: Chat,
group: GroupInfo,
close: () -> Unit,
onSearchClicked: () -> Unit
) {
val disabled = !group.ready || chat.chatItems.isEmpty()
InfoViewActionButton(
modifier = modifier,
icon = painterResource(MR.images.ic_search),
title = generalGetString(MR.strings.info_view_search_button),
disabled = disabled,
@@ -202,10 +208,15 @@ fun SearchButton(chat: Chat, group: GroupInfo, close: () -> Unit, onSearchClicke
}
@Composable
fun MuteButton(chat: Chat, groupInfo: GroupInfo) {
fun MuteButton(
modifier: Modifier,
chat: Chat,
groupInfo: GroupInfo
) {
val ntfsEnabled = remember { mutableStateOf(chat.chatInfo.ntfsEnabled) }
InfoViewActionButton(
modifier = modifier,
icon = if (ntfsEnabled.value) painterResource(MR.images.ic_notifications_off) else painterResource(MR.images.ic_notifications),
title = if (ntfsEnabled.value) stringResource(MR.strings.mute_chat) else stringResource(MR.strings.unmute_chat),
disabled = !groupInfo.ready,
@@ -217,8 +228,13 @@ fun MuteButton(chat: Chat, groupInfo: GroupInfo) {
}
@Composable
fun AddGroupMembersButton(chat: Chat, groupInfo: GroupInfo) {
fun AddGroupMembersButton(
modifier: Modifier,
chat: Chat,
groupInfo: GroupInfo
) {
InfoViewActionButton(
modifier = modifier,
icon = if (groupInfo.incognito) painterResource(MR.images.ic_add_link) else painterResource(MR.images.ic_person_add_500),
title = stringResource(MR.strings.action_button_add_members),
disabled = !groupInfo.ready,
@@ -278,20 +294,26 @@ fun GroupChatInfoLayout(
}
SectionSpacer()
Row(
Modifier
.fillMaxWidth()
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
Box(
Modifier.fillMaxWidth(),
contentAlignment = Alignment.Center
) {
SearchButton(chat, groupInfo, close, onSearchClicked)
if (groupInfo.canAddMembers) {
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
AddGroupMembersButton(chat, groupInfo)
Row(
Modifier
.widthIn(max = if (groupInfo.canAddMembers) 320.dp else 230.dp)
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically
) {
if (groupInfo.canAddMembers) {
SearchButton(modifier = Modifier.fillMaxWidth(0.33f), chat, groupInfo, close, onSearchClicked)
AddGroupMembersButton(modifier = Modifier.fillMaxWidth(0.5f), chat, groupInfo)
MuteButton(modifier = Modifier.fillMaxWidth(1f), chat, groupInfo)
} else {
SearchButton(modifier = Modifier.fillMaxWidth(0.5f), chat, groupInfo, close, onSearchClicked)
MuteButton(modifier = Modifier.fillMaxWidth(1f), chat, groupInfo)
}
}
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
MuteButton(chat, groupInfo)
}
SectionSpacer()
@@ -327,49 +327,49 @@ fun GroupMemberInfoLayout(
val contactId = member.memberContactId
Row(
Modifier
.fillMaxWidth()
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
Box(
Modifier.fillMaxWidth(),
contentAlignment = Alignment.Center
) {
val knownChat = if (contactId != null) knownDirectChat(contactId) else null
if (knownChat != null) {
val (chat, contact) = knownChat
OpenChatButton(onClick = { openDirectChat(contact.contactId) })
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
AudioCallButton(chat, contact)
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
VideoButton(chat, contact)
} else if (groupInfo.fullGroupPreferences.directMessages.on(groupInfo.membership)) {
if (contactId != null) {
OpenChatButton(onClick = { openDirectChat(contactId) }) // legacy - only relevant for direct contacts created when joining group
} else {
OpenChatButton(onClick = { createMemberContact() })
Row(
Modifier
.widthIn(max = 320.dp)
.padding(horizontal = DEFAULT_PADDING),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically
) {
val knownChat = if (contactId != null) knownDirectChat(contactId) else null
if (knownChat != null) {
val (chat, contact) = knownChat
OpenChatButton(modifier = Modifier.fillMaxWidth(0.33f), onClick = { openDirectChat(contact.contactId) })
AudioCallButton(modifier = Modifier.fillMaxWidth(0.5f), chat, contact)
VideoButton(modifier = Modifier.fillMaxWidth(1f), chat, contact)
} else if (groupInfo.fullGroupPreferences.directMessages.on(groupInfo.membership)) {
if (contactId != null) {
OpenChatButton(modifier = Modifier.fillMaxWidth(0.33f), onClick = { openDirectChat(contactId) }) // legacy - only relevant for direct contacts created when joining group
} else {
OpenChatButton(modifier = Modifier.fillMaxWidth(0.33f), onClick = { createMemberContact() })
}
InfoViewActionButton(modifier = Modifier.fillMaxWidth(0.5f), painterResource(MR.images.ic_call), generalGetString(MR.strings.info_view_call_button), disabled = false, disabledLook = true, onClick = {
showSendMessageToEnableCallsAlert()
})
InfoViewActionButton(modifier = Modifier.fillMaxWidth(1f), painterResource(MR.images.ic_videocam), generalGetString(MR.strings.info_view_video_button), disabled = false, disabledLook = true, onClick = {
showSendMessageToEnableCallsAlert()
})
} else { // no known contact chat && directMessages are off
InfoViewActionButton(modifier = Modifier.fillMaxWidth(0.33f), painterResource(MR.images.ic_chat_bubble), generalGetString(MR.strings.info_view_message_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_send_message_to_member_alert_title))
})
InfoViewActionButton(modifier = Modifier.fillMaxWidth(0.5f), painterResource(MR.images.ic_call), generalGetString(MR.strings.info_view_call_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title))
})
InfoViewActionButton(modifier = Modifier.fillMaxWidth(1f), painterResource(MR.images.ic_videocam), generalGetString(MR.strings.info_view_video_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title))
})
}
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
InfoViewActionButton(painterResource(MR.images.ic_call), generalGetString(MR.strings.info_view_call_button), disabled = false, disabledLook = true, onClick = {
showSendMessageToEnableCallsAlert()
})
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
InfoViewActionButton(painterResource(MR.images.ic_videocam), generalGetString(MR.strings.info_view_video_button), disabled = false, disabledLook = true, onClick = {
showSendMessageToEnableCallsAlert()
})
} else { // no known contact chat && directMessages are off
InfoViewActionButton(painterResource(MR.images.ic_chat_bubble), generalGetString(MR.strings.info_view_message_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_send_message_to_member_alert_title))
})
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
InfoViewActionButton(painterResource(MR.images.ic_call), generalGetString(MR.strings.info_view_call_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title))
})
Spacer(Modifier.width(INFO_VIEW_BUTTONS_PADDING))
InfoViewActionButton(painterResource(MR.images.ic_videocam), generalGetString(MR.strings.info_view_video_button), disabled = false, disabledLook = true, onClick = {
showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title))
})
}
}
SectionSpacer()
if (member.memberActive) {
@@ -580,8 +580,12 @@ fun RemoveMemberButton(onClick: () -> Unit) {
}
@Composable
fun OpenChatButton(onClick: () -> Unit) {
fun OpenChatButton(
modifier: Modifier,
onClick: () -> Unit
) {
InfoViewActionButton(
modifier = modifier,
icon = painterResource(MR.images.ic_chat_bubble),
title = generalGetString(MR.strings.info_view_message_button),
disabled = false,
@@ -12,6 +12,7 @@ import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.*
import androidx.compose.ui.graphics.*
import androidx.compose.ui.text.font.FontStyle
@@ -30,11 +31,11 @@ import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.helpers.*
import chat.simplex.common.views.onboarding.WhatsNewView
import chat.simplex.common.views.onboarding.shouldShowWhatsNew
import chat.simplex.common.views.usersettings.SettingsView
import chat.simplex.common.platform.*
import chat.simplex.common.views.call.Call
import chat.simplex.common.views.chat.item.CIFileViewScope
import chat.simplex.common.views.newchat.*
import chat.simplex.common.views.usersettings.*
import chat.simplex.res.MR
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.MutableStateFlow
@@ -70,10 +71,72 @@ private fun showNewChatSheet(oneHandUI: State<Boolean>) {
}
}
@Composable
fun ToggleChatListCard() {
Column(
modifier = Modifier
.padding(16.dp)
.clip(RoundedCornerShape(18.dp))
) {
Box(
modifier = Modifier
.background(MaterialTheme.appColors.sentMessage)
) {
Box(
modifier = Modifier.fillMaxWidth().matchParentSize().padding(5.dp),
contentAlignment = Alignment.TopEnd
) {
IconButton(
onClick = {
appPrefs.oneHandUICardShown.set(true)
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.one_hand_ui),
text = generalGetString(MR.strings.one_hand_ui_change_instruction),
)
}
) {
Icon(
painterResource(MR.images.ic_close), stringResource(MR.strings.back), tint = MaterialTheme.colors.secondary
)
}
}
Column(
modifier = Modifier
.padding(horizontal = DEFAULT_PADDING)
.padding(top = DEFAULT_PADDING)
) {
Row(
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth()
) {
Text(stringResource(MR.strings.one_hand_ui_card_title), style = MaterialTheme.typography.h3)
}
Row(
Modifier.fillMaxWidth().padding(top = 6.dp, bottom = 12.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text(stringResource(MR.strings.one_hand_ui), Modifier.weight(10f), style = MaterialTheme.typography.body1)
Spacer(Modifier.fillMaxWidth().weight(1f))
SharedPreferenceToggle(
appPrefs.oneHandUI,
enabled = true,
onChange = {
val c = CurrentColors.value.colors
platform.androidSetStatusAndNavBarColors(c.isLight, c.background, !appPrefs.oneHandUI.get(), appPrefs.oneHandUI.get())
}
)
}
}
}
}
}
@Composable
fun ChatListView(chatModel: ChatModel, settingsState: SettingsViewState, setPerformLA: (Boolean) -> Unit, stopped: Boolean) {
val oneHandUI = remember { appPrefs.oneHandUI.state }
LaunchedEffect(Unit) {
if (shouldShowWhatsNew(chatModel)) {
delay(1000L)
@@ -337,7 +400,7 @@ fun SubscriptionStatusIndicator(click: (() -> Unit)) {
val scope = rememberCoroutineScope()
suspend fun setSubsTotal() {
if (chatModel.currentUser.value != null) {
if (chatModel.currentUser.value != null && chatModel.controller.hasChatCtrl() && chatModel.chatRunning.value == true) {
val r = chatModel.controller.getAgentSubsTotal(chatModel.remoteHostId())
if (r != null) {
subs = r.first
@@ -547,6 +610,7 @@ private fun ChatList(chatModel: ChatModel, searchText: MutableState<TextFieldVal
var previousScrollOffset by remember { mutableStateOf(0) }
val keyboardState by getKeyboardState()
val oneHandUI = remember { appPrefs.oneHandUI.state }
val oneHandUICardShown = remember { appPrefs.oneHandUICardShown.state }
LaunchedEffect(listState.firstVisibleItemIndex, listState.firstVisibleItemScrollOffset) {
val currentIndex = listState.firstVisibleItemIndex
@@ -610,6 +674,11 @@ private fun ChatList(chatModel: ChatModel, searchText: MutableState<TextFieldVal
}
}
}
if (appPlatform.isAndroid && !oneHandUICardShown.value) {
item {
ToggleChatListCard()
}
}
itemsIndexed(chats, key = { _, chat -> chat.remoteHostId to chat.id }) { index, chat ->
val nextChatSelected = remember(chat.id, chats) { derivedStateOf {
chatModel.chatId.value != null && chats.getOrNull(index + 1)?.id == chatModel.chatId.value
@@ -16,6 +16,7 @@ import chat.simplex.res.MR
import com.charleskorn.kaml.decodeFromStream
import dev.icerock.moko.resources.StringResource
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import kotlinx.serialization.encodeToString
import java.io.*
import java.net.URI
@@ -535,6 +536,13 @@ fun TextUnit.toDp(): Dp {
return Dp(value * LocalDensity.current.fontScale)
}
fun <T> Flow<T>.throttleLatest(delayMillis: Long): Flow<T> = this
.conflate()
.transform {
emit(it)
delay(delayMillis)
}
@Composable
fun DisposableEffectOnGone(always: () -> Unit = {}, whenDispose: () -> Unit = {}, whenGone: () -> Unit) {
DisposableEffect(Unit) {
@@ -516,8 +516,11 @@ suspend fun initTemporaryDatabase(tempDatabaseFile: File, netCfg: NetCfg): Pair<
try {
if (ctrl != null) {
val user = startChatWithTemporaryDatabase(ctrl, netCfg)
return if (user != null) ctrl to user else null
if (user != null) return ctrl to user
chatCloseStore(ctrl)
}
File(tempDatabaseFile.absolutePath + "_chat.db").delete()
File(tempDatabaseFile.absolutePath + "_agent.db").delete()
} catch (e: Throwable) {
Log.e(TAG, "Error while starting chat in temporary database: ${e.stackTraceToString()}")
}
@@ -515,7 +515,9 @@ private fun MutableState<MigrationToState?>.prepareDatabase(
withLongRunningApi {
val ctrlAndUser = initTemporaryDatabase(tempDatabaseFile, netCfg)
if (ctrlAndUser == null) {
state = MigrationToState.DownloadFailed(0, link, archivePath(), netCfg)
// Probably, something wrong with network config or database initialization, let's start from scratch
state = MigrationToState.PasteOrScanLink
MigrationToDeviceState.save(null)
return@withLongRunningApi
}
@@ -250,7 +250,6 @@ private fun NewChatSheetLayout(
icon = it.first,
text = it.second,
click = it.third,
extraPadding = true,
)
}
}
@@ -283,7 +282,7 @@ private fun NewChatSheetLayout(
contentDescription = stringResource(MR.strings.deleted_chats),
tint = MaterialTheme.colors.secondary,
)
TextIconSpaced(extraPadding = true)
TextIconSpaced(false)
Text(text = stringResource(MR.strings.deleted_chats), color = MaterialTheme.colors.onBackground)
}
}
@@ -330,14 +329,13 @@ private fun NewChatButton(
text: String,
click: () -> Unit,
textColor: Color = Color.Unspecified,
iconColor: Color = MaterialTheme.colors.secondary,
disabled: Boolean = false,
extraPadding: Boolean = false,
iconColor: Color = MaterialTheme.colors.primary,
disabled: Boolean = false
) {
SectionItemView(click, disabled = disabled) {
Row {
Icon(icon, text, tint = if (disabled) MaterialTheme.colors.secondary else iconColor)
TextIconSpaced(extraPadding)
TextIconSpaced(false)
Text(text, color = if (disabled) MaterialTheme.colors.secondary else textColor)
}
}
@@ -30,7 +30,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
val currentVersion = remember { mutableStateOf(versionDescriptions.lastIndex) }
@Composable
fun featureDescription(icon: Painter, titleId: StringResource, descrId: StringResource, link: String?) {
fun featureDescription(icon: ImageResource?, titleId: StringResource, descrId: StringResource?, link: String?, subfeatures: List<Pair<ImageResource, StringResource>>) {
@Composable
fun linkButton(link: String) {
val uriHandler = LocalUriHandler.current
@@ -47,7 +47,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
horizontalArrangement = Arrangement.spacedBy(8.dp),
modifier = Modifier.padding(bottom = 4.dp)
) {
Icon(icon, stringResource(titleId), tint = MaterialTheme.colors.secondary)
if (icon != null) Icon(painterResource(icon), stringResource(titleId), tint = MaterialTheme.colors.secondary)
Text(
generalGetString(titleId),
maxLines = 2,
@@ -59,7 +59,17 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
linkButton(link)
}
}
Text(generalGetString(descrId), fontSize = 15.sp)
if (descrId != null) Text(generalGetString(descrId), fontSize = 15.sp)
for ((si, sd) in subfeatures) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp),
modifier = Modifier.padding(bottom = 4.dp)
) {
Icon(painterResource(si), stringResource(sd), tint = MaterialTheme.colors.secondary)
Text(generalGetString(sd), fontSize = 15.sp)
}
}
}
}
@@ -116,7 +126,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
v.features.forEach { feature ->
if (feature.show) {
featureDescription(painterResource(feature.icon), feature.titleId, feature.descrId, feature.link)
featureDescription(feature.icon, feature.titleId, feature.descrId, feature.link, feature.subfeatures)
}
}
@@ -157,9 +167,10 @@ fun ReadMoreButton(url: String) {
}
private data class FeatureDescription(
val icon: ImageResource,
val icon: ImageResource?,
val titleId: StringResource,
val descrId: StringResource,
val descrId: StringResource?,
var subfeatures: List<Pair<ImageResource, StringResource>> = listOf(),
val link: String? = null,
val show: Boolean = true
)
@@ -595,14 +606,24 @@ private val versionDescriptions: List<VersionDescription> = listOf(
post = "https://simplex.chat/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.html",
features = listOf(
FeatureDescription(
icon = MR.images.ic_settings_ethernet,
titleId = MR.strings.v5_8_private_routing,
descrId = MR.strings.v6_0_private_routing_descr
icon = null,
titleId = MR.strings.v6_0_new_chat_experience,
descrId = null,
subfeatures = listOf(
MR.images.ic_add_link to MR.strings.v6_0_connect_faster_descr,
MR.images.ic_inventory_2 to MR.strings.v6_0_your_contacts_descr,
MR.images.ic_delete to MR.strings.v6_0_delete_many_messages_descr,
MR.images.ic_match_case to MR.strings.v6_0_increase_font_size
)
),
FeatureDescription(
icon = MR.images.ic_id_card,
titleId = MR.strings.v6_0_your_contacts,
descrId = MR.strings.v6_0_your_contacts_descr
icon = null,
titleId = MR.strings.v6_0_new_media_options,
descrId = null,
subfeatures = listOf(
MR.images.ic_play_arrow_filled to MR.strings.v6_0_chat_list_media,
MR.images.ic_blur_on to MR.strings.v6_0_privacy_blur,
)
),
FeatureDescription(
icon = MR.images.ic_toast,
@@ -611,20 +632,21 @@ private val versionDescriptions: List<VersionDescription> = listOf(
show = appPlatform.isAndroid
),
FeatureDescription(
icon = MR.images.ic_link,
titleId = MR.strings.v6_0_connect_faster,
descrId = MR.strings.v6_0_connect_faster_descr
),
FeatureDescription(
icon = MR.images.ic_delete,
titleId = MR.strings.v6_0_delete_many_messages,
descrId = MR.strings.v6_0_delete_many_messages_descr
icon = MR.images.ic_settings_ethernet,
titleId = MR.strings.v5_8_private_routing,
descrId = MR.strings.v6_0_private_routing_descr
),
FeatureDescription(
icon = MR.images.ic_wifi_tethering,
titleId = MR.strings.v6_0_connection_servers_status,
descrId = MR.strings.v6_0_connection_servers_status_descr
)
),
FeatureDescription(
icon = MR.images.ic_upgrade,
titleId = MR.strings.v6_0_upgrade_app,
descrId = MR.strings.v6_0_upgrade_app_descr,
show = appPlatform.isDesktop
),
),
)
)
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
import chat.simplex.common.model.*
@@ -30,9 +31,11 @@ fun DeveloperView(
AppBarTitle(stringResource(MR.strings.settings_developer_tools))
val developerTools = m.controller.appPrefs.developerTools
val devTools = remember { developerTools.state }
val unchangedHints = mutableStateOf(unchangedHintPreferences())
SectionView {
InstallTerminalAppItem(uriHandler)
ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential), showCustomModal { it, close -> TerminalView(it, close) }) }
ResetHintsItem(unchangedHints)
SettingsPreferenceItem(painterResource(MR.images.ic_code), stringResource(MR.strings.show_developer_options), developerTools)
SectionTextFooter(
generalGetString(if (devTools.value) MR.strings.show_dev_options else MR.strings.hide_dev_options) + " " +
@@ -330,6 +330,31 @@ fun ChatLockItem(
}
}
@Composable fun ResetHintsItem(unchangedHints: MutableState<Boolean>) {
SectionItemView({
resetHintPreferences()
unchangedHints.value = true
}, disabled = unchangedHints.value) {
Icon(
painter = painterResource(MR.images.ic_lightbulb),
contentDescription = "Lightbulb",
tint = MaterialTheme.colors.secondary,
)
TextIconSpaced()
Text(generalGetString(MR.strings.reset_all_hints), color = if (unchangedHints.value) MaterialTheme.colors.secondary else MaterialTheme.colors.primary)
}
}
private fun resetHintPreferences() {
for ((pref, def) in appPreferences.hintPreferences) {
pref.set(def)
}
}
fun unchangedHintPreferences(): Boolean = appPreferences.hintPreferences.all { (pref, def) ->
pref.state.value == def
}
@Composable
fun AppVersionItem(showVersion: () -> Unit) {
SectionItemViewWithIcon(showVersion) { AppVersionText() }
@@ -739,6 +739,7 @@
<string name="xftp_servers_other">Other XFTP servers</string>
<string name="subscription_percentage">Show percentage</string>
<string name="install_simplex_chat_for_terminal">Install SimpleX Chat for terminal</string>
<string name="reset_all_hints">Reset all hints</string>
<string name="star_on_github">Star on GitHub</string>
<string name="contribute">Contribute</string>
<string name="rate_the_app">Rate the app</string>
@@ -1294,6 +1295,8 @@
<string name="incompatible_database_version">Incompatible database version</string>
<string name="confirm_database_upgrades">Confirm database upgrades</string>
<string name="one_hand_ui">Reachable chat toolbar</string>
<string name="one_hand_ui_card_title">Toggle chat list:</string>
<string name="one_hand_ui_change_instruction">You can change it in Appearance settings.</string>
<string name="terminal_always_visible">Show console in new window</string>
<string name="chat_list_always_visible">Show chat list in new window</string>
<string name="invalid_migration_confirmation">Invalid migration confirmation</string>
@@ -1974,15 +1977,19 @@
<string name="v5_8_message_delivery">Improved message delivery</string>
<string name="v5_8_message_delivery_descr">With reduced battery usage.</string>
<string name="v5_8_persian_ui">Persian UI</string>
<string name="v6_0_new_chat_experience">New chat experience 🎉</string>
<string name="v6_0_new_media_options">New media options</string>
<string name="v6_0_private_routing_descr">It protects your IP address and connections.</string>
<string name="v6_0_your_contacts">Your contacts your way</string>
<string name="v6_0_your_contacts_descr">- Search contacts when starting chat.\n- Archive contacts to chat later.</string>
<string name="v6_0_reachable_chat_toolbar">Reachable chat toolbar 👋</string>
<string name="v6_0_your_contacts_descr">Archive contacts to chat later.</string>
<string name="v6_0_reachable_chat_toolbar">Reachable chat toolbar</string>
<string name="v6_0_reachable_chat_toolbar_descr">Use the app with one hand.</string>
<string name="v6_0_connect_faster">Connect to your friends faster</string>
<string name="v6_0_connect_faster_descr">Even when they are offline.</string>
<string name="v6_0_delete_many_messages">Moderate like a pro ✋</string>
<string name="v6_0_connect_faster_descr">Connect to your friends faster.</string>
<string name="v6_0_delete_many_messages_descr">Delete up to 20 messages at once.</string>
<string name="v6_0_chat_list_media">Play from the chat list.</string>
<string name="v6_0_privacy_blur">Blur for better privacy.</string>
<string name="v6_0_increase_font_size">Increase font size.</string>
<string name="v6_0_upgrade_app">Upgrade app automatically</string>
<string name="v6_0_upgrade_app_descr">Download new versions from GitHub.</string>
<string name="v6_0_connection_servers_status">Control your network</string>
<string name="v6_0_connection_servers_status_descr">Connection and servers status.</string>
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368">
<path
d="M480-84.5q-33.5 0-56.75-23.25T400-164.5h160q0 33.5-23.25 56.75T480-84.5Zm-160-143V-285h320v57.5H320Zm4.5-119.5q-65-42.5-102.75-106T184-595.87q0-120.39 87.76-208.26 87.77-87.87 208-87.87Q600-892 688-804.13q88 87.87 88 208.26 0 79.37-37.25 142.87T635.5-347h-311Zm21.32-57.5h269.3q47.88-32 75.63-82.51 27.75-50.51 27.75-108.95 0-98.04-70.04-168.29-70.04-70.25-168.37-70.25-98.34 0-168.46 70.12-70.13 70.12-70.13 168.57 0 58.49 28 108.9 28 50.41 76.32 82.41Zm134.18 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 604 B

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000">
<path
d="M246-382.5 209-277q-2 6.5-8.25 10.75T187-262q-12 0-18.5-9.25t-2-20.75L308-681.5q3-7.5 8.75-11.5t13.25-4h18q7.5 0 13.25 4t8.75 11.5l142.5 389q4.5 11.5-2.5 21t-19.5 9.5q-7.5 0-13.75-3.75t-8.25-11.75l-37-105H246Zm15.5-42h155l-77-217.5H338l-76.5 217.5Zm403 172.5q-50 0-82.5-26t-32.5-69.5q0-47.5 35-75.75t93-28.25q24.5 0 47 4.5t39 13v-20q0-38-20.25-58.25T684-532.5q-17.5 0-34.5 5.25T618-511q-8 5.5-15.75 3T590-517.5q-4.5-6.5-3.25-15T597-547q20-13 42.25-18.75T685-571.5q59.5 0 90.75 30.75T807-450v166.5q0 9-6.25 15.25T786-262q-9 0-15.25-6.25T764.5-283v-21H761q-16 26.5-43.5 39.25t-53 12.75Zm-.5-36.5q36.5 0 68.5-30.25t32-77.75q-16-8-38-13t-43.5-5q-42 0-65.5 17.5T594-348q0 27 20.5 43.25T664-288.5Z" />
</svg>

After

Width:  |  Height:  |  Size: 831 B

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000">
<path
d="M310-165q-12.5 0-20.5-8.25t-8-20.75q0-12 8-20.25t20.5-8.25h340q12.5 0 20.75 8.25T679-194q0 12.5-8.25 20.75T650-165H310Zm170-165q-12.5 0-20.5-8.25t-8-20.75v-327L349-583.5q-8.5 8.5-20 8.5t-20-8.5q-9-9-9-20.25t9-20.25l151-151q4.5-4.5 9.25-6.75T480-784q6 0 10.75 2.25t9.75 6.75l151 151q8.5 9 8.5 20.25T651.5-584q-9 9-20.25 9T611-584L509-686v327q0 12.5-8.25 20.75T480-330Z" />
</svg>

After

Width:  |  Height:  |  Size: 507 B

+4 -4
View File
@@ -26,11 +26,11 @@ android.enableJetifier=true
kotlin.mpp.androidSourceSetLayoutVersion=2
kotlin.jvm.target=11
android.version_name=6.0-beta.2
android.version_code=227
android.version_name=6.0-beta.3
android.version_code=228
desktop.version_name=6.0-beta.2
desktop.version_code=58
desktop.version_name=6.0-beta.3
desktop.version_code=59
kotlin.version=1.9.23
gradle.plugin.version=8.2.0
+1 -1
View File
@@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package
type: git
location: https://github.com/simplex-chat/simplexmq.git
tag: a76e15fd77d68a09bc43820c1cf6bd1c71700100
tag: 7d8457263bb77c6d9cb1cd102c3c70177e75327f
source-repository-package
type: git
+1 -1
View File
@@ -1,5 +1,5 @@
name: simplex-chat
version: 6.0.0.4
version: 6.0.0.5
#synopsis:
#description:
homepage: https://github.com/simplex-chat/simplex-chat#readme
+1 -1
View File
@@ -1,5 +1,5 @@
{
"https://github.com/simplex-chat/simplexmq.git"."a76e15fd77d68a09bc43820c1cf6bd1c71700100" = "07vrjpid03w8f1himhvaaljzspwxxkln814k5kx0yw9hhmabh7zy";
"https://github.com/simplex-chat/simplexmq.git"."7d8457263bb77c6d9cb1cd102c3c70177e75327f" = "1n95mp2qmx9nj25zzqibkgx7s23shw7c26mf42bw661aprx4v24m";
"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";
+1 -1
View File
@@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack
name: simplex-chat
version: 6.0.0.4
version: 6.0.0.5
category: Web, System, Services, Cryptography
homepage: https://github.com/simplex-chat/simplex-chat#readme
author: simplex.chat
+1 -1
View File
@@ -1204,7 +1204,7 @@ data DatabaseError
| DBErrorOpen {sqliteError :: SQLiteError}
deriving (Show, Exception)
data SQLiteError = SQLiteErrorNotADatabase | SQLiteError String
data SQLiteError = SQLiteErrorNotADatabase | SQLiteError {dbError :: String}
deriving (Show, Exception)
throwDBError :: DatabaseError -> CM ()