clean up Permissions

pull/691/head
Ryan Zhao 3 years ago
parent 0539e4b192
commit 05bb1e1e61

@ -12,12 +12,8 @@ enum _009_OpenGroupPermission: Migration {
static func migrate(_ db: GRDB.Database) throws {
try db.alter(table: OpenGroup.self) { t in
t.add(.permissions, .text)
.defaults(to: ""
.appending(OpenGroup.Permission.read.rawValue)
.appending(OpenGroup.Permission.write.rawValue)
.appending(OpenGroup.Permission.upload.rawValue)
)
t.add(.permissions, .integer)
.defaults(to: OpenGroup.Permissions.all)
}
// When modifying OpenGroup behaviours we should always look to reset the `infoUpdates`

@ -30,10 +30,35 @@ public struct OpenGroup: Codable, Identifiable, FetchableRecord, PersistableReco
case permissions
}
public enum Permission: String {
case read = "r"
case write = "w"
case upload = "u"
public struct Permissions: OptionSet, Codable, DatabaseValueConvertible {
public let rawValue: UInt16
public init(rawValue: UInt16) {
self.rawValue = rawValue
}
public func toString() -> String {
return ""
.appending(self.contains(.read) ? "r" : "-")
.appending(self.contains(.write) ? "w" : "-")
.appending(self.contains(.upload) ? "u" : "-")
}
public static func getPermissionsfromRoomInfo(_ roomInfo: OpenGroupAPI.RoomPollInfo) -> Permissions {
var permissions: Permissions = []
if roomInfo.read { permissions.insert(.read) }
if roomInfo.write { permissions.insert(.write) }
if roomInfo.upload { permissions.insert(.upload) }
return permissions
}
static let read: Permissions = Permissions(rawValue: 1 << 0)
static let write: Permissions = Permissions(rawValue: 1 << 1)
static let upload: Permissions = Permissions(rawValue: 1 << 2)
static let all: Permissions = [ .read, .write, .upload ]
}
public var id: String { threadId } // Identifiable
@ -98,7 +123,7 @@ public struct OpenGroup: Codable, Identifiable, FetchableRecord, PersistableReco
public let pollFailureCount: Int64
/// The permissions this room has for current user
public let permissions: String?
public let permissions: Permissions?
// MARK: - Relationships
@ -133,7 +158,7 @@ public struct OpenGroup: Codable, Identifiable, FetchableRecord, PersistableReco
inboxLatestMessageId: Int64 = 0,
outboxLatestMessageId: Int64 = 0,
pollFailureCount: Int64 = 0,
permissions: String? = nil
permissions: Permissions? = nil
) {
self.threadId = OpenGroup.idFor(roomToken: roomToken, server: server)
self.server = server.lowercased()
@ -214,7 +239,7 @@ extension OpenGroup: CustomStringConvertible, CustomDebugStringConvertible {
"inboxLatestMessageId: \(inboxLatestMessageId)",
"outboxLatestMessageId: \(outboxLatestMessageId)",
"pollFailureCount: \(pollFailureCount))",
"permissions: \(permissions ?? "null")"
"permissions: \(permissions?.toString() ?? "---")"
].joined(separator: ", ")
}
}

@ -384,10 +384,7 @@ public final class OpenGroupManager: NSObject {
// Only update the database columns which have changed (this is to prevent the UI from triggering
// updates due to changing database columns to the existing value)
let permissions: String = ""
.appending(pollInfo.read == true ? OpenGroup.Permission.read.rawValue : nil)
.appending(pollInfo.write == true ? OpenGroup.Permission.write.rawValue : nil)
.appending(pollInfo.upload == true ? OpenGroup.Permission.upload.rawValue : nil)
let permissions = OpenGroup.Permissions.getPermissionsfromRoomInfo(pollInfo)
try OpenGroup
.filter(id: openGroup.id)

@ -99,7 +99,7 @@ public struct SessionThreadViewModel: FetchableRecordWithRowId, Decodable, Equat
switch threadVariant {
case .contact: return true
case .closedGroup: return currentUserIsClosedGroupMember == true
case .openGroup: return openGroupPermissions?.range(of: OpenGroup.Permission.write.rawValue) != nil
case .openGroup: return openGroupPermissions?.contains(.write) ?? false
}
}
@ -118,7 +118,7 @@ public struct SessionThreadViewModel: FetchableRecordWithRowId, Decodable, Equat
public let openGroupRoomToken: String?
public let openGroupProfilePictureData: Data?
private let openGroupUserCount: Int?
private let openGroupPermissions: String?
private let openGroupPermissions: OpenGroup.Permissions?
// Interaction display info

Loading…
Cancel
Save