speechrecorderng 2.25.1 → 2.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +13 -12
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +3 -6
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +18 -13
- package/esm2020/lib/speechrecorderng.component.mjs +1 -1
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/utils/wake_lock.mjs +48 -3
- package/fesm2015/speechrecorderng.mjs +80 -32
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +79 -32
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/speechrecorder/session/audiorecorder.d.ts +4 -3
- package/lib/speechrecorder/session/sessionmanager.d.ts +8 -7
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/utils/wake_lock.d.ts +12 -0
- package/package.json +1 -1
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { BehaviorSubject } from "rxjs";
|
|
2
2
|
import { WAKE_LOCK_VIDEO_MP4_URI } from "./wake_lock_media";
|
|
3
|
+
import { Browser, UserAgentBuilder } from "./ua-parser";
|
|
4
|
+
/**
|
|
5
|
+
* Utility to prevent devices from screen lock.
|
|
6
|
+
* If supported uses the HTML5 wake lock API, if not, plays an invisible video.
|
|
7
|
+
*
|
|
8
|
+
* Note: I've used the GitHub project richtr/nosleep.js for that. The worked in most cases, but failed sometimes on an
|
|
9
|
+
* Android smartphone.
|
|
10
|
+
*/
|
|
3
11
|
export class WakeLockManager {
|
|
4
12
|
constructor() {
|
|
5
13
|
this.wakeLockApiSupported = false;
|
|
14
|
+
this.wakeLockRetryCount = 0;
|
|
15
|
+
this.randomSeekRequired = false;
|
|
6
16
|
this._behaviorSubject = new BehaviorSubject(false);
|
|
17
|
+
this.VIDEO_LENGTH = 10;
|
|
7
18
|
this.wakeLockApiSupported = ('wakeLock' in navigator);
|
|
8
19
|
console.debug("Wake lock API supported: " + this.wakeLockApiSupported);
|
|
20
|
+
this.userAgent = UserAgentBuilder.userAgent();
|
|
21
|
+
this.randomSeekRequired = (this.userAgent?.detectedBrowser === Browser.Safari);
|
|
9
22
|
}
|
|
10
23
|
get behaviorSubject() {
|
|
11
24
|
return this._behaviorSubject;
|
|
@@ -15,6 +28,7 @@ export class WakeLockManager {
|
|
|
15
28
|
//@ts-ignore
|
|
16
29
|
navigator.wakeLock.request('screen').then((wls) => {
|
|
17
30
|
this.wakeLockSentinel = wls;
|
|
31
|
+
this.wakeLockRetryCount = 0;
|
|
18
32
|
console.debug('Wake lock screen request successful.');
|
|
19
33
|
this._behaviorSubject.next(true);
|
|
20
34
|
}).catch((reason) => {
|
|
@@ -25,7 +39,7 @@ export class WakeLockManager {
|
|
|
25
39
|
else {
|
|
26
40
|
if (!this.mp4VideoElement) {
|
|
27
41
|
this.mp4VideoElement = document.createElement('video');
|
|
28
|
-
this.mp4VideoElement.loop =
|
|
42
|
+
this.mp4VideoElement.loop = !this.randomSeekRequired;
|
|
29
43
|
this.mp4VideoElement.playsInline = true;
|
|
30
44
|
this.mp4VideoElement.src = WAKE_LOCK_VIDEO_MP4_URI;
|
|
31
45
|
this.mp4VideoElement.addEventListener('play', (ev) => {
|
|
@@ -40,13 +54,44 @@ export class WakeLockManager {
|
|
|
40
54
|
console.debug('Wake lock video pause.');
|
|
41
55
|
this._behaviorSubject.next(false);
|
|
42
56
|
});
|
|
57
|
+
if (this.randomSeekRequired) {
|
|
58
|
+
this.mp4VideoElement.addEventListener('timeupdate', (ev) => {
|
|
59
|
+
if (this.randomSeekRequired && this.mp4VideoElement) {
|
|
60
|
+
let thirdVideoLen = this.VIDEO_LENGTH / 3;
|
|
61
|
+
if (this.mp4VideoElement.currentTime > thirdVideoLen * 2) {
|
|
62
|
+
let newPos = (thirdVideoLen * Math.random());
|
|
63
|
+
//console.debug('Wake lock random seek to '+newPos+'s');
|
|
64
|
+
this.mp4VideoElement.currentTime = newPos;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
43
69
|
this.mp4VideoElement.addEventListener('error', (ev) => {
|
|
44
70
|
console.debug('Wake lock video error: ' + ev.message);
|
|
45
71
|
this._behaviorSubject.error(ev.error);
|
|
46
72
|
});
|
|
47
73
|
console.debug('Added listeners to wake lock video.');
|
|
48
74
|
}
|
|
49
|
-
this.
|
|
75
|
+
this.startWakeLockVideo();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
startWakeLockVideo() {
|
|
79
|
+
if (this.mp4VideoElement) {
|
|
80
|
+
this.mp4VideoElement.play().then(() => {
|
|
81
|
+
this.wakeLockRetryCount = 0;
|
|
82
|
+
}).catch((err) => {
|
|
83
|
+
console.debug('Failed starting wake lock video!');
|
|
84
|
+
if (this.wakeLockRetryCount < 1) {
|
|
85
|
+
window.setTimeout(() => {
|
|
86
|
+
this.wakeLockRetryCount++;
|
|
87
|
+
console.debug('Retry wake lock video #' + this.wakeLockRetryCount);
|
|
88
|
+
this.startWakeLockVideo();
|
|
89
|
+
}, 4000);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.debug('Giving up to try to start wake lock video.');
|
|
93
|
+
}
|
|
94
|
+
});
|
|
50
95
|
}
|
|
51
96
|
}
|
|
52
97
|
disableWakeLock() {
|
|
@@ -66,4 +111,4 @@ export class WakeLockManager {
|
|
|
66
111
|
}
|
|
67
112
|
}
|
|
68
113
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FrZV9sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3dha2VfbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRzFELE1BQU0sT0FBTyxlQUFlO0lBWTFCO1FBSlEseUJBQW9CLEdBQUMsS0FBSyxDQUFDO1FBRTNCLHFCQUFnQixHQUEwQixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUdwRixJQUFJLENBQUMsb0JBQW9CLEdBQUMsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBZEQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFjRCxjQUFjO1FBQ1YsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDMUIsWUFBWTtZQUNaLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsR0FBRyxDQUFDO2dCQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBVSxFQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FFTjthQUFLO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFDLHVCQUF1QixDQUFDO2dCQUVqRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7b0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFFcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxDQUFDLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXhDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBR0gsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRSxFQUFFO2dCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBVSxFQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEdBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFLO1lBQ0osSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtXQUtFX0xPQ0tfVklERU9fTVA0X1VSSX0gZnJvbSBcIi4vd2FrZV9sb2NrX21lZGlhXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFdha2VMb2NrTWFuYWdlciB7XHJcbiAgZ2V0IGJlaGF2aW9yU3ViamVjdCgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JlaGF2aW9yU3ViamVjdDtcclxuICB9XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBwcml2YXRlIHdha2VMb2NrU2VudGluZWw6V2FrZUxvY2tTZW50aW5lbDtcclxuICBwcml2YXRlIG1wNFZpZGVvRWxlbWVudD86SFRNTFZpZGVvRWxlbWVudDtcclxuICBwcml2YXRlIHdha2VMb2NrQXBpU3VwcG9ydGVkPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9iZWhhdmlvclN1YmplY3Q6QmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+PW5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMud2FrZUxvY2tBcGlTdXBwb3J0ZWQ9KCd3YWtlTG9jaycgaW4gbmF2aWdhdG9yKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJXYWtlIGxvY2sgQVBJIHN1cHBvcnRlZDogXCIrdGhpcy53YWtlTG9ja0FwaVN1cHBvcnRlZCk7XHJcbiAgfVxyXG5cclxuICBlbmFibGVXYWtlTG9jaygpe1xyXG4gICAgICBpZih0aGlzLndha2VMb2NrQXBpU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIG5hdmlnYXRvci53YWtlTG9jay5yZXF1ZXN0KCdzY3JlZW4nKS50aGVuKCh3bHMpPT57XHJcbiAgICAgICAgICAgIHRoaXMud2FrZUxvY2tTZW50aW5lbD13bHM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayBzY3JlZW4gcmVxdWVzdCBzdWNjZXNzZnVsLicpO1xyXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0pLmNhdGNoKChyZWFzb246YW55KT0+e1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdXYWtlbG9jayBmYWlsZWQ6ICcrcmVhc29uKVxyXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3QuZXJyb3IocmVhc29uKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5tcDRWaWRlb0VsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50Lmxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQucGxheXNJbmxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LnNyYz1XQUtFX0xPQ0tfVklERU9fTVA0X1VSSTtcclxuXHJcbiAgICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBwbGF5aW5nLi4uJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBlbmRlZC4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgKGV2KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdXYWtlIGxvY2sgdmlkZW8gcGF1c2UuJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChldikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdXYWtlIGxvY2sgdmlkZW8gZXJyb3I6ICcrZXYubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5lcnJvcihldi5lcnJvcik7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0FkZGVkIGxpc3RlbmVycyB0byB3YWtlIGxvY2sgdmlkZW8uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LnBsYXkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgZGlzYWJsZVdha2VMb2NrKCl7XHJcbiAgICBpZih0aGlzLndha2VMb2NrQXBpU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja1NlbnRpbmVsLnJlbGVhc2UoKS50aGVuKCgpPT57XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdXYWtlIGxvY2sgcmVsZWFzZSBzdWNjZXNzZnVsLicpO1xyXG4gICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246YW55KT0+e1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignV2FrZWxvY2sgcmVsZWFzZSBmYWlsZWQ6ICcrcmVhc29uKVxyXG4gICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0LmVycm9yKHJlYXNvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm1wNFZpZGVvRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LnBhdXNlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FrZV9sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3dha2VfbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFakU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFpQjFCO1FBVFEseUJBQW9CLEdBQUMsS0FBSyxDQUFDO1FBQzNCLHVCQUFrQixHQUFDLENBQUMsQ0FBQztRQUVyQix1QkFBa0IsR0FBQyxLQUFLLENBQUM7UUFFekIscUJBQWdCLEdBQTBCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXJFLGlCQUFZLEdBQUMsRUFBRSxDQUFDO1FBRy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxTQUFTLEdBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLEtBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFyQkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFxQkQsY0FBYztRQUNWLElBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzFCLFlBQVk7WUFDWixTQUFTLENBQUMs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QUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBVSxFQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEdBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFLO1lBQ0osSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtXQUtFX0xPQ0tfVklERU9fTVA0X1VSSX0gZnJvbSBcIi4vd2FrZV9sb2NrX21lZGlhXCI7XHJcbmltcG9ydCB7QnJvd3NlciwgVXNlckFnZW50LCBVc2VyQWdlbnRCdWlsZGVyfSBmcm9tIFwiLi91YS1wYXJzZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IHRvIHByZXZlbnQgZGV2aWNlcyBmcm9tIHNjcmVlbiBsb2NrLlxyXG4gKiBJZiBzdXBwb3J0ZWQgdXNlcyB0aGUgSFRNTDUgd2FrZSBsb2NrIEFQSSwgaWYgbm90LCBwbGF5cyBhbiBpbnZpc2libGUgdmlkZW8uXHJcbiAqXHJcbiAqIE5vdGU6IEkndmUgdXNlZCB0aGUgR2l0SHViIHByb2plY3QgcmljaHRyL25vc2xlZXAuanMgZm9yIHRoYXQuIFRoZSB3b3JrZWQgaW4gbW9zdCBjYXNlcywgYnV0IGZhaWxlZCBzb21ldGltZXMgb24gYW5cclxuICogICBBbmRyb2lkIHNtYXJ0cGhvbmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV2FrZUxvY2tNYW5hZ2VyIHtcclxuICBnZXQgYmVoYXZpb3JTdWJqZWN0KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmVoYXZpb3JTdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHByaXZhdGUgd2FrZUxvY2tTZW50aW5lbDpXYWtlTG9ja1NlbnRpbmVsO1xyXG4gIHByaXZhdGUgbXA0VmlkZW9FbGVtZW50PzpIVE1MVmlkZW9FbGVtZW50O1xyXG4gIHByaXZhdGUgd2FrZUxvY2tBcGlTdXBwb3J0ZWQ9ZmFsc2U7XHJcbiAgcHJpdmF0ZSB3YWtlTG9ja1JldHJ5Q291bnQ9MDtcclxuICBwcml2YXRlIHVzZXJBZ2VudD86VXNlckFnZW50O1xyXG4gIHByaXZhdGUgcmFuZG9tU2Vla1JlcXVpcmVkPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9iZWhhdmlvclN1YmplY3Q6QmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+PW5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IFZJREVPX0xFTkdUSD0xMDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndha2VMb2NrQXBpU3VwcG9ydGVkPSgnd2FrZUxvY2snIGluIG5hdmlnYXRvcik7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6IFwiK3RoaXMud2FrZUxvY2tBcGlTdXBwb3J0ZWQpO1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkPSh0aGlzLnVzZXJBZ2VudD8uZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5TYWZhcmkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlV2FrZUxvY2soKXtcclxuICAgICAgaWYodGhpcy53YWtlTG9ja0FwaVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICBuYXZpZ2F0b3Iud2FrZUxvY2sucmVxdWVzdCgnc2NyZWVuJykudGhlbigod2xzKT0+e1xyXG4gICAgICAgICAgICB0aGlzLndha2VMb2NrU2VudGluZWw9d2xzO1xyXG4gICAgICAgICAgICB0aGlzLndha2VMb2NrUmV0cnlDb3VudD0wO1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdXYWtlIGxvY2sgc2NyZWVuIHJlcXVlc3Qgc3VjY2Vzc2Z1bC4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KS5jYXRjaCgocmVhc29uOmFueSk9PntcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignV2FrZWxvY2sgZmFpbGVkOiAnK3JlYXNvbilcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0LmVycm9yKHJlYXNvbik7XHJcblxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1wNFZpZGVvRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG5cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50Lmxvb3AgPSAhdGhpcy5yYW5kb21TZWVrUmVxdWlyZWQ7XHJcbiAgICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5wbGF5c0lubGluZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuc3JjPVdBS0VfTE9DS19WSURFT19NUDRfVVJJO1xyXG5cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHZpZGVvIHBsYXlpbmcuLi4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHZpZGVvIGVuZGVkLicpO1xyXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCAoZXYpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBwYXVzZS4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmKHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIChldikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkICYmIHRoaXMubXA0VmlkZW9FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGhpcmRWaWRlb0xlbj10aGlzLlZJREVPX0xFTkdUSC8zO1xyXG4gICAgICAgICAgICAgICBpZiAodGhpcy5tcDRWaWRlb0VsZW1lbnQuY3VycmVudFRpbWUgPiB0aGlyZFZpZGVvTGVuKjIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3UG9zPSh0aGlyZFZpZGVvTGVuKk1hdGgucmFuZG9tKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHJhbmRvbSBzZWVrIHRvICcrbmV3UG9zKydzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuY3VycmVudFRpbWU9bmV3UG9zO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBlcnJvcjogJytldi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0LmVycm9yKGV2LmVycm9yKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdBZGRlZCBsaXN0ZW5lcnMgdG8gd2FrZSBsb2NrIHZpZGVvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXJ0V2FrZUxvY2tWaWRlbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRXYWtlTG9ja1ZpZGVvKCl7XHJcbiAgICBpZih0aGlzLm1wNFZpZGVvRWxlbWVudCl7XHJcbiAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LnBsYXkoKS50aGVuKCgpPT57XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja1JldHJ5Q291bnQ9MDtcclxuICAgICAgfSkuY2F0Y2goKGVycik9PiB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRmFpbGVkIHN0YXJ0aW5nIHdha2UgbG9jayB2aWRlbyEnKTtcclxuICAgICAgICBpZiAodGhpcy53YWtlTG9ja1JldHJ5Q291bnQgPCAxKSB7XHJcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2FrZUxvY2tSZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1JldHJ5IHdha2UgbG9jayB2aWRlbyAjJyArIHRoaXMud2FrZUxvY2tSZXRyeUNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdha2VMb2NrVmlkZW8oKTtcclxuICAgICAgICAgIH0sIDQwMDApXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdHaXZpbmcgdXAgdG8gdHJ5IHRvIHN0YXJ0IHdha2UgbG9jayB2aWRlby4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGRpc2FibGVXYWtlTG9jaygpe1xyXG4gICAgaWYodGhpcy53YWtlTG9ja0FwaVN1cHBvcnRlZCkge1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tTZW50aW5lbC5yZWxlYXNlKCkudGhlbigoKT0+e1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHJlbGVhc2Ugc3VjY2Vzc2Z1bC4nKTtcclxuICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KS5jYXRjaCgocmVhc29uOmFueSk9PntcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dha2Vsb2NrIHJlbGVhc2UgZmFpbGVkOiAnK3JlYXNvbilcclxuICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5lcnJvcihyZWFzb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5tcDRWaWRlb0VsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5wYXVzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -7363,12 +7363,25 @@ class SequenceAudioFloat32OutStreamMultiplier {
|
|
|
7363
7363
|
|
|
7364
7364
|
const WAKE_LOCK_VIDEO_MP4_URI = 'data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAG31tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE1NSByMjkxNyAwYTg0ZDk4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxOCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAJ2WIhAA7//73Tr8Cm1TCKgOSVwr2yqQmr/tBF6luwQMZUeHtiyA0IQAAAAtBmiRsQ7/+qZYe8N4CAExhdmM1OC41NC4xMDAAQiAIwRg4AAAACEGeQniF/wMzIRAEYIwcIRAEYIwcAAAACAGeYXRCvwQkIRAEYIwcIRAEYIwcAAAACAGeY2pCvwQlIRAEYIwcIRAEYIwcAAAAEUGaaEmo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AAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAChzdHNjAAAAAAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAP8c3RzegAAAAAAAAAAAAAA+gAAAt0AAAAPAAAADAAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABQAAAP0c3RjbwAAAAAAAAD5AAAAMAAAAzMA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AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAXAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA/RzdGNvAAAAAAAAAPkAAAMcAAADPwAAA1cAAANvAAADkAAAA6QAAAO8AAAD1AAAA/UAAAQJAAAEIQAABDkAAARUAAAEbgAABIYAAASeAAAEuQAABNMAAATrAAAFAwAABR4AAAU4AAAFUAAABWIAAAWDAAAFnQAABbUAAAXHAAAF6AAABgIAAAYUAAAGLAAABk0AAAZnAAAGeQAABpEAAAayAAAGzAAABt4AAAb2AAAHFwAABysAAAdDAAAHWwAAB3wAAAeQAAAHqAAAB8AAAAfbAAAH9QAACA0AAAglAAAIQAAACFoAAAhyAAAIigAACKUAAAi/AAAI1wAACOkAAAkKAAAJJAAACTwAAAlOAAAJbwAACYkAAAmbAAAJswAACdQAAAnuAAAKAAAAChgAAAo5AAAKUwAACmUAAAp9AAAKngAACrIAAArKAAAK4gAACwMAAAsXAAALLwAAC0cAAAtiAAALfAAAC5QAAAusAAALxwAAC+EAAAv5AAAMEQAADCwAAAxGAAAMXgAADHAAAAyRAAAMqwAADMMAAAzVAAAM9gAADRAAAA0iAAANOgAADVsAAA11AAANhwAADZ8AAA3AAAAN2gAADewAAA4EAAAOJQAADjkAAA5RAAAOaQAADooAAA6eAAAOtgAADs4AAA7pAAAPAwAADxsAAA8zAAAPTgAAD2gAAA+AAAAPmAAAD7MAAA/NAAAP5QAAD/cAABAYAAAQMgAAEEoAABBcAAAQfQAAEJcAABCvAAAQwQAAEOIAABD8AAARDgAAESYAABFHAAARYQAAEXMAABGLAAARrAAAEcAAABHpAAASAQAAEiIAABI2AAASTgAAEmYAABKHAAASmwAAErMAABLLAAAS5gAAEwAAABMYAAATMAAAE0sAABNlAAATfQAAE48AABOwAAATygAAE+IAABP0AAAUFQAAFC8AABRHAAAUWQAAFHoAABSUAAAUpgAAFL4AABTfAAAU+QAAFQsAABUjAAAVRAAAFVgAABVwAAAViAAAFakAABW9AAAV1QAAFe0AABYOAAAWIgAAFjoAABZSAAAWbQAAFocAABafAAAWtwAAFtIAABbsAAAXBAAAFxYAABc3AAAXUQAAF2kAABd7AAAXnAAAF7YAABfOAAAX4AAAGAEAABgbAAAYLQAAGEUAABhmAAAYgAAAGJIAABiqAAAYywAAGN8AABj3AAAZDwAAGTAAABlEAAAZXAAAGXQAABmVAAAZqQAAGcEAABnZAAAZ9AAAGg4AABomAAAaPgAAGlkAABpzAAAaiwAAGp0AABq+AAAa2AAAGvAAABsCAAAbIwAAGz0AABtVAAAbZwAAG4cAAAAac2dwZAEAAAByb2xsAAAAAgAAAAH//wAAABxzYmdwAAAAAHJvbGwAAAABAAABsAAAAAEAAABidWR0YQAAAFptZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAC1pbHN0AAAAJal0b28AAAAdZGF0YQAAAAEAAAAATGF2ZjU4LjI5LjEwMA==';
|
|
7365
7365
|
|
|
7366
|
+
/**
|
|
7367
|
+
* Utility to prevent devices from screen lock.
|
|
7368
|
+
* If supported uses the HTML5 wake lock API, if not, plays an invisible video.
|
|
7369
|
+
*
|
|
7370
|
+
* Note: I've used the GitHub project richtr/nosleep.js for that. The worked in most cases, but failed sometimes on an
|
|
7371
|
+
* Android smartphone.
|
|
7372
|
+
*/
|
|
7366
7373
|
class WakeLockManager {
|
|
7367
7374
|
constructor() {
|
|
7375
|
+
var _a;
|
|
7368
7376
|
this.wakeLockApiSupported = false;
|
|
7377
|
+
this.wakeLockRetryCount = 0;
|
|
7378
|
+
this.randomSeekRequired = false;
|
|
7369
7379
|
this._behaviorSubject = new BehaviorSubject(false);
|
|
7380
|
+
this.VIDEO_LENGTH = 10;
|
|
7370
7381
|
this.wakeLockApiSupported = ('wakeLock' in navigator);
|
|
7371
7382
|
console.debug("Wake lock API supported: " + this.wakeLockApiSupported);
|
|
7383
|
+
this.userAgent = UserAgentBuilder.userAgent();
|
|
7384
|
+
this.randomSeekRequired = (((_a = this.userAgent) === null || _a === void 0 ? void 0 : _a.detectedBrowser) === Browser$1.Safari);
|
|
7372
7385
|
}
|
|
7373
7386
|
get behaviorSubject() {
|
|
7374
7387
|
return this._behaviorSubject;
|
|
@@ -7378,6 +7391,7 @@ class WakeLockManager {
|
|
|
7378
7391
|
//@ts-ignore
|
|
7379
7392
|
navigator.wakeLock.request('screen').then((wls) => {
|
|
7380
7393
|
this.wakeLockSentinel = wls;
|
|
7394
|
+
this.wakeLockRetryCount = 0;
|
|
7381
7395
|
console.debug('Wake lock screen request successful.');
|
|
7382
7396
|
this._behaviorSubject.next(true);
|
|
7383
7397
|
}).catch((reason) => {
|
|
@@ -7388,7 +7402,7 @@ class WakeLockManager {
|
|
|
7388
7402
|
else {
|
|
7389
7403
|
if (!this.mp4VideoElement) {
|
|
7390
7404
|
this.mp4VideoElement = document.createElement('video');
|
|
7391
|
-
this.mp4VideoElement.loop =
|
|
7405
|
+
this.mp4VideoElement.loop = !this.randomSeekRequired;
|
|
7392
7406
|
this.mp4VideoElement.playsInline = true;
|
|
7393
7407
|
this.mp4VideoElement.src = WAKE_LOCK_VIDEO_MP4_URI;
|
|
7394
7408
|
this.mp4VideoElement.addEventListener('play', (ev) => {
|
|
@@ -7403,13 +7417,44 @@ class WakeLockManager {
|
|
|
7403
7417
|
console.debug('Wake lock video pause.');
|
|
7404
7418
|
this._behaviorSubject.next(false);
|
|
7405
7419
|
});
|
|
7420
|
+
if (this.randomSeekRequired) {
|
|
7421
|
+
this.mp4VideoElement.addEventListener('timeupdate', (ev) => {
|
|
7422
|
+
if (this.randomSeekRequired && this.mp4VideoElement) {
|
|
7423
|
+
let thirdVideoLen = this.VIDEO_LENGTH / 3;
|
|
7424
|
+
if (this.mp4VideoElement.currentTime > thirdVideoLen * 2) {
|
|
7425
|
+
let newPos = (thirdVideoLen * Math.random());
|
|
7426
|
+
//console.debug('Wake lock random seek to '+newPos+'s');
|
|
7427
|
+
this.mp4VideoElement.currentTime = newPos;
|
|
7428
|
+
}
|
|
7429
|
+
}
|
|
7430
|
+
});
|
|
7431
|
+
}
|
|
7406
7432
|
this.mp4VideoElement.addEventListener('error', (ev) => {
|
|
7407
7433
|
console.debug('Wake lock video error: ' + ev.message);
|
|
7408
7434
|
this._behaviorSubject.error(ev.error);
|
|
7409
7435
|
});
|
|
7410
7436
|
console.debug('Added listeners to wake lock video.');
|
|
7411
7437
|
}
|
|
7412
|
-
this.
|
|
7438
|
+
this.startWakeLockVideo();
|
|
7439
|
+
}
|
|
7440
|
+
}
|
|
7441
|
+
startWakeLockVideo() {
|
|
7442
|
+
if (this.mp4VideoElement) {
|
|
7443
|
+
this.mp4VideoElement.play().then(() => {
|
|
7444
|
+
this.wakeLockRetryCount = 0;
|
|
7445
|
+
}).catch((err) => {
|
|
7446
|
+
console.debug('Failed starting wake lock video!');
|
|
7447
|
+
if (this.wakeLockRetryCount < 1) {
|
|
7448
|
+
window.setTimeout(() => {
|
|
7449
|
+
this.wakeLockRetryCount++;
|
|
7450
|
+
console.debug('Retry wake lock video #' + this.wakeLockRetryCount);
|
|
7451
|
+
this.startWakeLockVideo();
|
|
7452
|
+
}, 4000);
|
|
7453
|
+
}
|
|
7454
|
+
else {
|
|
7455
|
+
console.debug('Giving up to try to start wake lock video.');
|
|
7456
|
+
}
|
|
7457
|
+
});
|
|
7413
7458
|
}
|
|
7414
7459
|
}
|
|
7415
7460
|
disableWakeLock() {
|
|
@@ -7802,16 +7847,13 @@ let BasicRecorder = class BasicRecorder {
|
|
|
7802
7847
|
}
|
|
7803
7848
|
startItem() {
|
|
7804
7849
|
this.startedDate = null;
|
|
7805
|
-
|
|
7850
|
+
this.enableWakeLockCond();
|
|
7806
7851
|
this.rfUuid = UUID.generate();
|
|
7807
7852
|
this.transportActions.startAction.disabled = true;
|
|
7808
7853
|
this.transportActions.pauseAction.disabled = true;
|
|
7809
|
-
if (this.readonly) {
|
|
7810
|
-
return;
|
|
7811
|
-
}
|
|
7812
7854
|
}
|
|
7813
7855
|
started() {
|
|
7814
|
-
this.enableWakeLockCond();
|
|
7856
|
+
//this.enableWakeLockCond();
|
|
7815
7857
|
if (!this.startedDate) {
|
|
7816
7858
|
this.startedDate = new Date();
|
|
7817
7859
|
}
|
|
@@ -8265,7 +8307,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8265
8307
|
context = AudioContextProvider.audioContextInstance();
|
|
8266
8308
|
}
|
|
8267
8309
|
catch (err) {
|
|
8268
|
-
this.status =
|
|
8310
|
+
this.status = 9 /* ERROR */;
|
|
8269
8311
|
let errMsg = 'Unknown error';
|
|
8270
8312
|
if (err instanceof Error) {
|
|
8271
8313
|
errMsg = err.message;
|
|
@@ -8289,7 +8331,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8289
8331
|
console.info("No audio context available!");
|
|
8290
8332
|
}
|
|
8291
8333
|
if (!context || !navigator.mediaDevices) {
|
|
8292
|
-
this.status =
|
|
8334
|
+
this.status = 9 /* ERROR */;
|
|
8293
8335
|
let errMsg = 'Browser does not support Media streams!';
|
|
8294
8336
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
8295
8337
|
this.statusAlertType = 'error';
|
|
@@ -8460,7 +8502,12 @@ class SessionManager extends BasicRecorder {
|
|
|
8460
8502
|
}
|
|
8461
8503
|
}
|
|
8462
8504
|
startItem() {
|
|
8505
|
+
this.status = 2 /* STARTING */;
|
|
8463
8506
|
super.startItem();
|
|
8507
|
+
if (this.readonly) {
|
|
8508
|
+
this.status = 1 /* IDLE */;
|
|
8509
|
+
return;
|
|
8510
|
+
}
|
|
8464
8511
|
this.transportActions.fwdAction.disabled = true;
|
|
8465
8512
|
this.transportActions.fwdNextAction.disabled = true;
|
|
8466
8513
|
this.transportActions.bwdAction.disabled = true;
|
|
@@ -8695,10 +8742,10 @@ class SessionManager extends BasicRecorder {
|
|
|
8695
8742
|
this.enableNavigation();
|
|
8696
8743
|
}
|
|
8697
8744
|
isRecording() {
|
|
8698
|
-
return (this.status ===
|
|
8745
|
+
return (this.status === 3 /* PRE_RECORDING */ || this.status === 4 /* RECORDING */);
|
|
8699
8746
|
}
|
|
8700
8747
|
isActive() {
|
|
8701
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
8748
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 9 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
8702
8749
|
}
|
|
8703
8750
|
prevItem() {
|
|
8704
8751
|
let newPrIdx = this._promptIndex;
|
|
@@ -8759,7 +8806,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8759
8806
|
}
|
|
8760
8807
|
}
|
|
8761
8808
|
started() {
|
|
8762
|
-
this.status =
|
|
8809
|
+
this.status = 3 /* PRE_RECORDING */;
|
|
8763
8810
|
super.started();
|
|
8764
8811
|
this.startStopSignalState = 1 /* PRERECORDING */;
|
|
8765
8812
|
if (this._session) {
|
|
@@ -8813,7 +8860,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8813
8860
|
this.maxRecTimerRunning = true;
|
|
8814
8861
|
this.preRecTimerId = window.setTimeout(() => {
|
|
8815
8862
|
this.preRecTimerRunning = false;
|
|
8816
|
-
this.status =
|
|
8863
|
+
this.status = 4 /* RECORDING */;
|
|
8817
8864
|
this.startStopSignalState = 3 /* RECORDING */;
|
|
8818
8865
|
if (this.section.mode === 'AUTORECORDING') {
|
|
8819
8866
|
this.transportActions.nextAction.disabled = false;
|
|
@@ -8832,19 +8879,19 @@ class SessionManager extends BasicRecorder {
|
|
|
8832
8879
|
this.preRecTimerRunning = true;
|
|
8833
8880
|
}
|
|
8834
8881
|
stopItem() {
|
|
8835
|
-
this.status =
|
|
8882
|
+
this.status = 5 /* POST_REC_STOP */;
|
|
8836
8883
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8837
8884
|
this.transportActions.stopAction.disabled = true;
|
|
8838
8885
|
this.transportActions.nextAction.disabled = true;
|
|
8839
8886
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8840
8887
|
this.postRecTimerRunning = false;
|
|
8841
|
-
this.status =
|
|
8888
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8842
8889
|
this.stopRecording();
|
|
8843
8890
|
}, this.postDelay);
|
|
8844
8891
|
this.postRecTimerRunning = true;
|
|
8845
8892
|
}
|
|
8846
8893
|
pauseItem() {
|
|
8847
|
-
this.status =
|
|
8894
|
+
this.status = 6 /* POST_REC_PAUSE */;
|
|
8848
8895
|
this.transportActions.pauseAction.disabled = true;
|
|
8849
8896
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8850
8897
|
this.transportActions.stopAction.disabled = true;
|
|
@@ -8852,7 +8899,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8852
8899
|
this.transportActions.pauseAction.disabled = true;
|
|
8853
8900
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8854
8901
|
this.postRecTimerRunning = false;
|
|
8855
|
-
this.status =
|
|
8902
|
+
this.status = 8 /* STOPPING_PAUSE */;
|
|
8856
8903
|
this.stopRecording();
|
|
8857
8904
|
}, this.postDelay);
|
|
8858
8905
|
this.postRecTimerRunning = true;
|
|
@@ -8876,7 +8923,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8876
8923
|
this.postRecTimerRunning = false;
|
|
8877
8924
|
}
|
|
8878
8925
|
this.maxRecTimerRunning = false;
|
|
8879
|
-
this.status =
|
|
8926
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8880
8927
|
if (this.ac) {
|
|
8881
8928
|
this.ac.stop();
|
|
8882
8929
|
}
|
|
@@ -8968,7 +9015,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8968
9015
|
}
|
|
8969
9016
|
}
|
|
8970
9017
|
}
|
|
8971
|
-
let autoStart = (this.status ===
|
|
9018
|
+
let autoStart = (this.status === 7 /* STOPPING_STOP */);
|
|
8972
9019
|
this.status = 1 /* IDLE */;
|
|
8973
9020
|
let startNext = false;
|
|
8974
9021
|
if (complete) {
|
|
@@ -9305,7 +9352,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9305
9352
|
ngAfterViewInit() {
|
|
9306
9353
|
// let wakeLockSupp=('wakeLock' in navigator);
|
|
9307
9354
|
// alert('Wake lock API supported: '+wakeLockSupp);
|
|
9308
|
-
if (this.sm.status !==
|
|
9355
|
+
if (this.sm.status !== 9 /* ERROR */) {
|
|
9309
9356
|
let initSuccess = this.init();
|
|
9310
9357
|
if (initSuccess) {
|
|
9311
9358
|
this.route.queryParams.subscribe((params) => {
|
|
@@ -11331,7 +11378,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11331
11378
|
context = AudioContextProvider.audioContextInstance();
|
|
11332
11379
|
}
|
|
11333
11380
|
catch (err) {
|
|
11334
|
-
this.status =
|
|
11381
|
+
this.status = 5 /* ERROR */;
|
|
11335
11382
|
let errMsg = 'Unknown error';
|
|
11336
11383
|
if (err instanceof Error) {
|
|
11337
11384
|
errMsg = err.message;
|
|
@@ -11355,7 +11402,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11355
11402
|
console.info("No audio context available!");
|
|
11356
11403
|
}
|
|
11357
11404
|
if (!context || !navigator.mediaDevices) {
|
|
11358
|
-
this.status =
|
|
11405
|
+
this.status = 5 /* ERROR */;
|
|
11359
11406
|
let errMsg = 'Browser does not support Media streams!';
|
|
11360
11407
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
11361
11408
|
this.statusAlertType = 'error';
|
|
@@ -11610,7 +11657,12 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11610
11657
|
}
|
|
11611
11658
|
}
|
|
11612
11659
|
startItem() {
|
|
11660
|
+
this.status = 2 /* STARTING */;
|
|
11613
11661
|
super.startItem();
|
|
11662
|
+
if (this.readonly) {
|
|
11663
|
+
this.status = 1 /* IDLE */;
|
|
11664
|
+
return;
|
|
11665
|
+
}
|
|
11614
11666
|
this.transportActions.fwdAction.disabled = true;
|
|
11615
11667
|
this.transportActions.fwdNextAction.disabled = true;
|
|
11616
11668
|
this.transportActions.bwdAction.disabled = true;
|
|
@@ -11739,10 +11791,10 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11739
11791
|
this.updateStartActionDisableState();
|
|
11740
11792
|
}
|
|
11741
11793
|
isRecording() {
|
|
11742
|
-
return (this.status ===
|
|
11794
|
+
return (this.status === 3 /* RECORDING */);
|
|
11743
11795
|
}
|
|
11744
11796
|
isActive() {
|
|
11745
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
11797
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 5 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
11746
11798
|
}
|
|
11747
11799
|
updateWakeLock(dataSaved = this.dataSaved) {
|
|
11748
11800
|
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
@@ -11768,7 +11820,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11768
11820
|
}
|
|
11769
11821
|
}
|
|
11770
11822
|
started() {
|
|
11771
|
-
this.status =
|
|
11823
|
+
this.status = 3 /* RECORDING */;
|
|
11772
11824
|
super.started();
|
|
11773
11825
|
this.statusAlertType = 'info';
|
|
11774
11826
|
this.statusMsg = 'Recording...';
|
|
@@ -11782,7 +11834,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11782
11834
|
stopItem() {
|
|
11783
11835
|
this.transportActions.stopAction.disabled = true;
|
|
11784
11836
|
this.transportActions.nextAction.disabled = true;
|
|
11785
|
-
this.status =
|
|
11837
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11786
11838
|
this.stopRecording();
|
|
11787
11839
|
}
|
|
11788
11840
|
stopRecording() {
|
|
@@ -11796,7 +11848,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11796
11848
|
}
|
|
11797
11849
|
stopRecordingMaxRec() {
|
|
11798
11850
|
this.maxRecTimerRunning = false;
|
|
11799
|
-
this.status =
|
|
11851
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11800
11852
|
if (this.ac) {
|
|
11801
11853
|
this.ac.stop();
|
|
11802
11854
|
}
|
|
@@ -11850,11 +11902,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11850
11902
|
});
|
|
11851
11903
|
}
|
|
11852
11904
|
}
|
|
11853
|
-
// check complete session
|
|
11854
|
-
let complete = true;
|
|
11855
|
-
let autoStart = (this.status === 3 /* STOPPING_STOP */);
|
|
11856
11905
|
this.status = 1 /* IDLE */;
|
|
11857
|
-
let startNext = false;
|
|
11858
11906
|
this.navigationDisabled = false;
|
|
11859
11907
|
this.updateNavigationActions();
|
|
11860
11908
|
this.updateWakeLock();
|
|
@@ -12303,7 +12351,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
12303
12351
|
}]
|
|
12304
12352
|
}] });
|
|
12305
12353
|
|
|
12306
|
-
const VERSION = '2.25.
|
|
12354
|
+
const VERSION = '2.25.2';
|
|
12307
12355
|
|
|
12308
12356
|
/*
|
|
12309
12357
|
* Public API Surface of speechrecorderng
|