From 87d45714b1c04d2aa7309e353e2b97b09d4fe605 Mon Sep 17 00:00:00 2001 From: nick-delirium Date: Thu, 10 Oct 2024 13:47:46 +0200 Subject: [PATCH] port tracker-14 fixes to latest --- .../Player/ReplayPlayer/AudioPlayer.tsx | 59 +++++++------- .../app/player/web/managers/DOM/DOMManager.ts | 11 ++- tracker/tracker/src/main/app/index.ts | 80 ++++++++++++++----- tracker/tracker/src/main/app/nodes.ts | 15 ++-- .../src/main/app/observer/iframe_observer.ts | 4 +- .../tracker/src/main/app/observer/observer.ts | 51 +++++++++++- .../src/main/app/observer/top_observer.ts | 4 +- tracker/tracker/src/main/modules/img.ts | 1 + tracker/tracker/src/main/utils.ts | 30 +++++-- tracker/tracker/src/tests/nodes.unit.test.ts | 2 +- 10 files changed, 189 insertions(+), 68 deletions(-) diff --git a/frontend/app/components/Session/Player/ReplayPlayer/AudioPlayer.tsx b/frontend/app/components/Session/Player/ReplayPlayer/AudioPlayer.tsx index c433a9f54..00c738385 100644 --- a/frontend/app/components/Session/Player/ReplayPlayer/AudioPlayer.tsx +++ b/frontend/app/components/Session/Player/ReplayPlayer/AudioPlayer.tsx @@ -6,9 +6,10 @@ import { } from '@ant-design/icons'; import { Button, InputNumber, Popover } from 'antd'; import { Slider } from 'antd'; +import cn from 'classnames'; import { observer } from 'mobx-react-lite'; import React, { useContext, useEffect, useRef, useState } from 'react'; -import cn from 'classnames'; + import { PlayerContext } from 'App/components/Session/playerContext'; function DropdownAudioPlayer({ @@ -27,15 +28,24 @@ function DropdownAudioPlayer({ const fileLengths = useRef>({}); const { time = 0, speed = 1, playing, sessionStart } = store?.get() ?? {}; - const files = React.useMemo(() => audioEvents.map((pa) => { - const data = pa.payload; - const nativeTs = data.timestamp - return { - url: data.url, - timestamp: data.timestamp, - start: nativeTs ? nativeTs : pa.timestamp - sessionStart, - }; - }), [audioEvents.length, sessionStart]) + const files = React.useMemo( + () => + audioEvents.map((pa) => { + const data = pa.payload; + const nativeTs = data.timestamp; + const startTs = nativeTs + ? nativeTs > sessionStart + ? nativeTs - sessionStart + : nativeTs + : pa.timestamp - sessionStart; + return { + url: data.url, + timestamp: data.timestamp, + start: startTs, + }; + }), + [audioEvents.length, sessionStart] + ); React.useEffect(() => { Object.entries(audioRefs.current).forEach(([url, audio]) => { @@ -43,10 +53,10 @@ function DropdownAudioPlayer({ audio.loop = false; audio.addEventListener('loadedmetadata', () => { fileLengths.current[url] = audio.duration; - }) + }); } - }) - }, [audioRefs.current]) + }); + }, [audioRefs.current]); const toggleMute = () => { Object.values(audioRefs.current).forEach((audio) => { @@ -125,7 +135,7 @@ function DropdownAudioPlayer({ useEffect(() => { const deltaMs = delta * 1000; - const deltaTime = Math.abs(lastPlayerTime.current - time - deltaMs) + const deltaTime = Math.abs(lastPlayerTime.current - time - deltaMs); if (deltaTime >= 250) { handleSeek(time); } @@ -134,7 +144,7 @@ function DropdownAudioPlayer({ const file = files.find((f) => f.url === url); const fileLength = fileLengths.current[url]; if (file) { - if (fileLength && (fileLength*1000)+file.start < time) { + if (fileLength && fileLength * 1000 + file.start < time) { return; } if (time >= file.start) { @@ -155,8 +165,8 @@ function DropdownAudioPlayer({ if (audio) { audio.muted = isMuted; } - }) - }, [isMuted]) + }); + }, [isMuted]); useEffect(() => { changePlaybackSpeed(speed); @@ -168,7 +178,7 @@ function DropdownAudioPlayer({ const file = files.find((f) => f.url === url); const fileLength = fileLengths.current[url]; if (file) { - if (fileLength && (fileLength*1000)+file.start < time) { + if (fileLength && fileLength * 1000 + file.start < time) { audio.pause(); return; } @@ -183,7 +193,8 @@ function DropdownAudioPlayer({ setVolume(isMuted ? 0 : volume); }, [playing]); - const buttonIcon = 'px-2 cursor-pointer border border-gray-light hover:border-main hover:text-main hover:z-10 h-fit' + const buttonIcon = + 'px-2 cursor-pointer border border-gray-light hover:border-main hover:text-main hover:z-10 h-fit'; return (
@@ -205,20 +216,14 @@ function DropdownAudioPlayer({
} > -
+
{isMuted ? : }
diff --git a/frontend/app/player/web/managers/DOM/DOMManager.ts b/frontend/app/player/web/managers/DOM/DOMManager.ts index e6572567c..23c3f12c8 100644 --- a/frontend/app/player/web/managers/DOM/DOMManager.ts +++ b/frontend/app/player/web/managers/DOM/DOMManager.ts @@ -1,5 +1,4 @@ import logger from 'App/logger'; -import { resolveURL } from "../../messages/rewriter/urlResolve"; import type Screen from '../../Screen/Screen'; import type { Message, SetNodeScroll } from '../../messages'; @@ -32,6 +31,8 @@ export default class DOMManager extends ListWalker { private readonly vTexts: Map = new Map() // map vs object here? private readonly vElements: Map = new Map() private readonly olVRoots: Map = new Map() + /** required to keep track of iframes, frameId : vnodeId */ + private readonly iframeRoots: Record = {} /** Constructed StyleSheets https://developer.mozilla.org/en-US/docs/Web/API/Document/adoptedStyleSheets * as well as