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()})