Commit Graph
100 Commits
Author SHA1 Message Date
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 4d988cafeb Move some state utilities to state.js 2021-06-04 18:03:03 +02:00
Simon Ser 791b742684 Allow config.server.ping to be a String
Workaround for existing config files in the wild.
2021-06-04 17:50:49 +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 3b5b693403 Use bufName in addMessage, fix missing Client.isMyNick() 2021-06-03 13:29:32 +02:00
Simon Ser 283f8af4b1 lib/irc: rename IRC prefix utilities 2021-06-03 13:18:28 +02:00
Simon Ser 04c9f0211a Fix undefined server variable in BufferHeader 2021-06-03 13:10:44 +02:00
Simon Ser fe9c483570 s/network/server/
Closes: https://todo.sr.ht/~emersion/gamja/46
2021-06-03 11:46:50 +02:00
Simon Ser 63a71e5f5d Add support for incoming INVITE messages 2021-06-03 11:04:32 +02:00
Simon Ser 55882776b0 Make command descriptions more consistent 2021-06-03 10:28:04 +02:00
Simon Ser 291c9e177d Add /unban 2021-06-03 10:25:33 +02:00
Simon Ser a2dc045683 Add getActiveChannel
Simplifies the command logic
2021-06-03 10:19:09 +02:00
Simon Ser 9067b5a168 Make getActiveClient throw an error if disconnected 2021-06-03 10:19:09 +02:00
Simon Ser a4294975a2 Add support for /ban without argument 2021-06-03 10:19:09 +02:00
Simon Ser 5004f6c89c components/help: document that / allows to start writing a command 2021-06-02 22:53:28 +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
Simon Ser 9affdb894f Make Alt+ArrowUp and Alt+ArrowDown wrap around 2021-05-31 19:21:54 +02:00
Simon Ser 9224ab9d0d Set scrollbar style 2021-05-31 18:43:44 +02:00
Simon Ser e38f35c578 Order buffers by priority in Alt+a 2021-05-31 18:26:04 +02:00
Simon Ser 958b6bf120 Set enterkeyhint in composer 2021-05-31 18:16:49 +02:00
Simon Ser 8c02cdc094 Hide server URL input if set in config or query
Closes: https://todo.sr.ht/~emersion/gamja/52
2021-05-31 18:13:44 +02:00
Simon Ser 04932317f6 Populate server URL in fillConnectParams 2021-05-31 18:11:33 +02:00
Simon Ser 4fff2b1b8d Unify connect params keys 2021-05-31 18:04:02 +02:00
Simon Ser c632ef4339 Don't save default username/realname in local storage 2021-05-31 17:57:17 +02:00
Simon Ser bc7162ebe2 Pretty-print buffer name in buffer header 2021-05-31 17:39:37 +02:00
Simon Ser 6e16163103 Re-fold HTML in BufferList 2021-05-31 17:34:36 +02:00
Simon Ser ced63b0abc Print server status in header prior to RPL_MYINFO 2021-05-31 17:30:45 +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
Simon Ser e271a3cd0e Add /who 2021-05-31 17:02:56 +02:00
Simon Ser fff0907354 Make buffer title bold 2021-05-31 16:45:46 +02:00
Simon Ser 14dbb60aec Fix null membership on JOIN 2021-05-31 16:08:33 +02:00
Simon Ser e90c07e64e Remove unnecessary if in /ban
If whois info is unavailable, the promise is rejected.
2021-05-31 14:53:56 +02:00
Simon Ser a6cdd64444 readme: document server.ping in config section 2021-05-31 14:48:51 +02:00
Simon Ser 2c1e4b7bea Fix commas in folded NICK messages 2021-05-31 14:08:30 +02:00
Simon Ser e76e71c968 Fallback to first server buffer in Alt+a keybind
Previously we switched to the server buffer for the current network.
2021-05-31 13:24:23 +02:00
Simon Ser ab11af3965 Init App.config 2021-05-31 12:26:57 +02:00
Simon Ser b3d825c9d1 Hide composer when disconnected from server 2021-05-31 12:04:54 +02:00
Simon Ser 68753afb8e Ensure connect form has padding
Even on small screens.
2021-05-31 10:55:26 +02:00
Simon Ser 8fbc0a5c62 Fix Alt+h messing up all buffers 2021-05-31 10:46:41 +02:00
Simon Ser b0671fe336 Group folded events by type 2021-05-31 10:35:34 +02:00
Simon Ser ce239e5785 Improve FoldGroup key and shouldComponentUpdate 2021-05-31 10:35:34 +02:00
Simon Ser 8b20b463ff Display last event time when folding messages 2021-05-31 10:35:34 +02:00
Simon Ser 2bc89a6655 Filter out PART → JOIN pairs 2021-05-31 10:35:34 +02:00
Simon Ser 64674bdd9f Fold unimportant messages together 2021-05-31 10:35:34 +02:00
Simon Ser b4367eb13c Simplify /query usage string 2021-05-28 13:58:39 +02:00
Simon Ser 9e9dcff401 Mute date separator line color in dark theme 2021-05-28 11:22:18 +02:00
Simon Ser 5b29cf83f6 Add /motd 2021-05-28 11:17:37 +02:00
Simon Ser e080e87cb7 Pretty-print MOTD 2021-05-28 10:50:42 +02:00
Simon Ser 8123ff3844 Misc theme improvements
- Mute unimportant messages on dark theme
- Adjust button background on light theme
2021-05-28 10:34:39 +02:00
Simon Ser 99ac0151a5 Use Client.isMyNick in NOTICE/PRIVMSG handling 2021-05-28 10:24:40 +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
Simon Ser 558548e6f7 Fix typo in Unread.union 2021-05-27 22:35:41 +02:00
Simon Ser 06f7651bef Ignore TAGMSG messages
We get these from clients that support typing notifications, for
instance.
2021-05-27 21:58:37 +02:00
Simon Ser 74dc78a20b Fix lib/irc.js import path in commands.js 2021-05-27 21:46:56 +02:00
Simon Ser 9567d56f53 Switch to channel buffer on /join
Closes: https://todo.sr.ht/~emersion/gamja/37
2021-05-27 19:10:42 +02:00
Simon Ser 70c0dd1d78 readme: add notes about nginx 2021-05-27 17:47:31 +02:00
Simon Ser f36bba897e Fix cross-network mixups when handling QUIT and NICK
Only mutate buffers if they belong to our connection.
2021-05-27 15:19:28 +02:00
Simon Ser b2cdab86aa Add case-mapping support for channel members
Make a buffer's members an irc.CaseMapMap.
2021-05-27 15:17:18 +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 d880b23d32 Add hint to run /help in unknown command error message 2021-05-27 12:55:28 +02:00
Simon Ser 45c12fb684 Add nick URL param
Closes: https://todo.sr.ht/~emersion/gamja/40
2021-05-27 12:32:22 +02:00
Simon Ser 37492e319b Style dialogs for dark theme
Closes: https://todo.sr.ht/~emersion/gamja/32
2021-05-27 12:05:24 +02:00
Simon Ser fa80817168 Accomodate for empty BOUNCER host
BOUNCER doesn't support describing UNIX domain socket connections.
2021-05-27 11:51:29 +02:00
Simon Ser 071c2626d5 Open error bubbles for IRC numeric errors 2021-05-27 11:34:23 +02:00
Simon Ser b8c4bb3112 Improve command error reporting
state.error is expected to be a String, not an Error.
2021-05-27 11:26:42 +02:00
Simon Ser d5e21097f8 Add /quote command
Closes: https://todo.sr.ht/~emersion/gamja/22
2021-05-27 11:22:34 +02:00
Simon Ser 1d983bd142 Downgrade IRC network logging to debug level 2021-05-27 10:39:24 +02:00
Simon Ser 08678ba57e Always parse autojoin channels from URL params
Even if connection parameters were previously saved to local storage.
2021-05-27 10:36:03 +02:00
Simon Ser ac5bbafdc3 Fix config.json relative path
The path should be relative to index.html, not the JS file.
2021-05-26 23:17:23 +02:00
Simon Ser 17cd38f0b9 Read auto-join channels from browser URL hash
This is easier to type than trying to escape the # in ?channels=#XXX.
2021-05-26 22:57:49 +02:00
Simon Ser 7c81fa6e8c Set the viewport meta tag 2021-05-26 22:42:35 +02:00
Simon Ser 695b02caaa Introduce store helper
Responsible for serializing/deserializing data to be saved in
localStorage. Add a prefix to all localStorage entries to avoid
conflicts with other webapps. Stop guarding against localStorage
not existing, browsers can just implement a dumb interface to
disable it.
2021-05-26 18:43:11 +02:00
Simon Ser 12a38ace90 Add support for IRCv3 setname 2021-05-25 20:22:21 +02:00
Simon Ser 92535fae24 Ignore BOUNCER NETWORK messages if we're already bound to a network 2021-05-25 17:11:06 +02:00
Simon Ser 9dba1b3736 Add vendor prefix to bouncer-networks BATCH type 2021-05-25 17:03:29 +02:00
Simon Ser 1b21f5f076 Display bouncer network status 2021-05-25 17:01:57 +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 94fba920cd Fix close() for bouncer networks 2021-05-25 17:01:18 +02:00
Simon Ser 5165df718f Disconnect on BOUNCER BIND error 2021-05-25 16:59:59 +02:00
Simon Ser 11642e1ab4 Add UI to edit/delete a network 2021-05-25 16:59:59 +02:00
Simon Ser f84334c31e Add UI to add a new bouncer network 2021-05-25 16:59:57 +02:00
Simon Ser 4c62b7571e Indent channels and nicks in buffer list 2021-05-25 16:58:50 +02:00
Simon Ser b429243573 Add support for the soju.im/bouncer-networks extension 2021-05-25 16:58:50 +02:00
Simon Ser 982a945932 Fix TypeError in handleBufferScrollTop
Fixes the following:

    TypeError: client is undefined
