ios: create group link with one click (#1566)

* ios: create group link with one click

* line break

* move call
This commit is contained in:
Evgeny Poberezkin
2022-12-13 17:15:45 +00:00
committed by GitHub
parent 70a9c01477
commit 21765905a7
7 changed files with 78 additions and 36 deletions
@@ -163,7 +163,9 @@ fun GroupChatInfoLayout(
SectionView(title = String.format(generalGetString(R.string.group_info_section_title_num_members), members.count() + 1)) {
if (groupInfo.canAddMembers) {
SectionItemView(manageGroupLink) { GroupLinkButton() }
SectionItemView(manageGroupLink) {
GroupLinkButton()
}
SectionDivider()
val onAddMembersClick = if (chat.chatInfo.incognito) ::cantInviteIncognitoAlert else addMembers
SectionItemView(onAddMembersClick) {
@@ -204,7 +204,11 @@ struct GroupChatInfoView: View {
.navigationBarTitle("Group link")
.navigationBarTitleDisplayMode(.large)
} label: {
Label("Group link", systemImage: "link")
if groupLink == nil {
Label("Create group link", systemImage: "link.badge.plus")
} else {
Label("Group link", systemImage: "link")
}
}
}
@@ -12,6 +12,7 @@ import SimpleXChat
struct GroupLinkView: View {
var groupId: Int64
@Binding var groupLink: String?
@State private var creatingLink = false
@State private var alert: GroupLinkAlert?
private enum GroupLinkAlert: Identifiable {
@@ -48,18 +49,17 @@ struct GroupLinkView: View {
}
.frame(maxWidth: .infinity)
} else {
Button {
Task {
do {
groupLink = try await apiCreateGroupLink(groupId)
} catch let error {
logger.error("GroupLinkView apiCreateGroupLink: \(responseError(error))")
let a = getErrorAlert(error, "Error creating group link")
alert = .error(title: a.title, error: a.message)
}
}
} label: { Label("Create link", systemImage: "link.badge.plus") }
Button(action: createGroupLink) {
Label("Create link", systemImage: "link.badge.plus")
}
.frame(maxWidth: .infinity)
.disabled(creatingLink)
.padding(.bottom)
if creatingLink {
ProgressView()
.scaleEffect(2)
.frame(maxWidth: .infinity)
}
}
}
.padding()
@@ -74,9 +74,7 @@ struct GroupLinkView: View {
Task {
do {
try await apiDeleteGroupLink(groupId)
await MainActor.run {
groupLink = nil
}
await MainActor.run { groupLink = nil }
} catch let error {
logger.error("GroupLinkView apiDeleteGroupLink: \(responseError(error))")
}
@@ -87,6 +85,31 @@ struct GroupLinkView: View {
return Alert(title: Text(title), message: Text(error))
}
}
.onAppear {
if groupLink == nil && !creatingLink {
createGroupLink()
}
}
}
}
private func createGroupLink() {
Task {
do {
creatingLink = true
let link = try await apiCreateGroupLink(groupId)
await MainActor.run {
creatingLink = false
groupLink = link
}
} catch let error {
logger.error("GroupLinkView apiCreateGroupLink: \(responseError(error))")
await MainActor.run {
creatingLink = false
let a = getErrorAlert(error, "Error creating group link")
alert = .error(title: a.title, error: a.message)
}
}
}
}
}
@@ -705,6 +705,10 @@
<target>Adresse erstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create link" xml:space="preserve">
<source>Create link</source>
<target>Link erzeugen</target>
@@ -708,6 +708,11 @@
<target>Create address</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Create group link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create link" xml:space="preserve">
<source>Create link</source>
<target>Create link</target>
@@ -708,6 +708,10 @@
<target>Создать адрес</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create link" xml:space="preserve">
<source>Create link</source>
<target>Создать ссылку</target>
+20 -20
View File
@@ -95,6 +95,11 @@
5CB9250D27A9432000ACCCDD /* ChatListNavLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB9250C27A9432000ACCCDD /* ChatListNavLink.swift */; };
5CBE6C12294487F7002D9531 /* VerifyCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBE6C11294487F7002D9531 /* VerifyCodeView.swift */; };
5CBE6C142944CC12002D9531 /* ScanCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBE6C132944CC12002D9531 /* ScanCodeView.swift */; };
5CBE6C2E2948E5B9002D9531 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CBE6C292948E5B9002D9531 /* libgmp.a */; };
5CBE6C2F2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CBE6C2A2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a */; };
5CBE6C302948E5B9002D9531 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CBE6C2B2948E5B9002D9531 /* libgmpxx.a */; };
5CBE6C312948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CBE6C2C2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a */; };
5CBE6C322948E5B9002D9531 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CBE6C2D2948E5B9002D9531 /* libffi.a */; };
5CC1C99227A6C7F5000D9FF6 /* QRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1C99127A6C7F5000D9FF6 /* QRCode.swift */; };
5CC1C99527A6CF7F000D9FF6 /* ShareSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */; };
5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; };
@@ -139,11 +144,6 @@
644EFFE0292CFD7F00525D5B /* CIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */; };
644EFFE2292D089800525D5B /* FramedCIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */; };
644EFFE42937BE9700525D5B /* MarkedDeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFE32937BE9700525D5B /* MarkedDeletedItemView.swift */; };
644EFFF62941BD6900525D5B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644EFFF12941BD6800525D5B /* libffi.a */; };
644EFFF72941BD6900525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644EFFF22941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a */; };
644EFFF82941BD6900525D5B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644EFFF32941BD6800525D5B /* libgmp.a */; };
644EFFF92941BD6900525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644EFFF42941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a */; };
644EFFFA2941BD6900525D5B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644EFFF52941BD6900525D5B /* libgmpxx.a */; };
6454036F2822A9750090DDFF /* ComposeFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6454036E2822A9750090DDFF /* ComposeFileView.swift */; };
646BB38C283BEEB9001CE359 /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 646BB38B283BEEB9001CE359 /* LocalAuthentication.framework */; };
646BB38E283FDB6D001CE359 /* LocalAuthenticationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 646BB38D283FDB6D001CE359 /* LocalAuthenticationUtils.swift */; };
@@ -310,6 +310,11 @@
5CB9250C27A9432000ACCCDD /* ChatListNavLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListNavLink.swift; sourceTree = "<group>"; };
5CBE6C11294487F7002D9531 /* VerifyCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyCodeView.swift; sourceTree = "<group>"; };
5CBE6C132944CC12002D9531 /* ScanCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanCodeView.swift; sourceTree = "<group>"; };
5CBE6C292948E5B9002D9531 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgmp.a; path = ios/libgmp.a; sourceTree = "<group>"; };
5CBE6C2A2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a"; path = "ios/libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a"; sourceTree = "<group>"; };
5CBE6C2B2948E5B9002D9531 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgmpxx.a; path = ios/libgmpxx.a; sourceTree = "<group>"; };
5CBE6C2C2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a"; path = "ios/libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a"; sourceTree = "<group>"; };
5CBE6C2D2948E5B9002D9531 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libffi.a; path = ios/libffi.a; sourceTree = "<group>"; };
5CC1C99127A6C7F5000D9FF6 /* QRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCode.swift; sourceTree = "<group>"; };
5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareSheet.swift; sourceTree = "<group>"; };
5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -352,11 +357,6 @@
644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIVoiceView.swift; sourceTree = "<group>"; };
644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FramedCIVoiceView.swift; sourceTree = "<group>"; };
644EFFE32937BE9700525D5B /* MarkedDeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkedDeletedItemView.swift; sourceTree = "<group>"; };
644EFFF12941BD6800525D5B /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
644EFFF22941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a"; sourceTree = "<group>"; };
644EFFF32941BD6800525D5B /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
644EFFF42941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a"; sourceTree = "<group>"; };
644EFFF52941BD6900525D5B /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
6454036E2822A9750090DDFF /* ComposeFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeFileView.swift; sourceTree = "<group>"; };
646BB38B283BEEB9001CE359 /* LocalAuthentication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LocalAuthentication.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/System/Library/Frameworks/LocalAuthentication.framework; sourceTree = DEVELOPER_DIR; };
646BB38D283FDB6D001CE359 /* LocalAuthenticationUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthenticationUtils.swift; sourceTree = "<group>"; };
@@ -402,13 +402,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
644EFFF72941BD6900525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a in Frameworks */,
644EFFF92941BD6900525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a in Frameworks */,
644EFFF82941BD6900525D5B /* libgmp.a in Frameworks */,
5CBE6C312948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
644EFFF62941BD6900525D5B /* libffi.a in Frameworks */,
5CBE6C302948E5B9002D9531 /* libgmpxx.a in Frameworks */,
5CBE6C2F2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a in Frameworks */,
5CBE6C322948E5B9002D9531 /* libffi.a in Frameworks */,
5CBE6C2E2948E5B9002D9531 /* libgmp.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
644EFFFA2941BD6900525D5B /* libgmpxx.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -466,11 +466,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
644EFFF12941BD6800525D5B /* libffi.a */,
644EFFF32941BD6800525D5B /* libgmp.a */,
644EFFF52941BD6900525D5B /* libgmpxx.a */,
644EFFF22941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW-ghc8.10.7.a */,
644EFFF42941BD6800525D5B /* libHSsimplex-chat-4.3.1-5rS6G9uR2Qu1YtPYDlH5CW.a */,
5CBE6C2D2948E5B9002D9531 /* libffi.a */,
5CBE6C292948E5B9002D9531 /* libgmp.a */,
5CBE6C2B2948E5B9002D9531 /* libgmpxx.a */,
5CBE6C2C2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL-ghc8.10.7.a */,
5CBE6C2A2948E5B9002D9531 /* libHSsimplex-chat-4.3.2-78wf2MiH5VH6C3LPkQoECL.a */,
);
path = Libraries;
sourceTree = "<group>";