summaryrefslogtreecommitdiff
path: root/internal/api/util/parseform.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-12-23 17:54:44 +0000
committerLibravatar GitHub <noreply@github.com>2024-12-23 17:54:44 +0000
commitfe8d5f23072c40a407723904eb5c54234879d58a (patch)
treedf80063f3238997de7144932d2d713321164ac1b /internal/api/util/parseform.go
parent[chore] Stub /api/v1/announcements implementation (#3630) (diff)
downloadgotosocial-fe8d5f23072c40a407723904eb5c54234879d58a.tar.xz
[feature] add support for clients editing statuses and fetching status revision history (#3628)
* start adding client support for making status edits and viewing history * modify 'freshest' freshness window to be 5s, add typeutils test for status -> api edits * only populate the status edits when specifically requested * start adding some simple processor status edit tests * add test editing status but adding a poll * test edits appropriately adding poll expiry handlers * finish adding status edit tests * store both new and old revision emojis in status * add code comment * ensure the requester's account is populated before status edits * add code comments for status edit tests * update status edit form swagger comments * remove unused function * fix status source test * add more code comments, move media description check back to media process in status create * fix tests, add necessary form struct tag
Diffstat (limited to 'internal/api/util/parseform.go')
-rw-r--r--internal/api/util/parseform.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/internal/api/util/parseform.go b/internal/api/util/parseform.go
index 3eab065f2..8bb10012c 100644
--- a/internal/api/util/parseform.go
+++ b/internal/api/util/parseform.go
@@ -18,13 +18,55 @@
package util
import (
+ "errors"
"fmt"
"strconv"
+ "strings"
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
+ "github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/util"
)
+// ParseFocus parses a media attachment focus parameters from incoming API string.
+func ParseFocus(focus string) (focusx, focusy float32, errWithCode gtserror.WithCode) {
+ if focus == "" {
+ return
+ }
+ spl := strings.Split(focus, ",")
+ if len(spl) != 2 {
+ const text = "missing comma separator"
+ errWithCode = gtserror.NewErrorBadRequest(
+ errors.New(text),
+ text,
+ )
+ return
+ }
+ xStr := spl[0]
+ yStr := spl[1]
+ fx, err := strconv.ParseFloat(xStr, 32)
+ if err != nil || fx > 1 || fx < -1 {
+ text := fmt.Sprintf("invalid x focus: %s", xStr)
+ errWithCode = gtserror.NewErrorBadRequest(
+ errors.New(text),
+ text,
+ )
+ return
+ }
+ fy, err := strconv.ParseFloat(yStr, 32)
+ if err != nil || fy > 1 || fy < -1 {
+ text := fmt.Sprintf("invalid y focus: %s", xStr)
+ errWithCode = gtserror.NewErrorBadRequest(
+ errors.New(text),
+ text,
+ )
+ return
+ }
+ focusx = float32(fx)
+ focusy = float32(fy)
+ return
+}
+
// ParseDuration parses the given raw interface belonging
// the given fieldName as an integer duration.
func ParseDuration(rawI any, fieldName string) (*int, error) {