From 39a2829cc83efeb2894caa8e9316e1e93d2abe4e Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Tue, 2 Jun 2026 19:45:00 -0400 Subject: [PATCH] feat(media): accept context_text from web reader progress saves Web reader can now send surrounding text at current reading position. Stored in reading_progress.context_text for use as CFI resolution fallback when converting epubcfi to CREngine XPointer. --- internal/handlers/media.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/handlers/media.go b/internal/handlers/media.go index 54b5ef9..7f4b007 100644 --- a/internal/handlers/media.go +++ b/internal/handlers/media.go @@ -975,6 +975,7 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error { CurrentPage *int32 `json:"current_page"` TotalPages *int32 `json:"total_pages"` Epubcfi *string `json:"epubcfi"` + ContextText *string `json:"context_text"` Percentage *float64 `json:"percentage"` Chapter *int `json:"chapter"` ChapterProgress *float64 `json:"chapter_progress"` @@ -996,6 +997,7 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error { DeviceID: pgtype.UUID{Bytes: userUUID, Valid: true}, Percentage: req.Percentage, Epubcfi: req.Epubcfi, + ContextText: req.ContextText, CharacterOffset: req.CharacterOffset, Chapter: req.Chapter, ChapterProgress: req.ChapterProgress, @@ -1018,6 +1020,16 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error { saveReq.TotalPages = &tp } + if req.Percentage != nil && *req.Percentage < 0.005 { + existing, err := mh.db.GetUniversalProgress(c.Request().Context(), database.GetUniversalProgressParams{ + MediaItemID: pgtype.UUID{Bytes: mediaUUID, Valid: true}, + UserID: pgtype.UUID{Bytes: userUUID, Valid: true}, + }) + if err == nil && existing.Percentage.Valid && existing.Percentage.Float64 > 0.01 { + return c.JSON(http.StatusOK, map[string]string{"status": "ignored"}) + } + } + result, err := mh.progressSvc.SaveProgress(c.Request().Context(), saveReq) if err != nil { return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})