aboutsummaryrefslogtreecommitdiff
path: root/server/ui/controller/entry.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/ui/controller/entry.go')
-rw-r--r--server/ui/controller/entry.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/server/ui/controller/entry.go b/server/ui/controller/entry.go
index 309fa09e..eb47201f 100644
--- a/server/ui/controller/entry.go
+++ b/server/ui/controller/entry.go
@@ -8,12 +8,91 @@ import (
"errors"
"log"
+ "github.com/miniflux/miniflux2/integration"
"github.com/miniflux/miniflux2/model"
+ "github.com/miniflux/miniflux2/reader/scraper"
"github.com/miniflux/miniflux2/server/core"
"github.com/miniflux/miniflux2/server/ui/payload"
"github.com/miniflux/miniflux2/storage"
)
+// FetchContent downloads the original HTML page and returns relevant contents.
+func (c *Controller) FetchContent(ctx *core.Context, request *core.Request, response *core.Response) {
+ entryID, err := request.IntegerParam("entryID")
+ if err != nil {
+ response.HTML().BadRequest(err)
+ return
+ }
+
+ user := ctx.LoggedUser()
+ builder := c.store.GetEntryQueryBuilder(user.ID, user.Timezone)
+ builder.WithEntryID(entryID)
+ builder.WithoutStatus(model.EntryStatusRemoved)
+
+ entry, err := builder.GetEntry()
+ if err != nil {
+ response.JSON().ServerError(err)
+ return
+ }
+
+ if entry == nil {
+ response.JSON().NotFound(errors.New("Entry not found"))
+ return
+ }
+
+ content, err := scraper.Fetch(entry.URL)
+ if err != nil {
+ response.JSON().ServerError(err)
+ return
+ }
+
+ if len(content) > len(entry.Content) {
+ entry.Content = content
+ c.store.UpdateEntryContent(entry)
+ } else {
+ content = entry.Content
+ }
+
+ response.JSON().Created(map[string]string{"content": content})
+}
+
+// SaveEntry send the link to external services.
+func (c *Controller) SaveEntry(ctx *core.Context, request *core.Request, response *core.Response) {
+ entryID, err := request.IntegerParam("entryID")
+ if err != nil {
+ response.HTML().BadRequest(err)
+ return
+ }
+
+ user := ctx.LoggedUser()
+ builder := c.store.GetEntryQueryBuilder(user.ID, user.Timezone)
+ builder.WithEntryID(entryID)
+ builder.WithoutStatus(model.EntryStatusRemoved)
+
+ entry, err := builder.GetEntry()
+ if err != nil {
+ response.JSON().ServerError(err)
+ return
+ }
+
+ if entry == nil {
+ response.JSON().NotFound(errors.New("Entry not found"))
+ return
+ }
+
+ settings, err := c.store.Integration(user.ID)
+ if err != nil {
+ response.JSON().ServerError(err)
+ return
+ }
+
+ go func() {
+ integration.SendEntry(entry, settings)
+ }()
+
+ response.JSON().Created(map[string]string{"message": "saved"})
+}
+
// ShowFeedEntry shows a single feed entry in "feed" mode.
func (c *Controller) ShowFeedEntry(ctx *core.Context, request *core.Request, response *core.Response) {
user := ctx.LoggedUser()