@@ -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