Repository navigation
Expand file tree
/
Copy pathGroupMetaEntity.swift
More file actions
78 lines (65 loc) · 2.95 KB
/
Copy pathGroupMetaEntity.swift
File metadata and controls
78 lines (65 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import Foundation
import ObjectBox
// objectbox: entity
//
// `nonisolated` so the `GroupStore` actor and the ObjectBox generated
// descriptors / bindings (which extend this type) don't cross actor
// boundaries on every property access. See `EventEntity.swift` for context.
nonisolated class GroupMetaEntity {
var id: Id = 0
/// `"\(ownerPubkey)|\(relayUrl)|\(groupId)"` — see `groupRoomKey(...)` in GroupModels.
// objectbox: unique
var roomKey: String = ""
// objectbox: index
var ownerPubkey: String = ""
var relayUrl: String = ""
var groupId: String = ""
var name: String? = nil
var picture: String? = nil
var about: String? = nil
var isPrivate: Bool = false
var isClosed: Bool = false
var isRestricted: Bool = false
var isHidden: Bool = false
/// JSON-encoded `[String]` of admin pubkeys (hex).
var adminsJson: String = "[]"
/// JSON-encoded `[String]` of member pubkeys (hex).
var membersJson: String = "[]"
var lastMessageAt: Int = 0
required init() {}
convenience init(ownerPubkey: String, room: GroupRoom) {
self.init()
self.roomKey = groupRoomKey(ownerPubkey: ownerPubkey, relayUrl: room.relayUrl, groupId: room.groupId)
self.ownerPubkey = ownerPubkey
self.relayUrl = room.relayUrl
self.groupId = room.groupId
self.name = room.metadata?.name
self.picture = room.metadata?.picture
self.about = room.metadata?.about
self.isPrivate = room.metadata?.isPrivate ?? false
self.isClosed = room.metadata?.isClosed ?? false
self.isRestricted = room.metadata?.isRestricted ?? false
self.isHidden = room.metadata?.isHidden ?? false
self.adminsJson = (try? String(data: JSONSerialization.data(withJSONObject: room.admins), encoding: .utf8)) ?? "[]"
self.membersJson = (try? String(data: JSONSerialization.data(withJSONObject: room.members), encoding: .utf8)) ?? "[]"
self.lastMessageAt = room.lastMessageAt
}
func decodeAdmins() -> [String] {
guard let data = adminsJson.data(using: .utf8),
let arr = try? JSONSerialization.jsonObject(with: data) as? [String] else { return [] }
return arr
}
func decodeMembers() -> [String] {
guard let data = membersJson.data(using: .utf8),
let arr = try? JSONSerialization.jsonObject(with: data) as? [String] else { return [] }
return arr
}
func toRoom() -> GroupRoom {
let metadata = GroupMetadata(groupId: groupId, name: name, picture: picture, about: about,
isPrivate: isPrivate, isClosed: isClosed,
isRestricted: isRestricted, isHidden: isHidden)
return GroupRoom(groupId: groupId, relayUrl: relayUrl, metadata: metadata,
messages: [], lastMessageAt: lastMessageAt,
admins: decodeAdmins(), members: decodeMembers())
}
}