Add CHATHISTORY LATEST support

This patch adds a bit more compliance to the chathistory IRCv3 specification.
This commit is contained in:
Thomas Vigouroux 2021-11-18 20:41:27 +01:00 committed by Simon Ser
parent cec335ee9c
commit 4831b61186

View File

@ -2380,7 +2380,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc.
var target, limitStr string
var boundsStr [2]string
switch subcommand {
case "AFTER", "BEFORE":
case "AFTER", "BEFORE", "LATEST":
if err := parseMessageParams(msg, nil, &target, &boundsStr[0], &limitStr); err != nil {
return err
}
@ -2399,7 +2399,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc.
return err
}
default:
// TODO: support LATEST, AROUND
// TODO: support AROUND
return ircError{&irc.Message{
Command: "FAIL",
Params: []string{"CHATHISTORY", "INVALID_PARAMS", subcommand, "Unknown command"},
@ -2429,7 +2429,9 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc.
// TODO: support msgid criteria
var bounds [2]time.Time
bounds[0] = parseChatHistoryBound(boundsStr[0])
if bounds[0].IsZero() {
if subcommand == "LATEST" && boundsStr[0] == "*" {
bounds[0] = time.Now();
} else if bounds[0].IsZero() {
return ircError{&irc.Message{
Command: "FAIL",
Params: []string{"CHATHISTORY", "INVALID_PARAMS", subcommand, boundsStr[0], "Invalid first bound"},
@ -2458,7 +2460,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc.
var history []*irc.Message
switch subcommand {
case "BEFORE":
case "BEFORE", "LATEST":
history, err = store.LoadBeforeTime(ctx, &network.Network, entity, bounds[0], time.Time{}, limit, eventPlayback)
case "AFTER":
history, err = store.LoadAfterTime(ctx, &network.Network, entity, bounds[0], time.Now(), limit, eventPlayback)