speechrecorderng 3.6.0 → 3.8.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/esm2022/lib/action/action.mjs +73 -0
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer.mjs +163 -163
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_input_stream.mjs +85 -85
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_random_access_stream.mjs +15 -15
- package/esm2022/lib/audio/audio_data_holder.mjs +264 -0
- package/{esm2020 → esm2022}/lib/audio/audio_display.mjs +93 -93
- package/{esm2020 → esm2022}/lib/audio/audio_player.mjs +213 -213
- package/esm2022/lib/audio/capture/capture.mjs +855 -0
- package/esm2022/lib/audio/context.mjs +79 -0
- package/{esm2020 → esm2022}/lib/audio/dsp/level_measure.mjs +515 -515
- package/{esm2020 → esm2022}/lib/audio/format.mjs +16 -16
- package/esm2022/lib/audio/impl/wavformat.mjs +6 -0
- package/{esm2020 → esm2022}/lib/audio/impl/wavreader.mjs +133 -133
- package/esm2022/lib/audio/impl/wavwriter.mjs +105 -0
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/{esm2020 → esm2022}/lib/audio/io/stream.mjs +58 -58
- package/esm2022/lib/audio/net_audio_buffer.mjs +293 -0
- package/{esm2020 → esm2022}/lib/audio/persistor.mjs +80 -80
- package/{esm2020 → esm2022}/lib/audio/playback/array_audio_buffer_source_node.mjs +125 -125
- package/esm2022/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/{esm2020 → esm2022}/lib/audio/playback/inddb_audio_buffer_source_node.mjs +166 -166
- package/{esm2020 → esm2022}/lib/audio/playback/net_audio_buffer_source_node.mjs +217 -217
- package/esm2022/lib/audio/playback/player.mjs +402 -0
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +347 -0
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_control.mjs +65 -65
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_scroll_pane.mjs +139 -139
- package/{esm2020 → esm2022}/lib/audio/ui/audiosignal.mjs +524 -524
- package/{esm2020 → esm2022}/lib/audio/ui/common.mjs +18 -18
- package/esm2022/lib/audio/ui/container.mjs +414 -0
- package/{esm2020 → esm2022}/lib/audio/ui/livelevel.mjs +352 -352
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +11 -0
- package/esm2022/lib/audio/ui/sonagram.mjs +900 -0
- package/esm2022/lib/db/inddb.mjs +120 -0
- package/esm2022/lib/dsp/utils.mjs +48 -0
- package/{esm2020 → esm2022}/lib/io/BinaryReader.mjs +84 -84
- package/esm2022/lib/io/BinaryWriter.mjs +74 -0
- package/{esm2020 → esm2022}/lib/io/stream.mjs +258 -258
- package/{esm2020 → esm2022}/lib/math/2d/geometry.mjs +27 -27
- package/esm2022/lib/math/complex.mjs +58 -0
- package/{esm2020 → esm2022}/lib/math/dft.mjs +195 -195
- package/{esm2020 → esm2022}/lib/media/utils.mjs +13 -13
- package/esm2022/lib/net/uploader.mjs +367 -0
- package/{esm2020 → esm2022}/lib/recorder_component.mjs +64 -64
- package/esm2022/lib/speechrecorder/project/project.mjs +49 -0
- package/esm2022/lib/speechrecorder/project/project.service.mjs +64 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/recording.mjs +123 -123
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +218 -0
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +1014 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.mjs +114 -114
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.service.mjs +47 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +1179 -0
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +668 -0
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +416 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/item.mjs +29 -29
- package/{esm2020 → esm2022}/lib/speechrecorder/session/progress.mjs +69 -69
- package/{esm2020 → esm2022}/lib/speechrecorder/session/prompting.mjs +571 -571
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recorder_combi_pane.mjs +65 -65
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +195 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recording_list.mjs +103 -103
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +63 -63
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +51 -51
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +104 -104
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +381 -381
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file.mjs +67 -67
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +288 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session.mjs +1 -1
- package/esm2022/lib/speechrecorder/session/session.service.mjs +69 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session_finished_dialog.mjs +29 -29
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +1386 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/warning_bar.mjs +28 -28
- package/{esm2020 → esm2022}/lib/speechrecorder/spruploader.mjs +22 -22
- package/{esm2020 → esm2022}/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -1
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +57 -0
- package/{esm2020 → esm2022}/lib/speechrecorderng.component.mjs +388 -388
- package/{esm2020 → esm2022}/lib/speechrecorderng.module.mjs +100 -100
- package/{esm2020 → esm2022}/lib/spr.config.mjs +26 -26
- package/{esm2020 → esm2022}/lib/spr.module.version.mjs +2 -2
- package/{esm2020 → esm2022}/lib/ui/canvas_layer_comp.mjs +38 -38
- package/{esm2020 → esm2022}/lib/ui/message_dialog.mjs +30 -30
- package/esm2022/lib/ui/recordingitem_display.mjs +253 -0
- package/{esm2020 → esm2022}/lib/ui/responsive_component.mjs +24 -24
- package/{esm2020 → esm2022}/lib/utils/scrollIntoViewToBottom.mjs +23 -23
- package/esm2022/lib/utils/ua-parser.mjs +190 -0
- package/esm2022/lib/utils/utils.mjs +105 -0
- package/esm2022/lib/utils/wake_lock.mjs +114 -0
- package/{esm2020 → esm2022}/lib/utils/wake_lock_media.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +33 -33
- package/{esm2020 → esm2022}/speechrecorderng.mjs +4 -4
- package/{fesm2020 → fesm2022}/speechrecorderng.mjs +16518 -16454
- package/fesm2022/speechrecorderng.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action/action.d.ts +27 -27
- package/lib/audio/array_audio_buffer.d.ts +31 -31
- package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -14
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -9
- package/lib/audio/audio_data_holder.d.ts +84 -84
- package/lib/audio/audio_display.d.ts +36 -36
- package/lib/audio/audio_player.d.ts +47 -47
- package/lib/audio/capture/capture.d.ts +67 -67
- package/lib/audio/context.d.ts +6 -6
- package/lib/audio/dsp/level_measure.d.ts +60 -60
- package/lib/audio/format.d.ts +11 -11
- package/lib/audio/impl/wavformat.d.ts +5 -5
- package/lib/audio/impl/wavreader.d.ts +16 -16
- package/lib/audio/impl/wavwriter.d.ts +13 -13
- package/lib/audio/inddb_audio_buffer.d.ts +68 -68
- package/lib/audio/io/stream.d.ts +28 -28
- package/lib/audio/net_audio_buffer.d.ts +57 -57
- package/lib/audio/persistor.d.ts +29 -29
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +18 -18
- package/lib/audio/playback/audio_source_node.d.ts +10 -10
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -4
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -21
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -27
- package/lib/audio/playback/player.d.ts +65 -65
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +68 -68
- package/lib/audio/ui/audio_display_control.d.ts +25 -25
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +26 -26
- package/lib/audio/ui/audiosignal.d.ts +30 -30
- package/lib/audio/ui/common.d.ts +11 -11
- package/lib/audio/ui/container.d.ts +63 -63
- package/lib/audio/ui/livelevel.d.ts +60 -60
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +5 -5
- package/lib/audio/ui/sonagram.d.ts +37 -37
- package/lib/db/inddb.d.ts +21 -21
- package/lib/dsp/utils.d.ts +19 -19
- package/lib/io/BinaryReader.d.ts +18 -18
- package/lib/io/BinaryWriter.d.ts +15 -15
- package/lib/io/stream.d.ts +59 -59
- package/lib/math/2d/geometry.d.ts +18 -18
- package/lib/math/complex.d.ts +17 -17
- package/lib/math/dft.d.ts +22 -22
- package/lib/media/utils.d.ts +3 -3
- package/lib/net/uploader.d.ts +81 -81
- package/lib/recorder_component.d.ts +16 -16
- package/lib/speechrecorder/project/project.d.ts +59 -59
- package/lib/speechrecorder/project/project.service.d.ts +21 -21
- package/lib/speechrecorder/recording.d.ts +51 -51
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -27
- package/lib/speechrecorder/recordings/recordings.service.d.ts +48 -48
- package/lib/speechrecorder/script/script.d.ts +80 -79
- package/lib/speechrecorder/script/script.service.d.ts +16 -16
- package/lib/speechrecorder/session/audiorecorder.d.ts +122 -122
- package/lib/speechrecorder/session/basicrecorder.d.ts +139 -139
- package/lib/speechrecorder/session/controlpanel.d.ts +109 -107
- package/lib/speechrecorder/session/item.d.ts +12 -12
- package/lib/speechrecorder/session/progress.d.ts +17 -17
- package/lib/speechrecorder/session/prompting.d.ts +121 -121
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +32 -32
- package/lib/speechrecorder/session/recording_file_cache.d.ts +33 -33
- package/lib/speechrecorder/session/recording_list.d.ts +24 -24
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +15 -15
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +20 -20
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +31 -31
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +55 -55
- package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +7 -7
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +24 -24
- package/lib/speechrecorder/session/session.d.ts +15 -15
- package/lib/speechrecorder/session/session.service.d.ts +20 -20
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +10 -10
- package/lib/speechrecorder/session/sessionmanager.d.ts +129 -123
- package/lib/speechrecorder/session/warning_bar.d.ts +8 -8
- package/lib/speechrecorder/spruploader.d.ts +11 -11
- package/lib/speechrecorder/startstopsignal/startstopsignal.d.ts +10 -10
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +11 -11
- package/lib/speechrecorderng.component.d.ts +61 -61
- package/lib/speechrecorderng.module.d.ts +56 -56
- package/lib/spr.config.d.ts +17 -17
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +13 -13
- package/lib/ui/message_dialog.d.ts +10 -10
- package/lib/ui/recordingitem_display.d.ts +84 -84
- package/lib/ui/responsive_component.d.ts +9 -9
- package/lib/utils/scrollIntoViewToBottom.d.ts +9 -9
- package/lib/utils/ua-parser.d.ts +43 -43
- package/lib/utils/utils.d.ts +19 -19
- package/lib/utils/wake_lock.d.ts +23 -23
- package/lib/utils/wake_lock_media.d.ts +1 -1
- package/package.json +17 -23
- package/public-api.d.ts +33 -33
- package/esm2020/lib/action/action.mjs +0 -73
- package/esm2020/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2020/lib/audio/capture/capture.mjs +0 -855
- package/esm2020/lib/audio/context.mjs +0 -79
- package/esm2020/lib/audio/impl/wavformat.mjs +0 -6
- package/esm2020/lib/audio/impl/wavwriter.mjs +0 -105
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2020/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2020/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2020/lib/audio/playback/player.mjs +0 -402
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2020/lib/audio/ui/container.mjs +0 -414
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2020/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2020/lib/db/inddb.mjs +0 -120
- package/esm2020/lib/dsp/utils.mjs +0 -48
- package/esm2020/lib/io/BinaryWriter.mjs +0 -74
- package/esm2020/lib/math/complex.mjs +0 -58
- package/esm2020/lib/net/uploader.mjs +0 -367
- package/esm2020/lib/speechrecorder/project/project.mjs +0 -49
- package/esm2020/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -216
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +0 -666
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +0 -409
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2020/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +0 -1333
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2020/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2020/lib/utils/ua-parser.mjs +0 -190
- package/esm2020/lib/utils/utils.mjs +0 -105
- package/esm2020/lib/utils/wake_lock.mjs +0 -114
- package/fesm2015/speechrecorderng.mjs +0 -17708
- package/fesm2015/speechrecorderng.mjs.map +0 -1
- package/fesm2020/speechrecorderng.mjs.map +0 -1
|
@@ -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
|
-
constructor(blob, url, _serverPersistable = null) {
|
|
54
|
-
this._serverPersistable = _serverPersistable;
|
|
55
|
-
this.onDone = null;
|
|
56
|
-
this.toString = () => {
|
|
57
|
-
let s = `Upload: Status: ${this.status}, URL: ${this._url}`;
|
|
58
|
-
if (this._data instanceof Blob) {
|
|
59
|
-
s = s + `, Size: ${this._data.size}`;
|
|
60
|
-
}
|
|
61
|
-
else if (this._data instanceof FormData) {
|
|
62
|
-
// TODO (iterate through parts ??)
|
|
63
|
-
}
|
|
64
|
-
return s;
|
|
65
|
-
};
|
|
66
|
-
this._data = blob;
|
|
67
|
-
this._url = url;
|
|
68
|
-
this.status = UploadStatus.IDLE;
|
|
69
|
-
}
|
|
70
|
-
get serverPersistable() {
|
|
71
|
-
return this._serverPersistable;
|
|
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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Q0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxJQUFFLENBQUMsRUFBQztZQUNOLCtCQUErQjtZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUE7U0FDaEM7UUFDRCxJQUFJLEVBQUUsR0FBRyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUMsV0FBVyxDQUFDLEVBQVU7UUFDbEIsSUFBSSxFQUFFLEVBQUU7WUFDSixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIGltcG9ydCB7SHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG4gICAgaW1wb3J0IHsgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5cclxuICAgIC8vIHN0YXRlIG9mIGFuIHVwbG9hZFxyXG4gICAgZXhwb3J0IGVudW0gVXBsb2FkU3RhdHVzIHtJRExFID0gMSwgVVBMT0FESU5HID0gMiwgIEFCT1JUID0gMywgRE9ORSA9IDAsIEVSUiA9IC0xfVxyXG5cclxuICAgIC8vIHN0YXRlIG9mIHRoZSB1cGxvYWRlclxyXG4gICAgLy8gVFJZX1VQTE9BRElORyBpcyB1cGxvYWRpbmcgc3RhdGUgYWZ0ZXIgYW4gZXJyb3IgKGZvciBleGFtcGxlIGlmIGRpc2Nvbm5lY3RlZCBmcm9tIHNlcnZlcilcclxuICAgIGV4cG9ydCBlbnVtIFVwbG9hZGVyU3RhdHVzIHsgRE9ORSA9IDAsIFVQTE9BRElORyA9IDEsIFRSWV9VUExPQURJTkcgPSAyLE5FWFQgPSAzLCBFUlIgPSAtMX1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCB7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc2l6ZVF1ZXVlZDpudW1iZXI7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfc2l6ZURvbmU6bnVtYmVyO1xyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXR1czogVXBsb2FkZXJTdGF0dXM7XHJcblxyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihzaXplUXVldWVkOiBudW1iZXIsIHNpemVEb25lOiBudW1iZXIsIHN0YXR1czogVXBsb2FkZXJTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2l6ZVF1ZXVlZCA9IHNpemVRdWV1ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpemVEb25lID0gc2l6ZURvbmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBzaXplUXVldWVkKCk6bnVtYmVyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVRdWV1ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc2l6ZURvbmUoKTpudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZURvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaXplSW5RdWV1ZSgpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVRdWV1ZWQtdGhpcy5fc2l6ZURvbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc3RhdHVzKCk6IFVwbG9hZGVyU3RhdHVzIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVwbG9hZERvbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fc2l6ZURvbmUgPj0gdGhpcy5fc2l6ZVF1ZXVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJjZW50RG9uZSgpOiBudW1iZXIge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2l6ZVF1ZXVlZCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhIHF1ZXVlZCwgd2UgYXJlIFwiZG9uZVwiXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwZXJjZW50ID0gTWF0aC5mbG9vcih0aGlzLl9zaXplRG9uZSAqIDEwMCAvIHRoaXMuX3NpemVRdWV1ZWQpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIHN0YXR1czogcXVldWVkOiBcIit0aGlzLl9zaXplUXVldWVkK1wiLCBkb25lOiBcIit0aGlzLl9zaXplRG9uZStcIiwgXCIrcGVyY2VudCtcIiVcIilcclxuICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgVXBsb2FkIHtcclxuXHJcbiAgICAgIGdldCBzZXJ2ZXJQZXJzaXN0YWJsZSgpOiBTZXJ2ZXJQZXJzaXN0YWJsZSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOkJsb2J8Rm9ybURhdGE7XHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdXJsOnN0cmluZztcclxuXHJcbiAgICAgICAgc3RhdHVzOiBVcGxvYWRTdGF0dXM7XHJcbiAgICAgICAgb25Eb25lOigodXBsb2FkOlVwbG9hZCk9PnZvaWQpIHwgbnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihibG9iOkJsb2J8Rm9ybURhdGEsIHVybDpzdHJpbmcscHJpdmF0ZSBfc2VydmVyUGVyc2lzdGFibGU6U2VydmVyUGVyc2lzdGFibGV8bnVsbD1udWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBibG9iO1xyXG4gICAgICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkU3RhdHVzLklETEU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgdXJsKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBkYXRhKCk6QmxvYnxGb3JtRGF0YSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9uZSgpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cz1VcGxvYWRTdGF0dXMuRE9ORTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2luZ2xlIHVwbG9hZCBkb25lLlwiKTtcclxuICAgICAgICAgICAgaWYodGhpcy5fc2VydmVyUGVyc2lzdGFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zZXJ2ZXJQZXJzaXN0YWJsZS5zZXJ2ZXJQZXJzaXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNpbmdsZSB1cGxvYWQgc2V0IHNlcnZlciBwZXJzaXN0ZWQ6IFwiK3RoaXMuc2VydmVyUGVyc2lzdGFibGUpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXJ2ZXIgcGVyc2lzdGFibGUgbm90IHNldC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5vbkRvbmUpe1xyXG4gICAgICAgICAgICAgIHRoaXMub25Eb25lKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICBwdWJsaWMgdG9TdHJpbmcgPSAoKSA6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgbGV0IHM9YFVwbG9hZDogU3RhdHVzOiAke3RoaXMuc3RhdHVzfSwgVVJMOiAke3RoaXMuX3VybH1gO1xyXG4gICAgICAgIGlmKHRoaXMuX2RhdGEgaW5zdGFuY2VvZiBCbG9iKXtcclxuICAgICAgICAgICAgcz1zK2AsIFNpemU6ICR7dGhpcy5fZGF0YS5zaXplfWA7XHJcbiAgICAgICAgfWVsc2UgaWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mICBGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgLy8gVE9ETyAoaXRlcmF0ZSB0aHJvdWdoIHBhcnRzID8/KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRIb2xkZXJ7XHJcblxyXG4gICAgICBvblVwbG9hZFNldDooKHVwbG9hZDpVcGxvYWQpPT52b2lkKXxudWxsPW51bGw7XHJcblxyXG4gICAgICBnZXQgdXBsb2FkKCk6IFVwbG9hZCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCB1cGxvYWQodmFsdWU6IFVwbG9hZCB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91cGxvYWQgPSB2YWx1ZTtcclxuICAgICAgICBpZih0aGlzLl91cGxvYWQgJiYgdGhpcy5vblVwbG9hZFNldCl7XHJcbiAgICAgICAgICB0aGlzLm9uVXBsb2FkU2V0KHRoaXMuX3VwbG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHByaXZhdGUgX3VwbG9hZDpVcGxvYWR8bnVsbD1udWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRTZXR7XHJcblxyXG4gICAgICBwcml2YXRlIHVwbG9hZHM6IEFycmF5PFVwbG9hZHxVcGxvYWRIb2xkZXI+PW5ldyBBcnJheTxVcGxvYWR8VXBsb2FkSG9sZGVyPigpO1xyXG4gICAgICBwcml2YXRlIF9jb21wbGV0ZT1mYWxzZTtcclxuXHJcbiAgICAgIHByaXZhdGUgX29uRG9uZTooKHVwbG9hZFNldDpVcGxvYWRTZXQpPT52b2lkKXxudWxsPW51bGw7XHJcblxyXG4gICAgICBhZGQodXBsb2FkOlVwbG9hZHxVcGxvYWRIb2xkZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuX2NvbXBsZXRlKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgdXBsb2FkIHRvIHVwbG9hZCBzZXQuIFVwbG9hZCBzZXQgYWxyZWFkeSBjb21wbGV0ZS4nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih1cGxvYWQgaW5zdGFuY2VvZiBVcGxvYWRIb2xkZXIpe1xyXG4gICAgICAgICAgdXBsb2FkLm9uVXBsb2FkU2V0PSh1cGwpPT57XHJcbiAgICAgICAgICAgIHVwbC5vbkRvbmU9KCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja1VwbG9hZFN0YXRlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwbG9hZHMucHVzaCh1cGxvYWQpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29tcGxldGUoKXtcclxuICAgICAgICAvLyBNYXJrIHNldCBhcyBjb21wbGV0ZVxyXG4gICAgICAgIHRoaXMuX2NvbXBsZXRlPXRydWU7XHJcblxyXG4gICAgICAgIC8vIGFkZCBsaXN0ZW5lcnMgdG8gZWFjaCB1cGxvYWRcclxuICAgICAgICBmb3IobGV0IHVwbCBvZiB0aGlzLnVwbG9hZHMpe1xyXG4gICAgICAgICAgaWYodXBsIGluc3RhbmNlb2YgVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHVwbC5vbkRvbmUgPSAodXBsOiBVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICAgIGlmKHVwbC51cGxvYWQpe1xyXG4gICAgICAgICAgICAgIHVwbC51cGxvYWQub25Eb25lID0gKHVwbDogVXBsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjaGVjayBpbW1lZGlhdGVseSBpZiBhbHJlYWR5IGRvbmVcclxuICAgICAgICB0aGlzLmNoZWNrVXBsb2FkU3RhdGVzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldCBvbkRvbmUodmFsdWU6ICgodXBsb2FkU2V0OiBVcGxvYWRTZXQpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX29uRG9uZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tVcGxvYWRTdGF0ZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBjaGVja1VwbG9hZFN0YXRlcygpe1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZS4uLlwiKVxyXG4gICAgICAgIGlmKHRoaXMuX2NvbXBsZXRlKXtcclxuXHJcbiAgICAgICAgICBpZih0aGlzLl9vbkRvbmUpIHtcclxuICAgICAgICAgICAgZm9yKGxldCB1cGwgb2YgdGhpcy51cGxvYWRzKXtcclxuICAgICAgICAgICAgICBpZih1cGwgaW5zdGFuY2VvZiBVcGxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChVcGxvYWRTdGF0dXMuRE9ORSAhPT0gdXBsLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAvLyBBdCBsZWFzdCB0aGlzIHVwbG9hZCBpcyBub3QgeWV0IGRvbmVcclxuICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCBub3QgZG9uZS5cIilcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKHVwbCBpbnN0YW5jZW9mIFVwbG9hZEhvbGRlcil7XHJcbiAgICAgICAgICAgICAgICBpZih1cGwudXBsb2FkKXtcclxuICAgICAgICAgICAgICAgICAgaWYgKFVwbG9hZFN0YXR1cy5ET05FICE9PSB1cGwudXBsb2FkLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEF0IGxlYXN0IHRoaXMgdXBsb2FkIGlzIG5vdCB5ZXQgZG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCAoaG9sZGVyKSBub3QgZG9uZS5cIilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYWN0dWFsIHVwbG9hZCBpcyBub3QgeWV0IHNldFxyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaGVjayB1cGxvYWQgc3RhdGU6IFVwbG9hZCAoaG9sZGVyKTogdXBsb2FkIG5vdCB5ZXQgc2V0LlwiKVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNldCBpcyBjb21wbGV0ZSBhbmQgYWxsIHVwbG9hZCBwYXJ0cyBhcmUgZG9uZSwgY2FsbCBkb25lIGNhbGxiYWNrXHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNoZWNrIHVwbG9hZCBzdGF0ZTogQWxsIGRvbmUuXCIpXHJcbiAgICAgICAgICAgIHRoaXMuX29uRG9uZSh0aGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIFNlcnZlclBlcnNpc3RhYmxle1xyXG4gICAgICAgIHNlcnZlclBlcnNpc3RlZDpib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBVcGxvYWRlciB7XHJcbiAgICAgICAgUE9TVF9NSU5fVElNRU9VVCA9IDEyMDAwMDsgLy8gMm1pbiBwbHVzIC4uLlxyXG4gICAgICAgIFBPU1RfVElNRU9VVF9QRVJfS0IgPSAxMDAwOyAgLy8gLi4uIDFzIHBlciBrQlxyXG5cclxuICAgICAgICBSRVRSWV9ERUxBWTogbnVtYmVyID0gMzAwMDA7IC8vIHJldHJ5IGV2ZXJ5IDMwc1xyXG4gICAgICAgIERFQlVHX0RFTEFZOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIC8vREVCVUdfREVMQVk6bnVtYmVyPTA7XHJcbiAgICAgICAgcHJpdmF0ZSBzdGF0dXM6IFVwbG9hZGVyU3RhdHVzID0gVXBsb2FkZXJTdGF0dXMuRE9ORTtcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZTogQXJyYXk8VXBsb2FkPjtcclxuICAgICAgICBsaXN0ZW5lcjogKCh1ZTogVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBwcml2YXRlIF9zaXplUXVldWVkOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHByaXZhdGUgX3NpemVEb25lOiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICBwcml2YXRlIHJldHJ5VGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSByZXRyeVRpbWVySWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBwcml2YXRlIHRlOlRleHRFbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWUgPSBuZXcgQXJyYXk8VXBsb2FkPigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhU2l6ZShkdDpCbG9ifEZvcm1EYXRhKXtcclxuICAgICAgICAgICAgbGV0IHNpPTA7XHJcbiAgICAgICAgICAgIGlmKGR0IGluc3RhbmNlb2YgQmxvYil7XHJcbiAgICAgICAgICAgICAgICBzaT1kdC5zaXplO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihkdCBpbnN0YW5jZW9mICBGb3JtRGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkdC5mb3JFYWNoKCh2LGspPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodiBpbnN0YW5jZW9mIEZpbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaSs9di5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2ID09PSdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jb2RlIHRvIFVURi04IHRvIGdldCB1cGxvYWQgc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaSs9IHRoaXMudGUuZW5jb2RlKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSAgdXBsb2FkRG9uZSh1bDpVcGxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgIHVsLmRvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSB1cGxvYWQgZnJvbSBxdWV1ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWVbaV0gPT09IHVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQsIHJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdWxTaXplID0gdGhpcy5kYXRhU2l6ZSh1bC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaXplRG9uZSArPSB1bFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRvIGRvbmUgZm9yIG5vdy4uLlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLk5FWFQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBzdGFydFVwbG9hZCh1bDpVcGxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgIHVsLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5VUExPQURJTkc7XHJcbiAgICAgICAgICAgIGlmIChVcGxvYWRlclN0YXR1cy5FUlIgPT09IHRoaXMuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLlVQTE9BRElORztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRTaXplPXRoaXMuZGF0YVNpemUodWwuZGF0YSk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0Rm9yRGF0YVNpemU9ZFNpemUqdGhpcy5QT1NUX1RJTUVPVVRfUEVSX0tCLzEwMDA7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb1ZhbDpudW1iZXI9TWF0aC5yb3VuZCh0aGlzLlBPU1RfTUlOX1RJTUVPVVQrdGltZW91dEZvckRhdGFTaXplKVxyXG4gICAgICAgICAgICAvLyBwaXBlKHRpbWVvdXQoKSkgaXMgbm90IHRoZSBzYW1lIGFzIHhoci50aW1lb3V0XHJcblxyXG4gICAgICAgICAgbGV0IHVwbG9hZGVkVXBsb2FkOlVwbG9hZHxudWxsPW51bGw7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlBvc3QgdXBsb2FkOiBcIit1bClcclxuICAgICAgICAgICAgdGhpcy5odHRwLnBvc3QodWwudXJsLHVsLmRhdGEse3dpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFsc30pLnBpcGUodGltZW91dCh0aW1lb1ZhbCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWRVcGxvYWQgPSB1bDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdOZXh0IG1ldGhvZCBjYWxsZWQgZm9yIHVwbG9hZDogJyt1cGxvYWRlZFVwbG9hZClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLCBlcnJvcjooZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgY2xpZW50LXNpZGUgb3IgbmV0d29yayBlcnJvciBvY2N1cnJlZC4gSGFuZGxlIGl0IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBsb2FkIGVycm9yIG9jY3VycmVkOicsIGVyci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIHJldHVybmVkIGFuIHVuc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgbWF5IGNvbnRhaW4gY2x1ZXMgYXMgdG8gd2hhdCB3ZW50IHdyb25nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVXBsb2FkIGVycm9yOiBTZXJ2ZXIgcmV0dXJuZWQgY29kZSAke2Vyci5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IodWwpXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdVcGxvYWQgY29tcGxldGUgbWV0aG9kIGNhbGxlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGxvYWRlZFVwbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuREVCVUdfREVMQVkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuREVCVUdfREVMQVkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZERvbmUodXBsb2FkZWRVcGxvYWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVcGxvYWQgcG9zdCBjb21wbGV0ZSwgYnV0IHVwbG9hZCBub3Qgc2V0IGluIG5leHQgbWV0aG9kIScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0Vycm9yKHVsOlVwbG9hZCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJQcm9jZXNzIHVwbG9hZCBlcnJvci4uLlwiKVxyXG4gICAgICAgICAgICB1bC5zdGF0dXM9VXBsb2FkU3RhdHVzLkVSUlxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZGVyU3RhdHVzLkVSUjtcclxuXHJcbiAgICAgICAgICAgIGxldCB1ZSA9IG5ldyBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KHRoaXMuX3NpemVRdWV1ZWQsIHRoaXMuX3NpemVEb25lLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHJldHJ5IHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lcklkPXdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lclJ1bm5pbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWQgcmV0cnkgdGltZXIgZXhwaXJlZC4gQ29udGludWUgcHJvY2Vzc2luZy4uLlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuUkVUUllfREVMQVkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz10cnVlO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTdGFydGVkIHVwbG9hZCByZXRyeSB0aW1lciBcIit0aGlzLlJFVFJZX0RFTEFZK1wibXMgLi4uXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgcHJpdmF0ZSBwcm9jZXNzKCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHJldHJ5IHRpbWVyIGlmIHNldFxyXG4gICAgICAgIGlmKHRoaXMucmV0cnlUaW1lclJ1bm5pbmcpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJldHJ5VGltZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZXJJZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXRyeVRpbWVyUnVubmluZz1mYWxzZVxyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ2xlYXJlZCByZXRyeSB0aW1lci5cIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwdWw6IFVwbG9hZCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGxvYWRlciBzdGF0dXM6IFwiK3RoaXMuc3RhdHVzKVxyXG5cclxuICAgICAgICBsZXQgcyA9IHRoaXMucXVlLmxlbmd0aDtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcocytcIiB1cGxvYWRzIGFyZSBpbiB0aGUgcXVldWUuXCIpXHJcblxyXG4gICAgICAgIGlmIChzPjAgJiYgVXBsb2FkZXJTdGF0dXMuVVBMT0FESU5HICE9IHRoaXMuc3RhdHVzICYmIFVwbG9hZGVyU3RhdHVzLlRSWV9VUExPQURJTkcgIT0gdGhpcy5zdGF0dXMpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCBcIit1bCtcIiBzdGF0dXM6XCIrdWwuc3RhdHVzKVxyXG4gICAgICAgICAgICBpZiAodWwuc3RhdHVzID09PSBVcGxvYWRTdGF0dXMuSURMRSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJVcGxvYWQgXCIrdWwrXCIgc3RhcnRVcGxvYWRcIilcclxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVsKTtcclxuICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFwdWwpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkNoZWNrIEVSUiB1cGxvYWRzLi4uXCIpXHJcbiAgICAgICAgICAgIC8vIG5vdyBmYWlsZWQgdXBsb2Fkc1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJObyByZWd1bGFyIHVwbG9hZCBmb3VuZC4gTG9va2luZyBmb3IgZXJyb3Igc3RhdGUgdXBsb2Fkcy5cIilcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgdWwgPSB0aGlzLnF1ZVtpXTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBsb2FkIFwiK3VsK1wiIHN0YXR1czpcIit1bC5zdGF0dXMpXHJcbiAgICAgICAgICAgICAgaWYgKHVsLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkVSUikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVwbG9hZCAoRVJSKSBcIit1bCtcIiBzdGFydFVwbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU3RhcnQgZXJyb3Igc3RhdGUgdXBsb2FkIFwiK3VsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFVwbG9hZCh1bCk7XHJcbiAgICAgICAgICAgICAgICBwdWwgPSB1bDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihzPT0wKXtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwbG9hZCBkb25lLlwiKVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXM9VXBsb2FkZXJTdGF0dXMuRE9ORVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdWUgPSBuZXcgVXBsb2FkZXJTdGF0dXNDaGFuZ2VFdmVudCh0aGlzLl9zaXplUXVldWVkLCB0aGlzLl9zaXplRG9uZSwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RlbmVyKHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgcXVldWVVcGxvYWQodWw6IFVwbG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodWwpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bFNpemUgPSB0aGlzLmRhdGFTaXplKHVsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWUucHVzaCh1bCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaXplUXVldWVkICs9IHVsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -1,49 +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 class ProjectUtil {
|
|
37
|
-
static audioChannelCount(project) {
|
|
38
|
-
let chs = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
|
|
39
|
-
if (project.mediaCaptureFormat) {
|
|
40
|
-
chs = project.mediaCaptureFormat.audioChannelCount;
|
|
41
|
-
}
|
|
42
|
-
else if (project.audioFormat) {
|
|
43
|
-
chs = project.audioFormat.channels;
|
|
44
|
-
}
|
|
45
|
-
return chs;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT = 2;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sQ0FBTixJQUFZLGNBQTRDO0FBQXhELFdBQVksY0FBYztJQUFFLGlDQUFhLENBQUE7SUFBQyxpQ0FBYSxDQUFBO0FBQUEsQ0FBQyxFQUE1QyxjQUFjLEtBQWQsY0FBYyxRQUE4QjtBQUFBLENBQUM7QUFFekQsTUFBTSxDQUFOLElBQVksUUFBMEU7QUFBdEYsV0FBWSxRQUFRO0lBQUUsMkJBQWEsQ0FBQTtJQUFDLDJCQUFhLENBQUE7SUFBQywrQkFBaUIsQ0FBQTtJQUFDLCtCQUFpQixDQUFBO0FBQUEsQ0FBQyxFQUExRSxRQUFRLEtBQVIsUUFBUSxRQUFrRTtBQUN0RixNQUFNLENBQU4sSUFBWSxXQUFpQztBQUE3QyxXQUFZLFdBQVc7SUFBRSxvQ0FBbUIsQ0FBQTtBQUFBLENBQUMsRUFBakMsV0FBVyxLQUFYLFdBQVcsUUFBc0I7QUFBQSxDQUFDO0FBQzlDLE1BQU0sQ0FBTixJQUFZLE9BQXlGO0FBQXJHLFdBQVksT0FBTztJQUFFLDhCQUFpQixDQUFBO0lBQUMsZ0NBQW1CLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsd0JBQVcsQ0FBQTtJQUFDLDBCQUFhLENBQUE7QUFBQSxDQUFDLEVBQXpGLE9BQU8sS0FBUCxPQUFPLFFBQWtGO0FBRXJHLE1BQU0sQ0FBTixJQUFZLGdCQU9YO0FBUEQsV0FBWSxnQkFBZ0I7SUFDMUIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsNkNBQXVCLENBQUE7SUFDdkIsK0NBQXlCLENBQUE7SUFDekIsK0VBQXlELENBQUE7SUFDekQsaUZBQTJELENBQUE7QUFDN0QsQ0FBQyxFQVBXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFPM0I7QUF3QkQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQWU7UUFDdEMsSUFBSSxHQUFHLEdBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO1FBQ2hELElBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFDO1lBQzVCLEdBQUcsR0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7U0FDbEQ7YUFBSyxJQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUM7WUFDM0IsR0FBRyxHQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztBQVZzQix1Q0FBMkIsR0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zvcm1hdCB7XHJcbiAgY2hhbm5lbHM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNhcHR1cmVGb3JtYXQge1xyXG4gIGF1ZGlvQ2hhbm5lbENvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9EZXZpY2Uge1xyXG4gIG5hbWUgOiBzdHJpbmcsXHJcbiAgcGxheWJhY2sgOiBib29sZWFuLFxyXG4gIHJlZ2V4IDogYm9vbGVhblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGVudW0gQ29uc3RyYWludFR5cGUge0V4YWN0PSdFWEFDVCcsSWRlYWw9J0lERUFMJ307XHJcblxyXG5leHBvcnQgZW51bSBQbGF0Zm9ybSB7TGludXg9J0xJTlVYJyxtYWNPUz0nTUFDT1MnLFdpbmRvd3M9J1dJTkRPV1MnLEFuZHJvaWQ9J0FORFJPSUQnfVxyXG5leHBvcnQgZW51bSBCcm93c2VyQmFzZSB7Q2hyb21pdW09J0NIUk9NSVVNJ307XHJcbmV4cG9ydCBlbnVtIEJyb3dzZXIge0ZpcmVmb3g9J0ZJUkVGT1gnLENocm9taXVtPSdDSFJPTUlVTScsQ2hyb21lPSdDSFJPTUUnLEVkZ2U9J0VER0UnLE9wZXJhPSdPUEVSQSd9XHJcblxyXG5leHBvcnQgZW51bSBBdWRpb1N0b3JhZ2VUeXBlIHtcclxuICBNRU1fRU5USVJFPSdNRU1fRU5USVJFJyxcclxuICBNRU1fQ0hVTktFRD0nTUVNX0NIVU5LRUQnLFxyXG4gIERCX0NIVU5LRUQ9J0RCX0NIVU5LRUQnLFxyXG4gIE5FVF9DSFVOS0VEPSdORVRfQ0hVTktFRCcsXHJcbiAgTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEPSdNRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQnLFxyXG4gIE1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQ9J01FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0dhaW5Db250cm9sQ29uZmlnIHtcclxuICB2YWx1ZTogYm9vbGVhbixcclxuICAvL2NvbnN0cmFpbnRUeXBlIDogQ29uc3RyYWludFR5cGUsXHJcbiAgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gIC8vYnJvd3NlckJhc2U6QnJvd3NlckJhc2UsXHJcbiAgLy9icm93c2VyOkJyb3dzZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0IHtcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgcmVjb3JkaW5nRGV2aWNlV2FrZUxvY2s/OmJvb2xlYW4sXHJcbiAgYXVkaW9Gb3JtYXQ/OiBBdWRpb0Zvcm1hdCxcclxuICBtZWRpYUNhcHR1cmVGb3JtYXQ/OiBNZWRpYUNhcHR1cmVGb3JtYXQsXHJcbiAgYXV0b0dhaW5Db250cm9sQ29uZmlncz86QXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPixcclxuICBhbGxvd0VjaG9DYW5jZWxsYXRpb24/OmJvb2xlYW4sXHJcbiAgYXVkaW9EZXZpY2VzPzogQXJyYXk8QXVkaW9EZXZpY2U+LFxyXG4gIGNodW5rZWRSZWNvcmRpbmc/OiBib29sZWFuLFxyXG4gIGNsaWVudEF1ZGlvU3RvcmFnZVR5cGU/OkF1ZGlvU3RvcmFnZVR5cGUsXHJcbiAgc2hvd1Nlc3Npb25Db21wbGV0ZU1lc3NhZ2U/OmJvb2xlYW47XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvamVjdFV0aWwge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQVVESU9fQ0hBTk5FTF9DT1VOVD0yO1xyXG5cclxuICBzdGF0aWMgYXVkaW9DaGFubmVsQ291bnQocHJvamVjdDpQcm9qZWN0KTogbnVtYmVye1xyXG4gICAgbGV0IGNocz1Qcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcbiAgICBpZihwcm9qZWN0Lm1lZGlhQ2FwdHVyZUZvcm1hdCl7XHJcbiAgICAgIGNocz1wcm9qZWN0Lm1lZGlhQ2FwdHVyZUZvcm1hdC5hdWRpb0NoYW5uZWxDb3VudDtcclxuICAgIH1lbHNlIGlmKHByb2plY3QuYXVkaW9Gb3JtYXQpe1xyXG4gICAgICBjaHM9cHJvamVjdC5hdWRpb0Zvcm1hdC5jaGFubmVscztcclxuICAgIH1cclxuICAgIHJldHVybiBjaHM7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Created by klausj on 17.06.2017.
|
|
3
|
-
*/
|
|
4
|
-
import { Inject, Injectable } from '@angular/core';
|
|
5
|
-
import { ApiType, SPEECHRECORDER_CONFIG } from "../../spr.config";
|
|
6
|
-
import { UUID } from "../../utils/utils";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common/http";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "../../spr.config";
|
|
11
|
-
export class ProjectService {
|
|
12
|
-
constructor(http, platformLocation, config) {
|
|
13
|
-
this.http = http;
|
|
14
|
-
this.platformLocation = platformLocation;
|
|
15
|
-
this.config = config;
|
|
16
|
-
this.withCredentials = false;
|
|
17
|
-
console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
|
|
18
|
-
let apiEndPoint = '';
|
|
19
|
-
if (config && config.apiEndPoint) {
|
|
20
|
-
apiEndPoint = config.apiEndPoint;
|
|
21
|
-
}
|
|
22
|
-
if (apiEndPoint !== '') {
|
|
23
|
-
apiEndPoint = apiEndPoint + '/';
|
|
24
|
-
}
|
|
25
|
-
if (config != null && config.withCredentials != null) {
|
|
26
|
-
this.withCredentials = config.withCredentials;
|
|
27
|
-
}
|
|
28
|
-
this.projectCtxUrl = apiEndPoint + ProjectService.PROJECT_API_CTX;
|
|
29
|
-
}
|
|
30
|
-
appendRequestUUIDForDevelopmentServer(url) {
|
|
31
|
-
let resUrl = url;
|
|
32
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
33
|
-
// for development and demo
|
|
34
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
35
|
-
resUrl = resUrl + '.json?requestUUID=' + UUID.generate();
|
|
36
|
-
}
|
|
37
|
-
return resUrl;
|
|
38
|
-
}
|
|
39
|
-
projectUrl(id) {
|
|
40
|
-
let encPrjId = encodeURIComponent(id);
|
|
41
|
-
return this.appendRequestUUIDForDevelopmentServer(this.projectCtxUrl + '/' + encPrjId);
|
|
42
|
-
}
|
|
43
|
-
projectResourceUrl(projectId, relResourcePath) {
|
|
44
|
-
let encPrjId = encodeURIComponent(projectId);
|
|
45
|
-
// Use encodeURI here since the relatice resource path from recording scripts is already a URI
|
|
46
|
-
// encodeURIComponent function would encode the slashes and fetching the resource would fail
|
|
47
|
-
let encRelResPath = encodeURI(relResourcePath);
|
|
48
|
-
return this.projectCtxUrl + '/' + encPrjId + '/' + encRelResPath;
|
|
49
|
-
}
|
|
50
|
-
projectObservable(id) {
|
|
51
|
-
let prjUrl = this.projectUrl(id);
|
|
52
|
-
return this.http.get(prjUrl, { withCredentials: this.withCredentials });
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
ProjectService.PROJECT_API_CTX = 'project';
|
|
56
|
-
ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
57
|
-
ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService });
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, decorators: [{
|
|
59
|
-
type: Injectable
|
|
60
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.PlatformLocation }, { type: i3.SpeechRecorderConfig, decorators: [{
|
|
61
|
-
type: Inject,
|
|
62
|
-
args: [SPEECHRECORDER_CONFIG]
|
|
63
|
-
}] }]; } });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBT3ZDLE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQW9CLElBQWUsRUFBUyxnQkFBaUMsRUFBd0MsTUFBNEI7UUFBN0gsU0FBSSxHQUFKLElBQUksQ0FBVztRQUFTLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFBd0MsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFGaEksb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFJN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQy9CLFdBQVcsR0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ2hDO1FBQ0QsSUFBRyxXQUFXLEtBQUssRUFBRSxFQUFDO1lBQ3BCLFdBQVcsR0FBQyxXQUFXLEdBQUMsR0FBRyxDQUFBO1NBQzVCO1FBQ0QsSUFBRyxNQUFNLElBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUUsSUFBSSxFQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFFcEUsQ0FBQztJQUVPLHFDQUFxQyxDQUFDLEdBQVU7UUFDdEQsSUFBSSxNQUFNLEdBQUMsR0FBRyxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDeEQsMkJBQTJCO1lBQzNCLDJFQUEyRTtZQUMzRSxNQUFNLEdBQUcsTUFBTSxHQUFHLG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFTO1FBQ2xCLElBQUksUUFBUSxHQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFpQixFQUFDLGVBQXNCO1FBQ3pELElBQUksUUFBUSxHQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsSUFBSSxhQUFhLEdBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxHQUFFLEdBQUcsR0FBQyxhQUFhLENBQUM7SUFDaEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQVM7UUFDekIsSUFBSSxNQUFNLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLE1BQU0sRUFBQyxFQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUMvRSxDQUFDOztBQWxEcUIsOEJBQWUsR0FBQyxTQUFTLENBQUE7NEdBRHJDLGNBQWMsNEVBSzZELHFCQUFxQjtnSEFMaEcsY0FBYzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVOzswQkFNc0UsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ3JlYXRlZCBieSBrbGF1c2ogb24gMTcuMDYuMjAxNy5cclxuICovXHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtBcGlUeXBlLCBTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1Byb2plY3R9IGZyb20gXCIuL3Byb2plY3RcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvamVjdFNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPSkVDVF9BUElfQ1RYPSdwcm9qZWN0J1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdEN0eFVybDpzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB3aXRoQ3JlZGVudGlhbHM6Ym9vbGVhbj1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQscHJpdmF0ZSBwbGF0Zm9ybUxvY2F0aW9uOlBsYXRmb3JtTG9jYXRpb24sQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiQmFzZSBIcmVmOiBcIitwbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKTtcclxuXHJcbiAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJ1xyXG5cclxuICAgIGlmKGNvbmZpZyAmJiBjb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgYXBpRW5kUG9pbnQ9Y29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgfVxyXG4gICAgaWYoYXBpRW5kUG9pbnQgIT09ICcnKXtcclxuICAgICAgYXBpRW5kUG9pbnQ9YXBpRW5kUG9pbnQrJy8nXHJcbiAgICB9XHJcbiAgICBpZihjb25maWchPW51bGwgJiYgY29uZmlnLndpdGhDcmVkZW50aWFscyE9bnVsbCl7XHJcbiAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzPWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm9qZWN0Q3R4VXJsID0gYXBpRW5kUG9pbnQgKyBQcm9qZWN0U2VydmljZS5QUk9KRUNUX0FQSV9DVFg7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRSZXF1ZXN0VVVJREZvckRldmVsb3BtZW50U2VydmVyKHVybDpzdHJpbmcpOnN0cmluZ3tcclxuICAgIGxldCByZXNVcmw9dXJsO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaVR5cGUgPT09IEFwaVR5cGUuRklMRVMpIHtcclxuICAgICAgLy8gZm9yIGRldmVsb3BtZW50IGFuZCBkZW1vXHJcbiAgICAgIC8vIGFwcGVuZCBVVUlEIHRvIG1ha2UgcmVxdWVzdCBVUkwgdW5pcXVlIHRvIGF2b2lkIGxvY2FsaG9zdCBzZXJ2ZXIgY2FjaGluZ1xyXG4gICAgICByZXNVcmwgPSByZXNVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzVXJsXHJcbiAgfVxyXG5cclxuICBwcm9qZWN0VXJsKGlkOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1ByaklkPWVuY29kZVVSSUNvbXBvbmVudChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRSZXF1ZXN0VVVJREZvckRldmVsb3BtZW50U2VydmVyKHRoaXMucHJvamVjdEN0eFVybCArICcvJyArIGVuY1ByaklkKTtcclxuICB9XHJcblxyXG4gIHByb2plY3RSZXNvdXJjZVVybChwcm9qZWN0SWQ6IHN0cmluZyxyZWxSZXNvdXJjZVBhdGg6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICBsZXQgZW5jUHJqSWQ9ZW5jb2RlVVJJQ29tcG9uZW50KHByb2plY3RJZCk7XHJcbiAgICAvLyBVc2UgZW5jb2RlVVJJIGhlcmUgc2luY2UgdGhlIHJlbGF0aWNlIHJlc291cmNlIHBhdGggZnJvbSByZWNvcmRpbmcgc2NyaXB0cyBpcyBhbHJlYWR5IGEgVVJJXHJcbiAgICAvLyBlbmNvZGVVUklDb21wb25lbnQgZnVuY3Rpb24gd291bGQgZW5jb2RlIHRoZSBzbGFzaGVzIGFuZCBmZXRjaGluZyB0aGUgcmVzb3VyY2Ugd291bGQgZmFpbFxyXG4gICAgbGV0IGVuY1JlbFJlc1BhdGg9ZW5jb2RlVVJJKHJlbFJlc291cmNlUGF0aCk7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0Q3R4VXJsICsgJy8nICsgZW5jUHJqSWQgKycvJytlbmNSZWxSZXNQYXRoO1xyXG4gIH1cclxuXHJcbiAgcHJvamVjdE9ic2VydmFibGUoaWQ6c3RyaW5nKTpPYnNlcnZhYmxlPFByb2plY3Q+e1xyXG4gICAgbGV0IHByalVybD10aGlzLnByb2plY3RVcmwoaWQpO1xyXG4gICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2plY3Q+KHByalVybCx7d2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc30pXHJcbiAgIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
|