From d91e5fac3de352bbcc036c2d4dcb826297f80e6c Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Fri, 3 Apr 2026 17:20:23 -0400 Subject: [PATCH] fix: update reader service and handler - Add panel_layout to getDefaultSettings() for dockable panels - Remove template rendering from ShowReader (router handles SSR) - Fix pgtype.Int4 marshaling to JSON (no explicit int conversion) - Remove unused strings import from handlers --- internal/handlers/reader.go | 25 ++----------------------- internal/services/reader.go | 9 +++++++++ 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/internal/handlers/reader.go b/internal/handlers/reader.go index f1e3461..579faba 100644 --- a/internal/handlers/reader.go +++ b/internal/handlers/reader.go @@ -8,7 +8,6 @@ import ( "net/http" "os" "strconv" - "strings" "github.com/google/uuid" "github.com/jackc/pgx/v5" @@ -99,26 +98,6 @@ func (h *ReaderHandler) ShowReader(c echo.Context) error { UserID: userData.ID, }) - // Prepare metadata - metadata := ReaderMetadata{ - MediaItemID: mediaItemID, - Title: mediaItem.Title, - Author: textToString(mediaItem.Author), - CoverImagePath: textToString(mediaItem.CoverImagePath), - LibraryType: mediaItem.FormatGroup, - MimeType: textToString(mediaItem.MimeType), - FilePath: mediaItem.FilePath, - TotalPages: int(mediaItem.PageCount), - ChapterCount: int(mediaItem.ChapterCount), - } - - // Render template - var buf strings.Builder - err = templates.Reader(userData, metadata, progress, bookmarks).Render(c.Request().Context(), &buf) - if err != nil { - return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to render reader"}) - } - // Return JSON response instead of rendering template return c.JSON(http.StatusOK, map[string]interface{}{ "media_item_id": mediaItemID, @@ -128,8 +107,8 @@ func (h *ReaderHandler) ShowReader(c echo.Context) error { "library_type": mediaItem.FormatGroup, "mime_type": textToString(mediaItem.MimeType), "file_path": mediaItem.FilePath, - "total_pages": int(mediaItem.PageCount), - "chapter_count": int(mediaItem.ChapterCount), + "total_pages": mediaItem.PageCount, + "chapter_count": mediaItem.ChapterCount, "progress": progress, "bookmarks": bookmarks, }) diff --git a/internal/services/reader.go b/internal/services/reader.go index c192be2..78e31be 100644 --- a/internal/services/reader.go +++ b/internal/services/reader.go @@ -402,5 +402,14 @@ func (s *ReaderService) getDefaultSettings() map[string]interface{} { "tap_zone_size": 30, "auto_scroll": false, "panel_zoom_enabled": true, + + // Dockable panel defaults + "panel_layout": map[string]interface{}{ + "toc": map[string]interface{}{"side": "left", "visible": true, "collapsed": false, "width_px": 320, "order": 1, "locked": false, "last_valid_side": "left"}, + "settings": map[string]interface{}{"side": "left", "visible": false, "collapsed": true, "width_px": 380, "order": 2, "locked": false, "last_valid_side": "left"}, + "navigator": map[string]interface{}{"side": "right", "visible": true, "collapsed": false, "width_px": 200, "order": 1, "locked": false, "last_valid_side": "right"}, + "bookmarks": map[string]interface{}{"side": "right", "visible": false, "collapsed": true, "width_px": 280, "order": 2, "locked": false, "last_valid_side": "right"}, + "mobile_nav_visible": false, + }, } }