summaryrefslogtreecommitdiff
path: root/internal/api/model/filter.go
diff options
context:
space:
mode:
authorLibravatar Vyr Cossont <VyrCossont@users.noreply.github.com>2024-03-06 02:15:58 -0800
committerLibravatar GitHub <noreply@github.com>2024-03-06 11:15:58 +0100
commit61a2b91f454a6eb0dd383fc8614fee154654fa08 (patch)
treefcf6159f00c3a0833e6647dd00cd03d03774e2b2 /internal/api/model/filter.go
parent[chore]: Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 (#2714) (diff)
downloadgotosocial-61a2b91f454a6eb0dd383fc8614fee154654fa08.tar.xz
[feature] Filters v1 (#2594)
* Implement client-side v1 filters * Exclude linter false positives * Update test/envparsing.sh * Fix minor Swagger, style, and Bun usage issues * Regenerate Swagger * De-generify filter keywords * Remove updating filter statuses This is an operation that the Mastodon v2 filter API doesn't actually have, because filter statuses, unlike keywords, don't have options: the only info they contain is the status ID to be filtered. * Add a test for filter statuses specifically * De-generify filter statuses * Inline FilterEntry * Use vertical style for Bun operations consistently * Add comment on Filter DB interface * Remove GoLand linter control comments Our existing linters should catch these, or they don't matter very much * Reduce memory ratio for filters
Diffstat (limited to 'internal/api/model/filter.go')
-rw-r--r--internal/api/model/filter.go46
1 files changed, 20 insertions, 26 deletions
diff --git a/internal/api/model/filter.go b/internal/api/model/filter.go
index 4a5d29690..027dea48c 100644
--- a/internal/api/model/filter.go
+++ b/internal/api/model/filter.go
@@ -17,29 +17,23 @@
package model
-// Filter represents a user-defined filter for determining which statuses should not be shown to the user.
-// If whole_word is true , client app should do:
-// Define ‘word constituent character’ for your app. In the official implementation, it’s [A-Za-z0-9_] in JavaScript, and [[:word:]] in Ruby.
-// Ruby uses the POSIX character class (Letter | Mark | Decimal_Number | Connector_Punctuation).
-// If the phrase starts with a word character, and if the previous character before matched range is a word character, its matched range should be treated to not match.
-// If the phrase ends with a word character, and if the next character after matched range is a word character, its matched range should be treated to not match.
-// Please check app/javascript/mastodon/selectors/index.js and app/lib/feed_manager.rb in the Mastodon source code for more details.
-type Filter struct {
- // The ID of the filter in the database.
- ID string `json:"id"`
- // The text to be filtered.
- Phrase string `json:"text"`
- // The contexts in which the filter should be applied.
- // Array of String (Enumerable anyOf)
- // home = home timeline and lists
- // notifications = notifications timeline
- // public = public timelines
- // thread = expanded thread of a detailed status
- Context []string `json:"context"`
- // Should the filter consider word boundaries?
- WholeWord bool `json:"whole_word"`
- // When the filter should no longer be applied (ISO 8601 Datetime), or null if the filter does not expire
- ExpiresAt string `json:"expires_at,omitempty"`
- // Should matching entities in home and notifications be dropped by the server?
- Irreversible bool `json:"irreversible"`
-}
+// FilterContext represents the context in which to apply a filter.
+// v1 and v2 filter APIs use the same set of contexts.
+//
+// swagger:model filterContext
+type FilterContext string
+
+const (
+ // FilterContextHome means this filter should be applied to the home timeline and lists.
+ FilterContextHome FilterContext = "home"
+ // FilterContextNotifications means this filter should be applied to the notifications timeline.
+ FilterContextNotifications FilterContext = "notifications"
+ // FilterContextPublic means this filter should be applied to public timelines.
+ FilterContextPublic FilterContext = "public"
+ // FilterContextThread means this filter should be applied to the expanded thread of a detailed status.
+ FilterContextThread FilterContext = "thread"
+ // FilterContextAccount means this filter should be applied when viewing a profile.
+ FilterContextAccount FilterContext = "account"
+
+ FilterContextNumValues = 5
+)