request post ids for users that match users we follow when peers announce users they know about. Fix for RPCs being async on the remote end. Check returned postIDs to see if we need any posts from a peer.

This commit is contained in:
2025-05-19 00:06:23 -07:00
parent 2e8b2fe14c
commit 1a47dc8931
4 changed files with 146 additions and 32 deletions

View File

@@ -2,12 +2,14 @@ import { openDatabase, getData, addData, addDataArray, clearData, deleteData, me
import { log, logID } from "log";
export class Sync {
isArchivePeer:boolean = false;
isArchivePeer: boolean = false;
userID: string = "";
userPeers: Map<string, Set<string> = new Map();
userIDsToSync: Set<string> = new Set();
syncSuperlog: boolean = true;
setArchive(isHeadless:boolean) {
setArchive(isHeadless: boolean) {
this.isArchivePeer = isHeadless;
}
@@ -24,6 +26,40 @@ export class Sync {
return this.userIDsToSync.has(userID);
}
getPeersForUser(userID:string) {
let peers = this.userPeers.get(userID);
if (!peers) {
return [];
}
return [...peers.keys()];
}
addUserPeer(userID: string, peerID: string) {
this.syncSuperlog && console.log.apply(null, log(`[sync] addUserPeer user:${logID(userID)} peer:${logID(peerID)}`));;
if (!this.userPeers.has(userID)) {
this.userPeers.set(userID, new Set());
}
let peers = this.userPeers.get(userID) as Set<string>;
peers.add(peerID);
this.syncSuperlog && console.log.apply(null, log(this.userPeers));;
}
deleteUserPeer(peerIDToDelete: string) {
for (const peers of this.userPeers.values()) {
for (const peerID of peers) {
if (peerID === peerIDToDelete) {
peers.delete(peerIDToDelete);
}
}
}
}
// shouldSyncUserID(userID: string) {
// if (app.isHeadless) {
// return true;
@@ -42,9 +78,6 @@ export class Sync {
return knownUsers;
}
userPeers: Map<string, string[]> = new Map();
userBlockList = new Set([
'5d63f0b2-a842-41bf-bf06-e0e4f6369271',
'5f1b85c4-b14c-454c-8df1-2cacc93f8a77',
@@ -106,6 +139,25 @@ export class Sync {
return postIds;
}
async checkPostIds(userID:string, peerID:string, postIDs:string[]) {
let startTime = performance.now();
let neededPostIds = await checkPostIds(userID, postIDs);
console.log.apply(null, log(`ID Check for user ${logID(userID)} took ${(performance.now() - startTime) .toFixed(2)}ms`));
if (neededPostIds.length > 0) {
console.log.apply(null, log(`Need posts (${neededPostIds.length}) for user ${logID(userID)} from peer ${logID(peerID)}`));;
} else {
console.log.apply(null, log(`Don't need any posts for user ${logID(userID)} from peer ${logID(peerID)}`));;
}
// if (postIds.length === 0) {
// return [];
// }
return postIDs;
}
// async getPostIdsForUserHandler(data: any) {
// let message = data.message;
// let postIds = await getAllIds(message.user_id) ?? [];