From 976d1ae9cb2f6cfc2ed9eb972cdf4e49e8613249 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 27 Oct 2024 18:40:43 +0200 Subject: [PATCH] web/timeline: add big emojis --- go.mod | 2 +- go.sum | 4 ++-- pkg/hicli/database/event.go | 1 + pkg/hicli/sync.go | 6 +++++- web/src/api/types/hitypes.ts | 1 + web/src/ui/timeline/content/TextMessageBody.tsx | 9 ++++++--- web/src/ui/timeline/content/index.css | 4 ++++ 7 files changed, 20 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 5e65193..b7518c2 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/tidwall/gjson v1.18.0 github.com/tidwall/sjson v1.2.5 github.com/yuin/goldmark v1.7.7 - go.mau.fi/util v0.8.2-0.20241018231932-9da45c4e6e04 + go.mau.fi/util v0.8.2-0.20241027163518-38d54fc87ee3 go.mau.fi/zeroconfig v0.1.3 golang.org/x/crypto v0.28.0 golang.org/x/image v0.21.0 diff --git a/go.sum b/go.sum index 486fa5f..782d667 100644 --- a/go.sum +++ b/go.sum @@ -61,8 +61,8 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/yuin/goldmark v1.7.7 h1:5m9rrB1sW3JUMToKFQfb+FGt1U7r57IHu5GrYrG2nqU= github.com/yuin/goldmark v1.7.7/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= -go.mau.fi/util v0.8.2-0.20241018231932-9da45c4e6e04 h1:sfTKol1VyOfKb/QilgmtTT8GlZcL790IPWX60W1EEKU= -go.mau.fi/util v0.8.2-0.20241018231932-9da45c4e6e04/go.mod h1:T1u/rD2rzidVrBLyaUdPpZiJdP/rsyi+aTzn0D+Q6wc= +go.mau.fi/util v0.8.2-0.20241027163518-38d54fc87ee3 h1:9dDTNcVc3y9oU9bYvjpc3xsCupwGzfyYhrppaLy6l9k= +go.mau.fi/util v0.8.2-0.20241027163518-38d54fc87ee3/go.mod h1:T1u/rD2rzidVrBLyaUdPpZiJdP/rsyi+aTzn0D+Q6wc= go.mau.fi/zeroconfig v0.1.3 h1:As9wYDKmktjmNZW5i1vn8zvJlmGKHeVxHVIBMXsm4kM= go.mau.fi/zeroconfig v0.1.3/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= diff --git a/pkg/hicli/database/event.go b/pkg/hicli/database/event.go index 2a8f2a8..6618dc3 100644 --- a/pkg/hicli/database/event.go +++ b/pkg/hicli/database/event.go @@ -291,6 +291,7 @@ type LocalContent struct { SanitizedHTML string `json:"sanitized_html,omitempty"` HTMLVersion int `json:"html_version,omitempty"` WasPlaintext bool `json:"was_plaintext,omitempty"` + BigEmoji bool `json:"big_emoji,omitempty"` } type Event struct { diff --git a/pkg/hicli/sync.go b/pkg/hicli/sync.go index c45fd4e..580c6ba 100644 --- a/pkg/hicli/sync.go +++ b/pkg/hicli/sync.go @@ -18,6 +18,7 @@ import ( "github.com/rs/zerolog" "github.com/tidwall/gjson" "github.com/tidwall/sjson" + "go.mau.fi/util/emojirunes" "go.mau.fi/util/exzerolog" "go.mau.fi/util/jsontime" "maunium.net/go/mautrix" @@ -366,7 +367,7 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev } if content != nil { var sanitizedHTML string - var wasPlaintext bool + var wasPlaintext, bigEmoji bool var inlineImages []id.ContentURI if content.Format == event.FormatHTML && content.FormattedBody != "" { var err error @@ -395,6 +396,8 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev builder.Grow(len(content.Body) + builderPreallocBuffer) linkifyAndWriteBytes(&builder, []byte(content.Body)) sanitizedHTML = builder.String() + } else if len(content.Body) < 100 && emojirunes.IsOnlyEmojis(content.Body) { + bigEmoji = true } wasPlaintext = true } @@ -402,6 +405,7 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev SanitizedHTML: sanitizedHTML, HTMLVersion: CurrentHTMLSanitizerVersion, WasPlaintext: wasPlaintext, + BigEmoji: bigEmoji, }, inlineImages } return nil, nil diff --git a/web/src/api/types/hitypes.ts b/web/src/api/types/hitypes.ts index 2c2e676..b90bd89 100644 --- a/web/src/api/types/hitypes.ts +++ b/web/src/api/types/hitypes.ts @@ -83,6 +83,7 @@ export interface LocalContent { sanitized_html?: TrustedHTML html_version?: number was_plaintext?: boolean + big_emoji?: boolean } export interface BaseDBEvent { diff --git a/web/src/ui/timeline/content/TextMessageBody.tsx b/web/src/ui/timeline/content/TextMessageBody.tsx index a3cc5b3..eec9aea 100644 --- a/web/src/ui/timeline/content/TextMessageBody.tsx +++ b/web/src/ui/timeline/content/TextMessageBody.tsx @@ -33,11 +33,14 @@ const TextMessageBody = ({ event, sender }: EventContentProps) => { classNames.push("emote-message") eventSenderName = sender?.content?.displayname || event.sender } + if (event.local_content?.big_emoji) { + classNames.push("big-emoji-body") + } + if (event.local_content?.was_plaintext) { + classNames.push("plaintext-body") + } if (event.local_content?.sanitized_html) { classNames.push("html-body") - if (event.local_content.was_plaintext) { - classNames.push("plaintext-body") - } return