Skip to content

Commit c7bfec8

Browse files
author
topboy
committed
expire labelbuffer state
1 parent 84a47f6 commit c7bfec8

File tree

1 file changed

+37
-11
lines changed

1 file changed

+37
-11
lines changed

src/libs/state.js

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,42 @@ function createNewState() {
7272
];
7373

7474
const availableStartups = Object.create(null);
75-
75+
function getLabeledBuffer(state, b, message) {
76+
const label = message.tags.label;
77+
let buffer = b;
78+
if (label !== undefined) {
79+
state.labelBuffer ??= {};
80+
if (!state.labelBuffer?.[label]) {
81+
state.labelTimestamps ??= [];
82+
const timestamp = Date.now();
83+
state.labelBuffer[label] = buffer;
84+
state.labelTimestamps.push({ label, timestamp });
85+
let i = 0;
86+
for (; i < state.labelTimestamps.length; i++) {
87+
const entry = state.labelTimestamps[i];
88+
if (entry.timestamp > timestamp - (1000 * 60)) {
89+
break;
90+
}
91+
}
92+
window.kiwi.log.debug(
93+
'removing entries:',
94+
i,
95+
{ ...state.labelBuffer },
96+
state.labelTimestamps.slice()
97+
);
98+
if (i > 0) {
99+
const entriesToRemove = state.labelTimestamps
100+
.splice(0, i);
101+
entriesToRemove.forEach((e) => {
102+
delete state.labelBuffer[e.label];
103+
});
104+
}
105+
} else {
106+
buffer = state.labelBuffer[label];
107+
}
108+
}
109+
return buffer;
110+
}
76111
const oldState = {
77112
data: stateObj,
78113
methods: {
@@ -582,19 +617,10 @@ function createNewState() {
582617
addMessage(b, message) {
583618
// Some messages try to be added after a network has been removed, meaning no buffer
584619
// will be available
585-
let buffer = b;
620+
let buffer = getLabeledBuffer(this, b, message);
586621
if (!buffer || !buffer.getNetwork()) {
587622
return;
588623
}
589-
const label = message.tags.label;
590-
if (label !== undefined) {
591-
this.labelBuffer ??= {};
592-
if (!this.labelBuffer[label]) {
593-
this.labelBuffer[label] = buffer;
594-
} else {
595-
buffer = this.labelBuffer[label];
596-
}
597-
}
598624
let user = this.getUser(buffer.networkid, message.nick);
599625
let bufferMessage = new Message(message, user);
600626
if (user && user.ignore) {

0 commit comments

Comments
 (0)