diff options
Diffstat (limited to 'internal/ipc')
| -rw-r--r-- | internal/ipc/ipc.go | 17 | ||||
| -rw-r--r-- | internal/ipc/server.go | 8 |
2 files changed, 23 insertions, 2 deletions
diff --git a/internal/ipc/ipc.go b/internal/ipc/ipc.go index b1a997a..691dadf 100644 --- a/internal/ipc/ipc.go +++ b/internal/ipc/ipc.go @@ -20,6 +20,11 @@ type Request struct { BeforeID int64 `json:"before_id,omitempty"` ID int64 `json:"id,omitempty"` + // For "list": a non-empty Query switches from most-recent-first to + // an FTS5 search (see store.Store.Search for syntax), ranked by + // relevance. + Query string `json:"query,omitempty"` + // For "repeat": send Raw to scheme://host exactly as given. Scheme string `json:"scheme,omitempty"` Host string `json:"host,omitempty"` @@ -69,7 +74,17 @@ func (c *Client) Close() error { // List returns up to limit history summaries older than beforeID (0 for // the most recent), newest first. func (c *Client) List(limit int, beforeID int64) ([]store.Summary, error) { - if err := c.enc.Encode(Request{Type: "list", Limit: limit, BeforeID: beforeID}); err != nil { + return c.list(Request{Type: "list", Limit: limit, BeforeID: beforeID}) +} + +// Search returns up to limit history summaries matching an FTS5 query +// (see store.Store.Search for syntax), ranked by relevance. +func (c *Client) Search(query string, limit int, beforeID int64) ([]store.Summary, error) { + return c.list(Request{Type: "list", Query: query, Limit: limit, BeforeID: beforeID}) +} + +func (c *Client) list(req Request) ([]store.Summary, error) { + if err := c.enc.Encode(req); err != nil { return nil, err } var resp Response diff --git a/internal/ipc/server.go b/internal/ipc/server.go index e3b2a29..0e839fb 100644 --- a/internal/ipc/server.go +++ b/internal/ipc/server.go @@ -93,7 +93,13 @@ func (s *Server) handleConn(conn net.Conn) { switch req.Type { case "list": - entries, err := s.db.List(req.Limit, req.BeforeID) + var entries []store.Summary + var err error + if req.Query != "" { + entries, err = s.db.Search(req.Query, req.Limit, req.BeforeID) + } else { + entries, err = s.db.List(req.Limit, req.BeforeID) + } if err != nil { enc.Encode(Response{Type: "error", Error: err.Error()}) continue |