mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-12 17:47:29 -06:00
[feature] Allow user to choose "gallery" style web layout
This commit is contained in:
parent
d3c3d34aae
commit
7e689edbe3
82 changed files with 2840 additions and 1154 deletions
|
|
@ -115,8 +115,20 @@ func (p *Processor) GetRSSFeedForUsername(ctx context.Context, username string)
|
|||
// Reuse the lastPostAt value for feed.Updated.
|
||||
feed.Updated = lastPostAt
|
||||
|
||||
// Retrieve latest statuses as they'd be shown on the web view of the account profile.
|
||||
statuses, err := p.state.DB.GetAccountWebStatuses(ctx, account, rssFeedLength, "")
|
||||
// Retrieve latest statuses as they'd be shown
|
||||
// on the web view of the account profile.
|
||||
//
|
||||
// Take into account whether the user wants
|
||||
// their web view laid out in gallery mode.
|
||||
mediaOnly := account.Settings != nil &&
|
||||
account.Settings.WebLayout == gtsmodel.WebLayoutGallery
|
||||
statuses, err := p.state.DB.GetAccountWebStatuses(
|
||||
ctx,
|
||||
account,
|
||||
mediaOnly,
|
||||
rssFeedLength,
|
||||
"", // Latest posts from the top.
|
||||
)
|
||||
if err != nil && !errors.Is(err, db.ErrNoEntries) {
|
||||
err = fmt.Errorf("db error getting account web statuses: %w", err)
|
||||
return "", gtserror.NewErrorInternalError(err)
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ func (p *Processor) StatusesGet(
|
|||
func (p *Processor) WebStatusesGet(
|
||||
ctx context.Context,
|
||||
targetAccountID string,
|
||||
mediaOnly bool,
|
||||
maxID string,
|
||||
) (*apimodel.PageableResponse, gtserror.WithCode) {
|
||||
account, err := p.state.DB.GetAccountByID(ctx, targetAccountID)
|
||||
|
|
@ -159,7 +160,13 @@ func (p *Processor) WebStatusesGet(
|
|||
return nil, gtserror.NewErrorNotFound(err)
|
||||
}
|
||||
|
||||
statuses, err := p.state.DB.GetAccountWebStatuses(ctx, account, 10, maxID)
|
||||
statuses, err := p.state.DB.GetAccountWebStatuses(
|
||||
ctx,
|
||||
account,
|
||||
mediaOnly,
|
||||
20,
|
||||
maxID,
|
||||
)
|
||||
if err != nil && !errors.Is(err, db.ErrNoEntries) {
|
||||
return nil, gtserror.NewErrorInternalError(err)
|
||||
}
|
||||
|
|
@ -198,6 +205,7 @@ func (p *Processor) WebStatusesGet(
|
|||
func (p *Processor) WebStatusesGetPinned(
|
||||
ctx context.Context,
|
||||
targetAccountID string,
|
||||
mediaOnly bool,
|
||||
) ([]*apimodel.WebStatus, gtserror.WithCode) {
|
||||
statuses, err := p.state.DB.GetAccountPinnedStatuses(ctx, targetAccountID)
|
||||
if err != nil && !errors.Is(err, db.ErrNoEntries) {
|
||||
|
|
@ -206,6 +214,11 @@ func (p *Processor) WebStatusesGetPinned(
|
|||
|
||||
webStatuses := make([]*apimodel.WebStatus, 0, len(statuses))
|
||||
for _, status := range statuses {
|
||||
if mediaOnly && len(status.Attachments) == 0 {
|
||||
// No media, skip.
|
||||
continue
|
||||
}
|
||||
|
||||
// Ensure visible via the web.
|
||||
visible, err := p.visFilter.StatusVisible(ctx, nil, status)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -294,6 +294,18 @@ func (p *Processor) Update(ctx context.Context, account *gtsmodel.Account, form
|
|||
settingsColumns = append(settingsColumns, "web_visibility")
|
||||
}
|
||||
|
||||
if form.WebLayout != nil {
|
||||
webLayout := gtsmodel.ParseWebLayout(*form.WebLayout)
|
||||
if webLayout == gtsmodel.WebLayoutUnknown {
|
||||
const text = "web_layout must be one of microblog or gallery"
|
||||
err := errors.New(text)
|
||||
return nil, gtserror.NewErrorBadRequest(err, text)
|
||||
}
|
||||
|
||||
account.Settings.WebLayout = webLayout
|
||||
settingsColumns = append(settingsColumns, "web_layout")
|
||||
}
|
||||
|
||||
// We've parsed + set everything, do
|
||||
// necessary database updates now.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue