git » sdk » commit 761604c

Remove things as we go

author Stephen Paul Weber
2025-06-24 18:03:50 UTC
committer Stephen Paul Weber
2025-06-24 18:03:50 UTC
parent 032752be6fa70e956f4cda3a8752b7b5f103cd6e

Remove things as we go

So the GC can clean them up and keep RAM usage lower

snikket/Client.hx +3 -3
snikket/persistence/Sqlite.hx +6 -2

diff --git a/snikket/Client.hx b/snikket/Client.hx
index 2284a9f..9ce8e0b 100644
--- a/snikket/Client.hx
+++ b/snikket/Client.hx
@@ -593,10 +593,10 @@ class Client extends EventEmitter {
 			}
 
 			persistence.getChats(accountId(), (protoChats) -> {
-				for (protoChat in protoChats) {
-					chats.push(protoChat.toChat(this, stream, persistence));
+				var oneProtoChat = null;
+				while ((oneProtoChat = protoChats.pop()) != null) {
+					chats.push(oneProtoChat.toChat(this, stream, persistence));
 				}
-
 				persistence.getChatsUnreadDetails(accountId(), chats, (details) -> {
 					for (detail in details) {
 						var chat = getChat(detail.chatId);
diff --git a/snikket/persistence/Sqlite.hx b/snikket/persistence/Sqlite.hx
index 8165d94..28a6f1a 100644
--- a/snikket/persistence/Sqlite.hx
+++ b/snikket/persistence/Sqlite.hx
@@ -247,11 +247,15 @@ class Sqlite implements Persistence implements KeyValueStore {
 				final json = Json.parse(row.caps);
 				capsMap[Base64.encode(Bytes.ofData(row.sha1))] = new Caps(json.node, json.identities.map(i -> new Identity(i.category, i.type, i.name)), json.features);
 			}
+			result.caps = null;
 			final chats = [];
-			for (row in result.chats) {
+			var row = null;
+			while ((row = result.chats.pop()) != null) {
 				final presenceMap: Map<String, Presence> = [];
 				final presenceJson: DynamicAccess<Dynamic> = row.presenceJson;
-				for (resource => presence in presenceJson) {
+				for (resource in presenceJson.keys()) {
+					final presence = presenceJson.get(resource);
+					presenceJson.remove(resource);
 					presenceMap[resource] = new Presence(
 						presence.caps == null ? null : capsMap[presence.caps],
 						presence.mucUser == null ? null : Stanza.parse(presence.mucUser)