Reduces unread status changes to publish to the eventbus
at most once every 200ms per window. These events are
handled synchronously on the EDT so cause massive
performance issues.
When connecting to several bouncers with huge backbuffers
this makes the client usable in seconds rather than tens of minutes.
Internally this uses RX to handle the throttling, because it's
super easy. We might eventually want to expose that externally
instead of using an event bus, but I'm not sure.
Allow specifying a window for DisplayableEvents in format.yml (Issue #459)
I'm sure this will be changed/redone, but this is at least a start by allowing
certain events to go to all windows (eg ServerNotices)
Ideally it would be possible for some events to only be displayed in the window
that generated them (eg if I do /notice foo bar the ">-{{target}}-> {{message}}"
message only appears in the window I ran the command in, not either just the
server window or all the windows, but this would need changes to a bunch of
events to make them include a source window.
Apply object display properties when formatting events.
If an object in a formatter tag ({{foo.bar.baz}}) is Displayable,
then we will modify the output based on its display properties.
Currently only supports user links and foreground colours.
This also changes the internal format of nickname links to be
`\u16<nick to link to>\u16<text to show>\u16`, allowing the
link and text to differ. This means if you formatted users
by showing their realname, you could still click them to
open a query.
Closes #424
Closes DMDirc/Plugins#507
Stop swimming against the tide and accept what most of the rest of
the world does.
While it adds an annoying depth to the actual source code, it makes
the root directory nicer (no more 'test-res' dirs), means we don't
have to override the gradle config, and makes it nicer to work in
IDEA 2016.1.