summaryrefslogtreecommitdiff
path: root/internal/db
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/bundb/media.go46
-rw-r--r--internal/db/bundb/media_test.go2
-rw-r--r--internal/db/media.go13
3 files changed, 53 insertions, 8 deletions
diff --git a/internal/db/bundb/media.go b/internal/db/bundb/media.go
index 6e3a31b40..3350f9584 100644
--- a/internal/db/bundb/media.go
+++ b/internal/db/bundb/media.go
@@ -72,6 +72,23 @@ func (m *mediaDB) GetRemoteOlderThan(ctx context.Context, olderThan time.Time, l
return attachments, nil
}
+func (m *mediaDB) CountRemoteOlderThan(ctx context.Context, olderThan time.Time) (int, db.Error) {
+ q := m.conn.
+ NewSelect().
+ TableExpr("? AS ?", bun.Ident("media_attachments"), bun.Ident("media_attachment")).
+ Column("media_attachment.id").
+ Where("? = ?", bun.Ident("media_attachment.cached"), true).
+ Where("? < ?", bun.Ident("media_attachment.created_at"), olderThan).
+ WhereGroup(" AND ", whereNotEmptyAndNotNull("media_attachment.remote_url"))
+
+ count, err := q.Count(ctx)
+ if err != nil {
+ return 0, m.conn.ProcessError(err)
+ }
+
+ return count, nil
+}
+
func (m *mediaDB) GetAvatarsAndHeaders(ctx context.Context, maxID string, limit int) ([]*gtsmodel.MediaAttachment, db.Error) {
attachments := []*gtsmodel.MediaAttachment{}
@@ -98,7 +115,7 @@ func (m *mediaDB) GetAvatarsAndHeaders(ctx context.Context, maxID string, limit
return attachments, nil
}
-func (m *mediaDB) GetLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time, maxID string, limit int) ([]*gtsmodel.MediaAttachment, db.Error) {
+func (m *mediaDB) GetLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time, limit int) ([]*gtsmodel.MediaAttachment, db.Error) {
attachments := []*gtsmodel.MediaAttachment{}
q := m.newMediaQ(&attachments).
@@ -107,11 +124,8 @@ func (m *mediaDB) GetLocalUnattachedOlderThan(ctx context.Context, olderThan tim
Where("? = ?", bun.Ident("media_attachment.header"), false).
Where("? < ?", bun.Ident("media_attachment.created_at"), olderThan).
Where("? IS NULL", bun.Ident("media_attachment.remote_url")).
- Where("? IS NULL", bun.Ident("media_attachment.status_id"))
-
- if maxID != "" {
- q = q.Where("? < ?", bun.Ident("media_attachment.id"), maxID)
- }
+ Where("? IS NULL", bun.Ident("media_attachment.status_id")).
+ Order("media_attachment.created_at DESC")
if limit != 0 {
q = q.Limit(limit)
@@ -123,3 +137,23 @@ func (m *mediaDB) GetLocalUnattachedOlderThan(ctx context.Context, olderThan tim
return attachments, nil
}
+
+func (m *mediaDB) CountLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time) (int, db.Error) {
+ q := m.conn.
+ NewSelect().
+ TableExpr("? AS ?", bun.Ident("media_attachments"), bun.Ident("media_attachment")).
+ Column("media_attachment.id").
+ Where("? = ?", bun.Ident("media_attachment.cached"), true).
+ Where("? = ?", bun.Ident("media_attachment.avatar"), false).
+ Where("? = ?", bun.Ident("media_attachment.header"), false).
+ Where("? < ?", bun.Ident("media_attachment.created_at"), olderThan).
+ Where("? IS NULL", bun.Ident("media_attachment.remote_url")).
+ Where("? IS NULL", bun.Ident("media_attachment.status_id"))
+
+ count, err := q.Count(ctx)
+ if err != nil {
+ return 0, m.conn.ProcessError(err)
+ }
+
+ return count, nil
+}
diff --git a/internal/db/bundb/media_test.go b/internal/db/bundb/media_test.go
index 139a4b780..02915a9e1 100644
--- a/internal/db/bundb/media_test.go
+++ b/internal/db/bundb/media_test.go
@@ -55,7 +55,7 @@ func (suite *MediaTestSuite) TestGetAvisAndHeaders() {
func (suite *MediaTestSuite) TestGetLocalUnattachedOlderThan() {
ctx := context.Background()
- attachments, err := suite.db.GetLocalUnattachedOlderThan(ctx, testrig.TimeMustParse("2090-06-04T13:12:00Z"), "", 10)
+ attachments, err := suite.db.GetLocalUnattachedOlderThan(ctx, testrig.TimeMustParse("2090-06-04T13:12:00Z"), 10)
suite.NoError(err)
suite.Len(attachments, 1)
}
diff --git a/internal/db/media.go b/internal/db/media.go
index f9bc5bd03..3756bd58f 100644
--- a/internal/db/media.go
+++ b/internal/db/media.go
@@ -37,6 +37,11 @@ type Media interface {
// In other words, media attachments that originated remotely, and that we currently have cached locally.
GetRemoteOlderThan(ctx context.Context, olderThan time.Time, limit int) ([]*gtsmodel.MediaAttachment, Error)
+ // CountRemoteOlderThan is like GetRemoteOlderThan, except instead of getting limit n attachments,
+ // it just counts how many remote attachments in the database (including avatars and headers) meet
+ // the olderThan criteria.
+ CountRemoteOlderThan(ctx context.Context, olderThan time.Time) (int, Error)
+
// GetAvatarsAndHeaders fetches limit n avatars and headers with an id < maxID. These headers
// and avis may be in use or not; the caller should check this if it's important.
GetAvatarsAndHeaders(ctx context.Context, maxID string, limit int) ([]*gtsmodel.MediaAttachment, Error)
@@ -44,5 +49,11 @@ type Media interface {
// GetLocalUnattachedOlderThan fetches limit n local media attachments (including avatars and headers), older than
// the given time, which aren't header or avatars, and aren't attached to a status. In other words, attachments which were
// uploaded but never used for whatever reason, or attachments that were attached to a status which was subsequently deleted.
- GetLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time, maxID string, limit int) ([]*gtsmodel.MediaAttachment, Error)
+ //
+ // These will be returned in order of attachment.created_at descending (newest to oldest in other words).
+ GetLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time, limit int) ([]*gtsmodel.MediaAttachment, Error)
+
+ // CountLocalUnattachedOlderThan is like GetLocalUnattachedOlderThan, except instead of getting limit n attachments,
+ // it just counts how many local attachments in the database meet the olderThan criteria.
+ CountLocalUnattachedOlderThan(ctx context.Context, olderThan time.Time) (int, Error)
}