From ccab5be6c47cd7c5788c25c208ec8451ead98e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F?= <39624400+lapaz17@users.noreply.github.com> Date: Tue, 21 Jun 2022 07:38:02 +0300 Subject: [PATCH] Mm-20223 Add webp emoji support (#20283) * Added webp package into app/emoji.go , also added a test * fixed import order inside emoji.go * Ran go mod tidy * Conversion to png for Webp emojis that must be resized is implemented * Deleted unused import * Added reading mechanism for webp instead of creating * fileutils and filepath are used while reading a webp file during test * Deleted readtestwebp function and put it in emoji_test as requested * Added webp image upload test inside api4/file_test.go * Expect image is changed from false to true Co-authored-by: Mattermod --- api4/emoji_test.go | 15 +++++++++++++++ api4/file_test.go | 11 +++++++++++ app/emoji.go | 1 + tests/testwebp.webp | Bin 0 -> 2050 bytes 4 files changed, 27 insertions(+) create mode 100644 tests/testwebp.webp diff --git a/api4/emoji_test.go b/api4/emoji_test.go index 6762d090e2..ac8395c26e 100644 --- a/api4/emoji_test.go +++ b/api4/emoji_test.go @@ -7,6 +7,7 @@ import ( "bytes" "image" _ "image/gif" + "io/ioutil" "os" "path/filepath" "testing" @@ -92,6 +93,20 @@ func TestCreateEmoji(t *testing.T) { require.Equal(t, newEmoji.Name, emoji.Name, "create with wrong name") checkEmojiFile(newEmoji.Id, "gif") + // try to create a valid webp emoji + emoji = &model.Emoji{ + CreatorId: th.BasicUser.Id, + Name: model.NewId(), + } + + path, _ := fileutils.FindDir("tests") + bytes, err := ioutil.ReadFile(filepath.Join(path, "testwebp.webp")) + require.NoError(t, err) + newEmoji, _, err = client.CreateEmoji(emoji, bytes, "image.webp") + require.NoError(t, err) + require.Equal(t, newEmoji.Name, emoji.Name, "create with wrong name") + checkEmojiFile(newEmoji.Id, "png") // emoji must be converted from webp to png + // try to create a valid jpeg emoji emoji = &model.Emoji{ CreatorId: th.BasicUser.Id, diff --git a/api4/file_test.go b/api4/file_test.go index 769a0153ef..276dfb4cef 100644 --- a/api4/file_test.go +++ b/api4/file_test.go @@ -453,6 +453,17 @@ func TestUploadFiles(t *testing.T) { expectedImageMiniPreview: []bool{false}, expectedCreatorId: th.BasicUser.Id, }, + // Webp image test + { + title: "Webp image", + names: []string{"testwebp.webp"}, + expectImage: true, + expectedImageWidths: []int{128}, + expectedImageHeights: []int{256}, + expectedImageHasPreview: []bool{true}, + expectedCreatorId: th.BasicUser.Id, + expectedImageMiniPreview: []bool{true}, + }, // Error cases { title: "Error channel_id does not exist", diff --git a/app/emoji.go b/app/emoji.go index f319e26bb7..360619ab3c 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -21,6 +21,7 @@ import ( "path" "github.com/disintegration/imaging" + _ "golang.org/x/image/webp" "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/shared/mlog" diff --git a/tests/testwebp.webp b/tests/testwebp.webp new file mode 100644 index 0000000000000000000000000000000000000000..ac4182b897f11e56e78ad6eb555dba2e0d849990 GIT binary patch literal 2050 zcmb`HXH?T!7Qi1x5QH!YD#j?G7pX%VmLf?c)B%FDV1WQ3pp*ci4IX8wA|QyMR1Khn z4xvd=zzCXv3P>@uVFl5wuoMxcY4*>~@h~4|&wkna&b{yV?z`{2`>LZA7P}<~fU7y$ z!NuVhH(>w(64I*xZ~?HwU>u})p(fy!+O_;z00ah6LLDv8NH@GYa@Y4m2;O1jAN&_J z4**}r0Av9eR{x9s|K$?$A%=NFK`W3_LZQh4;PHW2lJo~h?XuS&oVLrMPL3ETh6=GV z=}+wSCyu0$DNqb^H{P2Zy311#8wUo2@6NR=yBUiRgPhMmwHu@e5C$B91wcdmf0e!c z3@!oSmvsR6GWUF5c>p|21VCzH&nHg>Kr8`(mH{#$l<=Qq_#w;d>kGgq8UUhr03-$h z5I*}O(Y>*IXYpUwiiE}>pmhdAg#-cs5g>sT2m;A~TP!MaK87Po8_PiYdRm9M|8 z>Zo^LU>44xB-S%Xu!5_qCz+m?E{{LiUaO?)CO#i@!L4M{)acmMvSIt_qFx41hK%@| zVTXh~PP?lH9!8xgWus%_BlIPGJ~GaD{X@~IoON)WSu(_z@aX%c$BX-dr|!)5rA8Bk zO>#3uz0JB{p1%H%V^j0>=c^NDQuO*x(Wfe!n|j{0=dLP!3A~d70^D4Nb~?ub1yUm; zUOe{`*LiH>0z~S&84=Qo@X}Oj0Lk1$NAY*>A-VhS!+A}{WV)MG(-ix?%O<3DRv1+Z zhd1xbTD57l;gfo|m+!Ey@I33pueTWu@s}m8J+I&nCS5C=tLjjJ&oBqj-`#Q%>03o5 z%`kbJUJ(NgosG>BmZCM+cz@O-I&t!%rv7Q~kIi47zkNxYE)sG6DtCTF{unqmMhc0R ztuy@I_|Q1ews{Z}SAnZGXp)_}Vq}Y-SG9&7!gr4NH4LXK*s!scZ+X;deS_`la-h0D zJXTXI(3-=$VCb80PgY<3?BDYHqFuX@GS z4fZLDEk1z|e92#s9N%;4whgn}@f@S$*MT|P6%JQ_awok!p-xs>vGtJ-L$5|5u`G*v zOC5KP9Zq*zK5;|Fh^bnIQ|Dw?;fXXEdXht3IYkp5TyNg*WsbYwIxxi>ufCcrn0E-# zWzaXeW>+}d;^?i%cofD1)BDs%u}yK!p^c?)#UFR_qaBIs z#=N}TqnvSf6Bi?UwLvOkb>_$%{BdN?>4m6%^^;lDX<7Yq_fFn)Wo~Q`@2047w3D^D z6h6JmTXfR0Yuf1@SU>wS6-K#L^u(g9vLBhXV5e0Z^5)lLjR`mwd#R;F$x25;JZ))u z@w)EBuz3q=Q*V2X)O2_qb-v_ytdty4DRpCi-G|aGG%nacKmBRLs$_%T>!aHVFN@)& z9F1lbJe=gtj>6GL%=9Y(1O36N3S2M=6WJv$y5 z$CU9qWRIpMy+&Up<#v?CiNWD4d zVnpveJ9?}PHbr`2p%qiFOb}42|MJhSA-x`}91_PIb&7DmLQc&1l5ZX7_VOl6r9HXj zz?h4uk3c8apOU|C9i!zy7M6VVvgF2D)maK|MX|Sd>utBF^}$17bb9TEEPe6d;626HU8adk)<($gEc3w8Zs$*3 zc^(Gu5>Z-q1kr1}qYt^B9@cZ;+ITc`OifTu9}$uIEeVy;!p!A@xwU`QT8iWiC^)}~ z3F^$(L{+2^rao-gFUXKn`d9wuY^gD0bnk+XtJOVuRqmJM5qrz%I2DWQxc31;n6FrF z2!(DLV?>YLyxFi7@J!9aE=pTFKI3x@zOG`#$IvcGNFs{JiGh8<9*y`Go*@=fex;Hh zsf2~E+7uHM+eo+hEYyv}KijS*YIwk9Rmb}qF3u|NETy-dqH4GQ?i6-+c+@4Nkg_ds zR~7B4QKW7rZM&E+De2KkG3Kz$LU-!1)`oSH!Y{09->I24qGn^%Zkz$xVT)y+Ia%0D zWe?S>9q#P4zA>!5uKw%|znOU*=YeUpOdCeH)P*rWY|uwD*Ndfi>v0u