diff --git a/src/api/api.go b/src/api/api.go index 44d5813..f105f4c 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -473,6 +473,7 @@ func StringToBool(input string) bool { // @Param timeout query string false "Receive timeout in seconds (default: 1)" // @Param ignore_attachments query string false "Specify whether the attachments of the received message should be ignored" (default: false)" // @Param ignore_stories query string false "Specify whether stories should be ignored when receiving messages" (default: false)" +// @Param max_messages query string false "Specify the maximum number of messages to receive (default: unlimited)". Not available in json-rpc mode. // @Router /v1/receive/{number} [get] func (a *Api) Receive(c *gin.Context) { number := c.Param("number") @@ -496,19 +497,26 @@ func (a *Api) Receive(c *gin.Context) { return } + maxMessages := c.DefaultQuery("max_messages", "0") + maxMessagesInt, err := strconv.ParseInt(maxMessages, 10, 32) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - max_messages needs to be numeric!"}) + return + } + ignoreAttachments := c.DefaultQuery("ignore_attachments", "false") if ignoreAttachments != "true" && ignoreAttachments != "false" { - c.JSON(400, Error {Msg: "Couldn't process request - ignore_attachments parameter needs to be either 'true' or 'false'"}) + c.JSON(400, Error{Msg: "Couldn't process request - ignore_attachments parameter needs to be either 'true' or 'false'"}) return } ignoreStories := c.DefaultQuery("ignore_stories", "false") if ignoreStories != "true" && ignoreStories != "false" { - c.JSON(400, Error {Msg: "Couldn't process request - ignore_stories parameter needs to be either 'true' or 'false'"}) + c.JSON(400, Error{Msg: "Couldn't process request - ignore_stories parameter needs to be either 'true' or 'false'"}) return } - jsonStr, err := a.signalClient.Receive(number, timeoutInt, StringToBool(ignoreAttachments), StringToBool(ignoreStories)) + jsonStr, err := a.signalClient.Receive(number, timeoutInt, StringToBool(ignoreAttachments), StringToBool(ignoreStories), maxMessagesInt) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index cb9b57c..beb5e6d 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -474,12 +474,12 @@ func (s *SignalClient) send(number string, message string, func (s *SignalClient) About() About { about := About{ - SupportedApiVersions: []string{"v1", "v2"}, - BuildNr: 2, - Mode: getSignalCliModeString(s.signalCliMode), - Version: utils.GetEnv("BUILD_VERSION", "unset"), - Capabilities: map[string][]string{"v2/send": []string{"quotes", "mentions"}}, - } + SupportedApiVersions: []string{"v1", "v2"}, + BuildNr: 2, + Mode: getSignalCliModeString(s.signalCliMode), + Version: utils.GetEnv("BUILD_VERSION", "unset"), + Capabilities: map[string][]string{"v2/send": []string{"quotes", "mentions"}}, + } return about } @@ -610,7 +610,7 @@ func (s *SignalClient) SendV2(number string, message string, recps []string, bas return ×tamps, nil } -func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments bool, ignoreStories bool) (string, error) { +func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments bool, ignoreStories bool, maxMessages int64) (string, error) { if s.signalCliMode == JsonRpc { return "", errors.New("Not implemented") } else { @@ -624,6 +624,11 @@ func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments b command = append(command, "--ignore-stories") } + if maxMessages > 0 { + command = append(command, "--max-messages") + command = append(command, strconv.FormatInt(maxMessages, 10)) + } + out, err := s.cliClient.Execute(true, command, "") if err != nil { return "", err