fix(player): consider stringDict before any CreateDocument (fastfix)

This commit is contained in:
Alex Kaminskii 2023-04-14 19:32:05 +02:00
parent ffd9318de7
commit 4f41a8303e
2 changed files with 23 additions and 12 deletions

View file

@ -38,7 +38,6 @@ export default class DOMManager extends ListWalker<Message> {
private olStyleSheets: Map<number, OnloadStyleSheet> = new Map()
/** @depreacted since tracker 4.0.2 Mapping by nodeID */
private olStyleSheetsDeprecated: Map<number, OnloadStyleSheet> = new Map()
private stringDict: Record<number,string> = {}
private upperBodyId: number = -1;
private nodeScrollManagers: Map<number, ListWalker<SetNodeScroll>> = new Map()
@ -49,6 +48,7 @@ export default class DOMManager extends ListWalker<Message> {
constructor(
private readonly screen: Screen,
private readonly isMobile: boolean,
private stringDict: Record<number,string>,
public readonly time: number,
setCssLoading: ConstructorParameters<typeof StylesManager>[1],
) {
@ -192,7 +192,6 @@ export default class DOMManager extends ListWalker<Message> {
// 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<Message> {
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,

View file

@ -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<DOMManager> {
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<number, string> = {}
constructor(
private screen: Screen,
@ -19,11 +27,18 @@ export default class PagesManager extends ListWalker<DOMManager> {
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)