From 1af16bca4d569190af4f62450b924c45070c59db Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Fri, 29 Sep 2023 18:23:29 +0330 Subject: [PATCH 01/19] add new api --- internal/http/routes/api/v1/bookmarks.go | 152 +++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 44035e3f9..dec75c880 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -1,13 +1,19 @@ package api_v1 import ( + "fmt" "log" + "net/http" + "os" + fp "path/filepath" "strconv" + "sync" "github.com/gin-gonic/gin" "github.com/go-shiori/shiori/internal/config" "github.com/go-shiori/shiori/internal/core" "github.com/go-shiori/shiori/internal/database" + "github.com/go-shiori/shiori/internal/http/context" "github.com/go-shiori/shiori/internal/http/response" "github.com/go-shiori/shiori/internal/model" "github.com/sirupsen/logrus" @@ -20,11 +26,28 @@ type BookmarksAPIRoutes struct { func (r *BookmarksAPIRoutes) Setup(g *gin.RouterGroup) model.Routes { g.GET("/", r.listHandler) + g.PUT("/getebook", r.getebook) g.POST("/", r.createHandler) g.DELETE("/:id", r.deleteHandler) return r } +type getebookPayload struct { + Ids []int `json:"ids" validate:"required"` +} + +func (p *getebookPayload) IsValid() error { + if len(p.Ids) == 0 { + return fmt.Errorf("id should not be empty") + } + for _, id := range p.Ids { + if id <= 0 { + return fmt.Errorf("id should not be 0 or negative") + } + } + return nil +} + func (r *BookmarksAPIRoutes) listHandler(c *gin.Context) { bookmarks, err := r.deps.Database.GetBookmarks(c, database.GetBookmarksOptions{}) if err != nil { @@ -167,3 +190,132 @@ func NewBookmarksPIRoutes(logger *logrus.Logger, deps *config.Dependencies) *Boo deps: deps, } } + +func (r *BookmarksAPIRoutes) getebook(c *gin.Context) { + ctx := context.NewContextFromGin(c) + if !ctx.UserIsLogged() { + response.SendError(c, http.StatusForbidden, nil) + return + } + + // Get server config + logger := logrus.New() + cfg := config.ParseServerConfiguration(ctx, logger) + + var payload getebookPayload + if err := c.ShouldBindJSON(&payload); err != nil { + response.SendInternalServerError(c) + return + } + + if err := payload.IsValid(); err != nil { + response.SendError(c, http.StatusBadRequest, err.Error()) + return + } + + // send request to database and get bookmarks + filter := database.GetBookmarksOptions{ + IDs: payload.Ids, + WithContent: true, + } + + bookmarks, err := r.deps.Database.GetBookmarks(c, filter) + if len(bookmarks) == 0 { + r.logger.WithError(err).Error("Bookmark not found") + response.SendError(c, 404, "Bookmark not found") + return + } + + if err != nil { + r.logger.WithError(err).Error("error getting bookmakrs") + response.SendInternalServerError(c) + return + } + + // Fetch data from internet + mx := sync.RWMutex{} + wg := sync.WaitGroup{} + chDone := make(chan struct{}) + chProblem := make(chan int, 10) + semaphore := make(chan struct{}, 10) + + for i, book := range bookmarks { + wg.Add(1) + + go func(i int, book model.Bookmark) { + // Make sure to finish the WG + defer wg.Done() + + // Register goroutine to semaphore + semaphore <- struct{}{} + defer func() { + <-semaphore + }() + + // Download data from internet + content, contentType, err := core.DownloadBookmark(book.URL) + if err != nil { + chProblem <- book.ID + return + } + request := core.ProcessRequest{ + + DataDir: cfg.Storage.DataDir, + Bookmark: book, + Content: content, + ContentType: contentType, + } + + // if file exist book return avilable file + strID := strconv.Itoa(book.ID) + ebookPath := fp.Join(request.DataDir, "ebook", strID+".epub") + _, err = os.Stat(ebookPath) + if err == nil { + // file already exists, return the existing file + imagePath := fp.Join(request.DataDir, "thumb", fmt.Sprintf("%d", book.ID)) + archivePath := fp.Join(request.DataDir, "archive", fmt.Sprintf("%d", book.ID)) + + if _, err := os.Stat(imagePath); err == nil { + book.ImageURL = fp.Join("/", "bookmark", strID, "thumb") + } + + if _, err := os.Stat(archivePath); err == nil { + book.HasArchive = true + } + book.HasEbook = true + } else { + // generate ebook file + book, err = core.GenerateEbook(request, ebookPath) + content.Close() + + if err != nil { + chProblem <- book.ID + return + } + } + + // Update list of bookmarks + mx.Lock() + bookmarks[i] = book + mx.Unlock() + }(i, book) + } + // Receive all problematic bookmarks + idWithProblems := []int{} + go func() { + for { + select { + case <-chDone: + return + case id := <-chProblem: + idWithProblems = append(idWithProblems, id) + } + } + }() + + // Wait until all download finished + wg.Wait() + close(chDone) + + response.Send(c, 200, bookmarks) +} From a922bb7d01ae7f7454d6f78f2fff8167a10052ea Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Fri, 29 Sep 2023 20:02:40 +0330 Subject: [PATCH 02/19] UI use new API --- internal/view/assets/js/page/home.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/view/assets/js/page/home.js b/internal/view/assets/js/page/home.js index 70b589af0..df229c18b 100644 --- a/internal/view/assets/js/page/home.js +++ b/internal/view/assets/js/page/home.js @@ -589,6 +589,7 @@ export default { }); }, ebookGenerate(items) { + var authToken = JSON.parse(localStorage.getItem("shiori-token")); // Check and filter items if (typeof items !== "object") return; if (!Array.isArray(items)) items = [items]; @@ -608,17 +609,19 @@ export default { ids: ids, }; this.loading = true; - fetch(new URL("api/ebook", document.baseURI), { + fetch(new URL("api/v1/bookmarks/getebook", document.baseURI), { method: "put", body: JSON.stringify(data), - headers: { "Content-Type": "application/json" }, + headers: { "Content-Type": "application/json", + Authorization: `Bearer ${authToken}`, + }, }).then(response => { if (!response.ok) throw response; return response.json(); }).then(json => { this.selection = []; this.editMode = false; - json.forEach(book => { + json.message.forEach(book => { // download ebooks const id = book.id; if (book.hasEbook){ From 4b7881827a0713931e7edde1b3698987e8d8f067 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Fri, 29 Sep 2023 20:58:04 +0330 Subject: [PATCH 03/19] remove legacy route --- internal/http/routes/legacy.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/http/routes/legacy.go b/internal/http/routes/legacy.go index 863f1b0e3..0c2a4b971 100644 --- a/internal/http/routes/legacy.go +++ b/internal/http/routes/legacy.go @@ -103,8 +103,6 @@ func (r *LegacyAPIRoutes) Setup(g *gin.Engine) { legacyGroup.PUT("/api/bookmarks", r.handle(r.legacyHandler.ApiUpdateBookmark)) // router.PUT(jp("/api/cache"), withLogging(hdl.apiUpdateCache)) legacyGroup.PUT("/api/cache", r.handle(r.legacyHandler.ApiUpdateCache)) - // router.PUT(jp("/api/ebook"), withLogging(hdl.apiDownloadEbook)) - legacyGroup.PUT("/api/ebook", r.handle(r.legacyHandler.ApiDownloadEbook)) // router.PUT(jp("/api/bookmarks/tags"), withLogging(hdl.apiUpdateBookmarkTags)) legacyGroup.PUT("/api/bookmarks/tags", r.handle(r.legacyHandler.ApiUpdateBookmarkTags)) // router.POST(jp("/api/bookmarks/ext"), withLogging(hdl.apiInsertViaExtension)) From ace7de2c88d5396cf9f86e947baebe43920d4c54 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:24:16 +0330 Subject: [PATCH 04/19] fix request to new api destination and read that response --- internal/view/assets/js/page/home.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/view/assets/js/page/home.js b/internal/view/assets/js/page/home.js index dd043d46f..108518954 100644 --- a/internal/view/assets/js/page/home.js +++ b/internal/view/assets/js/page/home.js @@ -613,7 +613,7 @@ export default { ids: ids, }; this.loading = true; - fetch(new URL("api/ebook", document.baseURI), { + fetch(new URL("api/v1/bookmarks/getebook", document.baseURI), { method: "put", body: JSON.stringify(data), headers: { "Content-Type": "application/json", 'Authorization': 'Bearer ' + localStorage.getItem("shiori-token") }, @@ -623,7 +623,7 @@ export default { }).then(json => { this.selection = []; this.editMode = false; - json.forEach(book => { + json.message.forEach(book => { // download ebooks const id = book.id; if (book.hasEbook) { From b6c0bb4345cedfc9aa0bb0460556f7f12e3be5e8 Mon Sep 17 00:00:00 2001 From: "Felipe M." Date: Tue, 10 Oct 2023 22:32:41 +0200 Subject: [PATCH 05/19] feat: allow authentication using cookies --- internal/http/middleware/auth.go | 38 ++++++++++++++++++++------- internal/http/middleware/auth_test.go | 19 +++++++++++++- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/internal/http/middleware/auth.go b/internal/http/middleware/auth.go index ccbcb4b4e..467536e33 100644 --- a/internal/http/middleware/auth.go +++ b/internal/http/middleware/auth.go @@ -16,17 +16,12 @@ import ( // `account` with the account model for the logged in user. func AuthMiddleware(deps *config.Dependencies) gin.HandlerFunc { return func(c *gin.Context) { - authorization := c.GetHeader(model.AuthorizationHeader) - if authorization == "" { - return - } - - authParts := strings.SplitN(authorization, " ", 2) - if len(authParts) != 2 && authParts[0] != model.AuthorizationTokenType { - return + token := getTokenFromHeader(c) + if token == "" { + token = getTokenFromCookie(c) } - account, err := deps.Domains.Auth.CheckToken(c, authParts[1]) + account, err := deps.Domains.Auth.CheckToken(c, token) if err != nil { return } @@ -46,3 +41,28 @@ func AuthenticationRequired() gin.HandlerFunc { } } } + +// getTokenFromHeader returns the token from the Authorization header, if any. +func getTokenFromHeader(c *gin.Context) string { + authorization := c.GetHeader(model.AuthorizationHeader) + if authorization == "" { + return "" + } + + authParts := strings.SplitN(authorization, " ", 2) + if len(authParts) != 2 && authParts[0] != model.AuthorizationTokenType { + return "" + } + + return authParts[1] +} + +// getTokenFromCookie returns the token from the token cookie, if any. +func getTokenFromCookie(c *gin.Context) string { + cookie, err := c.Cookie("token") + if err != nil { + return "" + } + + return cookie +} diff --git a/internal/http/middleware/auth_test.go b/internal/http/middleware/auth_test.go index e77ebb68a..5112a9581 100644 --- a/internal/http/middleware/auth_test.go +++ b/internal/http/middleware/auth_test.go @@ -43,7 +43,7 @@ func TestAuthMiddleware(t *testing.T) { _, deps := testutil.GetTestConfigurationAndDependencies(t, ctx, logger) middleware := AuthMiddleware(deps) - t.Run("test no authorization header", func(t *testing.T) { + t.Run("test no authorization method", func(t *testing.T) { w := httptest.NewRecorder() c, router := gin.CreateTestContext(w) req := httptest.NewRequest(http.MethodGet, "/", nil) @@ -66,4 +66,21 @@ func TestAuthMiddleware(t *testing.T) { _, exists := c.Get(model.ContextAccountKey) require.True(t, exists) }) + + t.Run("test authorization cookie", func(t *testing.T) { + account := model.Account{Username: "shiori"} + token, err := deps.Domains.Auth.CreateTokenForAccount(&account, time.Now().Add(time.Minute)) + require.NoError(t, err) + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + c.Request, _ = http.NewRequest("GET", "/", nil) + c.Request.AddCookie(&http.Cookie{ + Name: "token", + Value: token, + MaxAge: int(time.Now().Add(time.Minute).Unix()), + }) + middleware(c) + _, exists := c.Get(model.ContextAccountKey) + require.True(t, exists) + }) } From 6dc3d801575a7dd7f31afe1bf6e9743c23fb0252 Mon Sep 17 00:00:00 2001 From: "Felipe M." Date: Tue, 10 Oct 2023 22:44:23 +0200 Subject: [PATCH 06/19] fix: return proper error on validatesession --- internal/webserver/handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/webserver/handler.go b/internal/webserver/handler.go index 442466ee7..659db55ba 100644 --- a/internal/webserver/handler.go +++ b/internal/webserver/handler.go @@ -115,7 +115,7 @@ func (h *Handler) validateSession(r *http.Request) error { account, err := h.depenencies.Domains.Auth.CheckToken(r.Context(), authParts[1]) if err != nil { - return err + return fmt.Errorf("session has been expired") } if r.Method != "" && r.Method != "GET" && !account.Owner { From df8da021cb52783139443f9c0d80a4c6981522f4 Mon Sep 17 00:00:00 2001 From: "Felipe M." Date: Tue, 10 Oct 2023 09:05:52 +0200 Subject: [PATCH 07/19] typo: secret key envionment variable in makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a74d59c7f..bafba3f27 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ serve: ## Runs server for local development .PHONY: run-server run-server: - GIN_MODE=$(GIN_MODE) SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) SHIORI_SECRET_KEY=shiori go run main.go server + GIN_MODE=$(GIN_MODE) SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) SHIORI_HTTP_SECRET_KEY=shiori go run main.go server ## Generate swagger docs .PHONY: swagger From 22daafb451f930ddd82195a0f1dfa600fddbefe3 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:29:59 +0330 Subject: [PATCH 08/19] serve ebook file with new api --- internal/http/routes/bookmark.go | 54 +++++++++++++++++++++++++++++-- internal/http/routes/legacy.go | 2 -- internal/http/server.go | 2 +- internal/view/login.html | 1 + internal/webserver/handler-api.go | 8 ++--- internal/webserver/handler-ui.go | 6 ++-- internal/webserver/utils.go | 2 +- 7 files changed, 62 insertions(+), 13 deletions(-) diff --git a/internal/http/routes/bookmark.go b/internal/http/routes/bookmark.go index 03b415e39..db05e02d5 100644 --- a/internal/http/routes/bookmark.go +++ b/internal/http/routes/bookmark.go @@ -4,11 +4,14 @@ import ( "net/http" "strconv" + fp "path/filepath" + "github.com/gin-gonic/gin" "github.com/go-shiori/shiori/internal/config" "github.com/go-shiori/shiori/internal/http/context" "github.com/go-shiori/shiori/internal/http/response" "github.com/go-shiori/shiori/internal/model" + ws "github.com/go-shiori/shiori/internal/webserver" "github.com/sirupsen/logrus" ) @@ -18,8 +21,9 @@ type BookmarkRoutes struct { } func (r *BookmarkRoutes) Setup(group *gin.RouterGroup) model.Routes { - group.GET("/:id/archive", r.bookmarkArchiveHandler) - group.GET("/:id/content", r.bookmarkContentHandler) + //group.GET("/:id/archive", r.bookmarkArchiveHandler) + //group.GET("/:id/content", r.bookmarkContentHandler) + group.GET("/:id/ebook", r.bookmarkEbookHandler) return r } @@ -66,3 +70,49 @@ func NewBookmarkRoutes(logger *logrus.Logger, deps *config.Dependencies) *Bookma deps: deps, } } + +func (r *BookmarkRoutes) bookmarkEbookHandler(c *gin.Context) { + ctx := context.NewContextFromGin(c) + + // Get server config + logger := logrus.New() + cfg := config.ParseServerConfiguration(ctx, logger) + DataDir := cfg.Storage.DataDir + + bookmarkIDParam, present := c.Params.Get("id") + if !present { + response.SendError(c, 400, "Invalid bookmark ID") + return + } + + bookmarkID, err := strconv.Atoi(bookmarkIDParam) + if err != nil { + r.logger.WithError(err).Error("error parsing bookmark ID parameter") + response.SendInternalServerError(c) + return + } + + if bookmarkID == 0 { + response.SendError(c, 404, nil) + return + } + + bookmark, found, err := r.deps.Database.GetBookmark(c, bookmarkID, "") + if err != nil || !found { + response.SendError(c, 404, nil) + return + } + + if bookmark.Public != 1 && !ctx.UserIsLogged() { + response.SendError(c, http.StatusForbidden, nil) + return + } + + ebookPath := fp.Join(DataDir, "ebook", bookmarkIDParam+".epub") + if !ws.FileExists(ebookPath) { + response.SendError(c, 404, nil) + return + } + filename := bookmark.Title + ".epub" + c.FileAttachment(ebookPath, filename) +} diff --git a/internal/http/routes/legacy.go b/internal/http/routes/legacy.go index 0c2a4b971..ce507e278 100644 --- a/internal/http/routes/legacy.go +++ b/internal/http/routes/legacy.go @@ -83,8 +83,6 @@ func (r *LegacyAPIRoutes) Setup(g *gin.Engine) { legacyGroup.GET("/bookmark/:id/thumb", r.handle(r.legacyHandler.ServeThumbnailImage)) // router.GET(jp("/bookmark/:id/content"), withLogging(hdl.serveBookmarkContent)) legacyGroup.GET("/bookmark/:id/content", r.handle(r.legacyHandler.ServeBookmarkContent)) - // router.GET(jp("/bookmark/:id/ebook"), withLogging(hdl.serveBookmarkEbook)) - legacyGroup.GET("/bookmark/:id/ebook", r.handle(r.legacyHandler.ServeBookmarkEbook)) // router.GET(jp("/bookmark/:id/archive/*filepath"), withLogging(hdl.serveBookmarkArchive)) legacyGroup.GET("/bookmark/:id/archive/*filepath", r.handle(r.legacyHandler.ServeBookmarkArchive)) // legacyGroup.GET("/bookmark/:id/archive/", r.handle(r.legacyHandler.ServeBookmarkArchive)) diff --git a/internal/http/server.go b/internal/http/server.go index ac7412ab3..d171d25ce 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -53,7 +53,7 @@ func (s *HttpServer) Setup(cfg *config.Config, deps *config.Dependencies) *HttpS legacyRoutes.Setup(s.engine) s.handle("/system", routes.NewSystemRoutes(s.logger)) - // s.handle("/bookmark", routes.NewBookmarkRoutes(s.logger, deps)) + s.handle("/bookmark", routes.NewBookmarkRoutes(s.logger, deps)) s.handle("/api/v1", api_v1.NewAPIRoutes(s.logger, deps, legacyRoutes.HandleLogin)) s.handle("/swagger", routes.NewSwaggerAPIRoutes(s.logger)) diff --git a/internal/view/login.html b/internal/view/login.html index 1ba9ecd21..f3431bba7 100644 --- a/internal/view/login.html +++ b/internal/view/login.html @@ -121,6 +121,7 @@ }).then(json => { // Save session id document.cookie = `session-id=${json.message.session}; Path=${new URL(document.baseURI).pathname}; Expires=${json.message.expires}`; + document.cookie = `token=${json.message.token}; Path=${new URL(document.baseURI).pathname}; Expires=${json.message.expires}`; // Save account data localStorage.setItem("shiori-token", json.message.token); diff --git a/internal/webserver/handler-api.go b/internal/webserver/handler-api.go index 1e2271794..b46511442 100644 --- a/internal/webserver/handler-api.go +++ b/internal/webserver/handler-api.go @@ -112,14 +112,14 @@ func (h *Handler) ApiGetBookmarks(w http.ResponseWriter, r *http.Request, ps htt archivePath := fp.Join(h.DataDir, "archive", strID) ebookPath := fp.Join(h.DataDir, "ebook", strID+".epub") - if fileExists(imgPath) { + if FileExists(imgPath) { bookmarks[i].ImageURL = path.Join(h.RootPath, "bookmark", strID, "thumb") } - if fileExists(archivePath) { + if FileExists(archivePath) { bookmarks[i].HasArchive = true } - if fileExists(ebookPath) { + if FileExists(ebookPath) { bookmarks[i].HasEbook = true } } @@ -673,7 +673,7 @@ func (h *Handler) ApiUpdateBookmarkTags(w http.ResponseWriter, r *http.Request, imgPath := fp.Join(h.DataDir, "thumb", strID) imgURL := path.Join(h.RootPath, "bookmark", strID, "thumb") - if fileExists(imgPath) { + if FileExists(imgPath) { bookmarks[i].ImageURL = imgURL } } diff --git a/internal/webserver/handler-ui.go b/internal/webserver/handler-ui.go index d59b5bcfb..235de6999 100644 --- a/internal/webserver/handler-ui.go +++ b/internal/webserver/handler-ui.go @@ -50,11 +50,11 @@ func (h *Handler) ServeBookmarkContent(w http.ResponseWriter, r *http.Request, p // Check if it has ebook. ebookPath := fp.Join(h.DataDir, "ebook", strID+".epub") - if fileExists(ebookPath) { + if FileExists(ebookPath) { bookmark.HasEbook = true } archivePath := fp.Join(h.DataDir, "archive", strID) - if fileExists(archivePath) { + if FileExists(archivePath) { bookmark.HasArchive = true // Open archive, look in cache first @@ -320,7 +320,7 @@ func (h *Handler) ServeBookmarkEbook(w http.ResponseWriter, r *http.Request, ps // Check if it has ebook. ebookPath := fp.Join(h.DataDir, "ebook", strID+".epub") - if !fileExists(ebookPath) { + if !FileExists(ebookPath) { http.Error(w, "ebook not found", http.StatusNotFound) return } diff --git a/internal/webserver/utils.go b/internal/webserver/utils.go index c4e69d976..3c7fdcaf8 100644 --- a/internal/webserver/utils.go +++ b/internal/webserver/utils.go @@ -30,7 +30,7 @@ func redirectPage(w http.ResponseWriter, r *http.Request, url string) { http.Redirect(w, r, url, http.StatusMovedPermanently) } -func fileExists(filePath string) bool { +func FileExists(filePath string) bool { info, err := os.Stat(filePath) return err == nil && !info.IsDir() } From c05bfbaa928b3683a3d777bdc56639d0c1ae869c Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 11:22:47 +0330 Subject: [PATCH 09/19] cache update use new api path --- internal/http/routes/api/v1/bookmarks.go | 144 +++++++++++++++++++++++ internal/http/routes/legacy.go | 2 +- internal/view/assets/js/page/home.js | 4 +- 3 files changed, 147 insertions(+), 3 deletions(-) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index dec75c880..32e011893 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -27,6 +27,7 @@ type BookmarksAPIRoutes struct { func (r *BookmarksAPIRoutes) Setup(g *gin.RouterGroup) model.Routes { g.GET("/", r.listHandler) g.PUT("/getebook", r.getebook) + g.PUT("/cache", r.updateCache) g.POST("/", r.createHandler) g.DELETE("/:id", r.deleteHandler) return r @@ -48,6 +49,25 @@ func (p *getebookPayload) IsValid() error { return nil } +type updateCachePayload struct { + Ids []int `json:"ids" validate:"required"` + KeepMetadata bool `json:"keepMetadata"` + CreateArchive bool `json:"createArchive"` + CreateEbook bool `json:"createEbook"` +} + +func (p *updateCachePayload) IsValid() error { + if len(p.Ids) == 0 { + return fmt.Errorf("id should not be empty") + } + for _, id := range p.Ids { + if id <= 0 { + return fmt.Errorf("id should not be 0 or negative") + } + } + return nil +} + func (r *BookmarksAPIRoutes) listHandler(c *gin.Context) { bookmarks, err := r.deps.Database.GetBookmarks(c, database.GetBookmarksOptions{}) if err != nil { @@ -319,3 +339,127 @@ func (r *BookmarksAPIRoutes) getebook(c *gin.Context) { response.Send(c, 200, bookmarks) } + +func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { + ctx := context.NewContextFromGin(c) + if !ctx.UserIsLogged() { + response.SendError(c, http.StatusForbidden, nil) + return + } + + // Get server config + logger := logrus.New() + cfg := config.ParseServerConfiguration(ctx, logger) + + var payload updateCachePayload + if err := c.ShouldBindJSON(&payload); err != nil { + response.SendInternalServerError(c) + return + } + + if err := payload.IsValid(); err != nil { + response.SendError(c, http.StatusBadRequest, err.Error()) + return + } + + // send request to database and get bookmarks + filter := database.GetBookmarksOptions{ + IDs: payload.Ids, + WithContent: true, + } + + bookmarks, err := r.deps.Database.GetBookmarks(c, filter) + if len(bookmarks) == 0 { + r.logger.WithError(err).Error("Bookmark not found") + response.SendError(c, 404, "Bookmark not found") + return + } + + if err != nil { + r.logger.WithError(err).Error("error getting bookmakrs") + response.SendInternalServerError(c) + return + } + // TODO: limit request to 20 + + // Fetch data from internet + mx := sync.RWMutex{} + wg := sync.WaitGroup{} + chDone := make(chan struct{}) + chProblem := make(chan int, 10) + semaphore := make(chan struct{}, 10) + + for i, book := range bookmarks { + wg.Add(1) + + // Mark whether book will be archived or ebook generate request + book.CreateArchive = payload.CreateArchive + book.CreateEbook = payload.CreateEbook + + go func(i int, book model.Bookmark, keepMetadata bool) { + // Make sure to finish the WG + defer wg.Done() + + // Register goroutine to semaphore + semaphore <- struct{}{} + defer func() { + <-semaphore + }() + + // Download data from internet + content, contentType, err := core.DownloadBookmark(book.URL) + if err != nil { + chProblem <- book.ID + return + } + + request := core.ProcessRequest{ + DataDir: cfg.Storage.DataDir, + Bookmark: book, + Content: content, + ContentType: contentType, + KeepTitle: keepMetadata, + KeepExcerpt: keepMetadata, + } + + book, _, err = core.ProcessBookmark(request) + content.Close() + + if err != nil { + chProblem <- book.ID + return + } + + // Update list of bookmarks + mx.Lock() + bookmarks[i] = book + mx.Unlock() + }(i, book, payload.KeepMetadata) + } + // Receive all problematic bookmarks + idWithProblems := []int{} + go func() { + for { + select { + case <-chDone: + return + case id := <-chProblem: + idWithProblems = append(idWithProblems, id) + } + } + }() + + // Wait until all download finished + wg.Wait() + close(chDone) + + // Update database + _, err = r.deps.Database.SaveBookmarks(ctx, false, bookmarks...) + if err != nil { + r.logger.WithError(err).Error("error update bookmakrs on deatabas") + response.SendInternalServerError(c) + return + } + + response.Send(c, 200, bookmarks) +} diff --git a/internal/http/routes/legacy.go b/internal/http/routes/legacy.go index ce507e278..adbb71179 100644 --- a/internal/http/routes/legacy.go +++ b/internal/http/routes/legacy.go @@ -100,7 +100,7 @@ func (r *LegacyAPIRoutes) Setup(g *gin.Engine) { // router.PUT(jp("/api/bookmarks"), withLogging(hdl.apiUpdateBookmark)) legacyGroup.PUT("/api/bookmarks", r.handle(r.legacyHandler.ApiUpdateBookmark)) // router.PUT(jp("/api/cache"), withLogging(hdl.apiUpdateCache)) - legacyGroup.PUT("/api/cache", r.handle(r.legacyHandler.ApiUpdateCache)) + //legacyGroup.PUT("/api/cache", r.handle(r.legacyHandler.ApiUpdateCache)) // router.PUT(jp("/api/bookmarks/tags"), withLogging(hdl.apiUpdateBookmarkTags)) legacyGroup.PUT("/api/bookmarks/tags", r.handle(r.legacyHandler.ApiUpdateBookmarkTags)) // router.POST(jp("/api/bookmarks/ext"), withLogging(hdl.apiInsertViaExtension)) diff --git a/internal/view/assets/js/page/home.js b/internal/view/assets/js/page/home.js index 108518954..55c360f64 100644 --- a/internal/view/assets/js/page/home.js +++ b/internal/view/assets/js/page/home.js @@ -695,7 +695,7 @@ export default { }; this.dialog.loading = true; - fetch(new URL("api/cache", document.baseURI), { + fetch(new URL("api/v1/bookmarks/cache", document.baseURI), { method: "put", body: JSON.stringify(data), headers: { "Content-Type": "application/json", 'Authorization': 'Bearer ' + localStorage.getItem("shiori-token") }, @@ -710,7 +710,7 @@ export default { let faildedUpdateArchives = []; let faildedCreateEbook = []; - json.forEach(book => { + json.message.forEach(book => { var item = items.find(el => el.id === book.id); this.bookmarks.splice(item.index, 1, book); From 44b2c8f590625d34691b335c7ff29fc1673b7771 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 12:30:26 +0330 Subject: [PATCH 10/19] add skipexist and batch download use same route as cache --- internal/http/routes/api/v1/bookmarks.go | 10 ++++++++++ internal/view/assets/js/page/home.js | 11 ++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 32e011893..b99630a37 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -54,6 +54,7 @@ type updateCachePayload struct { KeepMetadata bool `json:"keepMetadata"` CreateArchive bool `json:"createArchive"` CreateEbook bool `json:"createEbook"` + SkipExist bool `json:"skipExist"` } func (p *updateCachePayload) IsValid() error { @@ -422,6 +423,15 @@ func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { KeepExcerpt: keepMetadata, } + if payload.SkipExist && book.CreateEbook { + strID := strconv.Itoa(book.ID) + ebookPath := fp.Join(request.DataDir, "ebook", strID+".epub") + _, err = os.Stat(ebookPath) + if err == nil { + request.Bookmark.CreateEbook = false + } + } + book, _, err = core.ProcessBookmark(request) content.Close() diff --git a/internal/view/assets/js/page/home.js b/internal/view/assets/js/page/home.js index 55c360f64..ecfb43a05 100644 --- a/internal/view/assets/js/page/home.js +++ b/internal/view/assets/js/page/home.js @@ -610,10 +610,14 @@ export default { // define variable and send request var ids = items.map(item => item.id); var data = { - ids: ids, - }; + ids: ids, + createArchive: false, + keepMetadata: true, + createEbook: true, + skipExist: true, + }; this.loading = true; - fetch(new URL("api/v1/bookmarks/getebook", document.baseURI), { + fetch(new URL("api/v1/bookmarks/cache", document.baseURI), { method: "put", body: JSON.stringify(data), headers: { "Content-Type": "application/json", 'Authorization': 'Bearer ' + localStorage.getItem("shiori-token") }, @@ -692,6 +696,7 @@ export default { createArchive: data.createArchive, keepMetadata: data.keepMetadata, createEbook: data.createEbook, + skipExist: false, }; this.dialog.loading = true; From 6c387c5473ed5a96947628ebd86ea82d849864ec Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 12:47:02 +0330 Subject: [PATCH 11/19] fix bug - update hasebook status --- internal/http/routes/api/v1/bookmarks.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index b99630a37..8620617be 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -429,6 +429,7 @@ func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { _, err = os.Stat(ebookPath) if err == nil { request.Bookmark.CreateEbook = false + request.Bookmark.HasEbook = true } } From 8e608b9b607de0da75046322e44f461f861286d3 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 12:54:47 +0330 Subject: [PATCH 12/19] remove unneeded part of code --- internal/http/routes/api/v1/bookmarks.go | 146 -------------- internal/http/routes/legacy.go | 2 - internal/webserver/handler-api.go | 240 ----------------------- 3 files changed, 388 deletions(-) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 8620617be..26ae00db1 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -26,29 +26,12 @@ type BookmarksAPIRoutes struct { func (r *BookmarksAPIRoutes) Setup(g *gin.RouterGroup) model.Routes { g.GET("/", r.listHandler) - g.PUT("/getebook", r.getebook) g.PUT("/cache", r.updateCache) g.POST("/", r.createHandler) g.DELETE("/:id", r.deleteHandler) return r } -type getebookPayload struct { - Ids []int `json:"ids" validate:"required"` -} - -func (p *getebookPayload) IsValid() error { - if len(p.Ids) == 0 { - return fmt.Errorf("id should not be empty") - } - for _, id := range p.Ids { - if id <= 0 { - return fmt.Errorf("id should not be 0 or negative") - } - } - return nil -} - type updateCachePayload struct { Ids []int `json:"ids" validate:"required"` KeepMetadata bool `json:"keepMetadata"` @@ -212,135 +195,6 @@ func NewBookmarksPIRoutes(logger *logrus.Logger, deps *config.Dependencies) *Boo } } -func (r *BookmarksAPIRoutes) getebook(c *gin.Context) { - ctx := context.NewContextFromGin(c) - if !ctx.UserIsLogged() { - response.SendError(c, http.StatusForbidden, nil) - return - } - - // Get server config - logger := logrus.New() - cfg := config.ParseServerConfiguration(ctx, logger) - - var payload getebookPayload - if err := c.ShouldBindJSON(&payload); err != nil { - response.SendInternalServerError(c) - return - } - - if err := payload.IsValid(); err != nil { - response.SendError(c, http.StatusBadRequest, err.Error()) - return - } - - // send request to database and get bookmarks - filter := database.GetBookmarksOptions{ - IDs: payload.Ids, - WithContent: true, - } - - bookmarks, err := r.deps.Database.GetBookmarks(c, filter) - if len(bookmarks) == 0 { - r.logger.WithError(err).Error("Bookmark not found") - response.SendError(c, 404, "Bookmark not found") - return - } - - if err != nil { - r.logger.WithError(err).Error("error getting bookmakrs") - response.SendInternalServerError(c) - return - } - - // Fetch data from internet - mx := sync.RWMutex{} - wg := sync.WaitGroup{} - chDone := make(chan struct{}) - chProblem := make(chan int, 10) - semaphore := make(chan struct{}, 10) - - for i, book := range bookmarks { - wg.Add(1) - - go func(i int, book model.Bookmark) { - // Make sure to finish the WG - defer wg.Done() - - // Register goroutine to semaphore - semaphore <- struct{}{} - defer func() { - <-semaphore - }() - - // Download data from internet - content, contentType, err := core.DownloadBookmark(book.URL) - if err != nil { - chProblem <- book.ID - return - } - request := core.ProcessRequest{ - - DataDir: cfg.Storage.DataDir, - Bookmark: book, - Content: content, - ContentType: contentType, - } - - // if file exist book return avilable file - strID := strconv.Itoa(book.ID) - ebookPath := fp.Join(request.DataDir, "ebook", strID+".epub") - _, err = os.Stat(ebookPath) - if err == nil { - // file already exists, return the existing file - imagePath := fp.Join(request.DataDir, "thumb", fmt.Sprintf("%d", book.ID)) - archivePath := fp.Join(request.DataDir, "archive", fmt.Sprintf("%d", book.ID)) - - if _, err := os.Stat(imagePath); err == nil { - book.ImageURL = fp.Join("/", "bookmark", strID, "thumb") - } - - if _, err := os.Stat(archivePath); err == nil { - book.HasArchive = true - } - book.HasEbook = true - } else { - // generate ebook file - book, err = core.GenerateEbook(request, ebookPath) - content.Close() - - if err != nil { - chProblem <- book.ID - return - } - } - - // Update list of bookmarks - mx.Lock() - bookmarks[i] = book - mx.Unlock() - }(i, book) - } - // Receive all problematic bookmarks - idWithProblems := []int{} - go func() { - for { - select { - case <-chDone: - return - case id := <-chProblem: - idWithProblems = append(idWithProblems, id) - } - } - }() - - // Wait until all download finished - wg.Wait() - close(chDone) - - response.Send(c, 200, bookmarks) -} - func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { ctx := context.NewContextFromGin(c) if !ctx.UserIsLogged() { diff --git a/internal/http/routes/legacy.go b/internal/http/routes/legacy.go index adbb71179..134742ef9 100644 --- a/internal/http/routes/legacy.go +++ b/internal/http/routes/legacy.go @@ -99,8 +99,6 @@ func (r *LegacyAPIRoutes) Setup(g *gin.Engine) { legacyGroup.DELETE("/api/bookmarks", r.handle(r.legacyHandler.ApiDeleteBookmark)) // router.PUT(jp("/api/bookmarks"), withLogging(hdl.apiUpdateBookmark)) legacyGroup.PUT("/api/bookmarks", r.handle(r.legacyHandler.ApiUpdateBookmark)) - // router.PUT(jp("/api/cache"), withLogging(hdl.apiUpdateCache)) - //legacyGroup.PUT("/api/cache", r.handle(r.legacyHandler.ApiUpdateCache)) // router.PUT(jp("/api/bookmarks/tags"), withLogging(hdl.apiUpdateBookmarkTags)) legacyGroup.PUT("/api/bookmarks/tags", r.handle(r.legacyHandler.ApiUpdateBookmarkTags)) // router.POST(jp("/api/bookmarks/ext"), withLogging(hdl.apiInsertViaExtension)) diff --git a/internal/webserver/handler-api.go b/internal/webserver/handler-api.go index b46511442..25f81dd67 100644 --- a/internal/webserver/handler-api.go +++ b/internal/webserver/handler-api.go @@ -12,7 +12,6 @@ import ( fp "path/filepath" "strconv" "strings" - "sync" "github.com/go-shiori/shiori/internal/core" "github.com/go-shiori/shiori/internal/database" @@ -372,245 +371,6 @@ func (h *Handler) ApiUpdateBookmark(w http.ResponseWriter, r *http.Request, ps h checkError(err) } -// ApiDownloadEbook is handler for PUT /api/ebook -func (h *Handler) ApiDownloadEbook(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - ctx := r.Context() - - // Make sure session still valid - err := h.validateSession(r) - checkError(err) - - // Decode request - request := struct { - IDs []int `json:"ids"` - }{} - err = json.NewDecoder(r.Body).Decode(&request) - checkError(err) - - // Get existing bookmark from database - filter := database.GetBookmarksOptions{ - IDs: request.IDs, - WithContent: true, - } - - bookmarks, err := h.DB.GetBookmarks(ctx, filter) - checkError(err) - if len(bookmarks) == 0 { - http.NotFound(w, r) - return - } - - // Fetch data from internet - mx := sync.RWMutex{} - wg := sync.WaitGroup{} - chDone := make(chan struct{}) - chProblem := make(chan int, 10) - semaphore := make(chan struct{}, 10) - - for i, book := range bookmarks { - wg.Add(1) - - go func(i int, book model.Bookmark) { - // Make sure to finish the WG - defer wg.Done() - - // Register goroutine to semaphore - semaphore <- struct{}{} - defer func() { - <-semaphore - }() - - // Download data from internet - content, contentType, err := core.DownloadBookmark(book.URL) - if err != nil { - chProblem <- book.ID - return - } - - request := core.ProcessRequest{ - DataDir: h.DataDir, - Bookmark: book, - Content: content, - ContentType: contentType, - } - - // if file exist book return avilable file - strID := strconv.Itoa(book.ID) - ebookPath := fp.Join(request.DataDir, "ebook", strID+".epub") - _, err = os.Stat(ebookPath) - if err == nil { - // file already exists, return the existing file - imagePath := fp.Join(request.DataDir, "thumb", fmt.Sprintf("%d", book.ID)) - archivePath := fp.Join(request.DataDir, "archive", fmt.Sprintf("%d", book.ID)) - - if _, err := os.Stat(imagePath); err == nil { - book.ImageURL = fp.Join("/", "bookmark", strID, "thumb") - } - - if _, err := os.Stat(archivePath); err == nil { - book.HasArchive = true - } - book.HasEbook = true - } else { - // generate ebook file - book, err = core.GenerateEbook(request, ebookPath) - content.Close() - - if err != nil { - chProblem <- book.ID - return - } - } - - // Update list of bookmarks - mx.Lock() - bookmarks[i] = book - mx.Unlock() - }(i, book) - } - // Receive all problematic bookmarks - idWithProblems := []int{} - go func() { - for { - select { - case <-chDone: - return - case id := <-chProblem: - idWithProblems = append(idWithProblems, id) - } - } - }() - - // Wait until all download finished - wg.Wait() - close(chDone) - - w.Header().Set("Content-Type", "application1/json") - err = json.NewEncoder(w).Encode(&bookmarks) - checkError(err) -} - -// ApiUpdateCache is handler for PUT /api/cache -func (h *Handler) ApiUpdateCache(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - ctx := r.Context() - - // Make sure session still valid - err := h.validateSession(r) - checkError(err) - - // Decode request - request := struct { - IDs []int `json:"ids"` - KeepMetadata bool `json:"keepMetadata"` - CreateArchive bool `json:"createArchive"` - CreateEbook bool `json:"createEbook"` - }{} - - err = json.NewDecoder(r.Body).Decode(&request) - checkError(err) - - // Get existing bookmark from database - filter := database.GetBookmarksOptions{ - IDs: request.IDs, - WithContent: true, - } - - bookmarks, err := h.DB.GetBookmarks(ctx, filter) - checkError(err) - if len(bookmarks) == 0 { - panic(fmt.Errorf("no bookmark with matching ids")) - } - - // For web interface, let's limit to max 20 IDs to update, and 5 for archival. - // This is done to prevent the REST request from client took too long to finish. - if len(bookmarks) > 20 { - panic(fmt.Errorf("max 20 bookmarks to update")) - } else if len(bookmarks) > 5 && request.CreateArchive { - panic(fmt.Errorf("max 5 bookmarks to update with archival")) - } - - // Fetch data from internet - mx := sync.RWMutex{} - wg := sync.WaitGroup{} - chDone := make(chan struct{}) - chProblem := make(chan int, 10) - semaphore := make(chan struct{}, 10) - - for i, book := range bookmarks { - wg.Add(1) - - // Mark whether book will be archived or ebook generate request - book.CreateArchive = request.CreateArchive - book.CreateEbook = request.CreateEbook - - go func(i int, book model.Bookmark, keepMetadata bool) { - // Make sure to finish the WG - defer wg.Done() - - // Register goroutine to semaphore - semaphore <- struct{}{} - defer func() { - <-semaphore - }() - - // Download data from internet - content, contentType, err := core.DownloadBookmark(book.URL) - if err != nil { - chProblem <- book.ID - return - } - - request := core.ProcessRequest{ - DataDir: h.DataDir, - Bookmark: book, - Content: content, - ContentType: contentType, - KeepTitle: keepMetadata, - KeepExcerpt: keepMetadata, - } - - book, _, err = core.ProcessBookmark(request) - content.Close() - - if err != nil { - chProblem <- book.ID - return - } - - // Update list of bookmarks - mx.Lock() - bookmarks[i] = book - mx.Unlock() - }(i, book, request.KeepMetadata) - } - - // Receive all problematic bookmarks - idWithProblems := []int{} - go func() { - for { - select { - case <-chDone: - return - case id := <-chProblem: - idWithProblems = append(idWithProblems, id) - } - } - }() - - // Wait until all download finished - wg.Wait() - close(chDone) - - // Update database - _, err = h.DB.SaveBookmarks(ctx, false, bookmarks...) - checkError(err) - - // Return new saved result - w.Header().Set("Content-Type", "application/json") - err = json.NewEncoder(w).Encode(&bookmarks) - checkError(err) -} - // ApiUpdateBookmarkTags is handler for PUT /api/bookmarks/tags func (h *Handler) ApiUpdateBookmarkTags(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { ctx := r.Context() From 24b4ff5a513a7b89ee31b922af4e8b874b9c71d8 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 13:15:12 +0330 Subject: [PATCH 13/19] add swagger documentation --- internal/http/routes/api/v1/bookmarks.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 26ae00db1..179818ab7 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -195,6 +195,17 @@ func NewBookmarksPIRoutes(logger *logrus.Logger, deps *config.Dependencies) *Boo } } +// updateCache godoc +// +// @Summary Update Cache and Ebook on server. +// @Tags Auth +// @securityDefinitions.apikey ApiKeyAuth +// @Param payload body updateCachePayloadPayload Ids, KeepMetadata, CreateArchive, CreateEbook, SkipExist +// @Produce json +// @Success 200 {object} model.Account +// @Failure 403 {object} nil "Token not provided/invalid" +// @Router /api/v1/bookmaeks/cache [put] + func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { ctx := context.NewContextFromGin(c) if !ctx.UserIsLogged() { From fe4dc2ae859aedafa1e2d121b216902d531ac864 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:27:35 +0330 Subject: [PATCH 14/19] fix swagger documentation --- docs/swagger/docs.go | 59 ++++++++++++++++++++++++ docs/swagger/swagger.json | 59 ++++++++++++++++++++++++ docs/swagger/swagger.yaml | 38 +++++++++++++++ internal/http/routes/api/v1/bookmarks.go | 3 +- 4 files changed, 157 insertions(+), 2 deletions(-) diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 27f1101b9..10b0fcbbd 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -94,6 +94,39 @@ const docTemplate = `{ } } }, + "/api/v1/bookmaeks/cache": { + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "Auth" + ], + "summary": "Update Cache and Ebook on server.", + "parameters": [ + { + "description": "Update Cache Payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/api_v1.updateCachePayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/model.Account" + } + }, + "403": { + "description": "Token not provided/invalid" + } + } + } + }, "/api/v1/tags": { "get": { "produces": [ @@ -175,6 +208,32 @@ const docTemplate = `{ } } }, + "api_v1.updateCachePayload": { + "type": "object", + "required": [ + "ids" + ], + "properties": { + "createArchive": { + "type": "boolean" + }, + "createEbook": { + "type": "boolean" + }, + "ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "keepMetadata": { + "type": "boolean" + }, + "skipExist": { + "type": "boolean" + } + } + }, "model.Account": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 0c6da5cdf..33cba1a87 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -83,6 +83,39 @@ } } }, + "/api/v1/bookmaeks/cache": { + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "Auth" + ], + "summary": "Update Cache and Ebook on server.", + "parameters": [ + { + "description": "Update Cache Payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/api_v1.updateCachePayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/model.Account" + } + }, + "403": { + "description": "Token not provided/invalid" + } + } + } + }, "/api/v1/tags": { "get": { "produces": [ @@ -164,6 +197,32 @@ } } }, + "api_v1.updateCachePayload": { + "type": "object", + "required": [ + "ids" + ], + "properties": { + "createArchive": { + "type": "boolean" + }, + "createEbook": { + "type": "boolean" + }, + "ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "keepMetadata": { + "type": "boolean" + }, + "skipExist": { + "type": "boolean" + } + } + }, "model.Account": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index a5a4f53c4..ea499d8ad 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -22,6 +22,23 @@ definitions: token: type: string type: object + api_v1.updateCachePayload: + properties: + createArchive: + type: boolean + createEbook: + type: boolean + ids: + items: + type: integer + type: array + keepMetadata: + type: boolean + skipExist: + type: boolean + required: + - ids + type: object model.Account: properties: id: @@ -95,6 +112,27 @@ paths: summary: Refresh a token for an account tags: - Auth + /api/v1/bookmaeks/cache: + put: + parameters: + - description: Update Cache Payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/api_v1.updateCachePayload' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/model.Account' + "403": + description: Token not provided/invalid + summary: Update Cache and Ebook on server. + tags: + - Auth /api/v1/tags: get: produces: diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 179818ab7..cfda1429c 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -200,12 +200,11 @@ func NewBookmarksPIRoutes(logger *logrus.Logger, deps *config.Dependencies) *Boo // @Summary Update Cache and Ebook on server. // @Tags Auth // @securityDefinitions.apikey ApiKeyAuth -// @Param payload body updateCachePayloadPayload Ids, KeepMetadata, CreateArchive, CreateEbook, SkipExist +// @Param payload body updateCachePayload true "Update Cache Payload"` // @Produce json // @Success 200 {object} model.Account // @Failure 403 {object} nil "Token not provided/invalid" // @Router /api/v1/bookmaeks/cache [put] - func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { ctx := context.NewContextFromGin(c) if !ctx.UserIsLogged() { From d175078f450c3719bc620319168727d643ce4fcd Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:31:24 +0330 Subject: [PATCH 15/19] fix swagger response --- docs/swagger/docs.go | 55 +++++++++++++++++++++++- docs/swagger/swagger.json | 55 +++++++++++++++++++++++- docs/swagger/swagger.yaml | 37 +++++++++++++++- internal/http/routes/api/v1/bookmarks.go | 2 +- 4 files changed, 145 insertions(+), 4 deletions(-) diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 10b0fcbbd..8c2952861 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -118,7 +118,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/model.Account" + "$ref": "#/definitions/model.Bookmark" } }, "403": { @@ -251,6 +251,59 @@ const docTemplate = `{ } } }, + "model.Bookmark": { + "type": "object", + "properties": { + "author": { + "type": "string" + }, + "createArchive": { + "type": "boolean" + }, + "createEbook": { + "type": "boolean" + }, + "excerpt": { + "type": "string" + }, + "hasArchive": { + "type": "boolean" + }, + "hasContent": { + "type": "boolean" + }, + "hasEbook": { + "type": "boolean" + }, + "html": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "imageURL": { + "type": "string" + }, + "modified": { + "type": "string" + }, + "public": { + "type": "integer" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Tag" + } + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, "model.Tag": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 33cba1a87..9253d33ea 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -107,7 +107,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/model.Account" + "$ref": "#/definitions/model.Bookmark" } }, "403": { @@ -240,6 +240,59 @@ } } }, + "model.Bookmark": { + "type": "object", + "properties": { + "author": { + "type": "string" + }, + "createArchive": { + "type": "boolean" + }, + "createEbook": { + "type": "boolean" + }, + "excerpt": { + "type": "string" + }, + "hasArchive": { + "type": "boolean" + }, + "hasContent": { + "type": "boolean" + }, + "hasEbook": { + "type": "boolean" + }, + "html": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "imageURL": { + "type": "string" + }, + "modified": { + "type": "string" + }, + "public": { + "type": "integer" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Tag" + } + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, "model.Tag": { "type": "object", "properties": { diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index ea499d8ad..4166403bd 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -50,6 +50,41 @@ definitions: username: type: string type: object + model.Bookmark: + properties: + author: + type: string + createArchive: + type: boolean + createEbook: + type: boolean + excerpt: + type: string + hasArchive: + type: boolean + hasContent: + type: boolean + hasEbook: + type: boolean + html: + type: string + id: + type: integer + imageURL: + type: string + modified: + type: string + public: + type: integer + tags: + items: + $ref: '#/definitions/model.Tag' + type: array + title: + type: string + url: + type: string + type: object model.Tag: properties: id: @@ -127,7 +162,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/model.Account' + $ref: '#/definitions/model.Bookmark' "403": description: Token not provided/invalid summary: Update Cache and Ebook on server. diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index cfda1429c..20d42a8a5 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -202,7 +202,7 @@ func NewBookmarksPIRoutes(logger *logrus.Logger, deps *config.Dependencies) *Boo // @securityDefinitions.apikey ApiKeyAuth // @Param payload body updateCachePayload true "Update Cache Payload"` // @Produce json -// @Success 200 {object} model.Account +// @Success 200 {object} model.Bookmark // @Failure 403 {object} nil "Token not provided/invalid" // @Router /api/v1/bookmaeks/cache [put] func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { From 4893e5ee3415b441dcc527c4b95db7616e58e975 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:25:05 +0330 Subject: [PATCH 16/19] better statuscode --- internal/http/routes/bookmark.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/http/routes/bookmark.go b/internal/http/routes/bookmark.go index db05e02d5..aaff02b09 100644 --- a/internal/http/routes/bookmark.go +++ b/internal/http/routes/bookmark.go @@ -81,7 +81,7 @@ func (r *BookmarkRoutes) bookmarkEbookHandler(c *gin.Context) { bookmarkIDParam, present := c.Params.Get("id") if !present { - response.SendError(c, 400, "Invalid bookmark ID") + response.SendError(c, http.StatusBadRequest, "Invalid bookmark ID") return } @@ -93,24 +93,24 @@ func (r *BookmarkRoutes) bookmarkEbookHandler(c *gin.Context) { } if bookmarkID == 0 { - response.SendError(c, 404, nil) + response.SendError(c, http.StatusNotFound, nil) return } bookmark, found, err := r.deps.Database.GetBookmark(c, bookmarkID, "") if err != nil || !found { - response.SendError(c, 404, nil) + response.SendError(c, http.StatusNotFound, nil) return } if bookmark.Public != 1 && !ctx.UserIsLogged() { - response.SendError(c, http.StatusForbidden, nil) + response.SendError(c, http.StatusUnauthorized, nil) return } ebookPath := fp.Join(DataDir, "ebook", bookmarkIDParam+".epub") if !ws.FileExists(ebookPath) { - response.SendError(c, 404, nil) + response.SendError(c, http.StatusNotFound, nil) return } filename := bookmark.Title + ".epub" From 75938fb7f86241b395505e39fe5ccc69ee9e5a26 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:37:20 +0330 Subject: [PATCH 17/19] fix swagger documentation --- docs/swagger/docs.go | 13 ++++++++----- docs/swagger/swagger.json | 13 ++++++++----- docs/swagger/swagger.yaml | 10 +++++----- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 9b8a31631..038a5fbda 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -240,6 +240,14 @@ const docTemplate = `{ } } }, + "api_v1.settingRequestPayload": { + "type": "object", + "properties": { + "config": { + "$ref": "#/definitions/model.UserConfig" + } + } + }, "api_v1.updateCachePayload": { "type": "object", "required": [ @@ -263,11 +271,6 @@ const docTemplate = `{ }, "skipExist": { "type": "boolean" - "api_v1.settingRequestPayload": { - "type": "object", - "properties": { - "config": { - "$ref": "#/definitions/model.UserConfig" } } }, diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index db6a15f8d..4ad6608db 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -229,6 +229,14 @@ } } }, + "api_v1.settingRequestPayload": { + "type": "object", + "properties": { + "config": { + "$ref": "#/definitions/model.UserConfig" + } + } + }, "api_v1.updateCachePayload": { "type": "object", "required": [ @@ -252,11 +260,6 @@ }, "skipExist": { "type": "boolean" - "api_v1.settingRequestPayload": { - "type": "object", - "properties": { - "config": { - "$ref": "#/definitions/model.UserConfig" } } }, diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index 9b0c2efca..f39cf5ce4 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -22,7 +22,11 @@ definitions: token: type: string type: object - + api_v1.settingRequestPayload: + properties: + config: + $ref: '#/definitions/model.UserConfig' + type: object api_v1.updateCachePayload: properties: createArchive: @@ -39,10 +43,6 @@ definitions: type: boolean required: - ids - api_v1.settingRequestPayload: - properties: - config: - $ref: '#/definitions/model.UserConfig' type: object model.Account: properties: From 3aae47d4266feccd045cce928536dce6690c4bab Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 28 Oct 2023 15:59:23 +0330 Subject: [PATCH 18/19] covert to snake_case --- coverage.txt | 827 ----------------------- docs/swagger/docs.go | 12 +- docs/swagger/swagger.json | 12 +- docs/swagger/swagger.yaml | 12 +- internal/cmd/update.go | 6 +- internal/http/routes/api/v1/bookmarks.go | 16 +- internal/model/model.go | 4 +- internal/view/assets/js/page/home.js | 34 +- internal/webserver/handler-api.go | 5 +- 9 files changed, 50 insertions(+), 878 deletions(-) delete mode 100644 coverage.txt diff --git a/coverage.txt b/coverage.txt deleted file mode 100644 index 2e9af8921..000000000 --- a/coverage.txt +++ /dev/null @@ -1,827 +0,0 @@ -mode: atomic -github.com/go-shiori/shiori/internal/cmd/add.go:13.30,29.2 8 0 -github.com/go-shiori/shiori/internal/cmd/add.go:31.52,55.27 12 0 -github.com/go-shiori/shiori/internal/cmd/add.go:55.27,57.3 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:60.2,62.16 3 0 -github.com/go-shiori/shiori/internal/cmd/add.go:62.16,65.3 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:68.2,68.22 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:68.22,70.3 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:73.2,74.16 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:74.16,77.3 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:79.2,82.14 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:82.14,87.17 4 0 -github.com/go-shiori/shiori/internal/cmd/add.go:87.17,89.4 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:91.3,91.35 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:91.35,105.18 4 0 -github.com/go-shiori/shiori/internal/cmd/add.go:105.18,107.5 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:109.4,109.18 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:109.18,111.5 1 0 -github.com/go-shiori/shiori/internal/cmd/add.go:115.3,116.17 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:116.17,119.4 2 0 -github.com/go-shiori/shiori/internal/cmd/add.go:123.2,124.22 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:16.32,29.2 3 0 -github.com/go-shiori/shiori/internal/cmd/check.go:31.54,36.36 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:36.36,41.26 4 0 -github.com/go-shiori/shiori/internal/cmd/check.go:41.26,44.4 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:48.2,49.16 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:49.16,52.3 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:55.2,57.16 3 0 -github.com/go-shiori/shiori/internal/cmd/check.go:57.16,60.3 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:63.2,74.33 8 0 -github.com/go-shiori/shiori/internal/cmd/check.go:74.33,77.39 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:77.39,83.17 3 0 -github.com/go-shiori/shiori/internal/cmd/check.go:83.17,85.5 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:88.4,89.18 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:89.18,93.5 3 0 -github.com/go-shiori/shiori/internal/cmd/check.go:96.4,96.52 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:101.2,101.25 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:101.25,104.7 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:104.7,105.11 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:106.18,108.11 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:109.27,110.48 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:111.28,114.23 2 0 -github.com/go-shiori/shiori/internal/cmd/check.go:115.16,116.61 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:117.17,118.60 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:125.2,132.30 5 0 -github.com/go-shiori/shiori/internal/cmd/check.go:132.30,134.3 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:134.8,138.37 4 0 -github.com/go-shiori/shiori/internal/cmd/check.go:138.37,140.4 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:141.3,141.16 1 0 -github.com/go-shiori/shiori/internal/cmd/check.go:143.2,143.15 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:13.33,29.2 3 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:31.55,36.36 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:36.36,41.27 4 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:41.27,44.4 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:48.2,49.16 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:49.16,52.3 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:55.2,56.16 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:56.16,59.3 2 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:62.2,62.19 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:62.19,67.3 4 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:67.8,68.26 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:68.26,75.4 5 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:79.2,79.19 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:80.9,81.49 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:82.21,83.77 1 0 -github.com/go-shiori/shiori/internal/cmd/delete.go:84.10,85.47 1 0 -github.com/go-shiori/shiori/internal/cmd/export.go:15.33,24.2 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:26.55,29.16 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:29.16,32.3 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:34.2,34.25 1 0 -github.com/go-shiori/shiori/internal/cmd/export.go:34.25,37.3 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:40.2,41.63 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:41.63,43.3 1 0 -github.com/go-shiori/shiori/internal/cmd/export.go:46.2,47.16 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:47.16,50.3 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:51.2,61.33 3 0 -github.com/go-shiori/shiori/internal/cmd/export.go:61.33,64.17 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:64.17,66.4 1 0 -github.com/go-shiori/shiori/internal/cmd/export.go:67.3,71.33 3 0 -github.com/go-shiori/shiori/internal/cmd/export.go:71.33,73.4 1 0 -github.com/go-shiori/shiori/internal/cmd/export.go:74.3,82.36 4 0 -github.com/go-shiori/shiori/internal/cmd/export.go:85.2,89.16 3 0 -github.com/go-shiori/shiori/internal/cmd/export.go:89.16,92.3 2 0 -github.com/go-shiori/shiori/internal/cmd/export.go:94.2,94.32 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:18.33,29.2 3 0 -github.com/go-shiori/shiori/internal/cmd/import.go:31.55,36.18 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:36.18,42.3 4 0 -github.com/go-shiori/shiori/internal/cmd/import.go:45.2,46.16 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:46.16,49.3 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:50.2,57.16 5 0 -github.com/go-shiori/shiori/internal/cmd/import.go:57.16,60.3 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:62.2,62.58 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:62.58,74.19 8 0 -github.com/go-shiori/shiori/internal/cmd/import.go:74.19,76.4 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:79.3,80.20 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:80.20,82.18 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:82.18,85.5 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:87.4,87.53 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:91.3,92.17 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:92.17,95.4 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:98.3,102.37 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:102.37,105.4 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:107.3,108.51 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:108.51,111.4 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:113.3,113.12 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:113.12,117.4 3 0 -github.com/go-shiori/shiori/internal/cmd/import.go:120.3,121.54 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:121.54,123.20 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:123.20,125.5 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:130.3,131.36 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:131.36,133.4 1 0 -github.com/go-shiori/shiori/internal/cmd/import.go:136.3,144.42 3 0 -github.com/go-shiori/shiori/internal/cmd/import.go:148.2,149.16 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:149.16,152.3 2 0 -github.com/go-shiori/shiori/internal/cmd/import.go:155.2,156.30 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:19.31,36.2 6 0 -github.com/go-shiori/shiori/internal/cmd/open.go:38.53,47.16 6 0 -github.com/go-shiori/shiori/internal/cmd/open.go:47.16,50.3 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:53.2,53.33 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:53.33,56.3 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:60.2,60.36 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:60.36,65.25 4 0 -github.com/go-shiori/shiori/internal/cmd/open.go:65.25,67.4 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:71.2,77.16 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:77.16,80.3 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:82.2,82.25 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:82.25,83.19 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:83.19,86.4 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:86.9,89.4 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:90.3,90.9 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:94.2,94.36 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:94.36,96.34 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:96.34,98.18 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:98.18,101.5 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:103.3,103.16 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:107.2,107.19 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:107.19,111.34 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:111.34,116.26 4 0 -github.com/go-shiori/shiori/internal/cmd/open.go:116.26,119.5 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:119.10,122.5 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:124.4,126.17 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:128.3,128.16 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:132.2,136.16 4 0 -github.com/go-shiori/shiori/internal/cmd/open.go:136.16,139.3 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:140.2,144.94 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:144.94,147.26 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:147.26,149.4 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:151.3,152.17 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:152.17,153.14 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:156.3,158.44 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:158.44,159.14 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:163.2,163.86 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:163.86,165.3 1 0 -github.com/go-shiori/shiori/internal/cmd/open.go:168.2,170.16 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:170.16,173.3 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:175.2,180.12 4 0 -github.com/go-shiori/shiori/internal/cmd/open.go:180.12,184.17 3 0 -github.com/go-shiori/shiori/internal/cmd/open.go:184.17,187.4 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:191.2,192.16 2 0 -github.com/go-shiori/shiori/internal/cmd/open.go:192.16,195.3 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:16.33,25.2 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:27.55,30.16 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:30.16,33.3 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:34.2,41.16 5 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:41.16,44.3 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:46.2,46.55 1 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:46.55,58.17 9 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:58.17,61.4 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:64.3,68.37 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:68.37,71.4 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:73.3,74.17 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:74.17,77.4 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:79.3,79.12 1 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:79.12,83.4 3 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:86.3,87.54 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:87.54,88.20 1 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:88.20,90.5 1 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:94.3,102.42 3 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:106.2,107.16 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:107.16,110.3 2 0 -github.com/go-shiori/shiori/internal/cmd/pocket.go:113.2,114.30 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:12.32,32.2 8 0 -github.com/go-shiori/shiori/internal/cmd/print.go:34.54,45.16 8 0 -github.com/go-shiori/shiori/internal/cmd/print.go:45.16,48.3 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:51.2,52.17 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:52.17,54.3 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:56.2,65.16 3 0 -github.com/go-shiori/shiori/internal/cmd/print.go:65.16,68.3 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:70.2,70.25 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:70.25,71.10 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:72.21,73.45 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:74.37,75.49 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:76.11,77.44 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:79.3,79.9 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:83.2,83.13 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:83.13,85.17 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:85.17,88.4 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:90.3,91.9 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:94.2,94.15 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:94.15,95.38 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:95.38,97.4 1 0 -github.com/go-shiori/shiori/internal/cmd/print.go:99.3,100.9 2 0 -github.com/go-shiori/shiori/internal/cmd/print.go:103.2,103.30 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:26.33,54.2 8 0 -github.com/go-shiori/shiori/internal/cmd/root.go:56.59,65.57 3 0 -github.com/go-shiori/shiori/internal/cmd/root.go:65.57,67.3 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:67.8,69.3 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:72.2,77.16 4 0 -github.com/go-shiori/shiori/internal/cmd/root.go:77.16,80.3 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:82.2,83.16 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:83.16,86.3 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:89.2,90.16 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:90.16,93.3 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:96.2,96.37 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:96.37,99.3 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:102.52,104.18 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:104.18,106.17 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:106.17,108.4 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:110.3,111.45 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:114.2,114.21 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:114.21,116.3 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:119.2,120.11 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:120.11,122.3 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:125.2,127.16 3 0 -github.com/go-shiori/shiori/internal/cmd/root.go:127.16,129.3 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:132.2,132.17 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:135.61,136.54 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:137.15,138.32 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:139.20,140.37 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:141.10,142.33 1 0 -github.com/go-shiori/shiori/internal/cmd/root.go:146.67,149.2 2 0 -github.com/go-shiori/shiori/internal/cmd/root.go:151.66,159.2 6 0 -github.com/go-shiori/shiori/internal/cmd/root.go:161.71,171.2 7 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:11.32,27.2 6 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:29.54,37.20 5 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:37.20,39.3 1 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:41.2,41.39 1 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:41.39,43.3 1 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:45.2,45.39 1 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:45.39,47.3 1 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:50.2,60.16 3 0 -github.com/go-shiori/shiori/internal/cmd/serve.go:60.16,62.3 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:14.61,28.2 6 0 -github.com/go-shiori/shiori/internal/cmd/server.go:30.93,31.49 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:31.49,35.17 3 0 -github.com/go-shiori/shiori/internal/cmd/server.go:35.17,37.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:39.3,41.22 2 0 -github.com/go-shiori/shiori/internal/cmd/server.go:41.22,43.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:45.3,56.21 8 0 -github.com/go-shiori/shiori/internal/cmd/server.go:56.21,58.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:60.3,60.40 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:60.40,62.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:64.3,64.40 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:64.40,66.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:69.3,76.43 6 0 -github.com/go-shiori/shiori/internal/cmd/server.go:76.43,78.4 1 0 -github.com/go-shiori/shiori/internal/cmd/server.go:79.3,81.23 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:16.33,41.2 11 0 -github.com/go-shiori/shiori/internal/cmd/update.go:43.55,56.36 10 0 -github.com/go-shiori/shiori/internal/cmd/update.go:56.36,61.27 4 0 -github.com/go-shiori/shiori/internal/cmd/update.go:61.27,64.4 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:68.2,69.16 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:69.16,72.3 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:75.2,78.32 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:78.32,81.17 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:81.17,82.53 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:86.3,86.20 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:86.20,89.4 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:93.2,98.16 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:98.16,101.3 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:103.2,103.25 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:103.25,106.3 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:109.2,109.83 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:109.83,117.27 6 0 -github.com/go-shiori/shiori/internal/cmd/update.go:117.27,121.4 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:125.2,127.14 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:127.14,137.34 8 0 -github.com/go-shiori/shiori/internal/cmd/update.go:137.34,144.17 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:144.17,146.5 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:148.4,148.40 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:148.40,154.18 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:154.18,156.6 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:159.5,160.19 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:160.19,164.6 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:166.5,179.19 4 0 -github.com/go-shiori/shiori/internal/cmd/update.go:179.19,183.6 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:186.5,191.16 4 0 -github.com/go-shiori/shiori/internal/cmd/update.go:196.3,196.26 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:196.26,199.8 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:199.8,200.12 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:201.19,203.12 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:204.28,205.49 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:206.29,209.24 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:210.17,211.62 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:212.18,213.61 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:220.3,221.16 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:225.2,227.27 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:227.27,231.38 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:231.38,234.4 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:234.9,236.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:240.2,240.33 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:240.33,242.18 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:242.18,244.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:246.3,246.20 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:246.20,248.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:251.3,251.16 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:251.16,253.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:256.3,260.37 3 0 -github.com/go-shiori/shiori/internal/cmd/update.go:260.37,262.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:264.3,265.33 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:265.33,266.56 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:266.56,268.5 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:270.4,270.60 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:270.60,272.5 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:274.4,274.34 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:277.3,277.33 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:277.33,279.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:281.3,284.22 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:288.2,289.16 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:289.16,292.3 2 0 -github.com/go-shiori/shiori/internal/cmd/update.go:295.2,299.29 4 0 -github.com/go-shiori/shiori/internal/cmd/update.go:299.29,304.37 4 0 -github.com/go-shiori/shiori/internal/cmd/update.go:304.37,306.4 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:307.3,307.16 1 0 -github.com/go-shiori/shiori/internal/cmd/update.go:309.2,309.15 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:34.40,37.2 2 5 -github.com/go-shiori/shiori/internal/cmd/utils.go:39.32,42.2 2 6 -github.com/go-shiori/shiori/internal/cmd/utils.go:44.50,45.37 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:45.37,59.29 7 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:59.29,62.4 2 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:65.3,65.29 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:65.29,67.38 2 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:67.38,68.34 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:68.34,70.6 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:70.11,72.6 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:77.3,77.16 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:82.55,84.35 2 8 -github.com/go-shiori/shiori/internal/cmd/utils.go:84.35,85.39 1 16 -github.com/go-shiori/shiori/internal/cmd/utils.go:85.39,87.31 2 10 -github.com/go-shiori/shiori/internal/cmd/utils.go:87.31,89.5 1 2 -github.com/go-shiori/shiori/internal/cmd/utils.go:91.4,92.12 2 8 -github.com/go-shiori/shiori/internal/cmd/utils.go:95.3,96.22 2 6 -github.com/go-shiori/shiori/internal/cmd/utils.go:96.22,98.4 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:100.3,102.76 3 6 -github.com/go-shiori/shiori/internal/cmd/utils.go:102.76,104.4 1 1 -github.com/go-shiori/shiori/internal/cmd/utils.go:106.3,106.41 1 5 -github.com/go-shiori/shiori/internal/cmd/utils.go:106.41,108.4 1 19 -github.com/go-shiori/shiori/internal/cmd/utils.go:111.2,111.23 1 5 -github.com/go-shiori/shiori/internal/cmd/utils.go:116.36,118.22 2 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:119.16,120.26 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:121.17,122.40 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:123.10,124.30 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:127.2,128.18 2 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:131.29,134.2 2 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:136.51,142.17 3 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:142.17,144.3 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:147.2,147.45 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:147.45,149.3 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:152.2,152.30 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:152.30,153.26 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:153.26,155.4 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:156.3,156.11 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:158.2,162.20 3 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:162.20,164.3 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:166.2,166.17 1 0 -github.com/go-shiori/shiori/internal/cmd/utils.go:169.64,171.2 1 0 -github.com/go-shiori/shiori/internal/cmd/version.go:9.62,17.2 2 0 -github.com/go-shiori/shiori/internal/cmd/version.go:19.94,20.49 1 0 -github.com/go-shiori/shiori/internal/cmd/version.go:20.49,22.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:20.69,24.2 3 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:26.65,30.14 3 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:30.14,33.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:35.2,36.16 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:36.16,40.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.2,42.21 1 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.21,45.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:47.2,48.26 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:48.26,51.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.2,53.49 1 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.49,56.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:58.2,58.41 1 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:61.66,61.67 0 0 -github.com/go-shiori/shiori/internal/http/routes/bookmark.go:63.90,68.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/frontend.go:20.62,23.2 2 3 -github.com/go-shiori/shiori/internal/http/routes/frontend.go:25.56,29.2 1 1 -github.com/go-shiori/shiori/internal/http/routes/frontend.go:36.47,39.2 2 1 -github.com/go-shiori/shiori/internal/http/routes/frontend.go:41.86,46.2 1 1 -github.com/go-shiori/shiori/internal/http/routes/swagger.go:17.67,18.29 1 1 -github.com/go-shiori/shiori/internal/http/routes/swagger.go:18.29,19.76 1 3 -github.com/go-shiori/shiori/internal/http/routes/swagger.go:19.76,22.4 2 2 -github.com/go-shiori/shiori/internal/http/routes/swagger.go:24.2,25.10 2 1 -github.com/go-shiori/shiori/internal/http/routes/swagger.go:28.67,32.2 1 1 -github.com/go-shiori/shiori/internal/http/routes/system.go:14.67,17.2 2 1 -github.com/go-shiori/shiori/internal/http/routes/system.go:19.56,21.2 1 1 -github.com/go-shiori/shiori/internal/http/routes/system.go:23.59,27.2 1 1 -github.com/go-shiori/shiori/internal/webserver/assets-prod.go:14.13,17.16 3 1 -github.com/go-shiori/shiori/internal/webserver/assets-prod.go:17.16,18.13 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:20.103,34.16 8 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:34.16,35.52 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:39.2,40.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:40.16,41.60 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.2,45.11 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.11,49.36 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:49.36,51.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.3,53.39 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.39,54.57 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:54.57,56.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.8,58.32 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.32,60.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:65.2,68.24 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:68.24,70.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:70.8,73.3 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.2,78.12 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.12,80.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:80.17,83.4 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:84.3,84.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.2,89.26 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.26,101.51 5 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:101.51,103.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.3,107.31 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.31,109.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.9,109.72 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.72,111.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:115.2,117.17 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:121.103,137.11 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:137.11,149.3 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:151.2,151.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:26.116,28.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:28.16,30.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:32.2,42.30 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:42.30,44.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:46.2,46.21 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:50.90,65.67 5 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:65.67,77.61 6 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:77.61,80.4 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:81.3,93.18 6 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:98.2,105.88 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:105.88,111.3 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:114.2,117.12 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:117.12,118.46 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:122.2,123.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:123.16,124.57 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.2,128.37 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.37,129.64 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:133.2,134.22 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:134.22,136.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:139.2,139.30 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:143.91,146.21 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:146.21,148.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:150.2,150.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:154.97,168.37 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:168.37,170.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:172.2,173.53 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:173.53,175.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:177.2,178.14 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:178.14,180.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:183.2,202.27 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:202.27,207.26 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:207.26,209.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.3,211.30 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.30,213.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:217.2,225.17 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:229.92,243.2 8 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:246.94,263.2 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:278.62,283.2 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:286.99,309.16 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:309.16,310.52 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.2,314.22 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.22,316.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:319.2,320.37 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:320.37,321.56 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:324.2,326.19 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:326.19,327.13 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:327.13,329.18 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:329.18,332.5 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.4,333.88 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.88,335.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:337.8,341.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:341.17,343.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.9,343.73 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.73,345.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:349.2,351.17 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:355.99,372.25 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:372.25,379.3 5 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:381.2,381.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:385.99,398.25 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:398.25,399.44 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:403.2,410.25 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:410.25,411.53 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:415.2,423.16 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:423.16,424.52 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.2,428.27 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.27,430.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.2,432.38 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.38,433.36 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:433.36,434.34 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:434.34,437.10 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.3,441.21 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.21,443.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:447.2,458.17 8 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:462.96,487.25 10 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:487.25,488.53 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.2,493.25 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.25,494.50 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.8,495.56 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.56,496.63 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:500.2,506.33 6 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:506.33,512.58 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:512.58,518.17 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:518.17,520.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:523.4,524.18 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:524.18,527.5 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:529.4,541.18 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:541.18,544.5 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:547.4,549.15 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:554.2,555.12 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:555.12,556.7 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:556.7,557.11 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:558.18,559.11 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:560.27,561.48 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:567.2,577.17 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:581.103,598.53 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:598.53,599.51 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:603.2,610.25 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:610.25,611.53 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.2,615.33 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.33,616.39 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:616.39,617.37 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:617.37,618.35 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:618.35,620.11 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.4,624.22 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.22,626.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:629.3,629.22 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:633.2,637.27 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:637.27,642.26 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:642.26,644.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:648.2,649.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:653.96,667.2 8 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:670.98,687.2 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:690.98,712.12 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:712.12,713.46 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:717.2,718.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:718.16,719.50 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:723.2,729.60 5 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:729.60,731.40 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:731.40,733.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:735.3,735.39 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:738.2,738.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:742.98,760.37 10 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:760.37,761.53 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:761.53,763.41 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:763.41,765.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:767.4,767.32 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-api.go:771.2,771.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:24.91,32.2 6 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:35.93,40.88 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:40.88,43.27 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:43.27,45.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:48.2,49.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:53.96,56.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:56.16,61.3 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.2,63.21 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.21,64.46 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:64.46,66.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:69.2,70.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:74.96,77.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:77.16,81.3 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.2,83.21 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.21,84.46 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:84.46,86.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:89.2,90.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:94.102,106.12 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:106.12,107.42 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.2,111.26 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.26,113.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:113.17,118.4 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:122.2,123.29 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:123.29,130.12 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:130.12,132.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:132.9,138.4 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.3,141.57 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.57,145.4 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:147.3,151.86 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:151.86,157.17 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:157.17,159.64 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:159.64,161.6 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:165.4,166.35 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:166.35,169.23 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:169.23,170.14 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:173.5,174.64 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:174.64,177.6 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.4,180.24 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.24,182.5 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:185.3,186.18 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.2,190.21 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.21,191.46 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:191.46,193.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:196.2,202.17 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:206.101,219.12 7 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:219.12,222.3 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.2,225.26 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.26,227.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:227.17,232.4 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:235.2,257.42 15 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:257.42,259.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:260.2,261.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:265.102,280.12 9 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:280.12,281.42 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.2,285.26 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.26,287.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:287.17,292.4 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:296.2,299.11 3 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:299.11,301.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:301.8,307.3 4 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:309.2,317.87 5 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:317.87,347.64 19 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:347.64,349.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:350.3,351.9 2 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.2,355.44 1 0 -github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.44,357.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:29.41,30.61 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:30.61,33.13 3 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:33.13,35.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:37.3,38.40 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:38.40,39.28 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:39.28,41.10 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:45.3,45.52 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:49.41,50.62 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:50.62,53.3 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:56.44,63.40 3 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:63.40,65.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:69.2,69.61 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:69.61,71.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:71.17,73.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:77.2,86.16 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:86.16,88.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:90.2,90.12 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:93.56,98.21 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:98.21,100.17 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:100.17,102.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:104.3,104.27 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:107.2,107.18 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:111.58,113.21 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:113.21,115.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:118.2,119.12 2 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:119.12,121.3 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:124.2,124.41 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:124.41,125.53 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:125.53,127.4 1 0 -github.com/go-shiori/shiori/internal/webserver/handler.go:130.2,130.12 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:34.40,36.2 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:38.75,39.25 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:39.25,41.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:42.2,43.17 2 0 -github.com/go-shiori/shiori/internal/webserver/server.go:43.17,45.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:46.2,47.19 2 0 -github.com/go-shiori/shiori/internal/webserver/server.go:47.19,49.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:50.2,50.11 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:50.11,52.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:70.62,74.32 3 0 -github.com/go-shiori/shiori/internal/webserver/server.go:74.32,76.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:77.2,77.18 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:81.61,84.2 2 0 -github.com/go-shiori/shiori/internal/webserver/server.go:87.56,88.33 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:88.33,96.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:96.8,104.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:108.33,124.16 5 0 -github.com/go-shiori/shiori/internal/webserver/server.go:124.16,126.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:129.2,155.147 5 0 -github.com/go-shiori/shiori/internal/webserver/server.go:155.147,156.77 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:156.77,166.15 4 0 -github.com/go-shiori/shiori/internal/webserver/server.go:166.15,168.5 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:173.2,173.34 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:173.34,175.3 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:177.2,207.86 26 0 -github.com/go-shiori/shiori/internal/webserver/server.go:207.86,217.14 4 0 -github.com/go-shiori/shiori/internal/webserver/server.go:217.14,219.4 1 0 -github.com/go-shiori/shiori/internal/webserver/server.go:223.2,233.29 4 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:29.46,32.39 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:32.39,34.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:36.2,36.34 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:39.74,42.16 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:42.16,44.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:45.2,48.11 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:48.11,50.17 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:50.17,52.4 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:54.3,56.51 3 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:57.8,59.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:62.2,64.20 3 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:64.20,67.3 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:70.2,71.12 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:74.61,81.2 5 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:83.71,88.2 4 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:90.40,92.14 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:92.14,94.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:95.2,95.42 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:98.39,101.2 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:103.92,106.16 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:106.16,108.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:109.2,113.16 3 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:113.16,115.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:118.2,118.91 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:122.41,132.16 3 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:132.16,134.27 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:134.27,136.4 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:138.3,139.77 2 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:142.2,149.20 7 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:152.28,153.16 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:153.16,155.3 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:159.2,159.38 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:159.38,160.46 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:160.46,161.63 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:161.63,163.5 1 0 -github.com/go-shiori/shiori/internal/webserver/utils.go:167.2,167.12 1 0 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:131.58,133.16 2 14 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:133.16,134.73 1 1 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:136.2,136.16 1 13 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:140.34,141.41 1 109 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:141.41,142.26 1 1291 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:142.26,144.4 1 49 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:146.2,146.14 1 60 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:150.34,151.43 1 15 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:151.43,152.26 1 136 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:152.26,154.4 1 11 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:156.2,156.14 1 4 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:160.34,161.33 1 124 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:161.33,163.3 1 109 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:164.2,164.44 1 15 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:168.45,169.18 1 103 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:169.18,171.3 1 1 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:172.2,175.35 3 102 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:175.35,177.3 1 56 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:178.2,178.14 1 46 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:191.44,194.16 3 33 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:194.16,196.3 1 1 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.2,197.37 1 32 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.37,199.3 1 1 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.2,201.48 1 31 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.48,203.16 2 50 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:203.16,204.12 1 21 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:207.3,208.64 2 29 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:208.64,210.4 1 2 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.3,211.33 1 29 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.33,213.4 1 24 -github.com/go-shiori/shiori/internal/webserver/utils_ip.go:215.2,215.21 1 7 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:21.71,27.2 5 4 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:29.90,31.2 1 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:39.47,40.22 1 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:40.22,42.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.2,43.22 1 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.22,45.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:46.2,46.12 1 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:62.57,64.51 2 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:64.51,67.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.2,69.42 1 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.42,72.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:74.2,75.16 2 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:75.16,78.3 2 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:80.2,81.24 2 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:81.24,83.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:85.2,86.16 2 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:86.16,89.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:91.2,98.50 3 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:109.59,111.25 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:111.25,114.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:116.2,119.16 4 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:119.16,122.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:124.2,130.56 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:141.54,143.25 2 2 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:143.25,146.3 2 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:148.2,148.51 1 1 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:152.58,154.25 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:154.25,157.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:159.2,162.47 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:165.94,170.2 1 4 -github.com/go-shiori/shiori/internal/http/routes/api/api.go:16.60,17.31 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/api.go:17.31,19.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/api.go:22.2,29.10 5 0 -github.com/go-shiori/shiori/internal/http/routes/api/api.go:32.82,35.2 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/api.go:37.80,42.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:21.69,26.2 4 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:28.58,30.16 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:30.16,34.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:36.2,36.34 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:49.80,63.16 5 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:63.16,65.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.2,68.26 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.26,70.3 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:72.2,72.22 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:75.62,80.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:82.60,84.51 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:84.51,88.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:90.2,91.16 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:91.16,95.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:97.2,98.37 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:98.37,102.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:104.2,106.19 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:106.19,107.13 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:107.13,109.18 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:109.18,112.5 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.4,113.80 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.80,115.5 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:117.8,121.17 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:121.17,123.4 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.9,123.82 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.82,125.4 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:128.2,128.29 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:131.60,133.13 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:133.13,136.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:138.2,139.16 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:139.16,142.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:144.2,145.16 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:145.16,148.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.2,150.12 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.12,153.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.2,155.71 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.71,159.3 3 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:161.2,161.43 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:164.97,169.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/debug.go:16.69,19.2 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/debug.go:21.60,28.64 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/debug.go:28.64,31.3 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/debug.go:33.2,33.32 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/debug.go:36.89,41.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/tags.go:16.64,19.2 2 0 -github.com/go-shiori/shiori/internal/http/routes/api/tags.go:21.53,23.2 1 0 -github.com/go-shiori/shiori/internal/http/routes/api/tags.go:25.87,30.2 1 0 diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 038a5fbda..75d21c634 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -254,10 +254,10 @@ const docTemplate = `{ "ids" ], "properties": { - "createArchive": { + "create_archive": { "type": "boolean" }, - "createEbook": { + "create_ebook": { "type": "boolean" }, "ids": { @@ -266,10 +266,10 @@ const docTemplate = `{ "type": "integer" } }, - "keepMetadata": { + "keep_metadata": { "type": "boolean" }, - "skipExist": { + "skip_exist": { "type": "boolean" } } @@ -300,10 +300,10 @@ const docTemplate = `{ "author": { "type": "string" }, - "createArchive": { + "create_archive": { "type": "boolean" }, - "createEbook": { + "create_ebook": { "type": "boolean" }, "excerpt": { diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 4ad6608db..88c337375 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -243,10 +243,10 @@ "ids" ], "properties": { - "createArchive": { + "create_archive": { "type": "boolean" }, - "createEbook": { + "create_ebook": { "type": "boolean" }, "ids": { @@ -255,10 +255,10 @@ "type": "integer" } }, - "keepMetadata": { + "keep_metadata": { "type": "boolean" }, - "skipExist": { + "skip_exist": { "type": "boolean" } } @@ -289,10 +289,10 @@ "author": { "type": "string" }, - "createArchive": { + "create_archive": { "type": "boolean" }, - "createEbook": { + "create_ebook": { "type": "boolean" }, "excerpt": { diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index f39cf5ce4..89b0b4c05 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -29,17 +29,17 @@ definitions: type: object api_v1.updateCachePayload: properties: - createArchive: + create_archive: type: boolean - createEbook: + create_ebook: type: boolean ids: items: type: integer type: array - keepMetadata: + keep_metadata: type: boolean - skipExist: + skip_exist: type: boolean required: - ids @@ -61,9 +61,9 @@ definitions: properties: author: type: string - createArchive: + create_archive: type: boolean - createEbook: + create_ebook: type: boolean excerpt: type: string diff --git a/internal/cmd/update.go b/internal/cmd/update.go index 67cf7ab4a..09c1d32a4 100644 --- a/internal/cmd/update.go +++ b/internal/cmd/update.go @@ -52,7 +52,7 @@ func updateHandler(cmd *cobra.Command, args []string) { skipConfirm, _ := cmd.Flags().GetBool("yes") noArchival, _ := cmd.Flags().GetBool("no-archival") logArchival, _ := cmd.Flags().GetBool("log-archival") - keepMetadata := cmd.Flags().Changed("keep-metadata") + keep_metadata := cmd.Flags().Changed("keep-metadata") // If no arguments (i.e all bookmarks going to be updated), confirm to user if len(args) == 0 && !skipConfirm { @@ -170,8 +170,8 @@ func updateHandler(cmd *cobra.Command, args []string) { Bookmark: book, Content: content, ContentType: contentType, - KeepTitle: keepMetadata, - KeepExcerpt: keepMetadata, + KeepTitle: keep_metadata, + KeepExcerpt: keep_metadata, LogArchival: logArchival, } diff --git a/internal/http/routes/api/v1/bookmarks.go b/internal/http/routes/api/v1/bookmarks.go index 282c5639b..7b7da45d7 100644 --- a/internal/http/routes/api/v1/bookmarks.go +++ b/internal/http/routes/api/v1/bookmarks.go @@ -34,10 +34,10 @@ func (r *BookmarksAPIRoutes) Setup(g *gin.RouterGroup) model.Routes { type updateCachePayload struct { Ids []int `json:"ids" validate:"required"` - KeepMetadata bool `json:"keepMetadata"` - CreateArchive bool `json:"createArchive"` - CreateEbook bool `json:"createEbook"` - SkipExist bool `json:"skipExist"` + KeepMetadata bool `json:"keep_metadata"` + CreateArchive bool `json:"create_archive"` + CreateEbook bool `json:"create_ebook"` + SkipExist bool `json:"skip_exist"` } func (p *updateCachePayload) IsValid() error { @@ -68,7 +68,7 @@ type apiCreateBookmarkPayload struct { Title string `json:"title"` Excerpt string `json:"excerpt"` Tags []model.Tag `json:"tags"` - CreateArchive bool `json:"createArchive"` + CreateArchive bool `json:"create_archive"` MakePublic int `json:"public"` Async bool `json:"async"` } @@ -261,7 +261,7 @@ func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { book.CreateArchive = payload.CreateArchive book.CreateEbook = payload.CreateEbook - go func(i int, book model.Bookmark, keepMetadata bool) { + go func(i int, book model.Bookmark, keep_metadata bool) { // Make sure to finish the WG defer wg.Done() @@ -283,8 +283,8 @@ func (r *BookmarksAPIRoutes) updateCache(c *gin.Context) { Bookmark: book, Content: content, ContentType: contentType, - KeepTitle: keepMetadata, - KeepExcerpt: keepMetadata, + KeepTitle: keep_metadata, + KeepExcerpt: keep_metadata, } if payload.SkipExist && book.CreateEbook { diff --git a/internal/model/model.go b/internal/model/model.go index f3d739e4c..9ed0d4cac 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -24,6 +24,6 @@ type Bookmark struct { HasArchive bool `json:"hasArchive"` HasEbook bool `json:"hasEbook"` Tags []Tag `json:"tags"` - CreateArchive bool `json:"createArchive"` - CreateEbook bool `json:"createEbook"` + CreateArchive bool `json:"create_archive"` + CreateEbook bool `json:"create_ebook"` } diff --git a/internal/view/assets/js/page/home.js b/internal/view/assets/js/page/home.js index 69494fa78..1ae35e222 100644 --- a/internal/view/assets/js/page/home.js +++ b/internal/view/assets/js/page/home.js @@ -378,12 +378,12 @@ export default { separator: ",", dictionary: this.tags.map(tag => tag.name) }, { - name: "createArchive", + name: "create_archive", label: "Create archive", type: "check", value: this.appOptions.UseArchive, }, { - name: "createEbook", + name: "create_ebook", label: "Create Ebook", type: "check", value: this.appOptions.CreateEbook, @@ -421,8 +421,8 @@ export default { excerpt: data.excerpt.trim(), public: data.makePublic ? 1 : 0, tags: tags, - createArchive: data.createArchive, - createEbook: data.createEbook, + create_archive: data.create_archive, + create_ebook: data.create_ebook, }; this.dialog.loading = true; @@ -617,10 +617,10 @@ export default { var ids = items.map(item => item.id); var data = { ids: ids, - createArchive: false, - keepMetadata: true, - createEbook: true, - skipExist: true, + create_archive: false, + keep_metadata: true, + create_ebook: true, + skip_exist: true, }; this.loading = true; fetch(new URL("api/v1/bookmarks/cache", document.baseURI), { @@ -679,17 +679,17 @@ export default { title: "Update Cache", content: "Update cache for selected bookmarks ? This action is irreversible.", fields: [{ - name: "keepMetadata", + name: "keep_metadata", label: "Keep the old title and excerpt", type: "check", value: this.appOptions.KeepMetadata, }, { - name: "createArchive", + name: "create_archive", label: "Update archive as well", type: "check", value: this.appOptions.UseArchive, }, { - name: "createEbook", + name: "create_ebook", label: "Update Ebook as well", type: "check", value: this.appOptions.CreateEbook, @@ -699,10 +699,10 @@ export default { mainClick: (data) => { var data = { ids: ids, - createArchive: data.createArchive, - keepMetadata: data.keepMetadata, - createEbook: data.createEbook, - skipExist: false, + create_archive: data.create_archive, + keep_metadata: data.keep_metadata, + create_ebook: data.create_ebook, + skip_exist: false, }; this.dialog.loading = true; @@ -725,11 +725,11 @@ export default { var item = items.find(el => el.id === book.id); this.bookmarks.splice(item.index, 1, book); - if (data.createArchive && !book.hasArchive) { + if (data.create_archive && !book.hasArchive) { faildedUpdateArchives.push(book.id); console.error("can't update archive for bookmark id", book.id) } - if (data.createEbook && !book.hasEbook) { + if (data.create_ebook && !book.hasEbook) { faildedCreateEbook.push(book.id); console.error("can't update ebook for bookmark id:", book.id) } diff --git a/internal/webserver/handler-api.go b/internal/webserver/handler-api.go index 4c766cad5..04e7d8b9a 100644 --- a/internal/webserver/handler-api.go +++ b/internal/webserver/handler-api.go @@ -178,8 +178,8 @@ type apiInsertBookmarkPayload struct { Title string `json:"title"` Excerpt string `json:"excerpt"` Tags []model.Tag `json:"tags"` - CreateArchive bool `json:"createArchive"` - CreateEbook bool `json:"createEbook"` + CreateArchive bool `json:"create_archive"` + CreateEbook bool `json:"create_ebook"` MakePublic int `json:"public"` Async bool `json:"async"` } @@ -374,7 +374,6 @@ func (h *Handler) ApiUpdateBookmark(w http.ResponseWriter, r *http.Request, ps h checkError(err) } - // ApiUpdateBookmarkTags is handler for PUT /api/bookmarks/tags func (h *Handler) ApiUpdateBookmarkTags(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { ctx := r.Context() From e617c3361afb668b048056613e1dd24e509a84f3 Mon Sep 17 00:00:00 2001 From: monirzadeh <25131576+Monirzadeh@users.noreply.github.com> Date: Sat, 28 Oct 2023 16:05:05 +0330 Subject: [PATCH 19/19] recover coverage.txt that remove --- coverage.txt | 827 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 827 insertions(+) create mode 100644 coverage.txt diff --git a/coverage.txt b/coverage.txt new file mode 100644 index 000000000..2e9af8921 --- /dev/null +++ b/coverage.txt @@ -0,0 +1,827 @@ +mode: atomic +github.com/go-shiori/shiori/internal/cmd/add.go:13.30,29.2 8 0 +github.com/go-shiori/shiori/internal/cmd/add.go:31.52,55.27 12 0 +github.com/go-shiori/shiori/internal/cmd/add.go:55.27,57.3 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:60.2,62.16 3 0 +github.com/go-shiori/shiori/internal/cmd/add.go:62.16,65.3 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:68.2,68.22 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:68.22,70.3 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:73.2,74.16 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:74.16,77.3 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:79.2,82.14 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:82.14,87.17 4 0 +github.com/go-shiori/shiori/internal/cmd/add.go:87.17,89.4 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:91.3,91.35 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:91.35,105.18 4 0 +github.com/go-shiori/shiori/internal/cmd/add.go:105.18,107.5 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:109.4,109.18 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:109.18,111.5 1 0 +github.com/go-shiori/shiori/internal/cmd/add.go:115.3,116.17 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:116.17,119.4 2 0 +github.com/go-shiori/shiori/internal/cmd/add.go:123.2,124.22 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:16.32,29.2 3 0 +github.com/go-shiori/shiori/internal/cmd/check.go:31.54,36.36 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:36.36,41.26 4 0 +github.com/go-shiori/shiori/internal/cmd/check.go:41.26,44.4 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:48.2,49.16 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:49.16,52.3 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:55.2,57.16 3 0 +github.com/go-shiori/shiori/internal/cmd/check.go:57.16,60.3 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:63.2,74.33 8 0 +github.com/go-shiori/shiori/internal/cmd/check.go:74.33,77.39 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:77.39,83.17 3 0 +github.com/go-shiori/shiori/internal/cmd/check.go:83.17,85.5 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:88.4,89.18 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:89.18,93.5 3 0 +github.com/go-shiori/shiori/internal/cmd/check.go:96.4,96.52 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:101.2,101.25 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:101.25,104.7 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:104.7,105.11 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:106.18,108.11 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:109.27,110.48 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:111.28,114.23 2 0 +github.com/go-shiori/shiori/internal/cmd/check.go:115.16,116.61 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:117.17,118.60 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:125.2,132.30 5 0 +github.com/go-shiori/shiori/internal/cmd/check.go:132.30,134.3 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:134.8,138.37 4 0 +github.com/go-shiori/shiori/internal/cmd/check.go:138.37,140.4 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:141.3,141.16 1 0 +github.com/go-shiori/shiori/internal/cmd/check.go:143.2,143.15 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:13.33,29.2 3 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:31.55,36.36 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:36.36,41.27 4 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:41.27,44.4 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:48.2,49.16 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:49.16,52.3 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:55.2,56.16 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:56.16,59.3 2 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:62.2,62.19 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:62.19,67.3 4 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:67.8,68.26 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:68.26,75.4 5 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:79.2,79.19 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:80.9,81.49 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:82.21,83.77 1 0 +github.com/go-shiori/shiori/internal/cmd/delete.go:84.10,85.47 1 0 +github.com/go-shiori/shiori/internal/cmd/export.go:15.33,24.2 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:26.55,29.16 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:29.16,32.3 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:34.2,34.25 1 0 +github.com/go-shiori/shiori/internal/cmd/export.go:34.25,37.3 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:40.2,41.63 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:41.63,43.3 1 0 +github.com/go-shiori/shiori/internal/cmd/export.go:46.2,47.16 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:47.16,50.3 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:51.2,61.33 3 0 +github.com/go-shiori/shiori/internal/cmd/export.go:61.33,64.17 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:64.17,66.4 1 0 +github.com/go-shiori/shiori/internal/cmd/export.go:67.3,71.33 3 0 +github.com/go-shiori/shiori/internal/cmd/export.go:71.33,73.4 1 0 +github.com/go-shiori/shiori/internal/cmd/export.go:74.3,82.36 4 0 +github.com/go-shiori/shiori/internal/cmd/export.go:85.2,89.16 3 0 +github.com/go-shiori/shiori/internal/cmd/export.go:89.16,92.3 2 0 +github.com/go-shiori/shiori/internal/cmd/export.go:94.2,94.32 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:18.33,29.2 3 0 +github.com/go-shiori/shiori/internal/cmd/import.go:31.55,36.18 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:36.18,42.3 4 0 +github.com/go-shiori/shiori/internal/cmd/import.go:45.2,46.16 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:46.16,49.3 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:50.2,57.16 5 0 +github.com/go-shiori/shiori/internal/cmd/import.go:57.16,60.3 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:62.2,62.58 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:62.58,74.19 8 0 +github.com/go-shiori/shiori/internal/cmd/import.go:74.19,76.4 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:79.3,80.20 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:80.20,82.18 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:82.18,85.5 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:87.4,87.53 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:91.3,92.17 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:92.17,95.4 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:98.3,102.37 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:102.37,105.4 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:107.3,108.51 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:108.51,111.4 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:113.3,113.12 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:113.12,117.4 3 0 +github.com/go-shiori/shiori/internal/cmd/import.go:120.3,121.54 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:121.54,123.20 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:123.20,125.5 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:130.3,131.36 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:131.36,133.4 1 0 +github.com/go-shiori/shiori/internal/cmd/import.go:136.3,144.42 3 0 +github.com/go-shiori/shiori/internal/cmd/import.go:148.2,149.16 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:149.16,152.3 2 0 +github.com/go-shiori/shiori/internal/cmd/import.go:155.2,156.30 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:19.31,36.2 6 0 +github.com/go-shiori/shiori/internal/cmd/open.go:38.53,47.16 6 0 +github.com/go-shiori/shiori/internal/cmd/open.go:47.16,50.3 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:53.2,53.33 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:53.33,56.3 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:60.2,60.36 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:60.36,65.25 4 0 +github.com/go-shiori/shiori/internal/cmd/open.go:65.25,67.4 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:71.2,77.16 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:77.16,80.3 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:82.2,82.25 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:82.25,83.19 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:83.19,86.4 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:86.9,89.4 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:90.3,90.9 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:94.2,94.36 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:94.36,96.34 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:96.34,98.18 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:98.18,101.5 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:103.3,103.16 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:107.2,107.19 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:107.19,111.34 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:111.34,116.26 4 0 +github.com/go-shiori/shiori/internal/cmd/open.go:116.26,119.5 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:119.10,122.5 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:124.4,126.17 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:128.3,128.16 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:132.2,136.16 4 0 +github.com/go-shiori/shiori/internal/cmd/open.go:136.16,139.3 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:140.2,144.94 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:144.94,147.26 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:147.26,149.4 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:151.3,152.17 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:152.17,153.14 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:156.3,158.44 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:158.44,159.14 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:163.2,163.86 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:163.86,165.3 1 0 +github.com/go-shiori/shiori/internal/cmd/open.go:168.2,170.16 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:170.16,173.3 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:175.2,180.12 4 0 +github.com/go-shiori/shiori/internal/cmd/open.go:180.12,184.17 3 0 +github.com/go-shiori/shiori/internal/cmd/open.go:184.17,187.4 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:191.2,192.16 2 0 +github.com/go-shiori/shiori/internal/cmd/open.go:192.16,195.3 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:16.33,25.2 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:27.55,30.16 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:30.16,33.3 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:34.2,41.16 5 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:41.16,44.3 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:46.2,46.55 1 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:46.55,58.17 9 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:58.17,61.4 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:64.3,68.37 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:68.37,71.4 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:73.3,74.17 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:74.17,77.4 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:79.3,79.12 1 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:79.12,83.4 3 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:86.3,87.54 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:87.54,88.20 1 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:88.20,90.5 1 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:94.3,102.42 3 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:106.2,107.16 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:107.16,110.3 2 0 +github.com/go-shiori/shiori/internal/cmd/pocket.go:113.2,114.30 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:12.32,32.2 8 0 +github.com/go-shiori/shiori/internal/cmd/print.go:34.54,45.16 8 0 +github.com/go-shiori/shiori/internal/cmd/print.go:45.16,48.3 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:51.2,52.17 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:52.17,54.3 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:56.2,65.16 3 0 +github.com/go-shiori/shiori/internal/cmd/print.go:65.16,68.3 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:70.2,70.25 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:70.25,71.10 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:72.21,73.45 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:74.37,75.49 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:76.11,77.44 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:79.3,79.9 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:83.2,83.13 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:83.13,85.17 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:85.17,88.4 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:90.3,91.9 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:94.2,94.15 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:94.15,95.38 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:95.38,97.4 1 0 +github.com/go-shiori/shiori/internal/cmd/print.go:99.3,100.9 2 0 +github.com/go-shiori/shiori/internal/cmd/print.go:103.2,103.30 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:26.33,54.2 8 0 +github.com/go-shiori/shiori/internal/cmd/root.go:56.59,65.57 3 0 +github.com/go-shiori/shiori/internal/cmd/root.go:65.57,67.3 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:67.8,69.3 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:72.2,77.16 4 0 +github.com/go-shiori/shiori/internal/cmd/root.go:77.16,80.3 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:82.2,83.16 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:83.16,86.3 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:89.2,90.16 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:90.16,93.3 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:96.2,96.37 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:96.37,99.3 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:102.52,104.18 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:104.18,106.17 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:106.17,108.4 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:110.3,111.45 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:114.2,114.21 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:114.21,116.3 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:119.2,120.11 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:120.11,122.3 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:125.2,127.16 3 0 +github.com/go-shiori/shiori/internal/cmd/root.go:127.16,129.3 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:132.2,132.17 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:135.61,136.54 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:137.15,138.32 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:139.20,140.37 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:141.10,142.33 1 0 +github.com/go-shiori/shiori/internal/cmd/root.go:146.67,149.2 2 0 +github.com/go-shiori/shiori/internal/cmd/root.go:151.66,159.2 6 0 +github.com/go-shiori/shiori/internal/cmd/root.go:161.71,171.2 7 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:11.32,27.2 6 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:29.54,37.20 5 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:37.20,39.3 1 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:41.2,41.39 1 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:41.39,43.3 1 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:45.2,45.39 1 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:45.39,47.3 1 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:50.2,60.16 3 0 +github.com/go-shiori/shiori/internal/cmd/serve.go:60.16,62.3 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:14.61,28.2 6 0 +github.com/go-shiori/shiori/internal/cmd/server.go:30.93,31.49 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:31.49,35.17 3 0 +github.com/go-shiori/shiori/internal/cmd/server.go:35.17,37.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:39.3,41.22 2 0 +github.com/go-shiori/shiori/internal/cmd/server.go:41.22,43.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:45.3,56.21 8 0 +github.com/go-shiori/shiori/internal/cmd/server.go:56.21,58.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:60.3,60.40 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:60.40,62.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:64.3,64.40 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:64.40,66.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:69.3,76.43 6 0 +github.com/go-shiori/shiori/internal/cmd/server.go:76.43,78.4 1 0 +github.com/go-shiori/shiori/internal/cmd/server.go:79.3,81.23 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:16.33,41.2 11 0 +github.com/go-shiori/shiori/internal/cmd/update.go:43.55,56.36 10 0 +github.com/go-shiori/shiori/internal/cmd/update.go:56.36,61.27 4 0 +github.com/go-shiori/shiori/internal/cmd/update.go:61.27,64.4 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:68.2,69.16 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:69.16,72.3 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:75.2,78.32 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:78.32,81.17 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:81.17,82.53 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:86.3,86.20 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:86.20,89.4 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:93.2,98.16 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:98.16,101.3 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:103.2,103.25 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:103.25,106.3 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:109.2,109.83 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:109.83,117.27 6 0 +github.com/go-shiori/shiori/internal/cmd/update.go:117.27,121.4 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:125.2,127.14 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:127.14,137.34 8 0 +github.com/go-shiori/shiori/internal/cmd/update.go:137.34,144.17 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:144.17,146.5 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:148.4,148.40 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:148.40,154.18 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:154.18,156.6 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:159.5,160.19 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:160.19,164.6 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:166.5,179.19 4 0 +github.com/go-shiori/shiori/internal/cmd/update.go:179.19,183.6 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:186.5,191.16 4 0 +github.com/go-shiori/shiori/internal/cmd/update.go:196.3,196.26 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:196.26,199.8 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:199.8,200.12 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:201.19,203.12 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:204.28,205.49 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:206.29,209.24 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:210.17,211.62 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:212.18,213.61 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:220.3,221.16 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:225.2,227.27 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:227.27,231.38 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:231.38,234.4 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:234.9,236.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:240.2,240.33 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:240.33,242.18 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:242.18,244.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:246.3,246.20 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:246.20,248.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:251.3,251.16 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:251.16,253.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:256.3,260.37 3 0 +github.com/go-shiori/shiori/internal/cmd/update.go:260.37,262.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:264.3,265.33 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:265.33,266.56 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:266.56,268.5 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:270.4,270.60 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:270.60,272.5 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:274.4,274.34 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:277.3,277.33 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:277.33,279.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:281.3,284.22 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:288.2,289.16 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:289.16,292.3 2 0 +github.com/go-shiori/shiori/internal/cmd/update.go:295.2,299.29 4 0 +github.com/go-shiori/shiori/internal/cmd/update.go:299.29,304.37 4 0 +github.com/go-shiori/shiori/internal/cmd/update.go:304.37,306.4 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:307.3,307.16 1 0 +github.com/go-shiori/shiori/internal/cmd/update.go:309.2,309.15 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:34.40,37.2 2 5 +github.com/go-shiori/shiori/internal/cmd/utils.go:39.32,42.2 2 6 +github.com/go-shiori/shiori/internal/cmd/utils.go:44.50,45.37 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:45.37,59.29 7 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:59.29,62.4 2 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:65.3,65.29 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:65.29,67.38 2 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:67.38,68.34 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:68.34,70.6 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:70.11,72.6 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:77.3,77.16 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:82.55,84.35 2 8 +github.com/go-shiori/shiori/internal/cmd/utils.go:84.35,85.39 1 16 +github.com/go-shiori/shiori/internal/cmd/utils.go:85.39,87.31 2 10 +github.com/go-shiori/shiori/internal/cmd/utils.go:87.31,89.5 1 2 +github.com/go-shiori/shiori/internal/cmd/utils.go:91.4,92.12 2 8 +github.com/go-shiori/shiori/internal/cmd/utils.go:95.3,96.22 2 6 +github.com/go-shiori/shiori/internal/cmd/utils.go:96.22,98.4 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:100.3,102.76 3 6 +github.com/go-shiori/shiori/internal/cmd/utils.go:102.76,104.4 1 1 +github.com/go-shiori/shiori/internal/cmd/utils.go:106.3,106.41 1 5 +github.com/go-shiori/shiori/internal/cmd/utils.go:106.41,108.4 1 19 +github.com/go-shiori/shiori/internal/cmd/utils.go:111.2,111.23 1 5 +github.com/go-shiori/shiori/internal/cmd/utils.go:116.36,118.22 2 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:119.16,120.26 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:121.17,122.40 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:123.10,124.30 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:127.2,128.18 2 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:131.29,134.2 2 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:136.51,142.17 3 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:142.17,144.3 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:147.2,147.45 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:147.45,149.3 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:152.2,152.30 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:152.30,153.26 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:153.26,155.4 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:156.3,156.11 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:158.2,162.20 3 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:162.20,164.3 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:166.2,166.17 1 0 +github.com/go-shiori/shiori/internal/cmd/utils.go:169.64,171.2 1 0 +github.com/go-shiori/shiori/internal/cmd/version.go:9.62,17.2 2 0 +github.com/go-shiori/shiori/internal/cmd/version.go:19.94,20.49 1 0 +github.com/go-shiori/shiori/internal/cmd/version.go:20.49,22.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:20.69,24.2 3 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:26.65,30.14 3 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:30.14,33.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:35.2,36.16 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:36.16,40.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.2,42.21 1 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.21,45.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:47.2,48.26 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:48.26,51.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.2,53.49 1 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.49,56.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:58.2,58.41 1 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:61.66,61.67 0 0 +github.com/go-shiori/shiori/internal/http/routes/bookmark.go:63.90,68.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/frontend.go:20.62,23.2 2 3 +github.com/go-shiori/shiori/internal/http/routes/frontend.go:25.56,29.2 1 1 +github.com/go-shiori/shiori/internal/http/routes/frontend.go:36.47,39.2 2 1 +github.com/go-shiori/shiori/internal/http/routes/frontend.go:41.86,46.2 1 1 +github.com/go-shiori/shiori/internal/http/routes/swagger.go:17.67,18.29 1 1 +github.com/go-shiori/shiori/internal/http/routes/swagger.go:18.29,19.76 1 3 +github.com/go-shiori/shiori/internal/http/routes/swagger.go:19.76,22.4 2 2 +github.com/go-shiori/shiori/internal/http/routes/swagger.go:24.2,25.10 2 1 +github.com/go-shiori/shiori/internal/http/routes/swagger.go:28.67,32.2 1 1 +github.com/go-shiori/shiori/internal/http/routes/system.go:14.67,17.2 2 1 +github.com/go-shiori/shiori/internal/http/routes/system.go:19.56,21.2 1 1 +github.com/go-shiori/shiori/internal/http/routes/system.go:23.59,27.2 1 1 +github.com/go-shiori/shiori/internal/webserver/assets-prod.go:14.13,17.16 3 1 +github.com/go-shiori/shiori/internal/webserver/assets-prod.go:17.16,18.13 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:20.103,34.16 8 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:34.16,35.52 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:39.2,40.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:40.16,41.60 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.2,45.11 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.11,49.36 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:49.36,51.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.3,53.39 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.39,54.57 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:54.57,56.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.8,58.32 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.32,60.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:65.2,68.24 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:68.24,70.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:70.8,73.3 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.2,78.12 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.12,80.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:80.17,83.4 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:84.3,84.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.2,89.26 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.26,101.51 5 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:101.51,103.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.3,107.31 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.31,109.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.9,109.72 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.72,111.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:115.2,117.17 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:121.103,137.11 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:137.11,149.3 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:151.2,151.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:26.116,28.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:28.16,30.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:32.2,42.30 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:42.30,44.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:46.2,46.21 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:50.90,65.67 5 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:65.67,77.61 6 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:77.61,80.4 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:81.3,93.18 6 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:98.2,105.88 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:105.88,111.3 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:114.2,117.12 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:117.12,118.46 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:122.2,123.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:123.16,124.57 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.2,128.37 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.37,129.64 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:133.2,134.22 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:134.22,136.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:139.2,139.30 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:143.91,146.21 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:146.21,148.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:150.2,150.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:154.97,168.37 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:168.37,170.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:172.2,173.53 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:173.53,175.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:177.2,178.14 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:178.14,180.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:183.2,202.27 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:202.27,207.26 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:207.26,209.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.3,211.30 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.30,213.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:217.2,225.17 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:229.92,243.2 8 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:246.94,263.2 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:278.62,283.2 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:286.99,309.16 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:309.16,310.52 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.2,314.22 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.22,316.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:319.2,320.37 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:320.37,321.56 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:324.2,326.19 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:326.19,327.13 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:327.13,329.18 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:329.18,332.5 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.4,333.88 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.88,335.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:337.8,341.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:341.17,343.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.9,343.73 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.73,345.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:349.2,351.17 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:355.99,372.25 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:372.25,379.3 5 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:381.2,381.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:385.99,398.25 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:398.25,399.44 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:403.2,410.25 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:410.25,411.53 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:415.2,423.16 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:423.16,424.52 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.2,428.27 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.27,430.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.2,432.38 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.38,433.36 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:433.36,434.34 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:434.34,437.10 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.3,441.21 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.21,443.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:447.2,458.17 8 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:462.96,487.25 10 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:487.25,488.53 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.2,493.25 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.25,494.50 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.8,495.56 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.56,496.63 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:500.2,506.33 6 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:506.33,512.58 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:512.58,518.17 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:518.17,520.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:523.4,524.18 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:524.18,527.5 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:529.4,541.18 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:541.18,544.5 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:547.4,549.15 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:554.2,555.12 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:555.12,556.7 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:556.7,557.11 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:558.18,559.11 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:560.27,561.48 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:567.2,577.17 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:581.103,598.53 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:598.53,599.51 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:603.2,610.25 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:610.25,611.53 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.2,615.33 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.33,616.39 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:616.39,617.37 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:617.37,618.35 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:618.35,620.11 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.4,624.22 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.22,626.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:629.3,629.22 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:633.2,637.27 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:637.27,642.26 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:642.26,644.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:648.2,649.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:653.96,667.2 8 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:670.98,687.2 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:690.98,712.12 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:712.12,713.46 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:717.2,718.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:718.16,719.50 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:723.2,729.60 5 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:729.60,731.40 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:731.40,733.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:735.3,735.39 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:738.2,738.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:742.98,760.37 10 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:760.37,761.53 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:761.53,763.41 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:763.41,765.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:767.4,767.32 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-api.go:771.2,771.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:24.91,32.2 6 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:35.93,40.88 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:40.88,43.27 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:43.27,45.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:48.2,49.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:53.96,56.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:56.16,61.3 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.2,63.21 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.21,64.46 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:64.46,66.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:69.2,70.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:74.96,77.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:77.16,81.3 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.2,83.21 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.21,84.46 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:84.46,86.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:89.2,90.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:94.102,106.12 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:106.12,107.42 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.2,111.26 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.26,113.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:113.17,118.4 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:122.2,123.29 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:123.29,130.12 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:130.12,132.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:132.9,138.4 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.3,141.57 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.57,145.4 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:147.3,151.86 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:151.86,157.17 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:157.17,159.64 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:159.64,161.6 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:165.4,166.35 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:166.35,169.23 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:169.23,170.14 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:173.5,174.64 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:174.64,177.6 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.4,180.24 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.24,182.5 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:185.3,186.18 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.2,190.21 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.21,191.46 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:191.46,193.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:196.2,202.17 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:206.101,219.12 7 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:219.12,222.3 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.2,225.26 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.26,227.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:227.17,232.4 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:235.2,257.42 15 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:257.42,259.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:260.2,261.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:265.102,280.12 9 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:280.12,281.42 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.2,285.26 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.26,287.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:287.17,292.4 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:296.2,299.11 3 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:299.11,301.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:301.8,307.3 4 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:309.2,317.87 5 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:317.87,347.64 19 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:347.64,349.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:350.3,351.9 2 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.2,355.44 1 0 +github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.44,357.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:29.41,30.61 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:30.61,33.13 3 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:33.13,35.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:37.3,38.40 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:38.40,39.28 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:39.28,41.10 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:45.3,45.52 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:49.41,50.62 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:50.62,53.3 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:56.44,63.40 3 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:63.40,65.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:69.2,69.61 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:69.61,71.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:71.17,73.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:77.2,86.16 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:86.16,88.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:90.2,90.12 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:93.56,98.21 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:98.21,100.17 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:100.17,102.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:104.3,104.27 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:107.2,107.18 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:111.58,113.21 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:113.21,115.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:118.2,119.12 2 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:119.12,121.3 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:124.2,124.41 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:124.41,125.53 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:125.53,127.4 1 0 +github.com/go-shiori/shiori/internal/webserver/handler.go:130.2,130.12 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:34.40,36.2 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:38.75,39.25 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:39.25,41.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:42.2,43.17 2 0 +github.com/go-shiori/shiori/internal/webserver/server.go:43.17,45.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:46.2,47.19 2 0 +github.com/go-shiori/shiori/internal/webserver/server.go:47.19,49.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:50.2,50.11 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:50.11,52.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:70.62,74.32 3 0 +github.com/go-shiori/shiori/internal/webserver/server.go:74.32,76.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:77.2,77.18 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:81.61,84.2 2 0 +github.com/go-shiori/shiori/internal/webserver/server.go:87.56,88.33 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:88.33,96.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:96.8,104.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:108.33,124.16 5 0 +github.com/go-shiori/shiori/internal/webserver/server.go:124.16,126.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:129.2,155.147 5 0 +github.com/go-shiori/shiori/internal/webserver/server.go:155.147,156.77 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:156.77,166.15 4 0 +github.com/go-shiori/shiori/internal/webserver/server.go:166.15,168.5 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:173.2,173.34 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:173.34,175.3 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:177.2,207.86 26 0 +github.com/go-shiori/shiori/internal/webserver/server.go:207.86,217.14 4 0 +github.com/go-shiori/shiori/internal/webserver/server.go:217.14,219.4 1 0 +github.com/go-shiori/shiori/internal/webserver/server.go:223.2,233.29 4 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:29.46,32.39 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:32.39,34.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:36.2,36.34 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:39.74,42.16 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:42.16,44.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:45.2,48.11 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:48.11,50.17 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:50.17,52.4 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:54.3,56.51 3 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:57.8,59.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:62.2,64.20 3 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:64.20,67.3 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:70.2,71.12 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:74.61,81.2 5 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:83.71,88.2 4 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:90.40,92.14 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:92.14,94.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:95.2,95.42 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:98.39,101.2 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:103.92,106.16 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:106.16,108.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:109.2,113.16 3 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:113.16,115.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:118.2,118.91 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:122.41,132.16 3 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:132.16,134.27 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:134.27,136.4 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:138.3,139.77 2 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:142.2,149.20 7 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:152.28,153.16 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:153.16,155.3 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:159.2,159.38 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:159.38,160.46 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:160.46,161.63 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:161.63,163.5 1 0 +github.com/go-shiori/shiori/internal/webserver/utils.go:167.2,167.12 1 0 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:131.58,133.16 2 14 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:133.16,134.73 1 1 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:136.2,136.16 1 13 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:140.34,141.41 1 109 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:141.41,142.26 1 1291 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:142.26,144.4 1 49 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:146.2,146.14 1 60 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:150.34,151.43 1 15 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:151.43,152.26 1 136 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:152.26,154.4 1 11 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:156.2,156.14 1 4 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:160.34,161.33 1 124 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:161.33,163.3 1 109 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:164.2,164.44 1 15 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:168.45,169.18 1 103 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:169.18,171.3 1 1 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:172.2,175.35 3 102 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:175.35,177.3 1 56 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:178.2,178.14 1 46 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:191.44,194.16 3 33 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:194.16,196.3 1 1 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.2,197.37 1 32 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.37,199.3 1 1 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.2,201.48 1 31 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.48,203.16 2 50 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:203.16,204.12 1 21 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:207.3,208.64 2 29 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:208.64,210.4 1 2 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.3,211.33 1 29 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.33,213.4 1 24 +github.com/go-shiori/shiori/internal/webserver/utils_ip.go:215.2,215.21 1 7 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:21.71,27.2 5 4 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:29.90,31.2 1 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:39.47,40.22 1 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:40.22,42.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.2,43.22 1 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.22,45.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:46.2,46.12 1 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:62.57,64.51 2 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:64.51,67.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.2,69.42 1 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.42,72.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:74.2,75.16 2 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:75.16,78.3 2 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:80.2,81.24 2 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:81.24,83.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:85.2,86.16 2 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:86.16,89.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:91.2,98.50 3 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:109.59,111.25 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:111.25,114.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:116.2,119.16 4 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:119.16,122.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:124.2,130.56 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:141.54,143.25 2 2 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:143.25,146.3 2 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:148.2,148.51 1 1 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:152.58,154.25 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:154.25,157.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:159.2,162.47 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:165.94,170.2 1 4 +github.com/go-shiori/shiori/internal/http/routes/api/api.go:16.60,17.31 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/api.go:17.31,19.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/api.go:22.2,29.10 5 0 +github.com/go-shiori/shiori/internal/http/routes/api/api.go:32.82,35.2 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/api.go:37.80,42.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:21.69,26.2 4 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:28.58,30.16 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:30.16,34.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:36.2,36.34 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:49.80,63.16 5 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:63.16,65.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.2,68.26 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.26,70.3 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:72.2,72.22 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:75.62,80.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:82.60,84.51 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:84.51,88.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:90.2,91.16 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:91.16,95.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:97.2,98.37 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:98.37,102.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:104.2,106.19 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:106.19,107.13 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:107.13,109.18 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:109.18,112.5 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.4,113.80 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.80,115.5 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:117.8,121.17 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:121.17,123.4 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.9,123.82 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.82,125.4 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:128.2,128.29 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:131.60,133.13 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:133.13,136.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:138.2,139.16 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:139.16,142.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:144.2,145.16 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:145.16,148.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.2,150.12 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.12,153.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.2,155.71 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.71,159.3 3 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:161.2,161.43 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:164.97,169.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/debug.go:16.69,19.2 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/debug.go:21.60,28.64 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/debug.go:28.64,31.3 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/debug.go:33.2,33.32 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/debug.go:36.89,41.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/tags.go:16.64,19.2 2 0 +github.com/go-shiori/shiori/internal/http/routes/api/tags.go:21.53,23.2 1 0 +github.com/go-shiori/shiori/internal/http/routes/api/tags.go:25.87,30.2 1 0