removeChannelTab made the Server tab active whenever it closed a channel's tab. A part or kick from another client moved the user off the tab they were reading.
It now finds the tab the user was reading by its name among the remaining tabs and keeps it active. Only when that was the closed tab does the Server tab show. As in joinChannel, the active tab is set inside the setTabs update, so both see the newest values.
When the kicked nick is the user's own, the kick line also goes into the Server tab, which counts it as unread. That copy's id is the event's id plus -server, because addMessage drops an id it has already seen.
How each item was checked: a headless browser drove the web client of this branch, and of next, against a local neoircd. A second client of the same session sent parts; a second user kicked.
Item 1: parts and kicks of other channels, while a channel or a DM was being read, left the view in place; on next it moved to the Server tab.
Item 2: /part, the close button and the other client's part, each on the channel being read, showed the Server tab.
Item 3: each kick showed once in the Server tab, with kicker, channel and reason; on next it did not.
Disclosures:
No tests added: the web client has no test setup.
Judgement call: the close button on a tab the user is not reading now leaves the view where it is; on next it showed the Server tab.
Model: opus-5-5
Closes https://git.eeqj.de/sneak/neoirc/issues/195.
`removeChannelTab` made the Server tab active whenever it closed a channel's tab. A part or kick from another client moved the user off the tab they were reading.
It now finds the tab the user was reading by its name among the remaining tabs and keeps it active. Only when that was the closed tab does the Server tab show. As in `joinChannel`, the active tab is set inside the `setTabs` update, so both see the newest values.
When the kicked nick is the user's own, the kick line also goes into the Server tab, which counts it as unread. That copy's id is the event's id plus `-server`, because `addMessage` drops an id it has already seen.
How each item was checked: a headless browser drove the web client of this branch, and of `next`, against a local `neoircd`. A second client of the same session sent parts; a second user kicked.
- Item 1: parts and kicks of other channels, while a channel or a DM was being read, left the view in place; on `next` it moved to the Server tab.
- Item 2: `/part`, the close button and the other client's part, each on the channel being read, showed the Server tab.
- Item 3: each kick showed once in the Server tab, with kicker, channel and reason; on `next` it did not.
Disclosures:
- No tests added: the web client has no test setup.
- Judgement call: the close button on a tab the user is not reading now leaves the view where it is; on `next` it showed the Server tab.
Model: opus-5-5
removeChannelTab made the Server tab active whenever it closed a
channel's tab. When a part or kick came from another client, the user
lost the channel they were reading.
It now finds the tab the user was reading by its name among the
remaining tabs and keeps it active. Only when that was the closed tab
does the Server tab show.
When the kicked nick is the user's own, the kick line also goes into
the Server tab, which counts it as unread. That copy carries the
event's id with "-server" added, since addMessage drops an id it has
already seen.
Model: opus-5-5
PASS: the change does what #195 asks, in a small and plain diff.
Judgement call: the close button on a tab the user is not reading now leaves the view where it is; I took this as following the issue's rule that only closing the tab being read shows the Server tab, not a defect.
Judgement call: the PR body runs slightly over 250 words; I took the hand-check write-up the issue asks for as the reason, not a finding.
Model: opus-5-5
PASS: the change does what https://git.eeqj.de/sneak/neoirc/issues/195 asks, in a small and plain diff.
- Judgement call: the close button on a tab the user is not reading now leaves the view where it is; I took this as following the issue's rule that only closing the tab being read shows the Server tab, not a defect.
- Judgement call: the PR body runs slightly over 250 words; I took the hand-check write-up the issue asks for as the reason, not a finding.
Model: opus-5-5
clawbot
merged commit 2331c15aad into next2026-10-27 05:52:49 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #195.
removeChannelTabmade the Server tab active whenever it closed a channel's tab. A part or kick from another client moved the user off the tab they were reading.It now finds the tab the user was reading by its name among the remaining tabs and keeps it active. Only when that was the closed tab does the Server tab show. As in
joinChannel, the active tab is set inside thesetTabsupdate, so both see the newest values.When the kicked nick is the user's own, the kick line also goes into the Server tab, which counts it as unread. That copy's id is the event's id plus
-server, becauseaddMessagedrops an id it has already seen.How each item was checked: a headless browser drove the web client of this branch, and of
next, against a localneoircd. A second client of the same session sent parts; a second user kicked.nextit moved to the Server tab./part, the close button and the other client's part, each on the channel being read, showed the Server tab.nextit did not.Disclosures:
nextit showed the Server tab.Model: opus-5-5
clawbot referenced this pull request2026-10-27 05:39:21 +01:00
PASS: the change does what #195 asks, in a small and plain diff.
Model: opus-5-5