git » sdk » commit e2ac9be

Load media lazily

author Stephen Paul Weber
2026-02-04 19:01:11 UTC
committer Stephen Paul Weber
2026-02-04 19:01:11 UTC
parent d40f2ee674b99478596d28eb0f1bb1afe47361e7

Load media lazily

Instead of immediately requesting every media, wait a couple seconds
between each such request so we don't overload the connection with data
flowing in that we could live without for awhile.

borogove/Client.hx +21 -3

diff --git a/borogove/Client.hx b/borogove/Client.hx
index 8df29d8..2d086f0 100644
--- a/borogove/Client.hx
+++ b/borogove/Client.hx
@@ -400,7 +400,7 @@ class Client extends EventEmitter {
 									this.trigger("chats/update", [chat]);
 								});
 							});
-							sendQuery(vcardGet);
+							sendQueryLazy(vcardGet);
 						}
 					});
 				}
@@ -602,7 +602,7 @@ class Client extends EventEmitter {
 								this.trigger("chats/update", [chat]);
 							});
 						});
-						sendQuery(pubsubGet);
+						sendQueryLazy(pubsubGet);
 					}
 				});
 			}
@@ -1476,7 +1476,7 @@ class Client extends EventEmitter {
 						persistence.storeMedia(r.type, r.bytes.getData()).then(_ -> resolve(null));
 					}
 				});
-				sendQuery(q);
+				sendQueryLazy(q);
 			}).then(x -> x, (_) -> fetchMediaByHashOneCounterpart(hashes.slice(1), counterpart));
 		});
 	}
@@ -1520,6 +1520,24 @@ class Client extends EventEmitter {
 		this.stream.sendIq(query.getQueryStanza(), query.handleResponse);
 	}
 
+	private var lazyQueryTimer = null;
+	private final queriesToSend = [];
+	private function sendNextLazyQuery() {
+		if (lazyQueryTimer != null) return;
+		lazyQueryTimer = haxe.Timer.delay(() -> {
+			final query = queriesToSend.shift();
+			if (query != null) sendQuery(query);
+
+			lazyQueryTimer = null;
+			if (queriesToSend.length > 0) sendNextLazyQuery();
+		}, 2000);
+	}
+
+	private function sendQueryLazy(query:GenericQuery) {
+		queriesToSend.push(query);
+		sendNextLazyQuery();
+	}
+
 	@:allow(borogove)
 	private function publishWithOptions(stanza:Stanza, options:Stanza) {
 		final clone = stanza.clone();