diff --git a/frontend/app/player/web/managers/DOM/DOMManager.ts b/frontend/app/player/web/managers/DOM/DOMManager.ts index f6291fa0a..24e4b4e45 100644 --- a/frontend/app/player/web/managers/DOM/DOMManager.ts +++ b/frontend/app/player/web/managers/DOM/DOMManager.ts @@ -38,7 +38,6 @@ export default class DOMManager extends ListWalker { private olStyleSheets: Map = new Map() /** @depreacted since tracker 4.0.2 Mapping by nodeID */ private olStyleSheetsDeprecated: Map = new Map() - private stringDict: Record = {} private upperBodyId: number = -1; private nodeScrollManagers: Map> = new Map() @@ -49,6 +48,7 @@ export default class DOMManager extends ListWalker { constructor( private readonly screen: Screen, private readonly isMobile: boolean, + private stringDict: Record, public readonly time: number, setCssLoading: ConstructorParameters[1], ) { @@ -192,7 +192,6 @@ export default class DOMManager extends ListWalker { // Maybetodo: start Document as 0-node in tracker this.vTexts.clear() this.stylesManager.reset() - this.stringDict = {} return } case MType.CreateTextNode: { @@ -227,12 +226,9 @@ export default class DOMManager extends ListWalker { case MType.SetNodeAttribute: this.setNodeAttribute(msg) return - case MType.StringDict: - this.stringDict[msg.key] = msg.value - return case MType.SetNodeAttributeDict: - this.stringDict[msg.nameKey] === undefined && logger.error("No dictionary key for msg 'name': ", msg) - this.stringDict[msg.valueKey] === undefined && logger.error("No dictionary key for msg 'value': ", msg) + this.stringDict[msg.nameKey] === undefined && logger.error("No dictionary key for msg 'name': ", msg, this.stringDict) + this.stringDict[msg.valueKey] === undefined && logger.error("No dictionary key for msg 'value': ", msg, this.stringDict) if (this.stringDict[msg.nameKey] === undefined || this.stringDict[msg.valueKey] === undefined ) { return } this.setNodeAttribute({ id: msg.id, diff --git a/frontend/app/player/web/managers/PagesManager.ts b/frontend/app/player/web/managers/PagesManager.ts index dbc64bb72..e5545b35d 100644 --- a/frontend/app/player/web/managers/PagesManager.ts +++ b/frontend/app/player/web/managers/PagesManager.ts @@ -1,13 +1,21 @@ -import type Screen from '../Screen/Screen'; -import type { Message } from '../messages'; +import logger from 'App/logger'; -import { MType } from '../messages'; +import type Screen from '../Screen/Screen'; +import type { Message, StringDict } from '../messages'; + +import { MType} from '../messages'; import ListWalker from '../../common/ListWalker'; import DOMManager from './DOM/DOMManager'; export default class PagesManager extends ListWalker { private currentPage: DOMManager | null = null + /** + * String Dictionary in tracker may be desync with CreateDocument (why???) + * e.g. some StringDictionary and other messages before any 'CreateDocument' one + * TODO: understand why and fix + */ + private currentStringDict: Record = {} constructor( private screen: Screen, @@ -19,11 +27,18 @@ export default class PagesManager extends ListWalker { Assumed that messages added in a correct time sequence. */ appendMessage(m: Message): void { + if (m.tp === MType.StringDict) { + if (this.currentStringDict[m.key] !== undefined) { + this.currentStringDict = {} /* refresh stringDict */ + } + this.currentStringDict[m.key] = m.value + return + } if (m.tp === MType.CreateDocument) { - super.append(new DOMManager(this.screen, this.isMobile, m.time, this.setCssLoading)) + super.append(new DOMManager(this.screen, this.isMobile, this.currentStringDict, m.time, this.setCssLoading)) } if (this.last === null) { - // Log wrong + logger.warn("DOMMessage before any document created, skipping:", m) return; } this.last.append(m)