2021-05-25 14:28:48 +02:00
Simon Ser ed92c3c61a Clear local storage when clicking "Disconnect" 2021-05-25 12:57:40 +02:00
Simon Ser 811984878c Switch to query params for msgid/timestamp in irc:// URLs
The hash is confusing because channels often start with a # too.
Instead, use a query parameter. This is consistent with [1], which
uses query params for the channel key.

[1]: https://datatracker.ietf.org/doc/html/draft-butcher-irc-url-04
2021-05-25 12:46:00 +02:00
Simon Ser 9e163b7647 Switch it isuser in irc:// URLs
This is what the most recent draft [1] uses.

[1]: https://datatracker.ietf.org/doc/html/draft-butcher-irc-url-04
2021-05-25 12:42:24 +02:00
Simon Ser 07c10b3b1f Only switch to autojoin channel once 2021-05-25 12:40:33 +02:00
Simon Ser f943d8ea15 readme: update IRC channel 2021-05-25 12:35:43 +02:00
Simon Ser d261886199 Add support for config file
Closes: https://todo.sr.ht/~emersion/gamja/20
2021-05-25 12:33:22 +02:00
Simon Ser e0cde27d66 Add simple /mode command 2021-05-23 11:41:04 +02:00
Simon Ser 22e54dac56 Update dependencies
Fixes a security vuln.
2021-05-17 09:52:42 +02:00