diff --git a/internal/storage/database.go b/internal/storage/database.go index f9035da..ceeb20d 100644 --- a/internal/storage/database.go +++ b/internal/storage/database.go @@ -8,6 +8,7 @@ import ( "encoding/json" "errors" "fmt" + "net/http" "net/mail" "os" "os/signal" @@ -469,15 +470,25 @@ func GetAttachmentPart(id, partID string) (*enmime.Part, error) { } // LatestID returns the latest message ID -func LatestID() (string, error) { +// +// If a query argument is set in the request the function will return the +// latest message matching the search +func LatestID(r *http.Request) (string, error) { messages := []MessageSummary{} var err error - messages, err = List(0, 1) - if err != nil { - return "", err + search := strings.TrimSpace(r.URL.Query().Get("query")) + if search != "" { + messages, _, err = Search(search, 0, 1) + if err != nil { + return "", err + } + } else { + messages, err = List(0, 1) + if err != nil { + return "", err + } } - if len(messages) == 0 { return "", errors.New("Message not found") } diff --git a/server/apiv1/api.go b/server/apiv1/api.go index 5f0c9ae..c04f49b 100644 --- a/server/apiv1/api.go +++ b/server/apiv1/api.go @@ -213,7 +213,7 @@ func GetMessage(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) @@ -315,7 +315,7 @@ func GetHeaders(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) @@ -375,7 +375,7 @@ func DownloadRaw(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) @@ -738,7 +738,7 @@ func HTMLCheck(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) @@ -793,7 +793,7 @@ func LinkCheck(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) diff --git a/server/handlers/messages.go b/server/handlers/messages.go index ba93d37..4bb5a66 100644 --- a/server/handlers/messages.go +++ b/server/handlers/messages.go @@ -79,7 +79,7 @@ func GetMessageHTML(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error()) @@ -136,7 +136,7 @@ func GetMessageText(w http.ResponseWriter, r *http.Request) { if id == "latest" { var err error - id, err = storage.LatestID() + id, err = storage.LatestID(r) if err != nil { w.WriteHeader(404) fmt.Fprint(w, err.Error())