Closed cblgh closed 4 years ago
@nikolaiwarner this will probably be of interest for you & the desktop clients. depending on the timing maybe we can have a call/pair on it? :3
(the cli is a good reference for implementing. not perfect but it mostly works hehe)
Is the package-lock.json
included intentionally?
Is the package-lock.json included intentionally?
not really tbh haha
Last thing that remains:
I'll take care of that later tonight :')
This pr implements a new type of client library for cabal (chat) clients.
The goal: new chat clients can now be implemented using only this library, without having to mess around with
cabal-core
itself.It got rolling with @lykkin's help, where we paired on various parts and then i took it to the finish line.
Things which this library makes possible:
!status
channel)It has three core abstractions:
Client
,CabalDetails
andChannelDetails
.Client
is the entrypoint. It has a list ofCabalDetails
(onedetails
for each joined cabal) as well as an API for interacting with a cabal (getting a count of the new messages for a channel, the joined channels for the current peer etc).CabalDetails
is the instance that clients mostly operate on, as it encapsulates all information for a particular cabal. (joined channels, users in that channel, the topic). It also emits events.When a change has happened, a
CabalDetails
instance will callthis._emitUpdate()
. When a client receives this event, they should update their state & rerender. (Check out how the cli does it.)ChannelDetails
encapsulates everything channels (mentions in that channel, status messages for the channel (like having called a command eg/names
, when it was last read, if it's currently being viewed, if it's joined and so on). It also has a barebones implementation for virtual channels, which currently is only the!status
channel.