entry_scraper.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package ui // import "miniflux.app/v2/internal/ui"
  4. import (
  5. "net/http"
  6. "miniflux.app/v2/internal/http/request"
  7. "miniflux.app/v2/internal/http/response"
  8. "miniflux.app/v2/internal/locale"
  9. "miniflux.app/v2/internal/mediaproxy"
  10. "miniflux.app/v2/internal/reader/processor"
  11. "miniflux.app/v2/internal/storage"
  12. )
  13. func (h *handler) fetchContent(w http.ResponseWriter, r *http.Request) {
  14. loggedUserID := request.UserID(r)
  15. entryID := request.RouteInt64Param(r, "entryID")
  16. entryBuilder := h.store.NewEntryQueryBuilder(loggedUserID)
  17. entryBuilder.WithEntryID(entryID)
  18. entry, err := entryBuilder.GetEntry()
  19. if err != nil {
  20. response.JSONServerError(w, r, err)
  21. return
  22. }
  23. if entry == nil {
  24. response.JSONNotFound(w, r)
  25. return
  26. }
  27. user, err := h.store.UserByID(loggedUserID)
  28. if err != nil {
  29. response.JSONServerError(w, r, err)
  30. return
  31. }
  32. feedBuilder := storage.NewFeedQueryBuilder(h.store, loggedUserID)
  33. feedBuilder.WithFeedID(entry.FeedID)
  34. feed, err := feedBuilder.GetFeed()
  35. if err != nil {
  36. response.JSONServerError(w, r, err)
  37. return
  38. }
  39. if feed == nil {
  40. response.JSONNotFound(w, r)
  41. return
  42. }
  43. if err := processor.ProcessEntryWebPage(feed, entry, user); err != nil {
  44. response.JSONServerError(w, r, err)
  45. return
  46. }
  47. if err := h.store.UpdateEntryTitleAndContent(entry); err != nil {
  48. response.JSONServerError(w, r, err)
  49. return
  50. }
  51. readingTime := locale.NewPrinter(user.Language).Plural("entry.estimated_reading_time", entry.ReadingTime, entry.ReadingTime)
  52. response.JSON(w, r, map[string]string{"content": mediaproxy.RewriteDocumentWithRelativeProxyURL(entry.Content), "reading_time": readingTime})
  53. }