diff --git a/jest.config.js b/jest.config.js index 9cf1531d4..cefd33e7a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -17,5 +17,6 @@ module.exports = { }, globals: { APP_REVISION: "jest-test", + APP_VERSION: "0.0.1", }, }; diff --git a/src/components/mediaViewer/SeekLine.tsx b/src/components/mediaViewer/SeekLine.tsx index 8bc900301..77c7b205d 100644 --- a/src/components/mediaViewer/SeekLine.tsx +++ b/src/components/mediaViewer/SeekLine.tsx @@ -10,7 +10,7 @@ import useSignal from '../../hooks/useSignal'; import useCurrentTimeSignal from './hooks/currentTimeSignal'; import { captureEvents } from '../../util/captureEvents'; -import { IS_TOUCH_ENV } from '../../util/windowEnvironment'; +import { IS_TOUCH_ENV, IS_VIDEO_PREVIEW_SUPPORTED } from '../../util/windowEnvironment'; import buildClassName from '../../util/buildClassName'; import { formatMediaDuration } from '../../util/dateFormat'; import { clamp, round } from '../../util/math'; @@ -67,13 +67,14 @@ const SeekLine: React.FC = ({ }, [posterSize]); const setPreview = useLastCallback((time: number) => { + if (!IS_VIDEO_PREVIEW_SUPPORTED) return; time = Math.floor(time); setPreviewTime(time); renderVideoPreview(time); }); useEffect(() => { - if (isPreviewDisabled || !url || !isReady) return undefined; + if (!IS_VIDEO_PREVIEW_SUPPORTED || isPreviewDisabled || !url || !isReady) return undefined; return createVideoPreviews(url, previewCanvasRef.current!); }, [url, isReady, isPreviewDisabled]); diff --git a/src/util/cacheApi.ts b/src/util/cacheApi.ts index 678089cf2..46f0b0e61 100644 --- a/src/util/cacheApi.ts +++ b/src/util/cacheApi.ts @@ -6,6 +6,8 @@ const cacheApi = self.caches; let isSupported: boolean | undefined; export async function isCacheApiSupported() { + if (!cacheApi) return false; + isSupported = isSupported ?? await cacheApi.has('test').then(() => true).catch(() => false); return isSupported; } diff --git a/src/util/languageDetection.ts b/src/util/languageDetection.ts index af68b4f3c..9c51382ea 100644 --- a/src/util/languageDetection.ts +++ b/src/util/languageDetection.ts @@ -1,6 +1,7 @@ import type { FastTextApi } from '../lib/fasttextweb/fasttext.worker'; import type { Connector } from './PostMessageConnector'; +import { IS_TRANSLATION_SUPPORTED } from './windowEnvironment'; import { createConnector } from './PostMessageConnector'; import Deferred from './Deferred'; @@ -12,7 +13,9 @@ const DEFAULT_LABELS_COUNT = 5; let worker: Connector | undefined; const initializationDeferred = new Deferred(); -setTimeout(initWorker, WORKER_INIT_DELAY); +if (IS_TRANSLATION_SUPPORTED) { + setTimeout(initWorker, WORKER_INIT_DELAY); +} function initWorker() { if (!worker) { diff --git a/src/util/launchMediaWorkers.ts b/src/util/launchMediaWorkers.ts index 29bfb2b9b..4e425fe40 100644 --- a/src/util/launchMediaWorkers.ts +++ b/src/util/launchMediaWorkers.ts @@ -1,6 +1,7 @@ import type { MediaWorkerApi } from '../lib/mediaWorker/index.worker'; import type { Connector } from './PostMessageConnector'; +import { IS_VIDEO_PREVIEW_SUPPORTED } from './windowEnvironment'; import { createConnector } from './PostMessageConnector'; export const MAX_WORKERS = Math.min(navigator.hardwareConcurrency || 4, 4); @@ -11,6 +12,7 @@ let instances: { }[] | undefined; export default function launchMediaWorkers() { + if (!IS_VIDEO_PREVIEW_SUPPORTED) return []; if (!instances) { instances = new Array(MAX_WORKERS).fill(undefined).map( () => { diff --git a/src/util/windowEnvironment.ts b/src/util/windowEnvironment.ts index 7a5bdb889..2d91d180f 100644 --- a/src/util/windowEnvironment.ts +++ b/src/util/windowEnvironment.ts @@ -81,6 +81,7 @@ export const IS_CANVAS_FILTER_SUPPORTED = ( export const IS_REQUEST_FULLSCREEN_SUPPORTED = 'requestFullscreen' in document.createElement('div'); export const ARE_CALLS_SUPPORTED = !navigator.userAgent.includes('Firefox'); export const LAYERS_ANIMATION_NAME = IS_ANDROID ? 'slideFade' : IS_IOS ? 'slideLayers' : 'pushSlide'; +export const IS_VIDEO_PREVIEW_SUPPORTED = !IS_TEST; const TEST_VIDEO = document.createElement('video'); // `canPlayType(VIDEO_MOV_TYPE)` returns false negative at least for macOS Chrome and iOS Safari @@ -119,7 +120,7 @@ export const IS_BACKDROP_BLUR_SUPPORTED = CSS.supports('backdrop-filter: blur()' export const IS_INSTALL_PROMPT_SUPPORTED = 'onbeforeinstallprompt' in window; export const IS_MULTITAB_SUPPORTED = 'BroadcastChannel' in window; export const IS_OPEN_IN_NEW_TAB_SUPPORTED = IS_MULTITAB_SUPPORTED && !(IS_PWA && IS_MOBILE); -export const IS_TRANSLATION_SUPPORTED = Boolean(Intl.DisplayNames); +export const IS_TRANSLATION_SUPPORTED = !IS_TEST && Boolean(Intl.DisplayNames); export const MESSAGE_LIST_SENSITIVE_AREA = 750;