fix(sio-recorder): solve full checkouts for consistent recordings

This commit is contained in:
Philipp Kunz 2025-01-26 20:48:32 +01:00
parent 39e94a11f8
commit 1d799532e9
3 changed files with 37 additions and 22 deletions

View File

@ -1,5 +1,12 @@
# Changelog # Changelog
## 2025-01-26 - 1.2.2 - fix(sio-recorder)
Fixed the recording loop and ensured it stops correctly
- Added an await for domtoolsPromise in startRecording method.
- Introduced a while loop to manage the recording status effectively.
- Added delay and stop function call within the loop to manage record sessions.
## 2025-01-25 - 1.2.1 - fix(sio-recorder) ## 2025-01-25 - 1.2.1 - fix(sio-recorder)
Enhance styling and positioning for rrweb player elements in SioRecorder component. Enhance styling and positioning for rrweb player elements in SioRecorder component.

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@social.io/catalog', name: '@social.io/catalog',
version: '1.2.1', version: '1.2.2',
description: 'catalog for social.io' description: 'catalog for social.io'
} }

View File

@ -32,6 +32,11 @@ export class SioRecorder extends DeesElement {
*/ */
private events: IRecordingEvent[] = []; private events: IRecordingEvent[] = [];
/**
* status
*/
public status: 'recording' | 'playing' | 'stopped' = 'stopped';
/** /**
* A reference to rrweb's stop recording function. * A reference to rrweb's stop recording function.
* We'll store it when we begin a record session so we can call it later. * We'll store it when we begin a record session so we can call it later.
@ -59,9 +64,7 @@ export class SioRecorder extends DeesElement {
`; `;
render() { render() {
return html` return html` <div id="playback"></div> `;
<div id="playback"></div>
`;
} }
/** /**
@ -101,10 +104,13 @@ export class SioRecorder extends DeesElement {
* Starts an rrweb recording session that tracks the entire DOM, * Starts an rrweb recording session that tracks the entire DOM,
* including canvases and cross-origin iframes (if permissible). * including canvases and cross-origin iframes (if permissible).
*/ */
private startRecording(): void { private async startRecording(): void {
await this.domtoolsPromise;
this.status = 'recording';
this.events = []; this.events = [];
// For capturing "everything," enable advanced flags: // For capturing "everything," enable advanced flags:
while (this.status === 'recording') {
this.stopFn = rrweb.record({ this.stopFn = rrweb.record({
emit: (event: any) => { emit: (event: any) => {
// If you have a stricter type: // If you have a stricter type:
@ -118,6 +124,9 @@ export class SioRecorder extends DeesElement {
// checkoutEveryNms: 1000, // check every N milliseconds // checkoutEveryNms: 1000, // check every N milliseconds
}); });
await this.domtools.convenience.smartdelay.delayFor(1000);
await this.stopFn();
}
console.log('Recording has started...'); console.log('Recording has started...');
} }
@ -147,7 +156,6 @@ export class SioRecorder extends DeesElement {
showController: false, showController: false,
width: this.playbackDiv.offsetWidth, width: this.playbackDiv.offsetWidth,
height: this.playbackDiv.offsetHeight, height: this.playbackDiv.offsetHeight,
}, },
}); });
this.domtools.convenience.smartdelay.delayFor(0).then(async () => { this.domtools.convenience.smartdelay.delayFor(0).then(async () => {