From 44f1cd9fb5c1d468fc97dfcfe38764bae0b1c7bf Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 9 Sep 2024 16:41:27 +0100 Subject: [PATCH 01/11] [Video] Media preview improvements (#5229) * background color for images that haven't loaded * fix recordwithmedia not appearing --- src/components/MediaPreview.tsx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/MediaPreview.tsx b/src/components/MediaPreview.tsx index 7d7cb2b4..f2ebb458 100644 --- a/src/components/MediaPreview.tsx +++ b/src/components/MediaPreview.tsx @@ -10,7 +10,7 @@ import { import {Trans} from '@lingui/macro' import {parseTenorGif} from '#/lib/strings/embed-player' -import {atoms as a} from '#/alf' +import {atoms as a, useTheme} from '#/alf' import {Text} from '#/components/Typography' import {PlayButtonIcon} from '#/components/video/PlayButtonIcon' @@ -43,10 +43,10 @@ export function Embed({ ))} ) - } else if (AppBskyEmbedExternal.isView(embed) && embed.external.thumb) { + } else if (AppBskyEmbedExternal.isView(media) && media.external.thumb) { let url: URL | undefined try { - url = new URL(embed.external.uri) + url = new URL(media.external.uri) } catch {} if (url) { const {success} = parseTenorGif(url) @@ -54,17 +54,17 @@ export function Embed({ return ( ) } } - } else if (AppBskyEmbedVideo.isView(embed)) { + } else if (AppBskyEmbedVideo.isView(media)) { return ( - + ) } @@ -91,12 +91,13 @@ export function ImageItem({ alt?: string children?: React.ReactNode }) { + const t = useTheme() return ( Date: Mon, 9 Sep 2024 17:29:14 +0100 Subject: [PATCH 02/11] Add `context` to `Mute` and `Unmute` labels on video control (#5234) Co-authored-by: Marco Buono --- .../com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx b/src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx index 82c0ab7a..555e4298 100644 --- a/src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx +++ b/src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx @@ -341,8 +341,8 @@ export function Controls({ )} Date: Mon, 9 Sep 2024 10:39:28 -0700 Subject: [PATCH 03/11] Add CORS to bskyweb (#5221) --- bskyweb/cmd/bskyweb/main.go | 7 +++++++ bskyweb/cmd/bskyweb/server.go | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/bskyweb/cmd/bskyweb/main.go b/bskyweb/cmd/bskyweb/main.go index 3f46c4b0..985879f4 100644 --- a/bskyweb/cmd/bskyweb/main.go +++ b/bskyweb/cmd/bskyweb/main.go @@ -80,6 +80,13 @@ func run(args []string) { Value: "", EnvVars: []string{"BASIC_AUTH_PASSWORD"}, }, + &cli.StringSliceFlag{ + Name: "cors-allowed-origins", + Usage: "list of allowed origins for CORS requests", + Required: false, + Value: cli.NewStringSlice("https://bsky.app", "https://main.bsky.dev", "https://app.staging.bsky.dev"), + EnvVars: []string{"CORS_ALLOWED_ORIGINS"}, + }, }, }, } diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go index afd9247a..2d75a2b7 100644 --- a/bskyweb/cmd/bskyweb/server.go +++ b/bskyweb/cmd/bskyweb/server.go @@ -57,6 +57,7 @@ func serve(cctx *cli.Context) error { linkHost := cctx.String("link-host") ipccHost := cctx.String("ipcc-host") basicAuthPassword := cctx.String("basic-auth-password") + corsOrigins := cctx.StringSlice("cors-allowed-origins") // Echo e := echo.New() @@ -168,6 +169,12 @@ func serve(cctx *cli.Context) error { RedirectCode: http.StatusFound, })) + // CORS middleware + e.Use(middleware.CORSWithConfig(middleware.CORSConfig{ + AllowOrigins: corsOrigins, + AllowMethods: []string{http.MethodGet, http.MethodHead, http.MethodOptions}, + })) + // // configure routes // From 723a5e488eab40eac63a1983fc8cbbfa3992b3e7 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 9 Sep 2024 12:44:41 -0700 Subject: [PATCH 04/11] [Video] Add a string for localization (#5240) --- src/locale/locales/en/messages.po | 62 +++++++++++++++++----------- src/locale/locales/pt-BR/messages.po | 62 +++++++++++++++++----------- src/state/queries/video/video.ts | 5 +++ 3 files changed, 79 insertions(+), 50 deletions(-) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 0ab67310..77d565ff 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -644,7 +644,7 @@ msgstr "" msgid "An error occurred" msgstr "" -#: src/state/queries/video/video.ts:227 +#: src/state/queries/video/video.ts:232 msgid "An error occurred while compressing the video." msgstr "" @@ -682,7 +682,7 @@ msgstr "" msgid "An error occurred while trying to follow all" msgstr "" -#: src/state/queries/video/video.ts:194 +#: src/state/queries/video/video.ts:199 msgid "An error occurred while uploading the video." msgstr "" @@ -1096,8 +1096,8 @@ msgstr "" #: src/components/Prompt.tsx:124 #: src/components/TagMenu/index.tsx:282 #: src/screens/Deactivated.tsx:161 -#: src/view/com/composer/Composer.tsx:590 -#: src/view/com/composer/Composer.tsx:605 +#: src/view/com/composer/Composer.tsx:591 +#: src/view/com/composer/Composer.tsx:606 #: src/view/com/modals/ChangeEmail.tsx:213 #: src/view/com/modals/ChangeEmail.tsx:215 #: src/view/com/modals/ChangeHandle.tsx:148 @@ -1457,7 +1457,7 @@ msgstr "" msgid "Closes password update alert" msgstr "" -#: src/view/com/composer/Composer.tsx:602 +#: src/view/com/composer/Composer.tsx:603 msgid "Closes post composer and discards post draft" msgstr "" @@ -1496,7 +1496,7 @@ msgstr "" msgid "Complete the challenge" msgstr "" -#: src/view/com/composer/Composer.tsx:710 +#: src/view/com/composer/Composer.tsx:711 msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length" msgstr "" @@ -2005,7 +2005,7 @@ msgstr "" msgid "Dialog: adjust who can interact with this post" msgstr "" -#: src/view/com/composer/Composer.tsx:351 +#: src/view/com/composer/Composer.tsx:352 msgid "Did you want to say anything?" msgstr "" @@ -3086,7 +3086,7 @@ msgstr "" msgid "Getting started" msgstr "" -#: src/components/MediaPreview.tsx:119 +#: src/components/MediaPreview.tsx:120 msgid "GIF" msgstr "" @@ -4046,8 +4046,12 @@ msgstr "" msgid "Music" msgstr "" -#: src/components/TagMenu/index.tsx:263 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:345 +msgctxt "video" +msgid "Mute" +msgstr "" + +#: src/components/TagMenu/index.tsx:263 msgid "Mute" msgstr "" @@ -4579,7 +4583,7 @@ msgstr "" #~ msgid "Onboarding tour step {0}: {1}" #~ msgstr "" -#: src/view/com/composer/Composer.tsx:667 +#: src/view/com/composer/Composer.tsx:668 msgid "One or more images is missing alt text." msgstr "" @@ -5053,7 +5057,7 @@ msgstr "" msgid "Please Verify Your Email" msgstr "" -#: src/view/com/composer/Composer.tsx:355 +#: src/view/com/composer/Composer.tsx:356 msgid "Please wait for your link card to finish loading" msgstr "" @@ -5066,8 +5070,8 @@ msgstr "" msgid "Porn" msgstr "" -#: src/view/com/composer/Composer.tsx:642 -#: src/view/com/composer/Composer.tsx:649 +#: src/view/com/composer/Composer.tsx:643 +#: src/view/com/composer/Composer.tsx:650 msgctxt "action" msgid "Post" msgstr "" @@ -5246,11 +5250,11 @@ msgstr "" msgid "Public, shareable lists which can drive feeds." msgstr "" -#: src/view/com/composer/Composer.tsx:627 +#: src/view/com/composer/Composer.tsx:628 msgid "Publish post" msgstr "" -#: src/view/com/composer/Composer.tsx:627 +#: src/view/com/composer/Composer.tsx:628 msgid "Publish reply" msgstr "" @@ -5555,7 +5559,7 @@ msgstr "" #~ msgid "Replies to this thread are disabled" #~ msgstr "" -#: src/view/com/composer/Composer.tsx:640 +#: src/view/com/composer/Composer.tsx:641 msgctxt "action" msgid "Reply" msgstr "" @@ -7034,7 +7038,7 @@ msgstr "" msgid "The Privacy Policy has been moved to <0/>" msgstr "" -#: src/state/queries/video/video.ts:222 +#: src/state/queries/video/video.ts:227 msgid "The selected video is larger than 100MB." msgstr "" @@ -7568,8 +7572,12 @@ msgstr "" msgid "Unlike this feed" msgstr "" -#: src/components/TagMenu/index.tsx:263 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:344 +msgctxt "video" +msgid "Unmute" +msgstr "" + +#: src/components/TagMenu/index.tsx:263 #: src/view/screens/ProfileList.tsx:689 msgid "Unmute" msgstr "" @@ -7642,7 +7650,7 @@ msgstr "" msgid "Unsubscribed from list" msgstr "" -#: src/state/queries/video/video.ts:240 +#: src/state/queries/video/video.ts:245 msgid "Unsupported video type: {mimeType}" msgstr "" @@ -8085,7 +8093,7 @@ msgstr "" msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" -#: src/view/com/composer/Composer.tsx:417 +#: src/view/com/composer/Composer.tsx:418 msgid "We're sorry! The post you are replying to has been deleted." msgstr "" @@ -8124,7 +8132,7 @@ msgstr "" #: src/view/com/auth/SplashScreen.tsx:40 #: src/view/com/auth/SplashScreen.web.tsx:86 -#: src/view/com/composer/Composer.tsx:512 +#: src/view/com/composer/Composer.tsx:513 msgid "What's up?" msgstr "" @@ -8199,11 +8207,11 @@ msgstr "" msgid "Write a message" msgstr "" -#: src/view/com/composer/Composer.tsx:708 +#: src/view/com/composer/Composer.tsx:709 msgid "Write post" msgstr "" -#: src/view/com/composer/Composer.tsx:511 +#: src/view/com/composer/Composer.tsx:512 #: src/view/com/post-thread/PostThreadComposePrompt.tsx:42 msgid "Write your reply" msgstr "" @@ -8551,6 +8559,10 @@ msgstr "" msgid "Your account has been deleted" msgstr "" +#: src/state/queries/video/video.ts:185 +msgid "Your account is not yet old enough to upload videos. Please try again later." +msgstr "" + #: src/view/screens/Settings/ExportCarDialog.tsx:65 msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately." msgstr "" @@ -8614,7 +8626,7 @@ msgstr "" msgid "Your password has been changed successfully!" msgstr "" -#: src/view/com/composer/Composer.tsx:463 +#: src/view/com/composer/Composer.tsx:464 msgid "Your post has been published" msgstr "" @@ -8630,7 +8642,7 @@ msgstr "" msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in." msgstr "" -#: src/view/com/composer/Composer.tsx:462 +#: src/view/com/composer/Composer.tsx:463 msgid "Your reply has been published" msgstr "" diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po index 90d1775a..7e4d621a 100644 --- a/src/locale/locales/pt-BR/messages.po +++ b/src/locale/locales/pt-BR/messages.po @@ -644,7 +644,7 @@ msgstr "Ocorreu um erro" msgid "An error occurred" msgstr "Ocorreu um erro" -#: src/state/queries/video/video.ts:227 +#: src/state/queries/video/video.ts:232 msgid "An error occurred while compressing the video." msgstr "Ocorreu um erro ao compactar o vídeo." @@ -682,7 +682,7 @@ msgstr "Ocorreu um erro ao selecionar o vídeo" msgid "An error occurred while trying to follow all" msgstr "Ocorreu um erro ao tentar seguir todos" -#: src/state/queries/video/video.ts:194 +#: src/state/queries/video/video.ts:199 msgid "An error occurred while uploading the video." msgstr "Ocorreu um erro ao enviar o vídeo." @@ -1096,8 +1096,8 @@ msgstr "Só pode conter letras, números, espaços, riscas e subtraços. Deve te #: src/components/Prompt.tsx:124 #: src/components/TagMenu/index.tsx:282 #: src/screens/Deactivated.tsx:161 -#: src/view/com/composer/Composer.tsx:590 -#: src/view/com/composer/Composer.tsx:605 +#: src/view/com/composer/Composer.tsx:591 +#: src/view/com/composer/Composer.tsx:606 #: src/view/com/modals/ChangeEmail.tsx:213 #: src/view/com/modals/ChangeEmail.tsx:215 #: src/view/com/modals/ChangeHandle.tsx:148 @@ -1457,7 +1457,7 @@ msgstr "Fecha barra de navegação inferior" msgid "Closes password update alert" msgstr "Fecha alerta de troca de senha" -#: src/view/com/composer/Composer.tsx:602 +#: src/view/com/composer/Composer.tsx:603 msgid "Closes post composer and discards post draft" msgstr "Fecha o editor de post e descarta o rascunho" @@ -1496,7 +1496,7 @@ msgstr "Completar e começar a usar sua conta" msgid "Complete the challenge" msgstr "Complete o captcha" -#: src/view/com/composer/Composer.tsx:710 +#: src/view/com/composer/Composer.tsx:711 msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length" msgstr "Escreva posts de até {MAX_GRAPHEME_LENGTH} caracteres" @@ -2005,7 +2005,7 @@ msgstr "Desanexar postagem de citação?" msgid "Dialog: adjust who can interact with this post" msgstr "Diálogo: ajuste quem pode interagir com esta postagem" -#: src/view/com/composer/Composer.tsx:351 +#: src/view/com/composer/Composer.tsx:352 msgid "Did you want to say anything?" msgstr "Você gostaria de dizer alguma coisa?" @@ -3086,7 +3086,7 @@ msgstr "Vamos começar" msgid "Getting started" msgstr "Começando" -#: src/components/MediaPreview.tsx:119 +#: src/components/MediaPreview.tsx:120 msgid "GIF" msgstr "" @@ -4046,8 +4046,12 @@ msgstr "Filmes" msgid "Music" msgstr "Música" -#: src/components/TagMenu/index.tsx:263 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:345 +msgctxt "video" +msgid "Mute" +msgstr "" + +#: src/components/TagMenu/index.tsx:263 msgid "Mute" msgstr "Silenciar" @@ -4579,7 +4583,7 @@ msgstr "Resetar tutoriais" #~ msgid "Onboarding tour step {0}: {1}" #~ msgstr "Etapa do tour de integração {0}: {1}" -#: src/view/com/composer/Composer.tsx:667 +#: src/view/com/composer/Composer.tsx:668 msgid "One or more images is missing alt text." msgstr "Uma ou mais imagens estão sem texto alternativo." @@ -5053,7 +5057,7 @@ msgstr "Por favor entre como @{0}" msgid "Please Verify Your Email" msgstr "Por favor, verifique seu e-mail" -#: src/view/com/composer/Composer.tsx:355 +#: src/view/com/composer/Composer.tsx:356 msgid "Please wait for your link card to finish loading" msgstr "Aguarde até que a prévia de link termine de carregar" @@ -5066,8 +5070,8 @@ msgstr "Política" msgid "Porn" msgstr "Pornografia" -#: src/view/com/composer/Composer.tsx:642 -#: src/view/com/composer/Composer.tsx:649 +#: src/view/com/composer/Composer.tsx:643 +#: src/view/com/composer/Composer.tsx:650 msgctxt "action" msgid "Post" msgstr "Postar" @@ -5246,11 +5250,11 @@ msgstr "Listas públicas e compartilháveis para silenciar ou bloquear usuários msgid "Public, shareable lists which can drive feeds." msgstr "Listas públicas e compartilháveis que geram feeds." -#: src/view/com/composer/Composer.tsx:627 +#: src/view/com/composer/Composer.tsx:628 msgid "Publish post" msgstr "Publicar post" -#: src/view/com/composer/Composer.tsx:627 +#: src/view/com/composer/Composer.tsx:628 msgid "Publish reply" msgstr "Publicar resposta" @@ -5555,7 +5559,7 @@ msgstr "Respostas para esta postagem estão desativadas." #~ msgid "Replies to this thread are disabled" #~ msgstr "Respostas para esta thread estão desativadas" -#: src/view/com/composer/Composer.tsx:640 +#: src/view/com/composer/Composer.tsx:641 msgctxt "action" msgid "Reply" msgstr "Responder" @@ -7034,7 +7038,7 @@ msgstr "O post pode ter sido excluído." msgid "The Privacy Policy has been moved to <0/>" msgstr "A Política de Privacidade foi movida para <0/>" -#: src/state/queries/video/video.ts:222 +#: src/state/queries/video/video.ts:227 msgid "The selected video is larger than 100MB." msgstr "Vídeo selecionado é maior que 100 MB." @@ -7568,8 +7572,12 @@ msgstr "Deixar de seguir" msgid "Unlike this feed" msgstr "Descurtir este feed" -#: src/components/TagMenu/index.tsx:263 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:344 +msgctxt "video" +msgid "Unmute" +msgstr "" + +#: src/components/TagMenu/index.tsx:263 #: src/view/screens/ProfileList.tsx:689 msgid "Unmute" msgstr "Dessilenciar" @@ -7642,7 +7650,7 @@ msgstr "Desinscrever-se deste rotulador" msgid "Unsubscribed from list" msgstr "Cancelada inscrição na lista" -#: src/state/queries/video/video.ts:240 +#: src/state/queries/video/video.ts:245 msgid "Unsupported video type: {mimeType}" msgstr "Tipo de vídeo não suportado: {mimeType}" @@ -8085,7 +8093,7 @@ msgstr "Não foi possível carregar sua lista de palavras silenciadas. Por favor msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "Lamentamos, mas sua busca não pôde ser concluída. Por favor, tente novamente em alguns minutos." -#: src/view/com/composer/Composer.tsx:417 +#: src/view/com/composer/Composer.tsx:418 msgid "We're sorry! The post you are replying to has been deleted." msgstr "Sentimos muito! A postagem que você está respondendo foi excluída." @@ -8124,7 +8132,7 @@ msgstr "Como você quer chamar seu pacote inicial?" #: src/view/com/auth/SplashScreen.tsx:40 #: src/view/com/auth/SplashScreen.web.tsx:86 -#: src/view/com/composer/Composer.tsx:512 +#: src/view/com/composer/Composer.tsx:513 msgid "What's up?" msgstr "E aí?" @@ -8199,11 +8207,11 @@ msgstr "Largo" msgid "Write a message" msgstr "Escreva uma mensagem" -#: src/view/com/composer/Composer.tsx:708 +#: src/view/com/composer/Composer.tsx:709 msgid "Write post" msgstr "Escrever post" -#: src/view/com/composer/Composer.tsx:511 +#: src/view/com/composer/Composer.tsx:512 #: src/view/com/post-thread/PostThreadComposePrompt.tsx:42 msgid "Write your reply" msgstr "Escreva sua resposta" @@ -8551,6 +8559,10 @@ msgstr "Sua conta" msgid "Your account has been deleted" msgstr "Sua conta foi excluída" +#: src/state/queries/video/video.ts:185 +msgid "Your account is not yet old enough to upload videos. Please try again later." +msgstr "Sua conta ainda não tem idade suficiente para enviar vídeos. Por favor, tente novamente mais tarde." + #: src/view/screens/Settings/ExportCarDialog.tsx:65 msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately." msgstr "O repositório da sua conta, contendo todos os seus dados públicos, pode ser baixado como um arquivo \"CAR\". Este arquivo não inclui imagens ou dados privados, estes devem ser exportados separadamente." @@ -8614,7 +8626,7 @@ msgstr "Suas palavras silenciadas" msgid "Your password has been changed successfully!" msgstr "Sua senha foi alterada com sucesso!" -#: src/view/com/composer/Composer.tsx:463 +#: src/view/com/composer/Composer.tsx:464 msgid "Your post has been published" msgstr "Seu post foi publicado" @@ -8630,7 +8642,7 @@ msgstr "Seu perfil" msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in." msgstr "Seu perfil, postagens, feeds e listas não serão mais visíveis para outros usuários do Bluesky. Você pode reativar sua conta a qualquer momento fazendo login." -#: src/view/com/composer/Composer.tsx:462 +#: src/view/com/composer/Composer.tsx:463 msgid "Your reply has been published" msgstr "Sua resposta foi publicada" diff --git a/src/state/queries/video/video.ts b/src/state/queries/video/video.ts index 95fc0b68..b0485cca 100644 --- a/src/state/queries/video/video.ts +++ b/src/state/queries/video/video.ts @@ -180,6 +180,11 @@ export function useUploadVideo({ msg`You've reached your daily limit for video uploads (too many videos)`, ) break + case 'Account is not old enough to upload videos': + message = _( + msg`Your account is not yet old enough to upload videos. Please try again later.`, + ) + break default: message = e.message break From 436e30fdedb4fd7a1ad462e5c37f4d6eefe8b4ae Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Tue, 10 Sep 2024 01:01:40 +0100 Subject: [PATCH 05/11] [Video] use correct max size (#5245) Co-authored-by: Hailey --- src/lib/media/video/compress.web.ts | 4 ++-- src/lib/media/video/errors.ts | 2 +- src/locale/locales/ca/messages.po | 8 ++++---- src/locale/locales/de/messages.po | 4 ++-- src/locale/locales/en/messages.po | 4 ++-- src/locale/locales/es/messages.po | 4 ++-- src/locale/locales/fi/messages.po | 4 ++-- src/locale/locales/fr/messages.po | 4 ++-- src/locale/locales/ga/messages.po | 4 ++-- src/locale/locales/hi/messages.po | 4 ++-- src/locale/locales/id/messages.po | 6 +++--- src/locale/locales/it/messages.po | 8 ++++---- src/locale/locales/ja/messages.po | 4 ++-- src/locale/locales/ko/messages.po | 4 ++-- src/locale/locales/pt-BR/messages.po | 4 ++-- src/locale/locales/ru/messages.po | 2 +- src/locale/locales/tr/messages.po | 4 ++-- src/locale/locales/uk/messages.po | 4 ++-- src/locale/locales/zh-CN/messages.po | 4 ++-- src/locale/locales/zh-TW/messages.po | 4 ++-- src/state/queries/video/video.ts | 2 +- 21 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/lib/media/video/compress.web.ts b/src/lib/media/video/compress.web.ts index 34d69267..7f057d2e 100644 --- a/src/lib/media/video/compress.web.ts +++ b/src/lib/media/video/compress.web.ts @@ -3,9 +3,9 @@ import {ImagePickerAsset} from 'expo-image-picker' import {VideoTooLargeError} from 'lib/media/video/errors' import {CompressedVideo} from './types' -const MAX_VIDEO_SIZE = 1024 * 1024 * 100 // 100MB +const MAX_VIDEO_SIZE = 1024 * 1024 * 50 // 50mb -// doesn't actually compress, but throws if >100MB +// doesn't actually compress, converts to ArrayBuffer export async function compressVideo( asset: ImagePickerAsset, _opts?: { diff --git a/src/lib/media/video/errors.ts b/src/lib/media/video/errors.ts index 1c55a9ee..5d91758c 100644 --- a/src/lib/media/video/errors.ts +++ b/src/lib/media/video/errors.ts @@ -1,6 +1,6 @@ export class VideoTooLargeError extends Error { constructor() { - super('Videos cannot be larger than 100MB') + super('Videos cannot be larger than 50mb') this.name = 'VideoTooLargeError' } } diff --git a/src/locale/locales/ca/messages.po b/src/locale/locales/ca/messages.po index 6d4620b0..645d87f3 100644 --- a/src/locale/locales/ca/messages.po +++ b/src/locale/locales/ca/messages.po @@ -7664,8 +7664,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "La política de privacitat ha estat traslladada a <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "El vídeo triat és més gran de 100MB." +msgid "The selected video is larger than 50MB." +msgstr "El vídeo triat és més gran de 50MB." #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." @@ -8605,8 +8605,8 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" -#~ msgstr "Els vídeos no poder ser de més de 100MB" +#~ msgid "Videos cannot be larger than 50MB" +#~ msgstr "Els vídeos no poder ser de més de 50MB" #: src/screens/Profile/Header/Shell.tsx:113 msgid "View {0}'s avatar" diff --git a/src/locale/locales/de/messages.po b/src/locale/locales/de/messages.po index 8f0e65ae..16db6312 100644 --- a/src/locale/locales/de/messages.po +++ b/src/locale/locales/de/messages.po @@ -6965,7 +6965,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Die Datenschutzerklärung wurde nach <0/> verschoben" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7871,7 +7871,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 77d565ff..1c0283f5 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -7039,7 +7039,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "" #: src/state/queries/video/video.ts:227 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7917,7 +7917,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po index 62ef7e4f..c15a8aa6 100644 --- a/src/locale/locales/es/messages.po +++ b/src/locale/locales/es/messages.po @@ -6893,7 +6893,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "La Política de privacidad se ha trasladado a <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7763,7 +7763,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/fi/messages.po b/src/locale/locales/fi/messages.po index 7baed3d7..4b813a51 100644 --- a/src/locale/locales/fi/messages.po +++ b/src/locale/locales/fi/messages.po @@ -6989,7 +6989,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Tietosuojakäytäntö on siirretty kohtaan <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7863,7 +7863,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po index 67d16590..bfe6cca7 100644 --- a/src/locale/locales/fr/messages.po +++ b/src/locale/locales/fr/messages.po @@ -6486,7 +6486,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Notre politique de confidentialité a été déplacée vers <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7302,7 +7302,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "Les vidéos ne peuvent pas dépasser 100 Mo" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/ga/messages.po b/src/locale/locales/ga/messages.po index a80da430..9db62e3c 100644 --- a/src/locale/locales/ga/messages.po +++ b/src/locale/locales/ga/messages.po @@ -7035,7 +7035,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Bogadh Polasaí na Príobháideachta go dtí <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7912,7 +7912,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index b089315b..55105d5c 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -7609,7 +7609,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "गोपनीयता नीति को <0/> पर स्थानांतरित किया गया है" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -8535,7 +8535,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/id/messages.po b/src/locale/locales/id/messages.po index f8dc789c..7db727a9 100644 --- a/src/locale/locales/id/messages.po +++ b/src/locale/locales/id/messages.po @@ -7040,7 +7040,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Kebijakan Privasi telah dipindahkan ke <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7914,8 +7914,8 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" -#~ msgstr "Video tidak boleh lebih besar dari 100MB" +#~ msgid "Videos cannot be larger than 50MB" +#~ msgstr "Video tidak boleh lebih besar dari 50MB" #: src/screens/Profile/Header/Shell.tsx:113 msgid "View {0}'s avatar" diff --git a/src/locale/locales/it/messages.po b/src/locale/locales/it/messages.po index 6c1d99f3..45a15644 100644 --- a/src/locale/locales/it/messages.po +++ b/src/locale/locales/it/messages.po @@ -7321,8 +7321,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "La politica sulla privacy è stata spostata a <0/><0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "Questo video è più grande di 100MB." +msgid "The selected video is larger than 50MB." +msgstr "Questo video è più grande di 50MB." #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." @@ -8222,8 +8222,8 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" -#~ msgstr "I video non possono essere più grandi di 100MB" +#~ msgid "Videos cannot be larger than 50MB" +#~ msgstr "I video non possono essere più grandi di 50MB" #: src/screens/Profile/Header/Shell.tsx:113 msgid "View {0}'s avatar" diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po index d5e3e8b6..61dc1394 100644 --- a/src/locale/locales/ja/messages.po +++ b/src/locale/locales/ja/messages.po @@ -6272,8 +6272,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "プライバシーポリシーは<0/>に移動しました" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "選択したビデオのサイズが100MBを超えています。" +msgid "The selected video is larger than 50MB." +msgstr "選択したビデオのサイズが50MBを超えています。" #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." diff --git a/src/locale/locales/ko/messages.po b/src/locale/locales/ko/messages.po index 89ecf5da..dc58cfac 100644 --- a/src/locale/locales/ko/messages.po +++ b/src/locale/locales/ko/messages.po @@ -6272,8 +6272,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "개인정보 처리방침을 <0/>(으)로 이동했습니다" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "선택한 동영상이 100MB를 초과합니다." +msgid "The selected video is larger than 50MB." +msgstr "선택한 동영상이 50MB를 초과합니다." #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po index 7e4d621a..c78ab40f 100644 --- a/src/locale/locales/pt-BR/messages.po +++ b/src/locale/locales/pt-BR/messages.po @@ -7039,7 +7039,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "A Política de Privacidade foi movida para <0/>" #: src/state/queries/video/video.ts:227 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "Vídeo selecionado é maior que 100 MB." #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7917,7 +7917,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "Vídeos não podem ter mais de 100 MB" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/ru/messages.po b/src/locale/locales/ru/messages.po index e480b6ee..ac52f83c 100644 --- a/src/locale/locales/ru/messages.po +++ b/src/locale/locales/ru/messages.po @@ -6237,7 +6237,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Политика конфиденциальности была перемещена в <0/>" #: src/state/queries/video/video.ts:188 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "Размер выбранного видео превышает 100МБ." #: src/screens/StarterPack/StarterPackScreen.tsx:713 diff --git a/src/locale/locales/tr/messages.po b/src/locale/locales/tr/messages.po index cc1799e4..37f27c58 100644 --- a/src/locale/locales/tr/messages.po +++ b/src/locale/locales/tr/messages.po @@ -7498,7 +7498,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Gizlilik Politikası <0/> konumuna taşındı" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -8412,7 +8412,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/uk/messages.po b/src/locale/locales/uk/messages.po index 86c968bf..f35d15ee 100644 --- a/src/locale/locales/uk/messages.po +++ b/src/locale/locales/uk/messages.po @@ -7040,7 +7040,7 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "Політика конфіденційності була переміщена до <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." +msgid "The selected video is larger than 50MB." msgstr "" #: src/screens/StarterPack/StarterPackScreen.tsx:713 @@ -7914,7 +7914,7 @@ msgid "Video: {0}" msgstr "" #: src/view/com/composer/videos/state.ts:27 -#~ msgid "Videos cannot be larger than 100MB" +#~ msgid "Videos cannot be larger than 50MB" #~ msgstr "" #: src/screens/Profile/Header/Shell.tsx:113 diff --git a/src/locale/locales/zh-CN/messages.po b/src/locale/locales/zh-CN/messages.po index 7216cdda..ae4619c3 100644 --- a/src/locale/locales/zh-CN/messages.po +++ b/src/locale/locales/zh-CN/messages.po @@ -6272,8 +6272,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "隐私政策已迁移至 <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "选择的视频大小超过 100MB。" +msgid "The selected video is larger than 50MB." +msgstr "选择的视频大小超过 50MB。" #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." diff --git a/src/locale/locales/zh-TW/messages.po b/src/locale/locales/zh-TW/messages.po index 4c3920bb..aafbfc9c 100644 --- a/src/locale/locales/zh-TW/messages.po +++ b/src/locale/locales/zh-TW/messages.po @@ -6272,8 +6272,8 @@ msgid "The Privacy Policy has been moved to <0/>" msgstr "隱私政策已移動到 <0/>" #: src/state/queries/video/video.ts:222 -msgid "The selected video is larger than 100MB." -msgstr "選擇的影片檔案大小超過 100MB。" +msgid "The selected video is larger than 50MB." +msgstr "選擇的影片檔案大小超過 50MB。" #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." diff --git a/src/state/queries/video/video.ts b/src/state/queries/video/video.ts index b0485cca..32d02a63 100644 --- a/src/state/queries/video/video.ts +++ b/src/state/queries/video/video.ts @@ -224,7 +224,7 @@ export function useUploadVideo({ } else if (e instanceof VideoTooLargeError) { dispatch({ type: 'SetError', - error: _(msg`The selected video is larger than 100MB.`), + error: _(msg`The selected video is larger than 50MB.`), }) } else { dispatch({ From 0f6be244a6bd4bbeb86b9914e8a5fe58a14b6809 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Tue, 10 Sep 2024 02:02:53 +0100 Subject: [PATCH 06/11] max 1 subtitle file (#5244) --- src/view/com/composer/videos/SubtitleDialog.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/view/com/composer/videos/SubtitleDialog.tsx b/src/view/com/composer/videos/SubtitleDialog.tsx index 00908745..10c2d756 100644 --- a/src/view/com/composer/videos/SubtitleDialog.tsx +++ b/src/view/com/composer/videos/SubtitleDialog.tsx @@ -20,6 +20,8 @@ import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons import {Text} from '#/components/Typography' import {SubtitleFilePicker} from './SubtitleFilePicker' +const MAX_NUM_CAPTIONS = 1 + interface Props { defaultAltText: string captions: {lang: string; file: File}[] @@ -134,7 +136,9 @@ function SubtitleDialogInner({ = 4} + disabled={ + subtitleMissingLanguage || captions.length >= MAX_NUM_CAPTIONS + } /> {captions.map((subtitle, i) => ( From 66239ba11dd38056d1215327f160a0bb61d49320 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Tue, 10 Sep 2024 06:37:57 +0100 Subject: [PATCH 07/11] [Video] Fix fullscreen on Chrome (#5246) --- src/components/hooks/useFullscreen.ts | 53 +++++++++++++++++++ .../com/util/post-embeds/VideoEmbed.web.tsx | 13 ++++- .../VideoEmbedInner/VideoWebControls.tsx | 31 +---------- 3 files changed, 67 insertions(+), 30 deletions(-) create mode 100644 src/components/hooks/useFullscreen.ts diff --git a/src/components/hooks/useFullscreen.ts b/src/components/hooks/useFullscreen.ts new file mode 100644 index 00000000..498f2222 --- /dev/null +++ b/src/components/hooks/useFullscreen.ts @@ -0,0 +1,53 @@ +import { + useCallback, + useEffect, + useRef, + useState, + useSyncExternalStore, +} from 'react' + +import {isFirefox, isSafari} from '#/lib/browser' +import {isWeb} from '#/platform/detection' + +function fullscreenSubscribe(onChange: () => void) { + document.addEventListener('fullscreenchange', onChange) + return () => document.removeEventListener('fullscreenchange', onChange) +} + +export function useFullscreen(ref?: React.RefObject) { + if (!isWeb) throw new Error("'useFullscreen' is a web-only hook") + const isFullscreen = useSyncExternalStore(fullscreenSubscribe, () => + Boolean(document.fullscreenElement), + ) + const scrollYRef = useRef(null) + const [prevIsFullscreen, setPrevIsFullscreen] = useState(isFullscreen) + + const toggleFullscreen = useCallback(() => { + if (isFullscreen) { + document.exitFullscreen() + } else { + if (!ref) throw new Error('No ref provided') + if (!ref.current) return + scrollYRef.current = window.scrollY + ref.current.requestFullscreen() + } + }, [isFullscreen, ref]) + + useEffect(() => { + if (prevIsFullscreen === isFullscreen) return + setPrevIsFullscreen(isFullscreen) + + // Chrome has an issue where it doesn't scroll back to the top after exiting fullscreen + // Let's play it safe and do it if not FF or Safari, since anything else will probably be chromium + if (prevIsFullscreen && !isFirefox && !isSafari) { + setTimeout(() => { + if (scrollYRef.current !== null) { + window.scrollTo(0, scrollYRef.current) + scrollYRef.current = null + } + }, 100) + } + }, [isFullscreen, prevIsFullscreen]) + + return [isFullscreen, toggleFullscreen] as const +} diff --git a/src/view/com/util/post-embeds/VideoEmbed.web.tsx b/src/view/com/util/post-embeds/VideoEmbed.web.tsx index a25f9464..e96b7592 100644 --- a/src/view/com/util/post-embeds/VideoEmbed.web.tsx +++ b/src/view/com/util/post-embeds/VideoEmbed.web.tsx @@ -12,6 +12,7 @@ import { VideoNotFoundError, } from '#/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb' import {atoms as a} from '#/alf' +import {useFullscreen} from '#/components/hooks/useFullscreen' import {ErrorBoundary} from '../ErrorBoundary' import {useActiveVideoWeb} from './ActiveVideoWebContext' import * as VideoFallback from './VideoEmbedInner/VideoFallback' @@ -106,6 +107,8 @@ function ViewportObserver({ }) { const ref = useRef(null) const [nearScreen, setNearScreen] = useState(false) + const [isFullscreen] = useFullscreen() + const [nearScreenOrFullscreen, setNearScreenOrFullscreen] = useState(false) // Send position when scrolling. This is done with an IntersectionObserver // observing a div of 100vh height @@ -135,9 +138,17 @@ function ViewportObserver({ } }, [isAnyViewActive, sendPosition]) + // disguesting effect - it should be `nearScreen` except when fullscreen + // when it should be whatever it was before fullscreen changed + useEffect(() => { + if (!isFullscreen) { + setNearScreenOrFullscreen(nearScreen) + } + }, [isFullscreen, nearScreen]) + return ( - {nearScreen && children} + {nearScreenOrFullscreen && children}
) { canPlay, } } - -function fullscreenSubscribe(onChange: () => void) { - document.addEventListener('fullscreenchange', onChange) - return () => document.removeEventListener('fullscreenchange', onChange) -} - -function useFullscreen(ref: React.RefObject) { - const isFullscreen = useSyncExternalStore(fullscreenSubscribe, () => - Boolean(document.fullscreenElement), - ) - - const toggleFullscreen = useCallback(() => { - if (isFullscreen) { - document.exitFullscreen() - } else { - if (!ref.current) return - ref.current.requestFullscreen() - } - }, [isFullscreen, ref]) - - return [isFullscreen, toggleFullscreen] as const -} From db9cf92d87bb8ba1648d34a4d414cd5b3a15553c Mon Sep 17 00:00:00 2001 From: Frudrax Cheng Date: Tue, 10 Sep 2024 18:21:28 +0800 Subject: [PATCH 08/11] Adjust the translated strings to the correct max size. (#5248) * Update pt-BR localization * Update ru localization --- src/locale/locales/pt-BR/messages.po | 2 +- src/locale/locales/ru/messages.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po index c78ab40f..b7e7d7fd 100644 --- a/src/locale/locales/pt-BR/messages.po +++ b/src/locale/locales/pt-BR/messages.po @@ -7040,7 +7040,7 @@ msgstr "A Política de Privacidade foi movida para <0/>" #: src/state/queries/video/video.ts:227 msgid "The selected video is larger than 50MB." -msgstr "Vídeo selecionado é maior que 100 MB." +msgstr "Vídeo selecionado é maior que 50 MB." #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." diff --git a/src/locale/locales/ru/messages.po b/src/locale/locales/ru/messages.po index ac52f83c..7c4f71ba 100644 --- a/src/locale/locales/ru/messages.po +++ b/src/locale/locales/ru/messages.po @@ -6238,7 +6238,7 @@ msgstr "Политика конфиденциальности была пере #: src/state/queries/video/video.ts:188 msgid "The selected video is larger than 50MB." -msgstr "Размер выбранного видео превышает 100МБ." +msgstr "Размер выбранного видео превышает 50МБ." #: src/screens/StarterPack/StarterPackScreen.tsx:713 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." From 6bc5a05f4bdfd3bf9dea400b3a6b5d9ac356457a Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Tue, 10 Sep 2024 16:10:13 +0100 Subject: [PATCH 09/11] [Video] Much simpler fix to fullscreen bug (#5251) * much simpler fix * allow old behaviour on firefox * rm logs --- .../com/util/post-embeds/VideoEmbed.web.tsx | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/view/com/util/post-embeds/VideoEmbed.web.tsx b/src/view/com/util/post-embeds/VideoEmbed.web.tsx index e96b7592..e88b2ff4 100644 --- a/src/view/com/util/post-embeds/VideoEmbed.web.tsx +++ b/src/view/com/util/post-embeds/VideoEmbed.web.tsx @@ -4,6 +4,7 @@ import {AppBskyEmbedVideo} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {isFirefox} from '#/lib/browser' import {clamp} from '#/lib/numbers' import {useGate} from '#/lib/statsig/statsig' import { @@ -23,9 +24,11 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { const {active, setActive, sendPosition, currentActiveView} = useActiveVideoWeb() const [onScreen, setOnScreen] = useState(false) + const [isFullscreen] = useFullscreen() useEffect(() => { if (!ref.current) return + if (isFullscreen && !isFirefox) return const observer = new IntersectionObserver( entries => { const entry = entries[0] @@ -39,7 +42,7 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { ) observer.observe(ref.current) return () => observer.disconnect() - }, [sendPosition]) + }, [sendPosition, isFullscreen]) const [key, setKey] = useState(0) const renderError = useCallback( @@ -108,12 +111,12 @@ function ViewportObserver({ const ref = useRef(null) const [nearScreen, setNearScreen] = useState(false) const [isFullscreen] = useFullscreen() - const [nearScreenOrFullscreen, setNearScreenOrFullscreen] = useState(false) // Send position when scrolling. This is done with an IntersectionObserver // observing a div of 100vh height useEffect(() => { if (!ref.current) return + if (isFullscreen && !isFirefox) return const observer = new IntersectionObserver( entries => { const entry = entries[0] @@ -127,7 +130,7 @@ function ViewportObserver({ ) observer.observe(ref.current) return () => observer.disconnect() - }, [sendPosition]) + }, [sendPosition, isFullscreen]) // In case scrolling hasn't started yet, send up the position useEffect(() => { @@ -138,17 +141,9 @@ function ViewportObserver({ } }, [isAnyViewActive, sendPosition]) - // disguesting effect - it should be `nearScreen` except when fullscreen - // when it should be whatever it was before fullscreen changed - useEffect(() => { - if (!isFullscreen) { - setNearScreenOrFullscreen(nearScreen) - } - }, [isFullscreen, nearScreen]) - return ( - {nearScreenOrFullscreen && children} + {nearScreen && children}
Date: Tue, 10 Sep 2024 16:14:28 +0100 Subject: [PATCH 10/11] [Video] Allow drag-and-drop & pasting video (#5252) * allow DnD/pasting video * rm await --- src/view/com/composer/Composer.tsx | 8 +++++-- .../com/composer/text-input/TextInput.web.tsx | 24 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index a637b599..4c7892bc 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -303,9 +303,13 @@ export const ComposePost = observer(function ComposePost({ const onPhotoPasted = useCallback( async (uri: string) => { track('Composer:PastedPhotos') - await gallery.paste(uri) + if (uri.startsWith('data:video/')) { + selectVideo({uri, type: 'video', height: 0, width: 0}) + } else { + await gallery.paste(uri) + } }, - [gallery, track], + [gallery, track, selectVideo], ) const isAltTextRequiredAndMissing = useMemo(() => { diff --git a/src/view/com/composer/text-input/TextInput.web.tsx b/src/view/com/composer/text-input/TextInput.web.tsx index c477ada0..3db25746 100644 --- a/src/view/com/composer/text-input/TextInput.web.tsx +++ b/src/view/com/composer/text-input/TextInput.web.tsx @@ -93,9 +93,9 @@ export const TextInput = React.forwardRef(function TextInputImpl( } }, [onPressPublish]) React.useEffect(() => { - textInputWebEmitter.addListener('photo-pasted', onPhotoPasted) + textInputWebEmitter.addListener('media-pasted', onPhotoPasted) return () => { - textInputWebEmitter.removeListener('photo-pasted', onPhotoPasted) + textInputWebEmitter.removeListener('media-pasted', onPhotoPasted) } }, [onPhotoPasted]) @@ -105,8 +105,8 @@ export const TextInput = React.forwardRef(function TextInputImpl( if (transfer) { const items = transfer.items - getImageFromUri(items, (uri: string) => { - textInputWebEmitter.emit('photo-pasted', uri) + getImageOrVideoFromUri(items, (uri: string) => { + textInputWebEmitter.emit('media-pasted', uri) }) } @@ -160,8 +160,8 @@ export const TextInput = React.forwardRef(function TextInputImpl( view.pasteText(text) preventDefault = true } - getImageFromUri(clipboardData.items, (uri: string) => { - textInputWebEmitter.emit('photo-pasted', uri) + getImageOrVideoFromUri(clipboardData.items, (uri: string) => { + textInputWebEmitter.emit('media-pasted', uri) }) if (preventDefault) { // Return `true` to prevent ProseMirror's default paste behavior. @@ -346,7 +346,7 @@ const styles = StyleSheet.create({ }, }) -function getImageFromUri( +function getImageOrVideoFromUri( items: DataTransferItemList, callback: (uri: string) => void, ) { @@ -363,11 +363,21 @@ function getImageFromUri( if (blob.type.startsWith('image/')) { blobToDataUri(blob).then(callback, err => console.error(err)) } + + if (blob.type.startsWith('video/')) { + blobToDataUri(blob).then(callback, err => console.error(err)) + } } }) } else if (type.startsWith('image/')) { const file = item.getAsFile() + if (file) { + blobToDataUri(file).then(callback, err => console.error(err)) + } + } else if (type.startsWith('video/')) { + const file = item.getAsFile() + if (file) { blobToDataUri(file).then(callback, err => console.error(err)) } From b37b64fb49bd77597ac9b4aa239edc3f05bfd0e0 Mon Sep 17 00:00:00 2001 From: Hailey Date: Tue, 10 Sep 2024 08:16:41 -0700 Subject: [PATCH 11/11] Verify Identical Domains Emit Origin (#5255) --- src/lib/statsig/gates.ts | 5 +---- src/view/com/util/post-embeds/VideoEmbed.web.tsx | 6 ------ 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index 1a234e00..df9daab4 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -1,6 +1,3 @@ export type Gate = // Keep this alphabetic please. - | 'debug_show_feedcontext' - | 'suggested_feeds_interstitial' - | 'video_upload' // upload videos - | 'video_view_on_posts' // see posted videos + 'debug_show_feedcontext' | 'suggested_feeds_interstitial' | 'video_upload' // upload videos diff --git a/src/view/com/util/post-embeds/VideoEmbed.web.tsx b/src/view/com/util/post-embeds/VideoEmbed.web.tsx index e88b2ff4..3b6125c4 100644 --- a/src/view/com/util/post-embeds/VideoEmbed.web.tsx +++ b/src/view/com/util/post-embeds/VideoEmbed.web.tsx @@ -6,7 +6,6 @@ import {useLingui} from '@lingui/react' import {isFirefox} from '#/lib/browser' import {clamp} from '#/lib/numbers' -import {useGate} from '#/lib/statsig/statsig' import { HLSUnsupportedError, VideoEmbedInnerWeb, @@ -20,7 +19,6 @@ import * as VideoFallback from './VideoEmbedInner/VideoFallback' export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { const ref = useRef(null) - const gate = useGate() const {active, setActive, sendPosition, currentActiveView} = useActiveVideoWeb() const [onScreen, setOnScreen] = useState(false) @@ -52,10 +50,6 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { [key], ) - if (!gate('video_view_on_posts')) { - return null - } - let aspectRatio = 16 / 9 if (embed.aspectRatio) {