| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package handlers
- import (
- "log/slog"
- "net/http"
- "strconv"
- "github.com/mk6i/open-oscar-server/state"
- )
- // ConversationStubHandler serves Web AIM conversation/imlog endpoints the
- // client calls when syncing chat focus and read state.
- type ConversationStubHandler struct {
- SessionManager *state.WebAPISessionManager
- Logger *slog.Logger
- }
- func (h *ConversationStubHandler) ok(w http.ResponseWriter, r *http.Request) {
- resp := BaseResponse{}
- resp.Response.StatusCode = 200
- resp.Response.StatusText = "OK"
- SendResponse(w, r, resp, h.Logger)
- }
- // Update records active/focus time for a conversation (fire-and-forget).
- func (h *ConversationStubHandler) Update(w http.ResponseWriter, r *http.Request) {
- h.ok(w, r)
- }
- // Close acknowledges a conversation was closed in the client.
- func (h *ConversationStubHandler) Close(w http.ResponseWriter, r *http.Request) {
- h.ok(w, r)
- }
- // MarkRead acknowledges IM log read state for a buddy.
- func (h *ConversationStubHandler) MarkRead(w http.ResponseWriter, r *http.Request) {
- h.ok(w, r)
- }
- // FetchStoredIMs returns stored IM history for a conversation partner.
- func (h *ConversationStubHandler) FetchStoredIMs(w http.ResponseWriter, r *http.Request, sess *state.WebAPISession) {
- partner := r.URL.Query().Get("to")
- if partner == "" {
- SendError(w, http.StatusBadRequest, "missing required parameter: to")
- return
- }
- q := state.StoredIMQuery{
- PartnerAimID: partner,
- SortOrder: r.URL.Query().Get("sortOrder"),
- SkipMsgID: r.URL.Query().Get("skipMsgId"),
- StopMsgID: r.URL.Query().Get("stopMsgId"),
- }
- if n := r.URL.Query().Get("nToGet"); n != "" {
- if v, err := strconv.Atoi(n); err == nil {
- q.NToGet = v
- }
- }
- if start := r.URL.Query().Get("startTime"); start != "" {
- if v, err := strconv.ParseInt(start, 10, 64); err == nil {
- q.StartTime = v
- }
- }
- if end := r.URL.Query().Get("endTime"); end != "" {
- if v, err := strconv.ParseInt(end, 10, 64); err == nil {
- q.EndTime = v
- }
- }
- msgs := sess.GetStoredIMs(q)
- resp := BaseResponse{}
- resp.Response.StatusCode = 200
- resp.Response.StatusText = "OK"
- resp.Response.Data = map[string]interface{}{
- "msgs": msgs,
- }
- SendResponse(w, r, resp, h.Logger)
- }
|