|
|
@ -15,6 +15,7 @@ import type { Types } from "@meshtastic/core"; |
|
|
import { produce } from "immer"; |
|
|
import { produce } from "immer"; |
|
|
import { create as createStore, type StateCreator } from "zustand"; |
|
|
import { create as createStore, type StateCreator } from "zustand"; |
|
|
import { type PersistOptions, persist } from "zustand/middleware"; |
|
|
import { type PersistOptions, persist } from "zustand/middleware"; |
|
|
|
|
|
import { evictOldestEntries } from "../utils/evictOldestEntries"; |
|
|
|
|
|
|
|
|
const CURRENT_STORE_VERSION = 0; |
|
|
const CURRENT_STORE_VERSION = 0; |
|
|
const MESSAGESTORE_RETENTION_NUM = 10; |
|
|
const MESSAGESTORE_RETENTION_NUM = 10; |
|
|
@ -182,11 +183,9 @@ function messageStoreFactory( |
|
|
log?.set(message.messageId, message); |
|
|
log?.set(message.messageId, message); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
while (log && log.size > MESSAGELOG_RETENTION_NUM) { |
|
|
if (log) { |
|
|
const firstKey = log.keys().next().value; // maps keep insertion order, so this is oldest
|
|
|
// Enforce retention limit
|
|
|
if (firstKey !== undefined) { |
|
|
evictOldestEntries(log, MESSAGELOG_RETENTION_NUM); |
|
|
log.delete(firstKey); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
}), |
|
|
}), |
|
|
); |
|
|
); |
|
|
@ -372,13 +371,8 @@ export const messageStoreInitializer: StateCreator<PrivateMessageStoreState> = ( |
|
|
produce<PrivateMessageStoreState>((draft) => { |
|
|
produce<PrivateMessageStoreState>((draft) => { |
|
|
draft.messageStores.set(id, nodeStore); |
|
|
draft.messageStores.set(id, nodeStore); |
|
|
|
|
|
|
|
|
// If over limit, remove oldest inserted. FIFO
|
|
|
// Enforce retention limit
|
|
|
if (draft.messageStores.size > MESSAGESTORE_RETENTION_NUM) { |
|
|
evictOldestEntries(draft.messageStores, MESSAGESTORE_RETENTION_NUM); |
|
|
const firstKey = draft.messageStores.keys().next().value; |
|
|
|
|
|
if (firstKey !== undefined) { |
|
|
|
|
|
draft.messageStores.delete(firstKey); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}), |
|
|
}), |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
|