speechrecorderng 3.10.13 → 3.11.0
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/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export class MediaUtils {
|
|
2
|
-
static toMediaTime(timeInSeconds) {
|
|
3
|
-
let rest = timeInSeconds;
|
|
4
|
-
let hours = Math.floor(timeInSeconds / 3600);
|
|
5
|
-
rest -= hours * 3600;
|
|
6
|
-
let minutes = Math.floor(rest / 60);
|
|
7
|
-
rest -= minutes * 60;
|
|
8
|
-
let seconds = Math.floor(rest);
|
|
9
|
-
rest -= seconds;
|
|
10
|
-
let millis = Math.round(rest * 1000);
|
|
11
|
-
return hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0') + '.' + millis.toString().padStart(3, '0');
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbWVkaWEvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFVBQVU7SUFFbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFvQjtRQUNuQyxJQUFJLElBQUksR0FBQyxhQUFhLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFFLEtBQUssR0FBQyxJQUFJLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFFLE9BQU8sR0FBQyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUUsT0FBTyxDQUFDO1FBQ2QsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsR0FBQyxHQUFHLEdBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEdBQUMsR0FBRyxHQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxHQUFDLEdBQUcsR0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoSyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGV4cG9ydCBjbGFzcyBNZWRpYVV0aWxzIHtcclxuXHJcbiAgICAgICAgc3RhdGljIHRvTWVkaWFUaW1lKHRpbWVJblNlY29uZHM6bnVtYmVyKTpzdHJpbmd7XHJcbiAgICAgICAgICAgIGxldCByZXN0PXRpbWVJblNlY29uZHM7XHJcbiAgICAgICAgICAgIGxldCBob3Vycz1NYXRoLmZsb29yKHRpbWVJblNlY29uZHMvMzYwMCk7XHJcbiAgICAgICAgICAgIHJlc3QtPWhvdXJzKjM2MDA7XHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzPU1hdGguZmxvb3IocmVzdC82MCk7XHJcbiAgICAgICAgICAgIHJlc3QtPW1pbnV0ZXMqNjA7XHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzPU1hdGguZmxvb3IocmVzdCk7XHJcbiAgICAgICAgICAgIHJlc3QtPXNlY29uZHM7XHJcbiAgICAgICAgICAgIGxldCBtaWxsaXM9TWF0aC5yb3VuZChyZXN0KjEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJzonK21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJzonK3NlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykrJy4nK21pbGxpcy50b1N0cmluZygpLnBhZFN0YXJ0KDMsJzAnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiJdfQ==
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
import { timeout } from 'rxjs/operators';
|
|
2
|
-
// state of an upload
|
|
3
|
-
export var UploadStatus;
|
|
4
|
-
(function (UploadStatus) {
|
|
5
|
-
UploadStatus[UploadStatus["IDLE"] = 1] = "IDLE";
|
|
6
|
-
UploadStatus[UploadStatus["UPLOADING"] = 2] = "UPLOADING";
|
|
7
|
-
UploadStatus[UploadStatus["ABORT"] = 3] = "ABORT";
|
|
8
|
-
UploadStatus[UploadStatus["DONE"] = 0] = "DONE";
|
|
9
|
-
UploadStatus[UploadStatus["ERR"] = -1] = "ERR";
|
|
10
|
-
})(UploadStatus || (UploadStatus = {}));
|
|
11
|
-
// state of the uploader
|
|
12
|
-
// TRY_UPLOADING is uploading state after an error (for example if disconnected from server)
|
|
13
|
-
export var UploaderStatus;
|
|
14
|
-
(function (UploaderStatus) {
|
|
15
|
-
UploaderStatus[UploaderStatus["DONE"] = 0] = "DONE";
|
|
16
|
-
UploaderStatus[UploaderStatus["UPLOADING"] = 1] = "UPLOADING";
|
|
17
|
-
UploaderStatus[UploaderStatus["TRY_UPLOADING"] = 2] = "TRY_UPLOADING";
|
|
18
|
-
UploaderStatus[UploaderStatus["NEXT"] = 3] = "NEXT";
|
|
19
|
-
UploaderStatus[UploaderStatus["ERR"] = -1] = "ERR";
|
|
20
|
-
})(UploaderStatus || (UploaderStatus = {}));
|
|
21
|
-
export class UploaderStatusChangeEvent {
|
|
22
|
-
constructor(sizeQueued, sizeDone, status) {
|
|
23
|
-
this._sizeQueued = sizeQueued;
|
|
24
|
-
this._sizeDone = sizeDone;
|
|
25
|
-
this._status = status;
|
|
26
|
-
}
|
|
27
|
-
get sizeQueued() {
|
|
28
|
-
return this._sizeQueued;
|
|
29
|
-
}
|
|
30
|
-
get sizeDone() {
|
|
31
|
-
return this._sizeDone;
|
|
32
|
-
}
|
|
33
|
-
sizeInQueue() {
|
|
34
|
-
return this._sizeQueued - this._sizeDone;
|
|
35
|
-
}
|
|
36
|
-
get status() {
|
|
37
|
-
return this._status;
|
|
38
|
-
}
|
|
39
|
-
uploadDone() {
|
|
40
|
-
return (this._sizeDone >= this._sizeQueued);
|
|
41
|
-
}
|
|
42
|
-
percentDone() {
|
|
43
|
-
if (this._sizeQueued == 0) {
|
|
44
|
-
// no data queued, we are "done"
|
|
45
|
-
return 100;
|
|
46
|
-
}
|
|
47
|
-
let percent = Math.floor(this._sizeDone * 100 / this._sizeQueued);
|
|
48
|
-
//console.log("Upload status: queued: "+this._sizeQueued+", done: "+this._sizeDone+", "+percent+"%")
|
|
49
|
-
return percent;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
export class Upload {
|
|
53
|
-
get serverPersistable() {
|
|
54
|
-
return this._serverPersistable;
|
|
55
|
-
}
|
|
56
|
-
constructor(blob, url, _serverPersistable = null) {
|
|
57
|
-
this._serverPersistable = _serverPersistable;
|
|
58
|
-
this.onDone = null;
|
|
59
|
-
this.toString = () => {
|
|
60
|
-
let s = `Upload: Status: ${this.status}, URL: ${this._url}`;
|
|
61
|
-
if (this._data instanceof Blob) {
|
|
62
|
-
s = s + `, Size: ${this._data.size}`;
|
|
63
|
-
}
|
|
64
|
-
else if (this._data instanceof FormData) {
|
|
65
|
-
// TODO (iterate through parts ??)
|
|
66
|
-
}
|
|
67
|
-
return s;
|
|
68
|
-
};
|
|
69
|
-
this._data = blob;
|
|
70
|
-
this._url = url;
|
|
71
|
-
this.status = UploadStatus.IDLE;
|
|
72
|
-
}
|
|
73
|
-
get url() {
|
|
74
|
-
return this._url;
|
|
75
|
-
}
|
|
76
|
-
get data() {
|
|
77
|
-
return this._data;
|
|
78
|
-
}
|
|
79
|
-
done() {
|
|
80
|
-
this.status = UploadStatus.DONE;
|
|
81
|
-
//console.debug("Single upload done.");
|
|
82
|
-
if (this._serverPersistable) {
|
|
83
|
-
this._serverPersistable.serverPersisted = true;
|
|
84
|
-
//console.debug("Single upload set server persisted: "+this.serverPersistable);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
//console.debug("Server persistable not set.");
|
|
88
|
-
}
|
|
89
|
-
if (this.onDone) {
|
|
90
|
-
this.onDone(this);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
export class UploadHolder {
|
|
95
|
-
constructor() {
|
|
96
|
-
this.onUploadSet = null;
|
|
97
|
-
this._upload = null;
|
|
98
|
-
}
|
|
99
|
-
get upload() {
|
|
100
|
-
return this._upload;
|
|
101
|
-
}
|
|
102
|
-
set upload(value) {
|
|
103
|
-
this._upload = value;
|
|
104
|
-
if (this._upload && this.onUploadSet) {
|
|
105
|
-
this.onUploadSet(this._upload);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
export class UploadSet {
|
|
110
|
-
constructor() {
|
|
111
|
-
this.uploads = new Array();
|
|
112
|
-
this._complete = false;
|
|
113
|
-
this._onDone = null;
|
|
114
|
-
}
|
|
115
|
-
add(upload) {
|
|
116
|
-
if (this._complete) {
|
|
117
|
-
throw new Error('Cannot add upload to upload set. Upload set already complete.');
|
|
118
|
-
}
|
|
119
|
-
if (upload instanceof UploadHolder) {
|
|
120
|
-
upload.onUploadSet = (upl) => {
|
|
121
|
-
upl.onDone = () => {
|
|
122
|
-
this.checkUploadStates();
|
|
123
|
-
};
|
|
124
|
-
this.checkUploadStates();
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
this.uploads.push(upload);
|
|
128
|
-
}
|
|
129
|
-
complete() {
|
|
130
|
-
// Mark set as complete
|
|
131
|
-
this._complete = true;
|
|
132
|
-
// add listeners to each upload
|
|
133
|
-
for (let upl of this.uploads) {
|
|
134
|
-
if (upl instanceof Upload) {
|
|
135
|
-
upl.onDone = (upl) => {
|
|
136
|
-
this.checkUploadStates();
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
else if (upl instanceof UploadHolder) {
|
|
140
|
-
if (upl.upload) {
|
|
141
|
-
upl.upload.onDone = (upl) => {
|
|
142
|
-
this.checkUploadStates();
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// check immediately if already done
|
|
148
|
-
this.checkUploadStates();
|
|
149
|
-
}
|
|
150
|
-
set onDone(value) {
|
|
151
|
-
this._onDone = value;
|
|
152
|
-
this.checkUploadStates();
|
|
153
|
-
}
|
|
154
|
-
checkUploadStates() {
|
|
155
|
-
//console.debug("Check upload state...")
|
|
156
|
-
if (this._complete) {
|
|
157
|
-
if (this._onDone) {
|
|
158
|
-
for (let upl of this.uploads) {
|
|
159
|
-
if (upl instanceof Upload) {
|
|
160
|
-
if (UploadStatus.DONE !== upl.status) {
|
|
161
|
-
// At least this upload is not yet done
|
|
162
|
-
// Do nothing
|
|
163
|
-
//console.debug("Check upload state: Upload not done.")
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
else if (upl instanceof UploadHolder) {
|
|
168
|
-
if (upl.upload) {
|
|
169
|
-
if (UploadStatus.DONE !== upl.upload.status) {
|
|
170
|
-
// At least this upload is not yet done
|
|
171
|
-
// Do nothing
|
|
172
|
-
//console.debug("Check upload state: Upload (holder) not done.")
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
// The actual upload is not yet set
|
|
178
|
-
//console.debug("Check upload state: Upload (holder): upload not yet set.")
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
// set is complete and all upload parts are done, call done callback
|
|
184
|
-
//console.debug("Check upload state: All done.")
|
|
185
|
-
this._onDone(this);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
export class Uploader {
|
|
191
|
-
constructor(http, withCredentials = false) {
|
|
192
|
-
this.http = http;
|
|
193
|
-
this.withCredentials = withCredentials;
|
|
194
|
-
this.POST_MIN_TIMEOUT = 120000; // 2min plus ...
|
|
195
|
-
this.POST_TIMEOUT_PER_KB = 1000; // ... 1s per kB
|
|
196
|
-
this.RETRY_DELAY = 30000; // retry every 30s
|
|
197
|
-
this.DEBUG_DELAY = 0;
|
|
198
|
-
//DEBUG_DELAY:number=0;
|
|
199
|
-
this.status = UploaderStatus.DONE;
|
|
200
|
-
this.listener = null;
|
|
201
|
-
this._sizeQueued = 0;
|
|
202
|
-
this._sizeDone = 0;
|
|
203
|
-
this.retryTimerRunning = false;
|
|
204
|
-
this.retryTimerId = null;
|
|
205
|
-
this.te = new TextEncoder();
|
|
206
|
-
this.que = new Array();
|
|
207
|
-
}
|
|
208
|
-
dataSize(dt) {
|
|
209
|
-
let si = 0;
|
|
210
|
-
if (dt instanceof Blob) {
|
|
211
|
-
si = dt.size;
|
|
212
|
-
}
|
|
213
|
-
else if (dt instanceof FormData) {
|
|
214
|
-
dt.forEach((v, k) => {
|
|
215
|
-
if (v instanceof File) {
|
|
216
|
-
si += v.size;
|
|
217
|
-
}
|
|
218
|
-
else if (typeof v === 'string') {
|
|
219
|
-
// encode to UTF-8 to get upload size
|
|
220
|
-
si += this.te.encode().length;
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
return si;
|
|
225
|
-
}
|
|
226
|
-
uploadDone(ul) {
|
|
227
|
-
ul.done();
|
|
228
|
-
// remove upload from queue
|
|
229
|
-
for (let i = 0; i < this.que.length; i++) {
|
|
230
|
-
if (this.que[i] === ul) {
|
|
231
|
-
// found, remove
|
|
232
|
-
this.que.splice(i, 1);
|
|
233
|
-
let ulSize = this.dataSize(ul.data);
|
|
234
|
-
this._sizeDone += ulSize;
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// set to done for now...
|
|
239
|
-
this.status = UploaderStatus.NEXT;
|
|
240
|
-
// continue
|
|
241
|
-
this.process();
|
|
242
|
-
}
|
|
243
|
-
startUpload(ul) {
|
|
244
|
-
ul.status = UploadStatus.UPLOADING;
|
|
245
|
-
if (UploaderStatus.ERR === this.status) {
|
|
246
|
-
this.status = UploaderStatus.TRY_UPLOADING;
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
this.status = UploaderStatus.UPLOADING;
|
|
250
|
-
}
|
|
251
|
-
let dSize = this.dataSize(ul.data);
|
|
252
|
-
let timeoutForDataSize = dSize * this.POST_TIMEOUT_PER_KB / 1000;
|
|
253
|
-
let timeoVal = Math.round(this.POST_MIN_TIMEOUT + timeoutForDataSize);
|
|
254
|
-
// pipe(timeout()) is not the same as xhr.timeout
|
|
255
|
-
let uploadedUpload = null;
|
|
256
|
-
//console.debug("Post upload: "+ul)
|
|
257
|
-
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe({
|
|
258
|
-
next: (data) => {
|
|
259
|
-
uploadedUpload = ul;
|
|
260
|
-
//console.debug('Next method called for upload: '+uploadedUpload)
|
|
261
|
-
},
|
|
262
|
-
error: (err) => {
|
|
263
|
-
if (err.error instanceof Error) {
|
|
264
|
-
// A client-side or network error occurred. Handle it accordingly.
|
|
265
|
-
console.error('Upload error occurred:', err.error.message);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
// The backend returned an unsuccessful response code.
|
|
269
|
-
// The response body may contain clues as to what went wrong,
|
|
270
|
-
console.error(`Upload error: Server returned code ${err.status}`);
|
|
271
|
-
}
|
|
272
|
-
this.processError(ul);
|
|
273
|
-
}, complete: () => {
|
|
274
|
-
//console.debug('Upload complete method called')
|
|
275
|
-
if (uploadedUpload) {
|
|
276
|
-
if (this.DEBUG_DELAY > 0) {
|
|
277
|
-
window.setTimeout(() => {
|
|
278
|
-
this.uploadDone(ul);
|
|
279
|
-
}, this.DEBUG_DELAY);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
this.uploadDone(uploadedUpload);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
console.error('Upload post complete, but upload not set in next method!');
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
processError(ul) {
|
|
292
|
-
//console.debug("Process upload error...")
|
|
293
|
-
ul.status = UploadStatus.ERR;
|
|
294
|
-
this.status = UploaderStatus.ERR;
|
|
295
|
-
let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);
|
|
296
|
-
if (this.listener) {
|
|
297
|
-
this.listener(ue);
|
|
298
|
-
}
|
|
299
|
-
// set retry timer
|
|
300
|
-
this.retryTimerId = window.setTimeout(() => {
|
|
301
|
-
this.retryTimerRunning = false;
|
|
302
|
-
//console.debug("Upload retry timer expired. Continue processing...")
|
|
303
|
-
this.process();
|
|
304
|
-
}, this.RETRY_DELAY);
|
|
305
|
-
this.retryTimerRunning = true;
|
|
306
|
-
//console.debug("Started upload retry timer "+this.RETRY_DELAY+"ms ...")
|
|
307
|
-
}
|
|
308
|
-
process() {
|
|
309
|
-
// clear retry timer if set
|
|
310
|
-
if (this.retryTimerRunning) {
|
|
311
|
-
if (this.retryTimerId) {
|
|
312
|
-
window.clearTimeout(this.retryTimerId);
|
|
313
|
-
}
|
|
314
|
-
this.retryTimerRunning = false;
|
|
315
|
-
//console.debug("Cleared retry timer.")
|
|
316
|
-
}
|
|
317
|
-
let pul = null;
|
|
318
|
-
//console.debug("Uploader status: "+this.status)
|
|
319
|
-
let s = this.que.length;
|
|
320
|
-
//console.debug(s+" uploads are in the queue.")
|
|
321
|
-
if (s > 0 && UploaderStatus.UPLOADING != this.status && UploaderStatus.TRY_UPLOADING != this.status) {
|
|
322
|
-
for (let i = 0; i < s; i++) {
|
|
323
|
-
let ul = this.que[i];
|
|
324
|
-
//console.log("Upload "+ul+" status:"+ul.status)
|
|
325
|
-
if (ul.status === UploadStatus.IDLE) {
|
|
326
|
-
//console.log("Upload "+ul+" startUpload")
|
|
327
|
-
this.startUpload(ul);
|
|
328
|
-
pul = ul;
|
|
329
|
-
break;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
if (!pul) {
|
|
333
|
-
//console.log("Check ERR uploads...")
|
|
334
|
-
// now failed uploads
|
|
335
|
-
//console.debug("No regular upload found. Looking for error state uploads.")
|
|
336
|
-
for (let i = 0; i < s; i++) {
|
|
337
|
-
let ul = this.que[i];
|
|
338
|
-
//console.log("Upload "+ul+" status:"+ul.status)
|
|
339
|
-
if (ul.status === UploadStatus.ERR) {
|
|
340
|
-
//console.log("Upload (ERR) "+ul+" startUpload")
|
|
341
|
-
//console.debug("Start error state upload "+ul)
|
|
342
|
-
this.startUpload(ul);
|
|
343
|
-
pul = ul;
|
|
344
|
-
break;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
if (s == 0) {
|
|
350
|
-
//console.debug("Upload done.")
|
|
351
|
-
this.status = UploaderStatus.DONE;
|
|
352
|
-
}
|
|
353
|
-
let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);
|
|
354
|
-
if (this.listener) {
|
|
355
|
-
this.listener(ue);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
queueUpload(ul) {
|
|
359
|
-
if (ul) {
|
|
360
|
-
let ulSize = this.dataSize(ul.data);
|
|
361
|
-
this.que.push(ul);
|
|
362
|
-
this._sizeQueued += ulSize;
|
|
363
|
-
this.process();
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvbmV0L3VwbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxxQkFBcUI7QUFDckIsTUFBTSxDQUFOLElBQVksWUFBc0U7QUFBbEYsV0FBWSxZQUFZO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLHlEQUFhLENBQUE7SUFBRyxpREFBUyxDQUFBO0lBQUUsK0NBQVEsQ0FBQTtJQUFFLDhDQUFRLENBQUE7QUFBQSxDQUFDLEVBQXRFLFlBQVksS0FBWixZQUFZLFFBQTBEO0FBRWxGLHdCQUF3QjtBQUN4Qiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFOLElBQVksY0FBK0U7QUFBM0YsV0FBWSxjQUFjO0lBQUcsbURBQVEsQ0FBQTtJQUFFLDZEQUFhLENBQUE7SUFBRSxxRUFBaUIsQ0FBQTtJQUFDLG1EQUFRLENBQUE7SUFBRSxrREFBUSxDQUFBO0FBQUEsQ0FBQyxFQUEvRSxjQUFjLEtBQWQsY0FBYyxRQUFpRTtBQUUzRixNQUFNLE9BQU8seUJBQXlCO0lBTWxDLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQXNCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsU0FB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QyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbiAgICBpbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4gICAgLy8gc3RhdGUgb2YgYW4gdXBsb2FkXHJcbiAgICBleHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge0lETEUgPSAxLCBVUExPQURJTkcgPSAyLCAgQUJPUlQgPSAzLCBET05FID0gMCwgRVJSID0gLTF9XHJcblxyXG4gICAgLy8gc3RhdGUgb2YgdGhlIHVwbG9hZGVyXHJcbiAgICAvLyBUUllfVVBMT0FESU5HIGlzIHVwbG9hZGluZyBzdGF0ZSBhZnRlciBhbiBlcnJvciAoZm9yIGV4YW1wbGUgaWYgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyKVxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkZXJTdGF0dXMgeyBET05FID0gMCwgVVBMT0FESU5HID0gMSwgVFJZX1VQTE9BRElORyA9IDIsTkVYVCA9IDMsIEVSUiA9IC0xfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50IHtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9zaXplUXVldWVkOm51bWJlcjtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9zaXplRG9uZTpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzOiBVcGxvYWRlclN0YXR1cztcclxuXHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHNpemVRdWV1ZWQ6IG51bWJlciwgc2l6ZURvbmU6IG51bWJlciwgc3RhdHVzOiBVcGxvYWRlclN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkID0gc2l6ZVF1ZXVlZDtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZURvbmUgPSBzaXplRG9uZTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IHNpemVRdWV1ZWQoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplRG9uZSgpOm51bWJlciB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNpemVJblF1ZXVlKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVF1ZXVlZC10aGlzLl9zaXplRG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzdGF0dXMoKTogVXBsb2FkZXJTdGF0dXMge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBsb2FkRG9uZSgpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9zaXplRG9uZSA+PSB0aGlzLl9zaXplUXVldWVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmNlbnREb25lKCk6IG51bWJlciB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaXplUXVldWVkID09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEgcXVldWVkLCB3ZSBhcmUgXCJkb25lXCJcclxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBlcmNlbnQgPSBNYXRoLmZsb29yKHRoaXMuX3NpemVEb25lICogMTAwIC8gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgc3RhdHVzOiBxdWV1ZWQ6IFwiK3RoaXMuX3NpemVRdWV1ZWQrXCIsIGRvbmU6IFwiK3RoaXMuX3NpemVEb25lK1wiLCBcIitwZXJjZW50K1wiJVwiKVxyXG4gICAgICAgICAgICByZXR1cm4gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWQge1xyXG5cclxuICAgICAgZ2V0IHNlcnZlclBlcnNpc3RhYmxlKCk6IFNlcnZlclBlcnNpc3RhYmxlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6QmxvYnxGb3JtRGF0YTtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF91cmw6c3RyaW5nO1xyXG5cclxuICAgICAgICBzdGF0dXM6IFVwbG9hZFN0YXR1cztcclxuICAgICAgICBvbkRvbmU6KCh1cGxvYWQ6VXBsb2FkKT0+dm9pZCkgfCBudWxsPW51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKGJsb2I6QmxvYnxGb3JtRGF0YSwgdXJsOnN0cmluZyxwcml2YXRlIF9zZXJ2ZXJQZXJzaXN0YWJsZTpTZXJ2ZXJQZXJzaXN0YWJsZXxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuSURMRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCB1cmwoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IGRhdGEoKTpCbG9ifEZvcm1EYXRhIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb25lKCl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzPVVwbG9hZFN0YXR1cy5ET05FO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTaW5nbGUgdXBsb2FkIGRvbmUuXCIpO1xyXG4gICAgICAgICAgICBpZih0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NlcnZlclBlcnNpc3RhYmxlLnNlcnZlclBlcnNpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBzZXQgc2VydmVyIHBlcnNpc3RlZDogXCIrdGhpcy5zZXJ2ZXJQZXJzaXN0YWJsZSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlcnZlciBwZXJzaXN0YWJsZSBub3Qgc2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLm9uRG9uZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkRvbmUodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIHB1YmxpYyB0b1N0cmluZyA9ICgpIDogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgcz1gVXBsb2FkOiBTdGF0dXM6ICR7dGhpcy5zdGF0dXN9LCBVUkw6ICR7dGhpcy5fdXJsfWA7XHJcbiAgICAgICAgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIEJsb2Ipe1xyXG4gICAgICAgICAgICBzPXMrYCwgU2l6ZTogJHt0aGlzLl9kYXRhLnNpemV9YDtcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAvLyBUT0RPIChpdGVyYXRlIHRocm91Z2ggcGFydHMgPz8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZEhvbGRlcntcclxuXHJcbiAgICAgIG9uVXBsb2FkU2V0OigodXBsb2FkOlVwbG9hZCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGdldCB1cGxvYWQoKTogVXBsb2FkIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IHVwbG9hZCh2YWx1ZTogVXBsb2FkIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZCA9IHZhbHVlO1xyXG4gICAgICAgIGlmKHRoaXMuX3VwbG9hZCAmJiB0aGlzLm9uVXBsb2FkU2V0KXtcclxuICAgICAgICAgIHRoaXMub25VcGxvYWRTZXQodGhpcy5fdXBsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcHJpdmF0ZSBfdXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZFNldHtcclxuXHJcbiAgICAgIHByaXZhdGUgdXBsb2FkczogQXJyYXk8VXBsb2FkfFVwbG9hZEhvbGRlcj49bmV3IEFycmF5PFVwbG9hZHxVcGxvYWRIb2xkZXI+KCk7XHJcbiAgICAgIHByaXZhdGUgX2NvbXBsZXRlPWZhbHNlO1xyXG5cclxuICAgICAgcHJpdmF0ZSBfb25Eb25lOigodXBsb2FkU2V0OlVwbG9hZFNldCk9PnZvaWQpfG51bGw9bnVsbDtcclxuXHJcbiAgICAgIGFkZCh1cGxvYWQ6VXBsb2FkfFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCB1cGxvYWQgdG8gdXBsb2FkIHNldC4gVXBsb2FkIHNldCBhbHJlYWR5IGNvbXBsZXRlLicpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHVwbG9hZCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICB1cGxvYWQub25VcGxvYWRTZXQ9KHVwbCk9PntcclxuICAgICAgICAgICAgdXBsLm9uRG9uZT0oKT0+e1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKHVwbG9hZCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21wbGV0ZSgpe1xyXG4gICAgICAgIC8vIE1hcmsgc2V0IGFzIGNvbXBsZXRlXHJcbiAgICAgICAgdGhpcy5fY29tcGxldGU9dHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGxpc3RlbmVycyB0byBlYWNoIHVwbG9hZFxyXG4gICAgICAgIGZvcihsZXQgdXBsIG9mIHRoaXMudXBsb2Fkcyl7XHJcbiAgICAgICAgICBpZih1cGwgaW5zdGFuY2VvZiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgdXBsLm9uRG9uZSA9ICh1cGw6IFVwbG9hZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgaWYodXBsLnVwbG9hZCl7XHJcbiAgICAgICAgICAgICAgdXBsLnVwbG9hZC5vbkRvbmUgPSAodXBsOiBVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgZG9uZVxyXG4gICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IG9uRG9uZSh2YWx1ZTogKCh1cGxvYWRTZXQ6IFVwbG9hZFNldCkgPT4gdm9pZCkgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fb25Eb25lID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jaGVja1VwbG9hZFN0YXRlcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIGNoZWNrVXBsb2FkU3RhdGVzKCl7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlLi4uXCIpXHJcbiAgICAgICAgaWYodGhpcy5fY29tcGxldGUpe1xyXG5cclxuICAgICAgICAgIGlmKHRoaXMuX29uRG9uZSkge1xyXG4gICAgICAgICAgICBmb3IobGV0IHVwbCBvZiB0aGlzLnVwbG9hZHMpe1xyXG4gICAgICAgICAgICAgIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFVwbG9hZFN0YXR1cy5ET05FICE9PSB1cGwuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEF0IGxlYXN0IHRoaXMgdXBsb2FkIGlzIG5vdCB5ZXQgZG9uZVxyXG4gICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkSG9sZGVyKXtcclxuICAgICAgICAgICAgICAgIGlmKHVwbC51cGxvYWQpe1xyXG4gICAgICAgICAgICAgICAgICBpZiAoVXBsb2FkU3RhdHVzLkRPTkUgIT09IHVwbC51cGxvYWQuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQXQgbGVhc3QgdGhpcyB1cGxvYWQgaXMgbm90IHlldCBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpIG5vdCBkb25lLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwgdXBsb2FkIGlzIG5vdCB5ZXQgc2V0XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogVXBsb2FkIChob2xkZXIpOiB1cGxvYWQgbm90IHlldCBzZXQuXCIpXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IGlzIGNvbXBsZXRlIGFuZCBhbGwgdXBsb2FkIHBhcnRzIGFyZSBkb25lLCBjYWxsIGRvbmUgY2FsbGJhY2tcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2hlY2sgdXBsb2FkIHN0YXRlOiBBbGwgZG9uZS5cIilcclxuICAgICAgICAgICAgdGhpcy5fb25Eb25lKHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgU2VydmVyUGVyc2lzdGFibGV7XHJcbiAgICAgICAgc2VydmVyUGVyc2lzdGVkOmJvb2xlYW47XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFVwbG9hZGVyIHtcclxuICAgICAgICBQT1NUX01JTl9USU1FT1VUID0gMTIwMDAwOyAvLyAybWluIHBsdXMgLi4uXHJcbiAgICAgICAgUE9TVF9USU1FT1VUX1BFUl9LQiA9IDEwMDA7ICAvLyAuLi4gMXMgcGVyIGtCXHJcblxyXG4gICAgICAgIFJFVFJZX0RFTEFZOiBudW1iZXIgPSAzMDAwMDsgLy8gcmV0cnkgZXZlcnkgMzBzXHJcbiAgICAgICAgREVCVUdfREVMQVk6IG51bWJlciA9IDA7XHJcbiAgICAgICAgLy9ERUJVR19ERUxBWTpudW1iZXI9MDtcclxuICAgICAgICBwcml2YXRlIHN0YXR1czogVXBsb2FkZXJTdGF0dXMgPSBVcGxvYWRlclN0YXR1cy5ET05FO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcXVlOiBBcnJheTxVcGxvYWQ+O1xyXG4gICAgICAgIGxpc3RlbmVyOiAoKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVRdWV1ZWQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgcHJpdmF0ZSBfc2l6ZURvbmU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmV0cnlUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIHByaXZhdGUgdGU6VGV4dEVuY29kZXI9bmV3IFRleHRFbmNvZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZSA9IG5ldyBBcnJheTxVcGxvYWQ+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIGRhdGFTaXplKGR0OkJsb2J8Rm9ybURhdGEpe1xyXG4gICAgICAgICAgICBsZXQgc2k9MDtcclxuICAgICAgICAgICAgaWYoZHQgaW5zdGFuY2VvZiBCbG9iKXtcclxuICAgICAgICAgICAgICAgIHNpPWR0LnNpemU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGR0IGluc3RhbmNlb2YgIEZvcm1EYXRhKXtcclxuICAgICAgICAgICAgICAgIGR0LmZvckVhY2goKHYsayk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZih2IGluc3RhbmNlb2YgRmlsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz12LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHYgPT09J3N0cmluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGUgdG8gVVRGLTggdG8gZ2V0IHVwbG9hZCBzaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpKz0gdGhpcy50ZS5lbmNvZGUoKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlICB1cGxvYWREb25lKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuZG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHVwbG9hZCBmcm9tIHF1ZXVlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZVtpXSA9PT0gdWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCwgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWUuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpemVEb25lICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gZG9uZSBmb3Igbm93Li4uXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuTkVYVDtcclxuICAgICAgICAgICAgLy8gY29udGludWVcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVsOlVwbG9hZCkge1xyXG5cclxuICAgICAgICAgICAgdWwuc3RhdHVzID0gVXBsb2FkU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgaWYgKFVwbG9hZGVyU3RhdHVzLkVSUiA9PT0gdGhpcy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZFNpemU9dGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXRGb3JEYXRhU2l6ZT1kU2l6ZSp0aGlzLlBPU1RfVElNRU9VVF9QRVJfS0IvMTAwMDtcclxuICAgICAgICAgICAgbGV0IHRpbWVvVmFsOm51bWJlcj1NYXRoLnJvdW5kKHRoaXMuUE9TVF9NSU5fVElNRU9VVCt0aW1lb3V0Rm9yRGF0YVNpemUpXHJcbiAgICAgICAgICAgIC8vIHBpcGUodGltZW91dCgpKSBpcyBub3QgdGhlIHNhbWUgYXMgeGhyLnRpbWVvdXRcclxuXHJcbiAgICAgICAgICBsZXQgdXBsb2FkZWRVcGxvYWQ6VXBsb2FkfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUG9zdCB1cGxvYWQ6IFwiK3VsKVxyXG4gICAgICAgICAgICB0aGlzLmh0dHAucG9zdCh1bC51cmwsdWwuZGF0YSx7d2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzfSkucGlwZSh0aW1lb3V0KHRpbWVvVmFsKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhKT0+XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlZFVwbG9hZCA9IHVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ05leHQgbWV0aG9kIGNhbGxlZCBmb3IgdXBsb2FkOiAnK3VwbG9hZGVkVXBsb2FkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAsIGVycm9yOihlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBjbGllbnQtc2lkZSBvciBuZXR3b3JrIGVycm9yIG9jY3VycmVkLiBIYW5kbGUgaXQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgZXJyb3Igb2NjdXJyZWQ6JywgZXJyLmVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2UgYm9keSBtYXkgY29udGFpbiBjbHVlcyBhcyB0byB3aGF0IHdlbnQgd3JvbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBVcGxvYWQgZXJyb3I6IFNlcnZlciByZXR1cm5lZCBjb2RlICR7ZXJyLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcih1bClcclxuICAgICAgICAgICAgICAgICAgICB9LCBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ1VwbG9hZCBjb21wbGV0ZSBtZXRob2QgY2FsbGVkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwbG9hZGVkVXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ERUJVR19ERUxBWSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1bCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5ERUJVR19ERUxBWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRG9uZSh1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwbG9hZCBwb3N0IGNvbXBsZXRlLCBidXQgdXBsb2FkIG5vdCBzZXQgaW4gbmV4dCBtZXRob2QhJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9jZXNzRXJyb3IodWw6VXBsb2FkKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlByb2Nlc3MgdXBsb2FkIGVycm9yLi4uXCIpXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cz1VcGxvYWRTdGF0dXMuRVJSXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuRVJSO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVlID0gbmV3IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQodGhpcy5fc2l6ZVF1ZXVlZCwgdGhpcy5fc2l6ZURvbmUsIHRoaXMuc3RhdHVzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmV0cnkgdGltZXJcclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVySWQ9d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCByZXRyeSB0aW1lciBleHBpcmVkLiBDb250aW51ZSBwcm9jZXNzaW5nLi4uXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5SRVRSWV9ERUxBWSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPXRydWU7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlN0YXJ0ZWQgdXBsb2FkIHJldHJ5IHRpbWVyIFwiK3RoaXMuUkVUUllfREVMQVkrXCJtcyAuLi5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICBwcml2YXRlIHByb2Nlc3MoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgcmV0cnkgdGltZXIgaWYgc2V0XHJcbiAgICAgICAgaWYodGhpcy5yZXRyeVRpbWVyUnVubmluZyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmV0cnlUaW1lcklkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lcklkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJldHJ5VGltZXJSdW5uaW5nPWZhbHNlXHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDbGVhcmVkIHJldHJ5IHRpbWVyLlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHB1bDogVXBsb2FkIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZGVyIHN0YXR1czogXCIrdGhpcy5zdGF0dXMpXHJcblxyXG4gICAgICAgIGxldCBzID0gdGhpcy5xdWUubGVuZ3RoO1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhzK1wiIHVwbG9hZHMgYXJlIGluIHRoZSBxdWV1ZS5cIilcclxuXHJcbiAgICAgICAgaWYgKHM+MCAmJiBVcGxvYWRlclN0YXR1cy5VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMgJiYgVXBsb2FkZXJTdGF0dXMuVFJZX1VQTE9BRElORyAhPSB0aGlzLnN0YXR1cykge1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgczsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgIGlmICh1bC5zdGF0dXMgPT09IFVwbG9hZFN0YXR1cy5JRExFKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRVcGxvYWQodWwpO1xyXG4gICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXB1bCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQ2hlY2sgRVJSIHVwbG9hZHMuLi5cIilcclxuICAgICAgICAgICAgLy8gbm93IGZhaWxlZCB1cGxvYWRzXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIk5vIHJlZ3VsYXIgdXBsb2FkIGZvdW5kLiBMb29raW5nIGZvciBlcnJvciBzdGF0ZSB1cGxvYWRzLlwiKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCB1bCA9IHRoaXMucXVlW2ldO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhdHVzOlwiK3VsLnN0YXR1cylcclxuICAgICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuRVJSKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIChFUlIpIFwiK3VsK1wiIHN0YXJ0VXBsb2FkXCIpXHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydCBlcnJvciBzdGF0ZSB1cGxvYWQgXCIrdWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICAgIHB1bCA9IHVsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHM9PTApe1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVXBsb2FkIGRvbmUuXCIpXHJcbiAgICAgICAgICB0aGlzLnN0YXR1cz1VcGxvYWRlclN0YXR1cy5ET05FXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGlzdGVuZXIodWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBxdWV1ZVVwbG9hZCh1bDogVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIGlmICh1bCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVsU2l6ZSA9IHRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZS5wdXNoKHVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpemVRdWV1ZWQgKz0gdWxTaXplO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuIl19
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { SprDb } from "./db/inddb";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { PersistentAudioStorageTarget } from "./audio/inddb_audio_buffer";
|
|
4
|
-
export class RecorderComponent {
|
|
5
|
-
constructor(uploader) {
|
|
6
|
-
this.uploader = uploader;
|
|
7
|
-
this.dataSaved = true;
|
|
8
|
-
this._persistentAudioStorageTarget = null;
|
|
9
|
-
}
|
|
10
|
-
printStorageInfos() {
|
|
11
|
-
// Safari seems not to support the estimate function.
|
|
12
|
-
if (navigator.storage && navigator.storage.estimate instanceof Function) {
|
|
13
|
-
navigator.storage.estimate().then((se) => {
|
|
14
|
-
console.info("Estimated storage usage: " + se.usage + ", quota: " + se.quota);
|
|
15
|
-
}).catch((err) => "Could not get get storage infos: " + err.message);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
console.info("User agent does not support storage manager estimate function.");
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
prepare(persistentAudioStorage = false) {
|
|
22
|
-
if (persistentAudioStorage) {
|
|
23
|
-
this.printStorageInfos();
|
|
24
|
-
}
|
|
25
|
-
return new Observable(subscriber => {
|
|
26
|
-
if (persistentAudioStorage) {
|
|
27
|
-
SprDb.prepare().subscribe({
|
|
28
|
-
next: (db) => {
|
|
29
|
-
this._persistentAudioStorageTarget = new PersistentAudioStorageTarget(db, SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME);
|
|
30
|
-
//let delCnt=0;
|
|
31
|
-
this._persistentAudioStorageTarget.deleteAll().subscribe({
|
|
32
|
-
next: () => {
|
|
33
|
-
//delCnt++;
|
|
34
|
-
subscriber.next();
|
|
35
|
-
},
|
|
36
|
-
complete: () => {
|
|
37
|
-
//console.info('Storage info after deletion of all ('+delCnt+') entries:');
|
|
38
|
-
console.info('Persistent audio storage object store cleared.');
|
|
39
|
-
this.printStorageInfos();
|
|
40
|
-
subscriber.complete();
|
|
41
|
-
},
|
|
42
|
-
error: (err) => {
|
|
43
|
-
subscriber.error(err);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
window.addEventListener('beforeunload', (e) => {
|
|
47
|
-
if (this._persistentAudioStorageTarget) {
|
|
48
|
-
// Delete on page leave. Di not register callbacks to prevent page leave blocking
|
|
49
|
-
this._persistentAudioStorageTarget.deleteAll().subscribe();
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
error: (err) => {
|
|
54
|
-
subscriber.error(err);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
subscriber.next();
|
|
60
|
-
subscriber.complete();
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJfY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3JlY29yZGVyX2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFReEUsTUFBTSxPQUFnQixpQkFBaUI7SUFLbkMsWUFBc0IsUUFBK0I7UUFBL0IsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUFIckQsY0FBUyxHQUFZLElBQUksQ0FBQztRQUVoQixrQ0FBNkIsR0FBbUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFekQsaUJBQWlCO1FBQ2YscURBQXFEO1FBQ3JELElBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsWUFBWSxRQUFRLEVBQUUsQ0FBQztZQUN2RSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLG1DQUFtQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RSxDQUFDO2FBQUksQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxzQkFBc0IsR0FBQyxLQUFLO1FBRWhDLElBQUcsc0JBQXNCLEVBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0gsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3hCLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUNYLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQzt3QkFDeEgsZUFBZTt3QkFDZixJQUFJLENBQUMsNkJBQTZCLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDOzRCQUN2RCxJQUFJLEVBQUMsR0FBRSxFQUFFO2dDQUNQLFdBQVc7Z0NBQ1gsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUNwQixDQUFDOzRCQUNELFFBQVEsRUFBQyxHQUFFLEVBQUU7Z0NBQ1gsMkVBQTJFO2dDQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7Z0NBQy9ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dDQUN6QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ3hCLENBQUM7NEJBQ0QsS0FBSyxFQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0NBQ1gsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDeEIsQ0FBQzt5QkFFRixDQUFDLENBQUM7d0JBRUgsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFOzRCQUN4QyxJQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2dDQUNwQyxpRkFBaUY7Z0NBQ2pGLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDL0QsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFFTCxDQUFDO29CQUNELEtBQUssRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO3dCQUNYLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBSSxDQUFDO2dCQUNKLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNGLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc3BydXBsb2FkZXJcIjtcclxuaW1wb3J0IHtTcHJEYn0gZnJvbSBcIi4vZGIvaW5kZGJcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR9IGZyb20gXCIuL2F1ZGlvL2luZGRiX2F1ZGlvX2J1ZmZlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVhZHlTdGF0ZVByb3ZpZGVyIHtcclxuICAgIHJlYWR5KCk6Ym9vbGVhbjtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWNvcmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIFJlYWR5U3RhdGVQcm92aWRlcntcclxuXHJcbiAgICBkYXRhU2F2ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDpQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fG51bGw9bnVsbDtcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7fVxyXG5cclxuICAgIHByaW50U3RvcmFnZUluZm9zKCl7XHJcbiAgICAgIC8vIFNhZmFyaSBzZWVtcyBub3QgdG8gc3VwcG9ydCB0aGUgZXN0aW1hdGUgZnVuY3Rpb24uXHJcbiAgICAgIGlmKG5hdmlnYXRvci5zdG9yYWdlICYmIG5hdmlnYXRvci5zdG9yYWdlLmVzdGltYXRlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICBuYXZpZ2F0b3Iuc3RvcmFnZS5lc3RpbWF0ZSgpLnRoZW4oKHNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmluZm8oXCJFc3RpbWF0ZWQgc3RvcmFnZSB1c2FnZTogXCIgKyBzZS51c2FnZSArIFwiLCBxdW90YTogXCIgKyBzZS5xdW90YSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gXCJDb3VsZCBub3QgZ2V0IGdldCBzdG9yYWdlIGluZm9zOiBcIiArIGVyci5tZXNzYWdlKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiVXNlciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0IHN0b3JhZ2UgbWFuYWdlciBlc3RpbWF0ZSBmdW5jdGlvbi5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2U9ZmFsc2UpOk9ic2VydmFibGU8dm9pZD57XHJcblxyXG4gICAgICAgIGlmKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2Upe1xyXG4gICAgICAgICAgICB0aGlzLnByaW50U3RvcmFnZUluZm9zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgaWYgKHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2UpIHtcclxuICAgICAgICAgIFNwckRiLnByZXBhcmUoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGIpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gbmV3IFBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoZGIsIFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKTtcclxuICAgICAgICAgICAgICAvL2xldCBkZWxDbnQ9MDtcclxuICAgICAgICAgICAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LmRlbGV0ZUFsbCgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OigpPT57XHJcbiAgICAgICAgICAgICAgICAgIC8vZGVsQ250Kys7XHJcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOigpPT57XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5pbmZvKCdTdG9yYWdlIGluZm8gYWZ0ZXIgZGVsZXRpb24gb2YgYWxsICgnK2RlbENudCsnKSBlbnRyaWVzOicpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1BlcnNpc3RlbnQgYXVkaW8gc3RvcmFnZSBvYmplY3Qgc3RvcmUgY2xlYXJlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmludFN0b3JhZ2VJbmZvcygpO1xyXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsKGUpPT57XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBvbiBwYWdlIGxlYXZlLiBEaSBub3QgcmVnaXN0ZXIgY2FsbGJhY2tzIHRvIHByZXZlbnQgcGFnZSBsZWF2ZSBibG9ja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldC5kZWxldGVBbGwoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHJlYWR5KCk6Ym9vbGVhbjtcclxuICAgIGFic3RyYWN0IGdldCBzY3JlZW5Mb2NrZWQoKTpib29sZWFuO1xyXG59XHJcblxyXG4iXX0=
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export var ConstraintType;
|
|
2
|
-
(function (ConstraintType) {
|
|
3
|
-
ConstraintType["Exact"] = "EXACT";
|
|
4
|
-
ConstraintType["Ideal"] = "IDEAL";
|
|
5
|
-
})(ConstraintType || (ConstraintType = {}));
|
|
6
|
-
;
|
|
7
|
-
export var Platform;
|
|
8
|
-
(function (Platform) {
|
|
9
|
-
Platform["Linux"] = "LINUX";
|
|
10
|
-
Platform["macOS"] = "MACOS";
|
|
11
|
-
Platform["Windows"] = "WINDOWS";
|
|
12
|
-
Platform["Android"] = "ANDROID";
|
|
13
|
-
})(Platform || (Platform = {}));
|
|
14
|
-
export var BrowserBase;
|
|
15
|
-
(function (BrowserBase) {
|
|
16
|
-
BrowserBase["Chromium"] = "CHROMIUM";
|
|
17
|
-
})(BrowserBase || (BrowserBase = {}));
|
|
18
|
-
;
|
|
19
|
-
export var Browser;
|
|
20
|
-
(function (Browser) {
|
|
21
|
-
Browser["Firefox"] = "FIREFOX";
|
|
22
|
-
Browser["Chromium"] = "CHROMIUM";
|
|
23
|
-
Browser["Chrome"] = "CHROME";
|
|
24
|
-
Browser["Edge"] = "EDGE";
|
|
25
|
-
Browser["Opera"] = "OPERA";
|
|
26
|
-
})(Browser || (Browser = {}));
|
|
27
|
-
export var AudioStorageType;
|
|
28
|
-
(function (AudioStorageType) {
|
|
29
|
-
AudioStorageType["MEM_ENTIRE"] = "MEM_ENTIRE";
|
|
30
|
-
AudioStorageType["MEM_CHUNKED"] = "MEM_CHUNKED";
|
|
31
|
-
AudioStorageType["DB_CHUNKED"] = "DB_CHUNKED";
|
|
32
|
-
AudioStorageType["NET_CHUNKED"] = "NET_CHUNKED";
|
|
33
|
-
AudioStorageType["MEM_ENTIRE_AUTO_NET_CHUNKED"] = "MEM_ENTIRE_AUTO_NET_CHUNKED";
|
|
34
|
-
AudioStorageType["MEM_CHUNKED_AUTO_NET_CHUNKED"] = "MEM_CHUNKED_AUTO_NET_CHUNKED";
|
|
35
|
-
})(AudioStorageType || (AudioStorageType = {}));
|
|
36
|
-
export var AudioStorageFormatEncoding;
|
|
37
|
-
(function (AudioStorageFormatEncoding) {
|
|
38
|
-
AudioStorageFormatEncoding["PCM_SIGNED"] = "PCM_SIGNED";
|
|
39
|
-
AudioStorageFormatEncoding["PCM_FLOAT"] = "PCM_FLOAT";
|
|
40
|
-
})(AudioStorageFormatEncoding || (AudioStorageFormatEncoding = {}));
|
|
41
|
-
export class ProjectUtil {
|
|
42
|
-
static { this.DEFAULT_AUDIO_CHANNEL_COUNT = 2; }
|
|
43
|
-
static audioChannelCount(project) {
|
|
44
|
-
let chs = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
|
|
45
|
-
if (project.mediaCaptureFormat) {
|
|
46
|
-
chs = project.mediaCaptureFormat.audioChannelCount;
|
|
47
|
-
}
|
|
48
|
-
else if (project.audioFormat) {
|
|
49
|
-
chs = project.audioFormat.channels;
|
|
50
|
-
}
|
|
51
|
-
return chs;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sQ0FBTixJQUFZLGNBQTRDO0FBQXhELFdBQVksY0FBYztJQUFFLGlDQUFhLENBQUE7SUFBQyxpQ0FBYSxDQUFBO0FBQUEsQ0FBQyxFQUE1QyxjQUFjLEtBQWQsY0FBYyxRQUE4QjtBQUFBLENBQUM7QUFFekQsTUFBTSxDQUFOLElBQVksUUFBMEU7QUFBdEYsV0FBWSxRQUFRO0lBQUUsMkJBQWEsQ0FBQTtJQUFDLDJCQUFhLENBQUE7SUFBQywrQkFBaUIsQ0FBQTtJQUFDLCtCQUFpQixDQUFBO0FBQUEsQ0FBQyxFQUExRSxRQUFRLEtBQVIsUUFBUSxRQUFrRTtBQUN0RixNQUFNLENBQU4sSUFBWSxXQUFpQztBQUE3QyxXQUFZLFdBQVc7SUFBRSxvQ0FBbUIsQ0FBQTtBQUFBLENBQUMsRUFBakMsV0FBVyxLQUFYLFdBQVcsUUFBc0I7QUFBQSxDQUFDO0FBQzlDLE1BQU0sQ0FBTixJQUFZLE9BQXlGO0FBQXJHLFdBQVksT0FBTztJQUFFLDhCQUFpQixDQUFBO0lBQUMsZ0NBQW1CLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsd0JBQVcsQ0FBQTtJQUFDLDBCQUFhLENBQUE7QUFBQSxDQUFDLEVBQXpGLE9BQU8sS0FBUCxPQUFPLFFBQWtGO0FBRXJHLE1BQU0sQ0FBTixJQUFZLGdCQU9YO0FBUEQsV0FBWSxnQkFBZ0I7SUFDMUIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsK0VBQXlELENBQUE7SUFDekQsaUZBQTJELENBQUE7QUFDN0QsQ0FBQyxFQVBXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFPM0I7QUFFRCxNQUFNLENBQU4sSUFBWSwwQkFHWDtBQUhELFdBQVksMEJBQTBCO0lBQ3BDLHVEQUF1QixDQUFBO0lBQ3ZCLHFEQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVywwQkFBMEIsS0FBMUIsMEJBQTBCLFFBR3JDO0FBK0JELE1BQU0sT0FBTyxXQUFXO2FBRUMsZ0NBQTJCLEdBQUMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3RDLElBQUksR0FBRyxHQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztRQUNoRCxJQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBQyxDQUFDO1lBQzdCLEdBQUcsR0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsQ0FBQzthQUFLLElBQUcsT0FBTyxDQUFDLFdBQVcsRUFBQyxDQUFDO1lBQzVCLEdBQUcsR0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTYW1wbGVTaXplfSBmcm9tIFwiLi4vLi4vYXVkaW8vaW1wbC93YXZ3cml0ZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9Gb3JtYXQge1xyXG4gIGNoYW5uZWxzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDYXB0dXJlRm9ybWF0IHtcclxuICBhdWRpb0NoYW5uZWxDb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRGV2aWNlIHtcclxuICBuYW1lIDogc3RyaW5nLFxyXG4gIHBsYXliYWNrIDogYm9vbGVhbixcclxuICByZWdleCA6IGJvb2xlYW5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBlbnVtIENvbnN0cmFpbnRUeXBlIHtFeGFjdD0nRVhBQ1QnLElkZWFsPSdJREVBTCd9O1xyXG5cclxuZXhwb3J0IGVudW0gUGxhdGZvcm0ge0xpbnV4PSdMSU5VWCcsbWFjT1M9J01BQ09TJyxXaW5kb3dzPSdXSU5ET1dTJyxBbmRyb2lkPSdBTkRST0lEJ31cclxuZXhwb3J0IGVudW0gQnJvd3NlckJhc2Uge0Nocm9taXVtPSdDSFJPTUlVTSd9O1xyXG5leHBvcnQgZW51bSBCcm93c2VyIHtGaXJlZm94PSdGSVJFRk9YJyxDaHJvbWl1bT0nQ0hST01JVU0nLENocm9tZT0nQ0hST01FJyxFZGdlPSdFREdFJyxPcGVyYT0nT1BFUkEnfVxyXG5cclxuZXhwb3J0IGVudW0gQXVkaW9TdG9yYWdlVHlwZSB7XHJcbiAgTUVNX0VOVElSRT0nTUVNX0VOVElSRScsXHJcbiAgTUVNX0NIVU5LRUQ9J01FTV9DSFVOS0VEJyxcclxuICBEQl9DSFVOS0VEPSdEQl9DSFVOS0VEJyxcclxuICBORVRfQ0hVTktFRD0nTkVUX0NIVU5LRUQnLFxyXG4gIE1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRD0nTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEJyxcclxuICBNRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEPSdNRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBBdWRpb1N0b3JhZ2VGb3JtYXRFbmNvZGluZyB7XHJcbiAgUENNX1NJR05FRD0nUENNX1NJR05FRCcsXHJcbiAgUENNX0ZMT0FUPSdQQ01fRkxPQVQnLFxyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZWRpYVN0b3JhZ2VGb3JtYXQge1xyXG4gIGF1ZGlvRW5jb2Rpbmc/OkF1ZGlvU3RvcmFnZUZvcm1hdEVuY29kaW5nO1xyXG4gIGF1ZGlvUENNc2FtcGxlU2l6ZUluQml0cz86IFNhbXBsZVNpemU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0dhaW5Db250cm9sQ29uZmlnIHtcclxuICB2YWx1ZTogYm9vbGVhbixcclxuICAvL2NvbnN0cmFpbnRUeXBlIDogQ29uc3RyYWludFR5cGUsXHJcbiAgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gIC8vYnJvd3NlckJhc2U6QnJvd3NlckJhc2UsXHJcbiAgLy9icm93c2VyOkJyb3dzZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0IHtcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgcmVjb3JkaW5nRGV2aWNlV2FrZUxvY2s/OmJvb2xlYW4sXHJcbiAgYXVkaW9Gb3JtYXQ/OiBBdWRpb0Zvcm1hdCxcclxuICBtZWRpYUNhcHR1cmVGb3JtYXQ/OiBNZWRpYUNhcHR1cmVGb3JtYXQsXHJcbiAgYXV0b0dhaW5Db250cm9sQ29uZmlncz86QXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPixcclxuICBhbGxvd0VjaG9DYW5jZWxsYXRpb24/OmJvb2xlYW4sXHJcbiAgYXVkaW9EZXZpY2VzPzogQXJyYXk8QXVkaW9EZXZpY2U+LFxyXG4gIGNodW5rZWRSZWNvcmRpbmc/OiBib29sZWFuLFxyXG4gIGNsaWVudEF1ZGlvU3RvcmFnZVR5cGU/OkF1ZGlvU3RvcmFnZVR5cGUsXHJcbiAgbWVkaWFTdG9yYWdlRm9ybWF0PzpNZWRpYVN0b3JhZ2VGb3JtYXQsXHJcbiAgc2hvd1Nlc3Npb25Db21wbGV0ZU1lc3NhZ2U/OmJvb2xlYW47XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvamVjdFV0aWwge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVD0yO1xyXG5cclxuICBzdGF0aWMgYXVkaW9DaGFubmVsQ291bnQocHJvamVjdDpQcm9qZWN0KTogbnVtYmVye1xyXG4gICAgbGV0IGNocz1Qcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcbiAgICBpZihwcm9qZWN0Lm1lZGlhQ2FwdHVyZUZvcm1hdCl7XHJcbiAgICAgIGNocz1wcm9qZWN0Lm1lZGlhQ2FwdHVyZUZvcm1hdC5hdWRpb0NoYW5uZWxDb3VudDtcclxuICAgIH1lbHNlIGlmKHByb2plY3QuYXVkaW9Gb3JtYXQpe1xyXG4gICAgICBjaHM9cHJvamVjdC5hdWRpb0Zvcm1hdC5jaGFubmVscztcclxuICAgIH1cclxuICAgIHJldHVybiBjaHM7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
|