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:
62
src/Sync.ts
62
src/Sync.ts
@@ -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) ?? [];
|
||||
|
||||
Reference in New Issue
Block a user