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.
This commit is contained in:
@@ -975,6 +975,7 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error {
|
|||||||
CurrentPage *int32 `json:"current_page"`
|
CurrentPage *int32 `json:"current_page"`
|
||||||
TotalPages *int32 `json:"total_pages"`
|
TotalPages *int32 `json:"total_pages"`
|
||||||
Epubcfi *string `json:"epubcfi"`
|
Epubcfi *string `json:"epubcfi"`
|
||||||
|
ContextText *string `json:"context_text"`
|
||||||
Percentage *float64 `json:"percentage"`
|
Percentage *float64 `json:"percentage"`
|
||||||
Chapter *int `json:"chapter"`
|
Chapter *int `json:"chapter"`
|
||||||
ChapterProgress *float64 `json:"chapter_progress"`
|
ChapterProgress *float64 `json:"chapter_progress"`
|
||||||
@@ -996,6 +997,7 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error {
|
|||||||
DeviceID: pgtype.UUID{Bytes: userUUID, Valid: true},
|
DeviceID: pgtype.UUID{Bytes: userUUID, Valid: true},
|
||||||
Percentage: req.Percentage,
|
Percentage: req.Percentage,
|
||||||
Epubcfi: req.Epubcfi,
|
Epubcfi: req.Epubcfi,
|
||||||
|
ContextText: req.ContextText,
|
||||||
CharacterOffset: req.CharacterOffset,
|
CharacterOffset: req.CharacterOffset,
|
||||||
Chapter: req.Chapter,
|
Chapter: req.Chapter,
|
||||||
ChapterProgress: req.ChapterProgress,
|
ChapterProgress: req.ChapterProgress,
|
||||||
@@ -1018,6 +1020,16 @@ func (mh *MediaHandler) UpdateMediaReadingProgress(c *echo.Context) error {
|
|||||||
saveReq.TotalPages = &tp
|
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)
|
result, err := mh.progressSvc.SaveProgress(c.Request().Context(), saveReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||||
|
|||||||
Reference in New Issue
Block a user