summaryrefslogtreecommitdiff
path: root/internal/db/bundb/account.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r--internal/db/bundb/account.go67
1 files changed, 39 insertions, 28 deletions
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go
index f905101e4..aacfcd247 100644
--- a/internal/db/bundb/account.go
+++ b/internal/db/bundb/account.go
@@ -878,6 +878,29 @@ func (a *accountDB) GetAccountFaves(ctx context.Context, accountID string) ([]*g
return *faves, nil
}
+func qMediaOnly(q *bun.SelectQuery) *bun.SelectQuery {
+ // Attachments are stored as a json object; this
+ // implementation differs between SQLite and Postgres,
+ // so we have to be thorough to cover all eventualities
+ return q.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery {
+ switch d := q.Dialect().Name(); d {
+ case dialect.PG:
+ return q.
+ Where("? IS NOT NULL", bun.Ident("status.attachments")).
+ Where("? != '{}'", bun.Ident("status.attachments"))
+
+ case dialect.SQLite:
+ return q.
+ Where("? IS NOT NULL", bun.Ident("status.attachments")).
+ Where("? != 'null'", bun.Ident("status.attachments")).
+ Where("? != '[]'", bun.Ident("status.attachments"))
+
+ default:
+ panic("dialect " + d.String() + " was neither pg nor sqlite")
+ }
+ })
+}
+
func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, limit int, excludeReplies bool, excludeReblogs bool, maxID string, minID string, mediaOnly bool, publicOnly bool) ([]*gtsmodel.Status, error) {
// Ensure reasonable
if limit < 0 {
@@ -918,28 +941,9 @@ func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, li
q = q.Where("? IS NULL", bun.Ident("status.boost_of_id"))
}
+ // Respect media-only preference.
if mediaOnly {
- // Attachments are stored as a json object; this
- // implementation differs between SQLite and Postgres,
- // so we have to be thorough to cover all eventualities
- q = q.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery {
- switch a.db.Dialect().Name() {
- case dialect.PG:
- return q.
- Where("? IS NOT NULL", bun.Ident("status.attachments")).
- Where("? != '{}'", bun.Ident("status.attachments"))
- case dialect.SQLite:
- return q.
- Where("? IS NOT NULL", bun.Ident("status.attachments")).
- Where("? != ''", bun.Ident("status.attachments")).
- Where("? != 'null'", bun.Ident("status.attachments")).
- Where("? != '{}'", bun.Ident("status.attachments")).
- Where("? != '[]'", bun.Ident("status.attachments"))
- default:
- log.Panic(ctx, "db dialect was neither pg nor sqlite")
- return q
- }
- })
+ q = qMediaOnly(q)
}
if publicOnly {
@@ -1018,6 +1022,7 @@ func (a *accountDB) GetAccountPinnedStatuses(ctx context.Context, accountID stri
func (a *accountDB) GetAccountWebStatuses(
ctx context.Context,
account *gtsmodel.Account,
+ mediaOnly bool,
limit int,
maxID string,
) ([]*gtsmodel.Status, error) {
@@ -1046,10 +1051,7 @@ func (a *accountDB) GetAccountWebStatuses(
TableExpr("? AS ?", bun.Ident("statuses"), bun.Ident("status")).
// Select only IDs from table
Column("status.id").
- Where("? = ?", bun.Ident("status.account_id"), account.ID).
- // Don't show replies or boosts.
- Where("? IS NULL", bun.Ident("status.in_reply_to_uri")).
- Where("? IS NULL", bun.Ident("status.boost_of_id"))
+ Where("? = ?", bun.Ident("status.account_id"), account.ID)
// Select statuses for this account according
// to their web visibility preference.
@@ -1074,10 +1076,19 @@ func (a *accountDB) GetAccountWebStatuses(
)
}
- // Don't show local-only statuses on the web view.
- q = q.Where("? = ?", bun.Ident("status.federated"), true)
+ // Don't show replies, boosts, or
+ // local-only statuses on the web view.
+ q = q.
+ Where("? IS NULL", bun.Ident("status.in_reply_to_uri")).
+ Where("? IS NULL", bun.Ident("status.boost_of_id")).
+ Where("? = ?", bun.Ident("status.federated"), true)
+
+ // Respect media-only preference.
+ if mediaOnly {
+ q = qMediaOnly(q)
+ }
- // return only statuses LOWER (ie., older) than maxID
+ // Return only statuses LOWER (ie., older) than maxID
if maxID == "" {
maxID = id.Highest
}