Skip to content

Commit f96a0e8

Browse files
committed
messaging: introduce transforms with initial one for normalizing emoji reactions
1 parent 1e86d48 commit f96a0e8

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

messaging/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ func (s *Server) SendMessage(ctx context.Context, req *messagingpb.SendMessageRe
432432

433433
msg := &messagingpb.Message{
434434
SenderId: userID,
435-
Content: req.Content,
435+
Content: []*messagingpb.Content{ApplyTransforms(req.Content[0])},
436436
WasSenderOffStage: wasSenderOffStage,
437437
}
438438

messaging/transform.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package messaging
2+
3+
import (
4+
"unicode"
5+
6+
"google.golang.org/protobuf/proto"
7+
8+
messagingpb "github.com/code-payments/flipchat-protobuf-api/generated/go/messaging/v1"
9+
)
10+
11+
var (
12+
AllTransforms = []Transform{
13+
RemoveEmojiVariationModifiersTransform,
14+
}
15+
)
16+
17+
type Transform func(*messagingpb.Content) *messagingpb.Content
18+
19+
func RemoveEmojiVariationModifiersTransform(content *messagingpb.Content) *messagingpb.Content {
20+
if content.GetReaction() == nil {
21+
return content
22+
}
23+
24+
cloned := proto.Clone(content).(*messagingpb.Content)
25+
26+
var transformed []rune
27+
for _, r := range cloned.GetReaction().Emoji {
28+
if !unicode.In(r, unicode.Variation_Selector) {
29+
transformed = append(transformed, r)
30+
}
31+
}
32+
cloned.GetReaction().Emoji = string(transformed)
33+
34+
return cloned
35+
}
36+
37+
func ApplyTransforms(content *messagingpb.Content) *messagingpb.Content {
38+
for _, transform := range AllTransforms {
39+
content = transform(content)
40+
}
41+
return content
42+
}

messaging/transform_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package messaging
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
8+
messagingpb "github.com/code-payments/flipchat-protobuf-api/generated/go/messaging/v1"
9+
)
10+
11+
func TestRemoveEmojiVariationModifiersTransform(t *testing.T) {
12+
for _, tc := range []struct {
13+
in string
14+
out string
15+
}{
16+
{
17+
in: "",
18+
out: "",
19+
},
20+
{
21+
in: "👍",
22+
out: "👍",
23+
},
24+
{
25+
in: "\u2764\uFE0F",
26+
out: "\u2764",
27+
},
28+
} {
29+
in := &messagingpb.Content{
30+
Type: &messagingpb.Content_Reaction{
31+
Reaction: &messagingpb.ReactionContent{
32+
Emoji: tc.in,
33+
},
34+
},
35+
}
36+
out := RemoveEmojiVariationModifiersTransform(in)
37+
require.Equal(t, tc.out, out.GetReaction().Emoji)
38+
}
39+
}

0 commit comments

Comments
 (0)