Skip to content

Commit c715db1

Browse files
committed
Fixed commands parsing. Added flagsEnabled in the channel config.
1 parent 526444b commit c715db1

File tree

3 files changed

+53
-28
lines changed

3 files changed

+53
-28
lines changed

Sources/Core/Model/Channel+Requests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ public extension Channel {
211211
/// - Parameter message: a message.
212212
/// - Returns: an observable flag message response.
213213
func flag(message: Message) -> Observable<FlagMessageResponse> {
214+
guard config.flagsEnabled else {
215+
return .empty()
216+
}
217+
214218
return message.flag()
215219
}
216220

@@ -219,6 +223,10 @@ public extension Channel {
219223
/// - Parameter message: a message.
220224
/// - Returns: an observable flag message response.
221225
func unflag(message: Message) -> Observable<FlagMessageResponse> {
226+
guard config.flagsEnabled else {
227+
return .empty()
228+
}
229+
222230
return message.unflag()
223231
}
224232
}

Sources/Core/Model/Channel.swift

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -105,21 +105,7 @@ public final class Channel: Codable {
105105
self.extraData = nil
106106
}
107107

108-
config = Config(name: "",
109-
automodBehavior: "",
110-
automodEnabled: "",
111-
reactionsEnabled: false,
112-
typingEventsEnabled: false,
113-
readEventsEnabled: false,
114-
connectEventsEnabled: false,
115-
repliesEnabled: false,
116-
searchEnabled: false,
117-
mutesEnabled: false,
118-
messageRetention: "",
119-
maxMessageLength: 0,
120-
commands: [],
121-
created: Date(),
122-
updated: Date())
108+
config = Config()
123109
}
124110

125111
required public init(from decoder: Decoder) throws {
@@ -173,9 +159,6 @@ public extension Channel {
173159
/// A channel config.
174160
struct Config: Decodable {
175161
private enum CodingKeys: String, CodingKey {
176-
case name
177-
case automodBehavior = "automod_behavior"
178-
case automodEnabled = "automod"
179162
case reactionsEnabled = "reactions"
180163
case typingEventsEnabled = "typing_events"
181164
case readEventsEnabled = "read_events"
@@ -191,9 +174,6 @@ public extension Channel {
191174
}
192175

193176

194-
let name: String
195-
let automodBehavior: String
196-
let automodEnabled: String
197177
/// If users are allowed to add reactions to messages. Enabled by default.
198178
public let reactionsEnabled: Bool
199179
/// Controls if typing indicators are shown. Enabled by default.
@@ -208,6 +188,8 @@ public extension Channel {
208188
public let searchEnabled: Bool
209189
/// Determines if users are able to mute other users. Enabled by default.
210190
public let mutesEnabled: Bool
191+
/// Determines if users are able to flag messages. Enabled by default.
192+
public let flagsEnabled: Bool
211193
/// A number of days or infinite. Infinite by default.
212194
public let messageRetention: String
213195
/// The max message length. 5000 by default.
@@ -218,6 +200,39 @@ public extension Channel {
218200
public let created: Date
219201
/// A channel updated date.
220202
public let updated: Date
203+
204+
public init(from decoder: Decoder) throws {
205+
let container = try decoder.container(keyedBy: CodingKeys.self)
206+
reactionsEnabled = try container.decode(Bool.self, forKey: .reactionsEnabled)
207+
typingEventsEnabled = try container.decode(Bool.self, forKey: .typingEventsEnabled)
208+
readEventsEnabled = try container.decode(Bool.self, forKey: .readEventsEnabled)
209+
connectEventsEnabled = try container.decode(Bool.self, forKey: .connectEventsEnabled)
210+
repliesEnabled = try container.decode(Bool.self, forKey: .repliesEnabled)
211+
searchEnabled = try container.decode(Bool.self, forKey: .searchEnabled)
212+
mutesEnabled = try container.decode(Bool.self, forKey: .mutesEnabled)
213+
messageRetention = try container.decode(String.self, forKey: .messageRetention)
214+
maxMessageLength = try container.decode(Int.self, forKey: .maxMessageLength)
215+
commands = try container.decodeIfPresent([Command].self, forKey: .commands) ?? []
216+
flagsEnabled = commands.first(where: { $0.name.contains("flag") }) != nil
217+
created = try container.decode(Date.self, forKey: .created)
218+
updated = try container.decode(Date.self, forKey: .updated)
219+
}
220+
221+
init() {
222+
reactionsEnabled = false
223+
typingEventsEnabled = false
224+
readEventsEnabled = false
225+
connectEventsEnabled = false
226+
repliesEnabled = false
227+
searchEnabled = false
228+
mutesEnabled = false
229+
flagsEnabled = false
230+
messageRetention = ""
231+
maxMessageLength = 0
232+
commands = []
233+
created = Date()
234+
updated = Date()
235+
}
221236
}
222237

223238
/// A command in a message, e.g. /giphy.

Sources/UI/User Story/Chat/Chat View Controller/ChatViewController+MessageActions.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ extension ChatViewController {
4141

4242
if !message.user.isCurrent {
4343
// Mute.
44-
if message.user.canBeMuted {
44+
if presenter.channel.config.mutesEnabled {
4545
if message.user.isMuted {
4646
alert.addAction(.init(title: "Unmute", style: .default, handler: { [weak self] _ in
4747
self?.unmute(user: message.user)
@@ -54,12 +54,14 @@ extension ChatViewController {
5454
}
5555

5656
// Flag.
57-
if message.isFlagged {
58-
alert.addAction(.init(title: "Unflag", style: .default, handler: { [weak self] _ in
59-
self?.unflag(message: message) }))
60-
} else {
61-
alert.addAction(.init(title: "Flag", style: .default, handler: { [weak self] _ in
62-
self?.flag(message: message) }))
57+
if presenter.channel.config.flagsEnabled {
58+
if message.isFlagged {
59+
alert.addAction(.init(title: "Unflag", style: .default, handler: { [weak self] _ in
60+
self?.unflag(message: message) }))
61+
} else {
62+
alert.addAction(.init(title: "Flag", style: .default, handler: { [weak self] _ in
63+
self?.flag(message: message) }))
64+
}
6365
}
6466
}
6567

0 commit comments

Comments
 (0)