Files
bundesmessenger-ios/bwi/TimeLine/DefaultTimelineFilterService.swift
2022-03-17 15:51:23 +01:00

111 lines
3.3 KiB
Swift

/*
* Copyright (c) 2021 BWI GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Foundation
@objcMembers class DefaultTimelineFilterService : NSObject {
func isDisplayNameChangeEvent(_ event: MXEvent) -> Bool {
guard let content = event.content, let prevContent = event.prevContent else {
return false
}
if let displayName = content["displayname"] as? String, let prevDisplayName = prevContent["displayname"] as? String {
return displayName != prevDisplayName
}
return false
}
func isAvatarChangeEvent(_ event: MXEvent) -> Bool {
guard let content = event.content, let prevContent = event.prevContent else {
return false
}
if let avatarUrl = content["avatar_url"] as? String, let prevAvatarUrl = prevContent["avatar_url"] as? String {
return avatarUrl != prevAvatarUrl
}
return false
}
func isRoomExitEvent(_ event: MXEvent) -> Bool {
guard let content = event.content else {
return false
}
if let membership = content["membership"] as? String {
return membership == "leave"
}
return false
}
func isRoomEntryEvent(_ event: MXEvent) -> Bool {
guard let content = event.content else {
return false
}
if let membership = content["membership"] as? String {
if membership == "join" {
return content["avatar_url"] == nil
}
}
return false
}
func isRoomInviteEvent(_ event: MXEvent) -> Bool {
guard let content = event.content else {
return false
}
if let membership = content["membership"] as? String {
return membership == "invite"
}
return false
}
}
extension DefaultTimelineFilterService : TimeLineFilterService {
func shouldFilter(_ cellData: MXKRoomBubbleCellData?) -> Bool {
guard let cellData = cellData else {
return false
}
var filtered = false
for event in cellData.events {
if !RiotSettings.shared.settingUserAvatarChangeEnabled || RiotSettings.shared.settingSimpleTimelineEnabled {
filtered = isAvatarChangeEvent(event) || isDisplayNameChangeEvent(event)
if filtered {
break
}
}
if !RiotSettings.shared.settingEnterRoomEnabled || RiotSettings.shared.settingSimpleTimelineEnabled {
filtered = isRoomEntryEvent(event) || isRoomExitEvent(event) || isRoomInviteEvent(event)
if filtered {
break
}
}
}
return filtered
}
}