Commit Graph

79 Commits

Author SHA1 Message Date
Simon Ser a419e660c0 Don't match punctuation suffix when linkifying channels 2021-06-06 16:00:37 +02:00
Simon Ser 403d7ec7f7 Add case-mapping support to irc.isHighlight
Closes: https://todo.sr.ht/~emersion/gamja/77
2021-06-06 15:52:58 +02:00
Simon Ser 0dfb7623db Add support for labeled-response
It's just used to avoid mixing up messages coming from the server
so far.
2021-06-04 20:38:01 +02:00
Simon Ser 34078d5da7 Add support for draft/event-playback 2021-06-04 19:45:51 +02:00
Simon Ser 651e255ddb Use ISUPPORT CHANTYPES in Client.isChannel 2021-06-04 19:17:39 +02:00
Simon Ser 2c1bb4ce6a Introduce State.handleMessage
Takes an IRC message, updates the state.

Doesn't yet handle all messages, this will be a step-by-step process.
2021-06-04 18:27:21 +02:00
Simon Ser 6e20ad872e Add support for STATUSMSG
Closes: https://todo.sr.ht/~emersion/gamja/65
2021-06-03 13:31:43 +02:00
Simon Ser 283f8af4b1 lib/irc: rename IRC prefix utilities 2021-06-03 13:18:28 +02:00
Simon Ser 63a71e5f5d Add support for incoming INVITE messages 2021-06-03 11:04:32 +02:00
Simon Ser a4294975a2 Add support for /ban without argument 2021-06-03 10:19:09 +02:00
Simon Ser 91208a6d47 Add support for CHATHISTORY TARGETS
The main motivation is to avoid missing direct messages coming from
other users.

A nice side-effect is that we no longer need to issue CHATHISTORY
queries for each channel we JOIN: instead, we can only fetch
history for targets known to have new messages available (as indicated
by CHATHISTORY TARGETS).

We use read receipts instead of delivery receipts, so that reloading
the webapp restores the exact same state (ie, unread messages are
re-fetched).

References: https://github.com/ircv3/ircv3-specifications/pull/450
2021-06-02 20:37:20 +02:00
Simon Ser 74d9dea5bb Use RegExp match indices in linkifyChannel 2021-06-01 09:53:11 +02:00
Tom Lebreux 0bcd044f10 Linkify channel names 2021-06-01 09:37:35 +02:00
Simon Ser 06ca812d06 Simplify Client.roundtrip callback arg 2021-05-31 17:14:46 +02:00
Simon Ser 619f1db08f Introduce Client.who 2021-05-31 17:11:42 +02:00
Simon Ser 02145b45ad Remove unused arg from Client.whois 2021-05-31 17:04:52 +02:00
Drew DeVault be1ecf607d Display prefixes in member list
Closes: https://todo.sr.ht/~emersion/gamja/43
2021-05-31 15:56:08 +02:00
Simon Ser e080e87cb7 Pretty-print MOTD 2021-05-28 10:50:42 +02:00
Simon Ser 5a3edf4769 Fix WHOIS DB not using case-mapping fallback
In case the server advertises an unsupported case-mapping, we have
a fallback.
2021-05-28 09:59:51 +02:00
Simon Ser 7b762b3e8a Unregister PING timer when destroying client 2021-05-28 09:58:06 +02:00
Simon Ser 24fe62f1de Ensure msg.prefix is always populated 2021-05-28 09:49:21 +02:00
Simon Ser e9d90d4927 Fix TypeError in isHighlight
TypeError: msg.prefix is null
2021-05-28 09:49:21 +02:00
Simon Ser fc9dfa2dca Implement case-mapping for buffers and message handler 2021-05-27 23:40:08 +02:00
Drew DeVault 121d7ec075 Add /whois command
This also rigs up some helpers in Client for handling the whois
response, which I will use for /ban and /quiet and such shortly.
2021-05-27 23:15:53 +02:00
Simon Ser 615e746ec5 lib/client: add Client.cm
This contains the current connection case-mapping, parsed from the
CASEMAPPING ISUPPORT token.
2021-05-27 15:14:03 +02:00
Simon Ser 3110a9e2df lib/irc: add case-mapping primitives
irc.CaseMapping contains the basic canonicalization functions for
the three supported case-mappings. irc.CaseMapMap is a Map-like
class that supports case-mapped keys.
2021-05-27 15:13:32 +02:00
Simon Ser 1d983bd142 Downgrade IRC network logging to debug level 2021-05-27 10:39:24 +02:00
Simon Ser 12a38ace90 Add support for IRCv3 setname 2021-05-25 20:22:21 +02:00
Simon Ser 9dba1b3736 Add vendor prefix to bouncer-networks BATCH type 2021-05-25 17:03:29 +02:00
Simon Ser 6524dc5dd2 Add support for the soju.im/bouncer-networks-notify cap 2021-05-25 17:01:20 +02:00
Simon Ser 5165df718f Disconnect on BOUNCER BIND error 2021-05-25 16:59:59 +02:00
Simon Ser b429243573 Add support for the soju.im/bouncer-networks extension 2021-05-25 16:58:50 +02:00
Simon Ser f122e44e9b Use ISUPPORT CHATHISTORY to discover max page size 2021-05-11 16:10:50 +02:00
Simon Ser 305ffb569c Parse ISUPPORT tokens in client 2021-05-11 16:03:16 +02:00
Simon Ser 8ab10cf2a5 lib/irc: escape/unescape everything in tags
Without the greedy flag on the regexp, String.replace will just
replace the first match.

While at it, also make sure to convert to a string when formatting
tag values. This allows tag values to be e.g. numbers.
2021-03-09 17:40:57 +01:00
Simon Ser 2d4409e7aa lib/irc: accept tags without value 2021-03-09 17:31:12 +01:00
Simon Ser 5fea13df0a Trigger client error if server doesn't support SASL 2021-03-09 09:44:48 +01:00
Simon Ser 194168c062 Display server messages in server buffer
References: https://todo.sr.ht/~emersion/gamja/21
2021-03-08 14:27:05 +01:00
Simon Ser 6430fa252a lib/client: log close code 2021-03-03 18:30:15 +01:00
Simon Ser aa79067179 lib/client: extract fetchBatch function from roundtripChatHistory 2021-03-03 14:13:05 +01:00
Simon Ser 3536331f94 lib/client: throw error in send if disconnected 2021-03-03 09:37:26 +01:00
Simon Ser 8a5fa4d5c2 lib/client: reset state when websocket is closed 2021-03-03 09:36:48 +01:00
Simon Ser 80e0175d36 Make all resource paths relative
Closes: https://todo.sr.ht/~emersion/gamja/17
2021-03-02 22:46:48 +01:00
Simon Ser b0a3cd23e4 Fix inverted condition in fetchHistoryBefore 2021-01-23 12:23:30 +01:00
Simon Ser 4d540d55ac Fix undefined CHATHISTORY_PAGE_SIZE 2021-01-23 12:19:40 +01:00
Simon Ser 1f640a4010 Log WebSocket constructor error in the console 2021-01-22 20:59:17 +01:00
Simon Ser 987f0b3389 Spread it like butter 2021-01-22 20:58:57 +01:00
Simon Ser 430373dd13 Move chat history operations into Client 2021-01-22 18:51:38 +01:00
Simon Ser 4e1f06b960 Move auto-reconnect logic into Client 2021-01-22 18:44:06 +01:00
Simon Ser 41cd2153cf Keep track of client status in Client 2021-01-22 18:29:22 +01:00