Apply prettier formatting
This commit is contained in:
parent
1cac306093
commit
526645c791
1576 changed files with 65385 additions and 62478 deletions
|
@ -21,36 +21,38 @@ import { compare } from "matrix-js-sdk/src/utils";
|
|||
import { Member } from "./direct-messages";
|
||||
import DMRoomMap from "./DMRoomMap";
|
||||
|
||||
export const compareMembers = (
|
||||
activityScores: Record<string, IActivityScore>,
|
||||
memberScores: Record<string, IMemberScore>,
|
||||
) => (a: Member | RoomMember, b: Member | RoomMember): number => {
|
||||
const aActivityScore = activityScores[a.userId]?.score ?? 0;
|
||||
const aMemberScore = memberScores[a.userId]?.score ?? 0;
|
||||
const aScore = aActivityScore + aMemberScore;
|
||||
const aNumRooms = memberScores[a.userId]?.numRooms ?? 0;
|
||||
export const compareMembers =
|
||||
(activityScores: Record<string, IActivityScore>, memberScores: Record<string, IMemberScore>) =>
|
||||
(a: Member | RoomMember, b: Member | RoomMember): number => {
|
||||
const aActivityScore = activityScores[a.userId]?.score ?? 0;
|
||||
const aMemberScore = memberScores[a.userId]?.score ?? 0;
|
||||
const aScore = aActivityScore + aMemberScore;
|
||||
const aNumRooms = memberScores[a.userId]?.numRooms ?? 0;
|
||||
|
||||
const bActivityScore = activityScores[b.userId]?.score ?? 0;
|
||||
const bMemberScore = memberScores[b.userId]?.score ?? 0;
|
||||
const bScore = bActivityScore + bMemberScore;
|
||||
const bNumRooms = memberScores[b.userId]?.numRooms ?? 0;
|
||||
const bActivityScore = activityScores[b.userId]?.score ?? 0;
|
||||
const bMemberScore = memberScores[b.userId]?.score ?? 0;
|
||||
const bScore = bActivityScore + bMemberScore;
|
||||
const bNumRooms = memberScores[b.userId]?.numRooms ?? 0;
|
||||
|
||||
if (aScore === bScore) {
|
||||
if (aNumRooms === bNumRooms) {
|
||||
return compare(a.userId, b.userId);
|
||||
if (aScore === bScore) {
|
||||
if (aNumRooms === bNumRooms) {
|
||||
return compare(a.userId, b.userId);
|
||||
}
|
||||
|
||||
return bNumRooms - aNumRooms;
|
||||
}
|
||||
|
||||
return bNumRooms - aNumRooms;
|
||||
}
|
||||
return bScore - aScore;
|
||||
};
|
||||
return bScore - aScore;
|
||||
};
|
||||
|
||||
function joinedRooms(cli: MatrixClient): Room[] {
|
||||
return cli.getRooms()
|
||||
.filter(r => r.getMyMembership() === 'join')
|
||||
// Skip low priority rooms and DMs
|
||||
.filter(r => !DMRoomMap.shared().getUserIdForRoomId(r.roomId))
|
||||
.filter(r => !Object.keys(r.tags).includes("m.lowpriority"));
|
||||
return (
|
||||
cli
|
||||
.getRooms()
|
||||
.filter((r) => r.getMyMembership() === "join")
|
||||
// Skip low priority rooms and DMs
|
||||
.filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId))
|
||||
.filter((r) => !Object.keys(r.tags).includes("m.lowpriority"))
|
||||
);
|
||||
}
|
||||
|
||||
interface IActivityScore {
|
||||
|
@ -64,16 +66,16 @@ interface IActivityScore {
|
|||
// which are closer to "continue this conversation" rather than "this person exists".
|
||||
export function buildActivityScores(cli: MatrixClient): { [key: string]: IActivityScore } {
|
||||
const now = new Date().getTime();
|
||||
const earliestAgeConsidered = now - (60 * 60 * 1000); // 1 hour ago
|
||||
const earliestAgeConsidered = now - 60 * 60 * 1000; // 1 hour ago
|
||||
const maxMessagesConsidered = 50; // so we don't iterate over a huge amount of traffic
|
||||
const events = joinedRooms(cli)
|
||||
.flatMap(room => takeRight(room.getLiveTimeline().getEvents(), maxMessagesConsidered))
|
||||
.filter(ev => ev.getTs() > earliestAgeConsidered);
|
||||
const senderEvents = groupBy(events, ev => ev.getSender());
|
||||
return mapValues(senderEvents, events => {
|
||||
const lastEvent = maxBy(events, ev => ev.getTs());
|
||||
.flatMap((room) => takeRight(room.getLiveTimeline().getEvents(), maxMessagesConsidered))
|
||||
.filter((ev) => ev.getTs() > earliestAgeConsidered);
|
||||
const senderEvents = groupBy(events, (ev) => ev.getSender());
|
||||
return mapValues(senderEvents, (events) => {
|
||||
const lastEvent = maxBy(events, (ev) => ev.getTs());
|
||||
const distanceFromNow = Math.abs(now - lastEvent.getTs()); // abs to account for slight future messages
|
||||
const inverseTime = (now - earliestAgeConsidered) - distanceFromNow;
|
||||
const inverseTime = now - earliestAgeConsidered - distanceFromNow;
|
||||
return {
|
||||
lastSpoke: lastEvent.getTs(),
|
||||
// Scores from being in a room give a 'good' score of about 1.0-1.5, so for our
|
||||
|
@ -92,19 +94,18 @@ interface IMemberScore {
|
|||
|
||||
export function buildMemberScores(cli: MatrixClient): { [key: string]: IMemberScore } {
|
||||
const maxConsideredMembers = 200;
|
||||
const consideredRooms = joinedRooms(cli).filter(room => room.getJoinedMemberCount() < maxConsideredMembers);
|
||||
const memberPeerEntries = consideredRooms
|
||||
.flatMap(room =>
|
||||
room.getJoinedMembers().map(member =>
|
||||
({ member, roomSize: room.getJoinedMemberCount() })));
|
||||
const consideredRooms = joinedRooms(cli).filter((room) => room.getJoinedMemberCount() < maxConsideredMembers);
|
||||
const memberPeerEntries = consideredRooms.flatMap((room) =>
|
||||
room.getJoinedMembers().map((member) => ({ member, roomSize: room.getJoinedMemberCount() })),
|
||||
);
|
||||
const userMeta = groupBy(memberPeerEntries, ({ member }) => member.userId);
|
||||
return mapValues(userMeta, roomMemberships => {
|
||||
return mapValues(userMeta, (roomMemberships) => {
|
||||
const maximumPeers = maxConsideredMembers * roomMemberships.length;
|
||||
const totalPeers = sumBy(roomMemberships, entry => entry.roomSize);
|
||||
const totalPeers = sumBy(roomMemberships, (entry) => entry.roomSize);
|
||||
return {
|
||||
member: minBy(roomMemberships, entry => entry.roomSize).member,
|
||||
member: minBy(roomMemberships, (entry) => entry.roomSize).member,
|
||||
numRooms: roomMemberships.length,
|
||||
score: Math.max(0, Math.pow(1 - (totalPeers / maximumPeers), 5)),
|
||||
score: Math.max(0, Math.pow(1 - totalPeers / maximumPeers, 5)),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue