stubs 107; history fixes

This commit is contained in:
Mute 2024-08-22 18:13:04 +00:00
parent 6034adae3c
commit 966328327e
3 changed files with 15 additions and 26 deletions

View File

@ -204,7 +204,7 @@ const/**@type {Complete}*/C = { S_OPTS: {behavior: 'instant'},
const/**@type {InputHistory}*/H = { input: undefined, ids: undefined, bottom: undefined, // FIXME ids don't need to be a set, but I'm too tired right now
enter: (ic, i, b, is) => yes(H.input = i, H.bottom = b, H.ids = is, ic.readOnly = true, val(ic.parentElement?.parentElement?.dataset, d => d['mbchcMode'] = 'h'), b && void W.ElementScrollToEnd('TextAreaChatLog')),
exit: (ic, r) => yes(ic.readOnly = false, val(ic.parentElement?.parentElement?.dataset, d => del(d, 'mbchcMode')), r && val(H.input, i => ic.value = i), val(H.bottom, b => b && void W.ElementScrollToEnd('TextAreaChatLog')))
exit: (ic, r) => yes(ic.readOnly = false, val(ic.parentElement?.parentElement?.dataset, d => del(d, 'mbchcMode')), r && val(H.input, i => ic.value = i), val(H.bottom, b => b && void W.ElementScrollToEnd('TextAreaChatLog')), W.ChatRoomLastMessageIndex = W.ChatRoomLastMessage.length)
}
ass('MBCHC found, aborting loading', W.MBCHC === $)
@ -660,36 +660,25 @@ const/**@type {SDK.Hook}*/after = (name, f) => mod.hookFunction(name, 0, (na, n)
//D.addEventListener('keydown', event => void this.focus_chat(event)) // Looks like the club got better at this
mod.hookFunction('ChatRoomScrollHistory', 0, ([up]) => void val(U.ic, ic => { const input = ic.value, history = W.ChatRoomLastMessage
// FIXME later duplicates should override earlier ones
// FIXME we'll make it better when the history is a proper ring buffer
if (!ic.readOnly) {
const bottom = W.ElementIsScrolledToEnd('TextAreaChatLog')
if (m_t(input)) {
if (history.length < 2) return U.bell()
H.enter(ic, input, bottom, mut(new Set(history.keys()), s => s.delete(0))) // J'accuse! ChatRoomLastMessage is a total mess and a half.
} else {
const/**@type {Set<string>}*/lines = new Set() // these only exist to filter duplicates
const/**@type {Set<number>}*/ids = new Set()
history.forEach((l, i) => l !== input && l.startsWith(input) && cur(lines.size, s => lines.add(l) !== $ && s < lines.size && ids.add(i)))
if (m_t(ids)) return U.bell()
H.enter(ic, input, bottom, ids)
}
const/**@type {Map<string,number>}*/map = new Map()
const/**@type {(l: string, i: number, I: string) => boolean}*/ cond = m_t(input) ? (_, i, __) => i > 0 : (l, _, i) => l !== i && l.startsWith(i)
if (m_t(history.reduce((ax, l, i) => cond(l, i, input) ? ax.set(l, i) : ax, map))) return U.bell()
H.enter(ic, input, W.ElementIsScrolledToEnd('TextAreaChatLog'), new Set(map.values()))
}
if (ic.readOnly) { // this can't be an else, because we mutate state above. To be honest, this will always be true, but I want to make sure.
if (H.ids === $) return U.bell() // shouldn't happen?
let found = -1
let first = -1
let last = -1
for (const i of H.ids) {
for (const i of H.ids) { // these aren't necessarily in order
if (up) {
if (i < W.ChatRoomLastMessageIndex) found = i
last = i
if (i < W.ChatRoomLastMessageIndex && i > found) found = i // the largest i that is less than index
if (i > last) last = i
} else {
if (first < 0) first = i
if (i > W.ChatRoomLastMessageIndex) {
found = i
break
}
if (first < 0 || i < first) first = i
if (i > W.ChatRoomLastMessageIndex && (i < found || found < 0)) found = i // the smallest i that is greater than index
}
}
if (found < 0) found = up ? last : first

8
package-lock.json generated
View File

@ -9,7 +9,7 @@
"version": "107.13.0",
"license": "SEE LICENSE IN LICENSE",
"devDependencies": {
"bc-stubs": "^106.0.0",
"bc-stubs": "^107.0.0",
"bondage-club-mod-sdk": "^1.2.0",
"typescript": "^5.5.2",
"xo": "^0.56.0"
@ -1074,9 +1074,9 @@
"dev": true
},
"node_modules/bc-stubs": {
"version": "106.0.0",
"resolved": "https://registry.npmjs.org/bc-stubs/-/bc-stubs-106.0.0.tgz",
"integrity": "sha512-qUbBXFdTZNq+JUGJLpWCiqfMwSDu/i36fcoTtwfbHMV32lSkXsaLgqK7itOpDZIUTWcZhneN4DO2m6Jd7juk7w==",
"version": "107.0.0",
"resolved": "https://registry.npmjs.org/bc-stubs/-/bc-stubs-107.0.0.tgz",
"integrity": "sha512-PUEvMGe7dDm+lKy6YJIWv1xWCOBVt/WAn4xrG8mBUoGobZVBqOrg+x5lOV0HvG9fcBB8K5NEaXMciE5TOTWkBA==",
"dev": true,
"dependencies": {
"socket.io-client": "4.6.1"

View File

@ -5,7 +5,7 @@
"author": "Mute",
"type": "module",
"devDependencies": {
"bc-stubs": "^106.0.0",
"bc-stubs": "^107.0.0",
"bondage-club-mod-sdk": "^1.2.0",
"typescript": "^5.5.2",
"xo": "^0.56.0"