commit
866bead6e1
1 changed files with 29 additions and 35 deletions
|
|
@ -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 });
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue