summaryrefslogtreecommitdiff
path: root/internal/ap
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-04-16 13:10:13 +0200
committerLibravatar GitHub <noreply@github.com>2024-04-16 13:10:13 +0200
commit3cceed11b28b5f42a653d85ed779d652fd8c26ad (patch)
tree0a7f0994e477609ca705a45f382dfb62056b196e /internal/ap
parent[performance] cached oauth database types (#2838) (diff)
downloadgotosocial-3cceed11b28b5f42a653d85ed779d652fd8c26ad.tar.xz
[feature/performance] Store account stats in separate table (#2831)
* [feature/performance] Store account stats in separate table, get stats from remote * test account stats * add some missing increment / decrement calls * change stats function signatures * rejig logging a bit * use lock when updating stats
Diffstat (limited to 'internal/ap')
-rw-r--r--internal/ap/collections.go36
-rw-r--r--internal/ap/interfaces.go12
2 files changed, 48 insertions, 0 deletions
diff --git a/internal/ap/collections.go b/internal/ap/collections.go
index c55bbe70b..62c81fd57 100644
--- a/internal/ap/collections.go
+++ b/internal/ap/collections.go
@@ -105,6 +105,15 @@ func (iter *regularCollectionIterator) PrevItem() TypeOrIRI {
return cur
}
+func (iter *regularCollectionIterator) TotalItems() int {
+ totalItems := iter.GetActivityStreamsTotalItems()
+ if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() {
+ return -1
+ }
+
+ return totalItems.Get()
+}
+
func (iter *regularCollectionIterator) initItems() bool {
if iter.once {
return (iter.items != nil)
@@ -147,6 +156,15 @@ func (iter *orderedCollectionIterator) PrevItem() TypeOrIRI {
return cur
}
+func (iter *orderedCollectionIterator) TotalItems() int {
+ totalItems := iter.GetActivityStreamsTotalItems()
+ if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() {
+ return -1
+ }
+
+ return totalItems.Get()
+}
+
func (iter *orderedCollectionIterator) initItems() bool {
if iter.once {
return (iter.items != nil)
@@ -203,6 +221,15 @@ func (iter *regularCollectionPageIterator) PrevItem() TypeOrIRI {
return cur
}
+func (iter *regularCollectionPageIterator) TotalItems() int {
+ totalItems := iter.GetActivityStreamsTotalItems()
+ if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() {
+ return -1
+ }
+
+ return totalItems.Get()
+}
+
func (iter *regularCollectionPageIterator) initItems() bool {
if iter.once {
return (iter.items != nil)
@@ -259,6 +286,15 @@ func (iter *orderedCollectionPageIterator) PrevItem() TypeOrIRI {
return cur
}
+func (iter *orderedCollectionPageIterator) TotalItems() int {
+ totalItems := iter.GetActivityStreamsTotalItems()
+ if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() {
+ return -1
+ }
+
+ return totalItems.Get()
+}
+
func (iter *orderedCollectionPageIterator) initItems() bool {
if iter.once {
return (iter.items != nil)
diff --git a/internal/ap/interfaces.go b/internal/ap/interfaces.go
index 05f6742cc..8f2e17c09 100644
--- a/internal/ap/interfaces.go
+++ b/internal/ap/interfaces.go
@@ -307,6 +307,12 @@ type CollectionIterator interface {
NextItem() TypeOrIRI
PrevItem() TypeOrIRI
+
+ // TotalItems returns the total items
+ // present in the collection, derived
+ // from the totalItems property, or -1
+ // if totalItems not present / readable.
+ TotalItems() int
}
// CollectionPageIterator represents the minimum interface for interacting with a wrapped
@@ -319,6 +325,12 @@ type CollectionPageIterator interface {
NextItem() TypeOrIRI
PrevItem() TypeOrIRI
+
+ // TotalItems returns the total items
+ // present in the collection, derived
+ // from the totalItems property, or -1
+ // if totalItems not present / readable.
+ TotalItems() int
}
// Flaggable represents the minimum interface for an activitystreams 'Flag' activity.