diff options
Diffstat (limited to 'server/ui/controller')
-rw-r--r-- | server/ui/controller/category.go | 2 | ||||
-rw-r--r-- | server/ui/controller/entry.go | 160 | ||||
-rw-r--r-- | server/ui/controller/feed.go | 2 | ||||
-rw-r--r-- | server/ui/controller/history.go | 2 | ||||
-rw-r--r-- | server/ui/controller/settings.go | 9 | ||||
-rw-r--r-- | server/ui/controller/unread.go | 2 |
6 files changed, 67 insertions, 110 deletions
diff --git a/server/ui/controller/category.go b/server/ui/controller/category.go index b718d0d7..75b7f90d 100644 --- a/server/ui/controller/category.go +++ b/server/ui/controller/category.go @@ -54,7 +54,7 @@ func (c *Controller) ShowCategoryEntries(ctx *core.Context, request *core.Reques builder := c.store.GetEntryQueryBuilder(user.ID, user.Timezone) builder.WithCategoryID(category.ID) builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.DefaultSortingDirection) + builder.WithDirection(user.EntryDirection) builder.WithoutStatus(model.EntryStatusRemoved) builder.WithOffset(offset) builder.WithLimit(nbItemsPerPage) diff --git a/server/ui/controller/entry.go b/server/ui/controller/entry.go index 7915af5b..933f0c63 100644 --- a/server/ui/controller/entry.go +++ b/server/ui/controller/entry.go @@ -11,12 +11,12 @@ import ( "github.com/miniflux/miniflux2/model" "github.com/miniflux/miniflux2/server/core" "github.com/miniflux/miniflux2/server/ui/payload" + "github.com/miniflux/miniflux2/storage" ) // 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() - sortingDirection := model.DefaultSortingDirection entryID, err := request.IntegerParam("entryID") if err != nil { @@ -46,33 +46,25 @@ func (c *Controller) ShowFeedEntry(ctx *core.Context, request *core.Request, res return } - args, err := c.getCommonTemplateArgs(ctx) - if err != nil { - response.HTML().ServerError(err) - return + if entry.Status == model.EntryStatusUnread { + err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) + if err != nil { + log.Println(err) + response.HTML().ServerError(nil) + return + } } - builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) - builder.WithFeedID(feedID) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", "<=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.DefaultSortingDirection) - nextEntry, err := builder.GetEntry() + args, err := c.getCommonTemplateArgs(ctx) if err != nil { response.HTML().ServerError(err) return } builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) builder.WithFeedID(feedID) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", ">=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.GetOppositeDirection(sortingDirection)) - prevEntry, err := builder.GetEntry() + + prevEntry, nextEntry, err := c.getEntryPrevNext(user, builder, entry.ID) if err != nil { response.HTML().ServerError(err) return @@ -88,14 +80,6 @@ func (c *Controller) ShowFeedEntry(ctx *core.Context, request *core.Request, res prevEntryRoute = ctx.Route("feedEntry", "feedID", feedID, "entryID", prevEntry.ID) } - if entry.Status == model.EntryStatusUnread { - err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) - if err != nil { - response.HTML().ServerError(err) - return - } - } - response.HTML().Render("entry", args.Merge(tplParams{ "entry": entry, "prevEntry": prevEntry, @@ -109,7 +93,6 @@ func (c *Controller) ShowFeedEntry(ctx *core.Context, request *core.Request, res // ShowCategoryEntry shows a single feed entry in "category" mode. func (c *Controller) ShowCategoryEntry(ctx *core.Context, request *core.Request, response *core.Response) { user := ctx.LoggedUser() - sortingDirection := model.DefaultSortingDirection categoryID, err := request.IntegerParam("categoryID") if err != nil { @@ -139,33 +122,25 @@ func (c *Controller) ShowCategoryEntry(ctx *core.Context, request *core.Request, return } - args, err := c.getCommonTemplateArgs(ctx) - if err != nil { - response.HTML().ServerError(err) - return + if entry.Status == model.EntryStatusUnread { + err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) + if err != nil { + log.Println(err) + response.HTML().ServerError(nil) + return + } } - builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) - builder.WithCategoryID(categoryID) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", "<=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(sortingDirection) - nextEntry, err := builder.GetEntry() + args, err := c.getCommonTemplateArgs(ctx) if err != nil { response.HTML().ServerError(err) return } builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) builder.WithCategoryID(categoryID) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", ">=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.GetOppositeDirection(sortingDirection)) - prevEntry, err := builder.GetEntry() + + prevEntry, nextEntry, err := c.getEntryPrevNext(user, builder, entry.ID) if err != nil { response.HTML().ServerError(err) return @@ -181,15 +156,6 @@ func (c *Controller) ShowCategoryEntry(ctx *core.Context, request *core.Request, prevEntryRoute = ctx.Route("categoryEntry", "categoryID", categoryID, "entryID", prevEntry.ID) } - if entry.Status == model.EntryStatusUnread { - err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) - if err != nil { - log.Println(err) - response.HTML().ServerError(nil) - return - } - } - response.HTML().Render("entry", args.Merge(tplParams{ "entry": entry, "prevEntry": prevEntry, @@ -203,7 +169,6 @@ func (c *Controller) ShowCategoryEntry(ctx *core.Context, request *core.Request, // ShowUnreadEntry shows a single feed entry in "unread" mode. func (c *Controller) ShowUnreadEntry(ctx *core.Context, request *core.Request, response *core.Response) { user := ctx.LoggedUser() - sortingDirection := model.DefaultSortingDirection entryID, err := request.IntegerParam("entryID") if err != nil { @@ -226,33 +191,25 @@ func (c *Controller) ShowUnreadEntry(ctx *core.Context, request *core.Request, r return } - args, err := c.getCommonTemplateArgs(ctx) - if err != nil { - response.HTML().ServerError(err) - return + if entry.Status == model.EntryStatusUnread { + err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) + if err != nil { + log.Println(err) + response.HTML().ServerError(nil) + return + } } - builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) - builder.WithStatus(model.EntryStatusUnread) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", "<=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(sortingDirection) - nextEntry, err := builder.GetEntry() + args, err := c.getCommonTemplateArgs(ctx) if err != nil { response.HTML().ServerError(err) return } builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) builder.WithStatus(model.EntryStatusUnread) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", ">=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.GetOppositeDirection(sortingDirection)) - prevEntry, err := builder.GetEntry() + + prevEntry, nextEntry, err := c.getEntryPrevNext(user, builder, entry.ID) if err != nil { response.HTML().ServerError(err) return @@ -268,15 +225,6 @@ func (c *Controller) ShowUnreadEntry(ctx *core.Context, request *core.Request, r prevEntryRoute = ctx.Route("unreadEntry", "entryID", prevEntry.ID) } - if entry.Status == model.EntryStatusUnread { - err = c.store.SetEntriesStatus(user.ID, []int64{entry.ID}, model.EntryStatusRead) - if err != nil { - log.Println(err) - response.HTML().ServerError(nil) - return - } - } - response.HTML().Render("entry", args.Merge(tplParams{ "entry": entry, "prevEntry": prevEntry, @@ -290,7 +238,6 @@ func (c *Controller) ShowUnreadEntry(ctx *core.Context, request *core.Request, r // ShowReadEntry shows a single feed entry in "history" mode. func (c *Controller) ShowReadEntry(ctx *core.Context, request *core.Request, response *core.Response) { user := ctx.LoggedUser() - sortingDirection := model.DefaultSortingDirection entryID, err := request.IntegerParam("entryID") if err != nil { @@ -320,26 +267,9 @@ func (c *Controller) ShowReadEntry(ctx *core.Context, request *core.Request, res } builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) builder.WithStatus(model.EntryStatusRead) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", "<=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(sortingDirection) - nextEntry, err := builder.GetEntry() - if err != nil { - response.HTML().ServerError(err) - return - } - builder = c.store.GetEntryQueryBuilder(user.ID, user.Timezone) - builder.WithoutStatus(model.EntryStatusRemoved) - builder.WithStatus(model.EntryStatusRead) - builder.WithCondition("e.id", "!=", entryID) - builder.WithCondition("e.published_at", ">=", entry.Date) - builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.GetOppositeDirection(sortingDirection)) - prevEntry, err := builder.GetEntry() + prevEntry, nextEntry, err := c.getEntryPrevNext(user, builder, entry.ID) if err != nil { response.HTML().ServerError(err) return @@ -390,3 +320,29 @@ func (c *Controller) UpdateEntriesStatus(ctx *core.Context, request *core.Reques response.JSON().Standard("OK") } + +func (c *Controller) getEntryPrevNext(user *model.User, builder *storage.EntryQueryBuilder, entryID int64) (prev *model.Entry, next *model.Entry, err error) { + builder.WithoutStatus(model.EntryStatusRemoved) + builder.WithOrder(model.DefaultSortingOrder) + builder.WithDirection(user.EntryDirection) + + entries, err := builder.GetEntries() + if err != nil { + return nil, nil, err + } + + n := len(entries) + for i := 0; i < n; i++ { + if entries[i].ID == entryID { + if i-1 > 0 { + prev = entries[i-1] + } + + if i+1 < n { + next = entries[i+1] + } + } + } + + return prev, next, nil +} diff --git a/server/ui/controller/feed.go b/server/ui/controller/feed.go index 85a94cf5..eeb66c41 100644 --- a/server/ui/controller/feed.go +++ b/server/ui/controller/feed.go @@ -72,7 +72,7 @@ func (c *Controller) ShowFeedEntries(ctx *core.Context, request *core.Request, r builder.WithFeedID(feed.ID) builder.WithoutStatus(model.EntryStatusRemoved) builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.DefaultSortingDirection) + builder.WithDirection(user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(nbItemsPerPage) diff --git a/server/ui/controller/history.go b/server/ui/controller/history.go index 9b4e3163..10525178 100644 --- a/server/ui/controller/history.go +++ b/server/ui/controller/history.go @@ -23,7 +23,7 @@ func (c *Controller) ShowHistoryPage(ctx *core.Context, request *core.Request, r builder := c.store.GetEntryQueryBuilder(user.ID, user.Timezone) builder.WithStatus(model.EntryStatusRead) builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.DefaultSortingDirection) + builder.WithDirection(user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(nbItemsPerPage) diff --git a/server/ui/controller/settings.go b/server/ui/controller/settings.go index e8ab20ba..a951e5df 100644 --- a/server/ui/controller/settings.go +++ b/server/ui/controller/settings.go @@ -74,10 +74,11 @@ func (c *Controller) getSettingsFormTemplateArgs(ctx *core.Context, user *model. if settingsForm == nil { args["form"] = form.SettingsForm{ - Username: user.Username, - Theme: user.Theme, - Language: user.Language, - Timezone: user.Timezone, + Username: user.Username, + Theme: user.Theme, + Language: user.Language, + Timezone: user.Timezone, + EntryDirection: user.EntryDirection, } } else { args["form"] = settingsForm diff --git a/server/ui/controller/unread.go b/server/ui/controller/unread.go index a114250e..e0f120a0 100644 --- a/server/ui/controller/unread.go +++ b/server/ui/controller/unread.go @@ -17,7 +17,7 @@ func (c *Controller) ShowUnreadPage(ctx *core.Context, request *core.Request, re builder := c.store.GetEntryQueryBuilder(user.ID, user.Timezone) builder.WithStatus(model.EntryStatusUnread) builder.WithOrder(model.DefaultSortingOrder) - builder.WithDirection(model.DefaultSortingDirection) + builder.WithDirection(user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(nbItemsPerPage) |