From 3e370a7c16ff17f9b5bf3ce88317fe5805672e57 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 27 Jun 2023 07:55:33 +0100 Subject: [PATCH] ios: group preference to prohibit files and media (#2611) * ios: group preference to prohibit files and media * style --- .../Chat/ComposeMessage/ComposeView.swift | 13 ++++++- .../Chat/Group/GroupPreferencesView.swift | 2 ++ apps/ios/SimpleXChat/ChatTypes.swift | 35 +++++++++++++++---- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index a70f79ecb..7f58d90b8 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -264,7 +264,7 @@ struct ComposeView: View { default: previewView() } HStack (alignment: .bottom) { - Button { + let b = Button { showChooseSource = true } label: { Image(systemName: "paperclip") @@ -274,6 +274,17 @@ struct ComposeView: View { .frame(width: 25, height: 25) .padding(.bottom, 12) .padding(.leading, 12) + if case let .group(g) = chat.chatInfo, + !g.fullGroupPreferences.files.on { + b.disabled(true).onTapGesture { + AlertManager.shared.showAlertMsg( + title: "Files and media prohibited!", + message: "Only group owners can enable files and media." + ) + } + } else { + b + } ZStack(alignment: .leading) { SendMessageView( composeState: $composeState, diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift index c013c29f1..af1a778ad 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift @@ -27,6 +27,8 @@ struct GroupPreferencesView: View { featureSection(.directMessages, $preferences.directMessages.enable) featureSection(.reactions, $preferences.reactions.enable) featureSection(.voice, $preferences.voice.enable) +// TODO uncomment in 5.3 +// featureSection(.files, $preferences.files.enable) if groupInfo.canEdit { Section { diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 58d1642f5..7b0f87ea1 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -667,10 +667,11 @@ public enum ChatFeature: String, Decodable, Feature { public enum GroupFeature: String, Decodable, Feature { case timedMessages + case directMessages case fullDelete case reactions case voice - case directMessages + case files public var id: Self { self } @@ -688,6 +689,7 @@ public enum GroupFeature: String, Decodable, Feature { case .fullDelete: return NSLocalizedString("Delete for everyone", comment: "chat feature") case .reactions: return NSLocalizedString("Message reactions", comment: "chat feature") case .voice: return NSLocalizedString("Voice messages", comment: "chat feature") + case .files: return NSLocalizedString("Files and media", comment: "chat feature") } } @@ -698,6 +700,7 @@ public enum GroupFeature: String, Decodable, Feature { case .fullDelete: return "trash.slash" case .reactions: return "face.smiling" case .voice: return "mic" + case .files: return "doc" } } @@ -708,6 +711,7 @@ public enum GroupFeature: String, Decodable, Feature { case .fullDelete: return "trash.slash.fill" case .reactions: return "face.smiling.fill" case .voice: return "mic.fill" + case .files: return "doc.fill" } } @@ -746,6 +750,11 @@ public enum GroupFeature: String, Decodable, Feature { case .on: return "Allow to send voice messages." case .off: return "Prohibit sending voice messages." } + case .files: + switch enabled { + case .on: return "Allow to send files and media." + case .off: return "Prohibit sending files and media." + } } } else { switch self { @@ -774,6 +783,11 @@ public enum GroupFeature: String, Decodable, Feature { case .on: return "Group members can send voice messages." case .off: return "Voice messages are prohibited in this group." } + case .files: + switch enabled { + case .on: return "Group members can send files and media." + case .off: return "Files and media are prohibited in this group." + } } } } @@ -912,19 +926,22 @@ public struct FullGroupPreferences: Decodable, Equatable { public var fullDelete: GroupPreference public var reactions: GroupPreference public var voice: GroupPreference + public var files: GroupPreference public init( timedMessages: TimedMessagesGroupPreference, directMessages: GroupPreference, fullDelete: GroupPreference, reactions: GroupPreference, - voice: GroupPreference + voice: GroupPreference, + files: GroupPreference ) { self.timedMessages = timedMessages self.directMessages = directMessages self.fullDelete = fullDelete self.reactions = reactions self.voice = voice + self.files = files } public static let sampleData = FullGroupPreferences( @@ -932,7 +949,8 @@ public struct FullGroupPreferences: Decodable, Equatable { directMessages: GroupPreference(enable: .off), fullDelete: GroupPreference(enable: .off), reactions: GroupPreference(enable: .on), - voice: GroupPreference(enable: .on) + voice: GroupPreference(enable: .on), + files: GroupPreference(enable: .on) ) } @@ -942,19 +960,22 @@ public struct GroupPreferences: Codable { public var fullDelete: GroupPreference? public var reactions: GroupPreference? public var voice: GroupPreference? + public var files: GroupPreference? public init( timedMessages: TimedMessagesGroupPreference?, directMessages: GroupPreference?, fullDelete: GroupPreference?, reactions: GroupPreference?, - voice: GroupPreference? + voice: GroupPreference?, + files: GroupPreference? ) { self.timedMessages = timedMessages self.directMessages = directMessages self.fullDelete = fullDelete self.reactions = reactions self.voice = voice + self.files = files } public static let sampleData = GroupPreferences( @@ -962,7 +983,8 @@ public struct GroupPreferences: Codable { directMessages: GroupPreference(enable: .off), fullDelete: GroupPreference(enable: .off), reactions: GroupPreference(enable: .on), - voice: GroupPreference(enable: .on) + voice: GroupPreference(enable: .on), + files: GroupPreference(enable: .on) ) } @@ -972,7 +994,8 @@ public func toGroupPreferences(_ fullPreferences: FullGroupPreferences) -> Group directMessages: fullPreferences.directMessages, fullDelete: fullPreferences.fullDelete, reactions: fullPreferences.reactions, - voice: fullPreferences.voice + voice: fullPreferences.voice, + files: fullPreferences.files ) }