cabal-club / cabal-client

interface for writing peer-to-peer chat clients
GNU General Public License v3.0
95 stars 14 forks source link

Add cabal-client implementation #11

Closed cblgh closed 4 years ago

cblgh commented 4 years ago

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:

It has three core abstractions: Client, CabalDetails and ChannelDetails.

Client is the entrypoint. It has a list of CabalDetails (one details 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 call this._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.

cblgh commented 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)

hackergrrl commented 4 years ago

Is the package-lock.json included intentionally?

cblgh commented 4 years ago

Is the package-lock.json included intentionally?

not really tbh haha

cblgh commented 4 years ago

Last thing that remains:

Documentation!

I'll take care of that later tonight :')