Merge pull request #1019 from openreplay/fix-player

fix(ui) - player
This commit is contained in:
Shekar Siri 2023-03-07 12:28:05 +01:00 committed by GitHub
commit 866bead6e1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -107,7 +107,7 @@ export default class MessageManager {
private scrollManager: ListWalker<SetViewportScroll> = new ListWalker();
private readonly decoder = new Decoder();
public readonly decoder = new Decoder();
private readonly lists: Lists;
private activityManager: ActivityManager | null = null;
@ -196,7 +196,7 @@ export default class MessageManager {
async loadMessages(isClickmap: boolean = false) {
this.setMessagesLoading(true)
// TODO: reusable decryptor instance
const createNewParser = (shouldDecrypt = true) => {
const createNewParser = (shouldDecrypt = true, file) => {
const decrypt = shouldDecrypt && this.session.fileKey
? (b: Uint8Array) => decryptSessionBytes(b, this.session.fileKey)
: (b: Uint8Array) => Promise.resolve(b)
@ -206,11 +206,21 @@ export default class MessageManager {
fileReader.append(b)
const msgs: Array<Message> = []
for (let msg = fileReader.readNext();msg !== null;msg = fileReader.readNext()) {
this.distributeMessage(msg, msg._index)
msgs.push(msg)
}
const sorted = msgs.sort((m1, m2) => m1.time - m2.time)
let indx = sorted[0]._index
let outOfOrderCounter = 0
sorted.forEach(msg => {
if (indx > msg._index) outOfOrderCounter++
else indx = msg._index
this.distributeMessage(msg, msg._index)
})
if (outOfOrderCounter > 0) console.warn("Unsorted mob file, error count: ", outOfOrderCounter)
logger.info("Messages count: ", msgs.length, sorted, file)
logger.info("Messages count: ", msgs.length, msgs)
this._sortMessagesHack(msgs)
this.setMessagesLoading(false)
})
@ -219,14 +229,14 @@ export default class MessageManager {
this.waitingForFiles = true
const loadMethod = this.session.domURL && this.session.domURL.length > 0
? { url: this.session.domURL, parser: createNewParser }
: { url: this.session.mobsUrl, parser: () => createNewParser(false)}
? { url: this.session.domURL, parser: () => createNewParser(true, 'dom') }
: { url: this.session.mobsUrl, parser: () => createNewParser(false, 'dom')}
loadFiles(loadMethod.url, loadMethod.parser())
// EFS fallback
.catch((e) =>
requestEFSDom(this.session.sessionId)
.then(createNewParser(false))
.then(createNewParser(false, 'domEFS'))
)
.then(this.onFileReadSuccess)
.catch(this.onFileReadFailed)
@ -235,11 +245,11 @@ export default class MessageManager {
// load devtools (TODO: start after the first DOM file download)
if (isClickmap) return;
this.state.update({ devtoolsLoading: true })
loadFiles(this.session.devtoolsURL, createNewParser())
loadFiles(this.session.devtoolsURL, createNewParser(true, 'devtools'))
// EFS fallback
.catch(() =>
requestEFSDevtools(this.session.sessionId)
.then(createNewParser(false))
.then(createNewParser(false, 'devtoolsEFS'))
)
.then(() => {
this.state.update(this.lists.getFullListsState()) // TODO: also in case of dynamic update through assist
@ -406,39 +416,19 @@ export default class MessageManager {
this.lists.lists.fetch.insert(getResourceFromNetworkRequest(msg, this.sessionStart))
break;
case MType.Redux:
decoded = this.decodeStateMessage(msg, ["state", "action"]);
logger.log('redux', decoded)
if (decoded != null) {
this.lists.lists.redux.append(decoded);
}
this.lists.lists.redux.append(msg);
break;
case MType.NgRx:
decoded = this.decodeStateMessage(msg, ["state", "action"]);
logger.log('ngrx', decoded)
if (decoded != null) {
this.lists.lists.ngrx.append(decoded);
}
this.lists.lists.ngrx.append(msg);
break;
case MType.Vuex:
decoded = this.decodeStateMessage(msg, ["state", "mutation"]);
logger.log('vuex', decoded)
if (decoded != null) {
this.lists.lists.vuex.append(decoded);
}
this.lists.lists.vuex.append(msg);
break;
case MType.Zustand:
decoded = this.decodeStateMessage(msg, ["state", "mutation"])
logger.log('zustand', decoded)
if (decoded != null) {
this.lists.lists.zustand.append(decoded)
}
this.lists.lists.zustand.append(msg)
break
case MType.MobX:
decoded = this.decodeStateMessage(msg, ["payload"]);
logger.log('mobx', decoded)
if (decoded != null) {
this.lists.lists.mobx.append(decoded);
}
this.lists.lists.mobx.append(msg);
break;
case MType.GraphQl:
this.lists.lists.graphql.append(msg);
@ -478,6 +468,10 @@ export default class MessageManager {
this.state.update({ messagesLoading, ready: !messagesLoading && !this.state.get().cssLoading });
}
decodeMessage(msg: Message) {
return this.decoder.decode(msg)
}
private setSize({ height, width }: { height: number, width: number }) {
this.screen.scale({ height, width });
this.state.update({ width, height });