mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-17 23:18:27 +02:00
refactoring get federation status
This commit is contained in:
@@ -120,13 +120,12 @@
|
||||
self.federationImageView.hidden = YES;
|
||||
}
|
||||
}
|
||||
else if (room.isRoomFederated)
|
||||
{
|
||||
self.federationImageView.hidden = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.federationImageView.hidden = YES;
|
||||
[room getFederationStatusWithCompletion:^(BOOL isFederated) {
|
||||
self.federationImageView.hidden = !isFederated;
|
||||
}];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,8 +44,16 @@ final class RoomInfoListViewModel: NSObject, RoomInfoListViewModelType {
|
||||
let directUserPresence = session.user(withUserId: room.directUserId)?.presence ?? .unknown
|
||||
|
||||
// bwi: 5216 - federation
|
||||
let isFederated = isFederationEnabled(room: room)
|
||||
|
||||
var isFederated = true
|
||||
|
||||
let group = DispatchGroup()
|
||||
group.enter()
|
||||
self.isFederationEnabled(room: self.room) { federationStatus in
|
||||
isFederated = federationStatus
|
||||
group.leave()
|
||||
}
|
||||
group.wait()
|
||||
|
||||
let basicInfoViewData = RoomInfoBasicViewData(avatarUrl: room.summary.avatar,
|
||||
mediaManager: session.mediaManager,
|
||||
roomId: room.roomId,
|
||||
@@ -66,18 +74,19 @@ final class RoomInfoListViewModel: NSObject, RoomInfoListViewModelType {
|
||||
}
|
||||
|
||||
// bwi: 5216 - federation
|
||||
private func isFederationEnabled(room: MXRoom) -> Bool {
|
||||
private func isFederationEnabled(room: MXRoom, completion: ((_ isFederated: Bool) -> Void)?) {
|
||||
guard BWIBuildSettings.shared.isFederationEnabled else {
|
||||
return false
|
||||
completion?(false)
|
||||
return
|
||||
}
|
||||
|
||||
if room.isPersonalNotesRoom() {
|
||||
return false
|
||||
completion?(false)
|
||||
} else {
|
||||
if room.isDirect {
|
||||
return room.isDMFederated()
|
||||
completion?(room.isDMFederated())
|
||||
} else {
|
||||
return room.isRoomFederated()
|
||||
room.getFederationStatus(completion: completion)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -605,8 +605,23 @@ BOOL reloadToggleCell = false;
|
||||
[tmpSections addObject:[self sectionForAccessSwitch]];
|
||||
}
|
||||
|
||||
if ( BWIBuildSettings.shared.isFederationEnabled && !mxRoom.isDirect){
|
||||
[tmpSections addObject:[self sectionForFederationSwitch]];
|
||||
if (BWIBuildSettings.shared.isFederationEnabled)
|
||||
{
|
||||
// Do not show federation settings for DMs
|
||||
if (!mxRoom.isDirect)
|
||||
{
|
||||
// Do not show federation settings for personal note room
|
||||
if (!mxRoom.isPersonalNotesRoom)
|
||||
{
|
||||
// Show federation settings if "isFederated" flag is true (default == true)
|
||||
[mxRoom getFederatedFlagWithCompletion:^(BOOL isFederated) {
|
||||
if (isFederated)
|
||||
{
|
||||
[tmpSections addObject:[self sectionForFederationSwitch]];
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (RiotSettings.shared.roomSettingsScreenAllowChangingHistorySettings)
|
||||
|
||||
@@ -164,17 +164,19 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
if ([self.mxRoom isRoomFederated])
|
||||
{
|
||||
self.pillImageView.hidden = false;
|
||||
self.displayNameTextField.rightViewMode = UITextFieldViewModeAlways;
|
||||
self.displayNameTextField.rightView = [FederationIconHelper.shared getRoomFederationPillViewWithTextView:self.displayNameTextField];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.pillImageView.hidden = true;
|
||||
self.displayNameTextField.rightViewMode = UITextFieldViewModeNever;
|
||||
}
|
||||
[self.mxRoom getFederationStatusWithCompletion:^(BOOL isFederated) {
|
||||
if (isFederated)
|
||||
{
|
||||
self.pillImageView.hidden = false;
|
||||
self.displayNameTextField.rightViewMode = UITextFieldViewModeAlways;
|
||||
self.displayNameTextField.rightView = [FederationIconHelper.shared getRoomFederationPillViewWithTextView:self.displayNameTextField];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.pillImageView.hidden = true;
|
||||
self.displayNameTextField.rightViewMode = UITextFieldViewModeNever;
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -20,37 +20,31 @@ import MatrixSDK
|
||||
|
||||
@objc extension MXRoom {
|
||||
|
||||
func isRoomFederated() -> Bool {
|
||||
var isFederated: Bool = true
|
||||
state { state in
|
||||
// Search for federate flag. If the flag is not found, default value is true
|
||||
if let events = state?.stateEvents(with: .roomCreate) {
|
||||
for event in events {
|
||||
if let federateContentValue = event.wireContent["m.federate"] {
|
||||
isFederated = federateContentValue as? Bool ?? true
|
||||
}
|
||||
}
|
||||
}
|
||||
if isFederated {
|
||||
// Federation status for room, "isFederated" flag + serverACL
|
||||
func getFederationStatus(completion: ((_ isFederated:Bool) -> Void)?) {
|
||||
var federationStatus = true
|
||||
// Get federated flag
|
||||
getFederatedFlag { isFederated in
|
||||
federationStatus = isFederated
|
||||
if federationStatus {
|
||||
// Check Server ACLs
|
||||
if let events = state?.stateEvents(with: .roomServerACL) {
|
||||
let myUserId = self.mxSession.myUser.userId ?? ""
|
||||
let myUserIdComponents = myUserId.components(separatedBy: ":")
|
||||
if let event = events.last {
|
||||
if let allowedServerList = event.wireContent["allow"] as? [String] {
|
||||
if allowedServerList.count == 1 {
|
||||
if allowedServerList[0] != "*" && myUserIdComponents.count == 2 && allowedServerList[0] == myUserIdComponents.last ?? "" {
|
||||
isFederated = false
|
||||
}
|
||||
}
|
||||
self.getCurrentRoomServerACLSettings { serverACL in
|
||||
if let serverACL = serverACL {
|
||||
let myUserId = self.mxSession.myUser.userId ?? ""
|
||||
let myUserIdComponents = myUserId.components(separatedBy: ":")
|
||||
if serverACL != "*" && myUserIdComponents.count == 2 && serverACL == myUserIdComponents.last ?? "" {
|
||||
federationStatus = false
|
||||
}
|
||||
}
|
||||
completion?(federationStatus)
|
||||
}
|
||||
} else {
|
||||
completion?(federationStatus)
|
||||
}
|
||||
}
|
||||
return isFederated
|
||||
}
|
||||
|
||||
|
||||
func isDMFederated() -> Bool {
|
||||
var isFederated: Bool = false
|
||||
// Check if the user is from the same homeserver
|
||||
@@ -81,6 +75,23 @@ import MatrixSDK
|
||||
return isFederated
|
||||
}
|
||||
|
||||
// Get "isFederated" flag for room, default == true
|
||||
func getFederatedFlag(completion: ((_ isFederated: Bool) -> Void)?) {
|
||||
state { state in
|
||||
var isFederated = true
|
||||
// Search for federate flag. If the flag is not found, default value is true
|
||||
if let events = state?.stateEvents(with: .roomCreate) {
|
||||
for event in events {
|
||||
if let federateContentValue = event.wireContent["m.federate"] {
|
||||
isFederated = federateContentValue as? Bool ?? true
|
||||
}
|
||||
}
|
||||
}
|
||||
completion?(isFederated)
|
||||
}
|
||||
}
|
||||
|
||||
// Get serverACL for room
|
||||
func getCurrentRoomServerACLSettings(completion: ((_ serverACL: String?)-> Void)?) {
|
||||
state { state in
|
||||
if let events = state?.stateEvents(with: .roomServerACL) {
|
||||
|
||||
Reference in New Issue
Block a user