Added ServerMessage{Editor,Actioner}

This commit is contained in:
diamondburned (Forefront) 2020-06-07 23:42:01 -07:00
parent fa7f2fdca4
commit 231088e94d
2 changed files with 38 additions and 2 deletions

View File

@ -7,6 +7,13 @@ and frontend together.
## Backend
Methods implemented by the backend that have frontend containers as arguments
should not do any IO. If IO is a must, they should be ran in goroutines, then
call the container callbacks when done. Other interface methods can do IO
normally.
*Note:* IO in most cases usually refer to networking, but they should include
files and such as well.
### Service
@ -116,6 +123,8 @@ A server is any entity that is usually a channel or a guild.
- ServerList and/or ServerMessage
- ServerNickname
- Icon (optional)
- ServerMessageEditor
- ServerMessageActioner

View File

@ -143,8 +143,9 @@ type Server interface {
// ServerNickname extends Server to add a specific user nickname into a server.
// The frontend should not traverse up the server tree, and thus the backend
// must handle nickname inheritance. By default, the session name should be
// used.
// must handle nickname inheritance. This also means that servers that don't
// implement ServerMessage also don't need to implement ServerNickname. By
// default, the session name should be used.
type ServerNickname interface {
Nickname(LabelContainer) error
}
@ -152,6 +153,9 @@ type ServerNickname interface {
// Icon is an extra interface that an interface could implement for an icon.
// Typically, Service would return the service logo, Session would return the
// user's avatar, and Server would return the server icon.
//
// For session, the avatar should be the same as the one returned by messages
// sent by the current user.
type Icon interface {
Icon(IconContainer) error
}
@ -189,6 +193,29 @@ type ServerMessageSender interface {
SendMessage(SendableMessage) error
}
// ServerMessageEditor optionally extends ServerMessage to add message editing
// capability to the server. These functions can have IO, and the frontend
// should take care of running them in goroutines.
type ServerMessageEditor interface {
// RawMessageContent gets the original message text for editing.
RawMessageContent(id string) (string, error)
// EditMessage edits the message with the given ID to the given content,
// which is the edited string from RawMessageContent.
EditMessage(id, content string) error
}
// ServerMessageActioner optionally extends ServerMessage to add custom message
// action capabilities to the server. Similarly to ServerMessageEditor, these
// functions can have IO.
type ServerMessageActioner interface {
// MessageActions returns a list of possible actions in pretty strings that
// the frontend will use to directly display.
MessageActions() []string
// DoMessageAction executes a message action on the given messageID, which
// would be taken from MessageHeader.ID().
DoMessageAction(action, messageID string) error
}
// ServerMessageSendCompleter optionally extends ServerMessageSender to add
// autocompletion into the message composer.
type ServerMessageSendCompleter interface {