diff --git a/api4/file_test.go b/api4/file_test.go index 19423351d4..fbc1a12388 100644 --- a/api4/file_test.go +++ b/api4/file_test.go @@ -404,6 +404,18 @@ func TestUploadFiles(t *testing.T) { expectedImageHasPreview: []bool{true}, expectedCreatorId: th.BasicUser.Id, }, + // animated GIF + { + title: "Happy image thumbnail/preview 12", + names: []string{"testgif.gif"}, + expectedImageThumbnailNames: []string{"testgif_expected_thumbnail.jpg"}, + expectedImagePreviewNames: []string{"testgif_expected_preview.jpg"}, + expectImage: true, + expectedImageWidths: []int{118}, + expectedImageHeights: []int{118}, + expectedImageHasPreview: []bool{false}, + expectedCreatorId: th.BasicUser.Id, + }, { title: "Happy admin", client: th.SystemAdminClient, diff --git a/app/file.go b/app/file.go index 83f32c749f..f910002019 100644 --- a/app/file.go +++ b/app/file.go @@ -793,19 +793,19 @@ func (t *UploadFileTask) postprocessImage(file io.Reader) { } var wg sync.WaitGroup - wg.Add(1) - if t.fileinfo.HasPreviewImage { - wg.Add(2) - go func() { - defer wg.Done() - writeJPEG(genThumbnail(decoded), t.fileinfo.ThumbnailPath) - }() + wg.Add(3) + // Generating thumbnail and preview regardless of HasPreviewImage value. + // This is needed on mobile in case of animated GIFs. + go func() { + defer wg.Done() + writeJPEG(genThumbnail(decoded), t.fileinfo.ThumbnailPath) + }() + + go func() { + defer wg.Done() + writeJPEG(genPreview(decoded), t.fileinfo.PreviewPath) + }() - go func() { - defer wg.Done() - writeJPEG(genPreview(decoded), t.fileinfo.PreviewPath) - }() - } go func() { defer wg.Done() if t.fileinfo.MiniPreview == nil { diff --git a/tests/testgif_expected_preview.jpg b/tests/testgif_expected_preview.jpg new file mode 100644 index 0000000000..2878eb684f Binary files /dev/null and b/tests/testgif_expected_preview.jpg differ diff --git a/tests/testgif_expected_thumbnail.jpg b/tests/testgif_expected_thumbnail.jpg new file mode 100644 index 0000000000..47711fd2ed Binary files /dev/null and b/tests/testgif_expected_thumbnail.jpg differ