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,288 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { HttpHeaders } from "@angular/common/http";
|
|
3
|
-
import { Observable } from "rxjs";
|
|
4
|
-
import { ApiType, SPEECHRECORDER_CONFIG } from "../../../spr.config";
|
|
5
|
-
import { UUID } from "../../../utils/utils";
|
|
6
|
-
import { RecordingFileUtils } from "../../recording";
|
|
7
|
-
import { AudioBufferSource, AudioDataHolder } from "../../../audio/audio_data_holder";
|
|
8
|
-
import { BasicRecordingService } from "../../recordings/basic_recording.service";
|
|
9
|
-
import { AudioContextProvider } from "../../../audio/context";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/common/http";
|
|
12
|
-
import * as i2 from "../../../spr.config";
|
|
13
|
-
export class RecordingFileService extends BasicRecordingService {
|
|
14
|
-
static { this.RECOFILE_API_CTX = 'recordingfile'; }
|
|
15
|
-
constructor(http, config) {
|
|
16
|
-
super(http, config);
|
|
17
|
-
this.http = http;
|
|
18
|
-
this.config = config;
|
|
19
|
-
//private debugDelay:number=10000;
|
|
20
|
-
this.debugDelay = 0;
|
|
21
|
-
}
|
|
22
|
-
recoFileUrl(recordingFileId) {
|
|
23
|
-
let encRecfileId = encodeURIComponent(recordingFileId);
|
|
24
|
-
let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + encRecfileId;
|
|
25
|
-
return recUrl;
|
|
26
|
-
}
|
|
27
|
-
fetchAudiofile(recordingFileId) {
|
|
28
|
-
let recUrl = this.recoFileUrl(recordingFileId);
|
|
29
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
30
|
-
// for development and demo
|
|
31
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
32
|
-
recUrl = recUrl + '.wav';
|
|
33
|
-
}
|
|
34
|
-
let headers = new HttpHeaders({
|
|
35
|
-
'Accept': 'audio/wav'
|
|
36
|
-
});
|
|
37
|
-
return this.http.get(recUrl, {
|
|
38
|
-
observe: 'response',
|
|
39
|
-
headers: headers,
|
|
40
|
-
responseType: 'arraybuffer',
|
|
41
|
-
withCredentials: this.withCredentials
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
recordingFileDescrObserver(recordingFileId) {
|
|
45
|
-
let recUrl = this.recoFileUrl(recordingFileId);
|
|
46
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
47
|
-
// for development and demo
|
|
48
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
49
|
-
recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
|
|
50
|
-
}
|
|
51
|
-
return this.http.get(recUrl, { withCredentials: this.withCredentials });
|
|
52
|
-
}
|
|
53
|
-
sprRecordingFileDescrObserver(recordingFileId) {
|
|
54
|
-
let recUrl = this.recoFileUrl(recordingFileId);
|
|
55
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
56
|
-
// for development and demo
|
|
57
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
58
|
-
recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
|
|
59
|
-
}
|
|
60
|
-
return this.http.get(recUrl, { withCredentials: this.withCredentials });
|
|
61
|
-
}
|
|
62
|
-
fetchSessionAudiofileById(projectName, sessId, recordingFileId) {
|
|
63
|
-
let recUrl = this.recoFileUrl(recordingFileId);
|
|
64
|
-
// if (this.config && this.config.apiType === ApiType.FILES) {
|
|
65
|
-
// // for development and demo
|
|
66
|
-
// // append UUID to make request URL unique to avoid localhost server caching
|
|
67
|
-
// recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();
|
|
68
|
-
// }
|
|
69
|
-
return this.http.get(recUrl, {
|
|
70
|
-
observe: 'response',
|
|
71
|
-
responseType: 'arraybuffer',
|
|
72
|
-
withCredentials: this.withCredentials
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// TODO test
|
|
76
|
-
fetchAndApplyRecordingFile(recordingFile) {
|
|
77
|
-
let wobs = new Observable(observer => {
|
|
78
|
-
if (recordingFile.recordingFileId) {
|
|
79
|
-
let obs = this.fetchAudiofile(recordingFile.recordingFileId);
|
|
80
|
-
obs.subscribe({ next: resp => {
|
|
81
|
-
if (resp.body) {
|
|
82
|
-
AudioContextProvider.decodeAudioData(resp.body).then(ab => {
|
|
83
|
-
let as = new AudioBufferSource(ab);
|
|
84
|
-
RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
|
|
85
|
-
if (this.debugDelay > 0) {
|
|
86
|
-
window.setTimeout(() => {
|
|
87
|
-
observer.next(recordingFile);
|
|
88
|
-
observer.complete();
|
|
89
|
-
}, this.debugDelay);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
observer.next(recordingFile);
|
|
93
|
-
observer.complete();
|
|
94
|
-
}
|
|
95
|
-
}).catch(reason => { observer.error(reason); });
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
observer.error('Received no audio data!');
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
error: (error) => {
|
|
102
|
-
if (error.status == 404) {
|
|
103
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
104
|
-
observer.next(null);
|
|
105
|
-
observer.complete();
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// all other states are errors
|
|
109
|
-
observer.error(error);
|
|
110
|
-
observer.complete();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
observer.error();
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
return wobs;
|
|
120
|
-
}
|
|
121
|
-
fetchRecordingFile(aCtx, recordingFileId) {
|
|
122
|
-
let wobs = new Observable(observer => {
|
|
123
|
-
let rf = null;
|
|
124
|
-
let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
|
|
125
|
-
rfDescrObs.subscribe({ next: value => {
|
|
126
|
-
rf = value;
|
|
127
|
-
}, error: (error) => {
|
|
128
|
-
observer.error(error);
|
|
129
|
-
}, complete: () => {
|
|
130
|
-
let rfAudioObs = this.fetchAudiofile(recordingFileId);
|
|
131
|
-
rfAudioObs.subscribe({
|
|
132
|
-
next: resp => {
|
|
133
|
-
// Do not use Promise version, which does not work with Safari 13
|
|
134
|
-
if (resp.body) {
|
|
135
|
-
AudioContextProvider.decodeAudioData(resp.body).then(ab => {
|
|
136
|
-
if (rf) {
|
|
137
|
-
let as = new AudioBufferSource(ab);
|
|
138
|
-
RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
observer.error('Recording file object null');
|
|
142
|
-
}
|
|
143
|
-
if (this.debugDelay > 0) {
|
|
144
|
-
window.setTimeout(() => {
|
|
145
|
-
observer.next(rf);
|
|
146
|
-
observer.complete();
|
|
147
|
-
}, this.debugDelay);
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
observer.next(rf);
|
|
151
|
-
observer.complete();
|
|
152
|
-
}
|
|
153
|
-
}).catch(reason => { observer.error(reason); });
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
observer.error('Received no audio data');
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
error: (error) => {
|
|
160
|
-
if (error.status == 404) {
|
|
161
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
162
|
-
observer.next(null);
|
|
163
|
-
observer.complete();
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// all other states are errors
|
|
167
|
-
observer.error(error);
|
|
168
|
-
observer.complete();
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
return wobs;
|
|
176
|
-
}
|
|
177
|
-
fetchSprRecordingFile(recordingFileId) {
|
|
178
|
-
let wobs = new Observable(observer => {
|
|
179
|
-
let rf = null;
|
|
180
|
-
let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
|
|
181
|
-
rfDescrObs.subscribe({ next: value => {
|
|
182
|
-
rf = value;
|
|
183
|
-
},
|
|
184
|
-
error: (error) => {
|
|
185
|
-
observer.error(error);
|
|
186
|
-
}, complete: () => {
|
|
187
|
-
let sampleCnt = null;
|
|
188
|
-
if (rf && rf.channels && rf.frames) {
|
|
189
|
-
sampleCnt = rf.channels * rf.frames;
|
|
190
|
-
}
|
|
191
|
-
// TODO use download storage type depending on sample count of file
|
|
192
|
-
if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
|
|
193
|
-
const baseUrl = this.recoFileUrl(recordingFileId);
|
|
194
|
-
const obNetAb = this.chunkAudioRequestToNetAudioBuffer(baseUrl, 0, rf?.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
|
|
195
|
-
obNetAb.subscribe({
|
|
196
|
-
next: (nab) => {
|
|
197
|
-
let adh = new AudioDataHolder(nab);
|
|
198
|
-
if (rf) {
|
|
199
|
-
RecordingFileUtils.setAudioData(rf, adh);
|
|
200
|
-
observer.next(rf);
|
|
201
|
-
}
|
|
202
|
-
},
|
|
203
|
-
complete: () => {
|
|
204
|
-
observer.complete();
|
|
205
|
-
},
|
|
206
|
-
error: (error) => {
|
|
207
|
-
if (error.status == 404) {
|
|
208
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
209
|
-
observer.next(null);
|
|
210
|
-
observer.complete();
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
// all other states are errors
|
|
214
|
-
observer.error(error);
|
|
215
|
-
observer.complete();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
let rfAudioObs = this.fetchAudiofile(recordingFileId);
|
|
222
|
-
rfAudioObs.subscribe({ next: resp => {
|
|
223
|
-
// Do not use Promise version, which does not work with Safari 13
|
|
224
|
-
if (resp.body) {
|
|
225
|
-
AudioContextProvider.decodeAudioData(resp.body).then(ab => {
|
|
226
|
-
if (rf) {
|
|
227
|
-
let as = new AudioBufferSource(ab);
|
|
228
|
-
let adh = new AudioDataHolder(as);
|
|
229
|
-
RecordingFileUtils.setAudioData(rf, adh);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
observer.error('Recording file object null');
|
|
233
|
-
}
|
|
234
|
-
if (this.debugDelay > 0) {
|
|
235
|
-
window.setTimeout(() => {
|
|
236
|
-
observer.next(rf);
|
|
237
|
-
observer.complete();
|
|
238
|
-
}, this.debugDelay);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
observer.next(rf);
|
|
242
|
-
observer.complete();
|
|
243
|
-
}
|
|
244
|
-
}).catch(reason => { observer.error(reason); });
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
observer.error('Received no audio data');
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
error: (error) => {
|
|
251
|
-
if (error.status == 404) {
|
|
252
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
253
|
-
observer.next(null);
|
|
254
|
-
observer.complete();
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
// all other states are errors
|
|
258
|
-
observer.error(error);
|
|
259
|
-
observer.complete();
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
return wobs;
|
|
268
|
-
}
|
|
269
|
-
saveEditSelection(recordingFileId, editSampleRate, editStartFrame, editEndFrame) {
|
|
270
|
-
let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + recordingFileId;
|
|
271
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
272
|
-
// for development and demo
|
|
273
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
274
|
-
recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
|
|
275
|
-
}
|
|
276
|
-
//console.log("Path request URL: "+recUrl)
|
|
277
|
-
return this.http.patch(recUrl, { editSampleRate: editSampleRate, editStartFrame: editStartFrame, editEndFrame: editEndFrame }, { withCredentials: this.withCredentials });
|
|
278
|
-
}
|
|
279
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
280
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService }); }
|
|
281
|
-
}
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService, decorators: [{
|
|
283
|
-
type: Injectable
|
|
284
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
|
|
285
|
-
type: Inject,
|
|
286
|
-
args: [SPEECHRECORDER_CONFIG]
|
|
287
|
-
}] }] });
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nZmlsZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcmVjb3JkaW5nZmlsZS9yZWNvcmRpbmdmaWxlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFpQyxXQUFXLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHaEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdoQyxPQUFPLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQWdCLGtCQUFrQixFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUk1RCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXFCO2FBRXRDLHFCQUFnQixHQUFHLGVBQWUsQUFBbEIsQ0FBa0I7SUFLekQsWUFBc0IsSUFBZ0IsRUFBMkMsTUFBNkI7UUFDMUcsS0FBSyxDQUFDLElBQUksRUFBQyxNQUFNLENBQUMsQ0FBQztRQURELFNBQUksR0FBSixJQUFJLENBQVk7UUFBMkMsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFIOUcsa0NBQWtDO1FBQzFCLGVBQVUsR0FBUSxDQUFDLENBQUM7SUFJNUIsQ0FBQztJQUVPLFdBQVcs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LG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsMENBQTBDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQW1CLE1BQU0sRUFBQyxFQUFDLGNBQWMsRUFBQyxjQUFjLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxZQUFZLEVBQUMsWUFBWSxFQUFDLEVBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDckwsQ0FBQzsrR0E1UlUsb0JBQW9CLDRDQU9pQixxQkFBcUI7bUhBUDFELG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVTs7MEJBUWdDLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7VVVJRH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZSwgUmVjb3JkaW5nRmlsZVV0aWxzLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXVkaW9CdWZmZXJTb3VyY2UsIEF1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uLy4uLy4uL2F1ZGlvL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7QmFzaWNSZWNvcmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vcmVjb3JkaW5ncy9iYXNpY19yZWNvcmRpbmcuc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVTZXJ2aWNlIGV4dGVuZHMgQmFzaWNSZWNvcmRpbmdTZXJ2aWNle1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQ09GSUxFX0FQSV9DVFggPSAncmVjb3JkaW5nZmlsZSdcclxuXHJcbiAgLy9wcml2YXRlIGRlYnVnRGVsYXk6bnVtYmVyPTEwMDAwO1xyXG4gIHByaXZhdGUgZGVidWdEZWxheTpudW1iZXI9MDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwcm90ZWN0ZWQgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgICAgc3VwZXIoaHR0cCxjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNvRmlsZVVybChyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1JlY2ZpbGVJZD1lbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGxldCByZWNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUmVjb3JkaW5nRmlsZVNlcnZpY2UuUkVDT0ZJTEVfQVBJX0NUWCArICcvJyArIGVuY1JlY2ZpbGVJZDtcclxuXHJcbiAgICByZXR1cm4gcmVjVXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEF1ZGlvZmlsZShyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjVXJsID0gcmVjVXJsICsgJy53YXYnO1xyXG4gICAgfVxyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQWNjZXB0JzogJ2F1ZGlvL3dhdidcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHJlY1VybCwge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNvcmRpbmdGaWxlRGVzY3JPYnNlcnZlcihyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8UmVjb3JkaW5nRmlsZT4ge1xyXG5cclxuICAgIGxldCByZWNVcmwgPSB0aGlzLnJlY29GaWxlVXJsKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIHJlY1VybCA9IHJlY1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nK1VVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlY29yZGluZ0ZpbGU+KHJlY1VybCx7IHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHMgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwclJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZDogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlPiB7XHJcblxyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjVXJsID0gcmVjVXJsICsgJy5qc29uP3JlcXVlc3RVVUlEPScrVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U3ByUmVjb3JkaW5nRmlsZT4ocmVjVXJsLHsgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyB9KTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGZldGNoU2Vzc2lvbkF1ZGlvZmlsZUJ5SWQocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIHJlY29yZGluZ0ZpbGVJZDogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+PiB7XHJcblxyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIC8vIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAvLyAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgLy8gICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgIC8vICAgcmVjVXJsID0gcmVjVXJsICsgJy53YXY/cmVxdWVzdFVVSUQ9JyArIFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHJlY1VybCwge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFRPRE8gdGVzdFxyXG5cclxuICBmZXRjaEFuZEFwcGx5UmVjb3JkaW5nRmlsZShyZWNvcmRpbmdGaWxlOlNwclJlY29yZGluZ0ZpbGUpOk9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlfG51bGw+KG9ic2VydmVyPT57XHJcbiAgICAgIGlmKHJlY29yZGluZ0ZpbGUucmVjb3JkaW5nRmlsZUlkKSB7XHJcbiAgICAgICAgbGV0IG9icyA9IHRoaXMuZmV0Y2hBdWRpb2ZpbGUocmVjb3JkaW5nRmlsZS5yZWNvcmRpbmdGaWxlSWQpO1xyXG5cclxuICAgICAgICBvYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB7bmV4dDpyZXNwID0+IHtcclxuICAgICAgICAgICAgICBpZihyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvQ29udGV4dFByb3ZpZGVyLmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHkpLnRoZW4oYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYXM9bmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKTtcclxuICAgICAgICAgICAgICAgICAgUmVjb3JkaW5nRmlsZVV0aWxzLnNldEF1ZGlvRGF0YShyZWNvcmRpbmdGaWxlLG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWNvcmRpbmdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlY29yZGluZ0ZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbj0+e29ic2VydmVyLmVycm9yKHJlYXNvbil9KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdSZWNlaXZlZCBubyBhdWRpbyBkYXRhIScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG5cclxuICBmZXRjaFJlY29yZGluZ0ZpbGUoYUN0eDogQXVkaW9Db250ZXh0LCByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8UmVjb3JkaW5nRmlsZSB8IG51bGw+IHtcclxuXHJcbiAgICBsZXQgd29icyA9IG5ldyBPYnNlcnZhYmxlPFJlY29yZGluZ0ZpbGUgfCBudWxsPihvYnNlcnZlciA9PiB7XHJcbiAgICAgIGxldCByZjogUmVjb3JkaW5nRmlsZXxudWxsID0gbnVsbDtcclxuICAgICAgbGV0IHJmRGVzY3JPYnMgPSB0aGlzLnJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgIHJmRGVzY3JPYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAge25leHQ6dmFsdWUgPT4ge1xyXG4gICAgICAgIHJmID0gdmFsdWU7XHJcbiAgICAgIH0sIGVycm9yOihlcnJvcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSwgY29tcGxldGU6KCkgPT4ge1xyXG4gICAgICAgIGxldCByZkF1ZGlvT2JzID0gdGhpcy5mZXRjaEF1ZGlvZmlsZShyZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgIHJmQXVkaW9PYnMuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxM1xyXG4gICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgQXVkaW9Db250ZXh0UHJvdmlkZXIuZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSkudGhlbiggYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJmKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhYik7XHJcbiAgICAgICAgICAgICAgICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEocmYsIG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdSZWNvcmRpbmcgZmlsZSBvYmplY3QgbnVsbCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZGVidWdEZWxheSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJmKTtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge29ic2VydmVyLmVycm9yKHJlYXNvbil9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcignUmVjZWl2ZWQgbm8gYXVkaW8gZGF0YScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGFsbCBvdGhlciBzdGF0ZXMgYXJlIGVycm9yc1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hTcHJSZWNvcmRpbmdGaWxlKCByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZSB8IG51bGw+IHtcclxuXHJcbiAgICBsZXQgd29icyA9IG5ldyBPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPihvYnNlcnZlciA9PiB7XHJcbiAgICAgIGxldCByZjogU3ByUmVjb3JkaW5nRmlsZXxudWxsID0gbnVsbDtcclxuICAgICAgbGV0IHJmRGVzY3JPYnMgPSB0aGlzLnNwclJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgIHJmRGVzY3JPYnMuc3Vic2NyaWJlKHtuZXh0OnZhbHVlID0+IHtcclxuICAgICAgICByZiA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAsIGVycm9yOihlcnJvcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSwgY29tcGxldGU6KCkgPT4ge1xyXG4gICAgICAgIGxldCBzYW1wbGVDbnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGlmIChyZiAmJiByZi5jaGFubmVscyAmJiByZi5mcmFtZXMpIHtcclxuICAgICAgICAgIHNhbXBsZUNudCA9IHJmLmNoYW5uZWxzICogcmYuZnJhbWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHVzZSBkb3dubG9hZCBzdG9yYWdlIHR5cGUgZGVwZW5kaW5nIG9uIHNhbXBsZSBjb3VudCBvZiBmaWxlXHJcbiAgICAgICAgaWYgKHJmICYmIHJmLnNhbXBsZXJhdGUgJiYgc2FtcGxlQ250ICE9IG51bGwgJiYgc2FtcGxlQ250ID4gdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcykge1xyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgIGNvbnN0IG9iTmV0QWIgPSB0aGlzLmNodW5rQXVkaW9SZXF1ZXN0VG9OZXRBdWRpb0J1ZmZlcihiYXNlVXJsLCAwLCByZj8uc2FtcGxlcmF0ZSwgQmFzaWNSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTLCByZi5mcmFtZXMpO1xyXG4gICAgICAgICAgb2JOZXRBYi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKG5hYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYWRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuYWIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBSZWNvcmRpbmdGaWxlVXRpbHMuc2V0QXVkaW9EYXRhKHJmLCBhZGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJwcmV0IG5vdCBhcyBhbiBlcnJvciwgdGhlIGZpbGUgaXN0IG5vdCByZWNvcmRlZCB5ZXRcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBsZXQgcmZBdWRpb09icyA9IHRoaXMuZmV0Y2hBdWRpb2ZpbGUocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgIHJmQXVkaW9PYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtuZXh0OnJlc3AgPT5cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgICAgaWYgKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICAgIEF1ZGlvQ29udGV4dFByb3ZpZGVyLmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHkpLnRoZW4oIGFiID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZikge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYWRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhcyk7XHJcbiAgICAgICAgICAgICAgICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEocmYsIGFkaCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcignUmVjb3JkaW5nIGZpbGUgb2JqZWN0IG51bGwnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJmKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9LCB0aGlzLmRlYnVnRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZik7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtvYnNlcnZlci5lcnJvcihyZWFzb24pfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoJ1JlY2VpdmVkIG5vIGF1ZGlvIGRhdGEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICwgZXJyb3I6KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG5cclxuICBzYXZlRWRpdFNlbGVjdGlvbihyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcixlZGl0U2FtcGxlUmF0ZTpudW1iZXJ8bnVsbCxlZGl0U3RhcnRGcmFtZTpudW1iZXJ8bnVsbCxlZGl0RW5kRnJhbWU6bnVtYmVyfG51bGwpOiBPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPiB7XHJcbiAgICBsZXQgcmVjVXJsID0gdGhpcy5hcGlFbmRQb2ludCArIFJlY29yZGluZ0ZpbGVTZXJ2aWNlLlJFQ09GSUxFX0FQSV9DVFggKyAnLycgKyByZWNvcmRpbmdGaWxlSWQ7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIHJlY1VybCA9IHJlY1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nK1VVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuICAgIC8vY29uc29sZS5sb2coXCJQYXRoIHJlcXVlc3QgVVJMOiBcIityZWNVcmwpXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFNwclJlY29yZGluZ0ZpbGU+KHJlY1VybCx7ZWRpdFNhbXBsZVJhdGU6ZWRpdFNhbXBsZVJhdGUsZWRpdFN0YXJ0RnJhbWU6ZWRpdFN0YXJ0RnJhbWUsZWRpdEVuZEZyYW1lOmVkaXRFbmRGcmFtZX0seyB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgdHlwZSBTdGF0dXM9IFwiQ1JFQVRFRFwiIHwgXCJMT0FERURcIiB8IFwiU1RBUlRFRF9UUkFJTklOR1wiIHwgXCJTVEFSVEVEXCIgfCBcIkNPTVBMRVRFRFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVHlwZT0gJ05PUk0nIHwgJ1RFU1QnIHwgJ1RFU1RfREVGX0EnIHwgJ1NJTlVTX1RFU1QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9ue1xyXG5cclxuICBzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcixcclxuICBzdGF0dXM6IFN0YXR1cyxcclxuICBzZWFsZWQ/OmJvb2xlYW4sXHJcbiAgdHlwZTogVHlwZSxcclxuICBsb2FkZWREYXRlPzpEYXRlLFxyXG4gIHN0YXJ0ZWRUcmFpbmluZ0RhdGU/OkRhdGUsXHJcbiAgc3RhcnRlZERhdGU/OkRhdGUsXHJcbiAgY29tcGxldGVkRGF0ZT86RGF0ZSxcclxuICByZXN0YXJ0ZWREYXRlPzpEYXRlLFxyXG4gIHByb2plY3Q6IHN0cmluZyxcclxuICBzY3JpcHQ6IHN0cmluZyB8IG51bWJlclxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { ApiType, SPEECHRECORDER_CONFIG } from "../../spr.config";
|
|
3
|
-
import { UUID } from "../../utils/utils";
|
|
4
|
-
import { Observable } from "rxjs";
|
|
5
|
-
import { ProjectService } from "../project/project.service";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common/http";
|
|
8
|
-
import * as i2 from "../../spr.config";
|
|
9
|
-
export class SessionService {
|
|
10
|
-
get uploadCount() {
|
|
11
|
-
return this._uploadCount;
|
|
12
|
-
}
|
|
13
|
-
static { this.SESSION_API_CTX = 'session'; }
|
|
14
|
-
constructor(http, config) {
|
|
15
|
-
this.http = http;
|
|
16
|
-
this.config = config;
|
|
17
|
-
this.apiEndPoint = '';
|
|
18
|
-
this.withCredentials = false;
|
|
19
|
-
this._uploadCount = 0;
|
|
20
|
-
if (config && config.apiEndPoint) {
|
|
21
|
-
this.apiEndPoint = config.apiEndPoint;
|
|
22
|
-
}
|
|
23
|
-
if (this.apiEndPoint !== '') {
|
|
24
|
-
this.apiEndPoint = this.apiEndPoint + '/';
|
|
25
|
-
}
|
|
26
|
-
if (config != null && config.withCredentials != null) {
|
|
27
|
-
this.withCredentials = config.withCredentials;
|
|
28
|
-
}
|
|
29
|
-
this.sessionsUrl = this.apiEndPoint + SessionService.SESSION_API_CTX;
|
|
30
|
-
}
|
|
31
|
-
sessionObserver(id) {
|
|
32
|
-
let sessUrl = this.sessionsUrl + '/' + id;
|
|
33
|
-
if (this.config && this.config.apiType === ApiType.FILES) {
|
|
34
|
-
// for development and demo
|
|
35
|
-
// append UUID to make request URL unique to avoid localhost server caching
|
|
36
|
-
sessUrl = sessUrl + '.json?requestUUID=' + UUID.generate();
|
|
37
|
-
}
|
|
38
|
-
return this.http.get(sessUrl, { withCredentials: this.withCredentials });
|
|
39
|
-
}
|
|
40
|
-
patchSessionObserver(session, body) {
|
|
41
|
-
let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.sessionId;
|
|
42
|
-
let wrapObs = new Observable(subscriber => {
|
|
43
|
-
this._uploadCount++;
|
|
44
|
-
let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
|
|
45
|
-
obs.subscribe({
|
|
46
|
-
next: (value) => {
|
|
47
|
-
subscriber.next(value);
|
|
48
|
-
},
|
|
49
|
-
error: error => {
|
|
50
|
-
this._uploadCount--;
|
|
51
|
-
subscriber.error(error);
|
|
52
|
-
}, complete: () => {
|
|
53
|
-
this._uploadCount--;
|
|
54
|
-
subscriber.complete();
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
return wrapObs;
|
|
59
|
-
}
|
|
60
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
61
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService }); }
|
|
62
|
-
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService, decorators: [{
|
|
64
|
-
type: Injectable
|
|
65
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
|
|
66
|
-
type: Inject,
|
|
67
|
-
args: [SPEECHRECORDER_CONFIG]
|
|
68
|
-
}] }] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFFdEYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7O0FBSzFELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO2FBQ3NCLG9CQUFlLEdBQUMsU0FBUyxBQUFWLENBQVc7SUFNakQsWUFBb0IsSUFBZSxFQUF3QyxNQUE0QjtRQUFuRixTQUFJLEdBQUosSUFBSSxDQUFXO1FBQXdDLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBTC9GLGdCQUFXLEdBQUMsRUFBRSxDQUFDO1FBRU4sb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFDdkMsaUJBQVksR0FBQyxDQUFDLENBQUM7UUFJckIsSUFBRyxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLFdBQVcsR0FBQyxHQUFHLENBQUE7UUFDdkMsQ0FBQztRQUNELElBQUcsTUFBTSxJQUFFLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFFLElBQUksRUFBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFDdkUsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFVO1FBRXhCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pELDJCQUEyQjtZQUMzQiwyRUFBMkU7WUFDM0UsT0FBTyxHQUFHLE9BQU8sR0FBRyxvQkFBb0IsR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVUsT0FBTyxFQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFlLEVBQUMsSUFBUTtRQUUzQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUE7UUFFekosSUFBSSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQVUsVUFBVSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFVLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUM7WUFDNUYsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDZCxJQUFJLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFFYixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUNBLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLENBQUMsRUFBRSxRQUFRLEVBQUMsR0FBRyxFQUFFO29CQUNmLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOytHQTFEVSxjQUFjLDRDQVVtQixxQkFBcUI7bUhBVnRELGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQVc0QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7UHJvamVjdFNlcnZpY2V9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU2VydmljZSB7XHJcbiAgZ2V0IHVwbG9hZENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBsb2FkQ291bnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VTU0lPTl9BUElfQ1RYPSdzZXNzaW9uJztcclxuICBwcml2YXRlIGFwaUVuZFBvaW50PScnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbnNVcmw6c3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgd2l0aENyZWRlbnRpYWxzOmJvb2xlYW49ZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdXBsb2FkQ291bnQ9MDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQsQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGlmKGNvbmZpZyAmJiBjb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgdGhpcy5hcGlFbmRQb2ludD1jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFwaUVuZFBvaW50ICE9PSAnJyl7XHJcbiAgICAgIHRoaXMuYXBpRW5kUG9pbnQ9dGhpcy5hcGlFbmRQb2ludCsnLydcclxuICAgIH1cclxuICAgIGlmKGNvbmZpZyE9bnVsbCAmJiBjb25maWcud2l0aENyZWRlbnRpYWxzIT1udWxsKXtcclxuICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHM9Y29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICAgIHRoaXMuc2Vzc2lvbnNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gIH1cclxuXHJcbiAgc2Vzc2lvbk9ic2VydmVyKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuXHJcbiAgICBsZXQgc2Vzc1VybCA9IHRoaXMuc2Vzc2lvbnNVcmwgKyAnLycgKyBpZDtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgc2Vzc1VybCA9IHNlc3NVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTZXNzaW9uPihzZXNzVXJsLHsgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwYXRjaFNlc3Npb25PYnNlcnZlcihzZXNzaW9uOlNlc3Npb24sYm9keTphbnkpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuXHJcbiAgICBsZXQgc2Vzc3NVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgc2Vzc2lvbi5wcm9qZWN0ICsgJy8nICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYICsgJy8nICsgc2Vzc2lvbi5zZXNzaW9uSWRcclxuXHJcbiAgICBsZXQgd3JhcE9icyA9IG5ldyBPYnNlcnZhYmxlPFNlc3Npb24+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICB0aGlzLl91cGxvYWRDb3VudCsrO1xyXG4gICAgICBsZXQgb2JzID0gdGhpcy5odHRwLnBhdGNoPFNlc3Npb24+KHNlc3NzVXJsLCBib2R5LCB7d2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc30pO1xyXG4gICAgICBvYnMuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoodmFsdWUpID0+XHJcbiAgICAgIHtcclxuICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgICxlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZENvdW50LS07XHJcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0sIGNvbXBsZXRlOigpID0+IHtcclxuICAgICAgICB0aGlzLl91cGxvYWRDb3VudC0tO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3cmFwT2JzO1xyXG4gIH1cclxuXHJcbiAgLy8gcHV0U2Vzc2lvbk9ic2VydmVyKHNlc3Npb246IFNlc3Npb24pOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3NzVXJsID0gdGhpcy5hcGlFbmRQb2ludCArIFByb2plY3RTZXJ2aWNlLlBST0pFQ1RfQVBJX0NUWCArICcvJyArIHNlc3Npb24ucHJvamVjdCArICcvJyArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWCArICcvJyArIHNlc3Npb24uc2Vzc2lvblxyXG4gIC8vXHJcbiAgLy8gICBsZXQgd3JhcE9icyA9IG5ldyBPYnNlcnZhYmxlPFNlc3Npb24+KHN1YnNjcmliZXIgPT4ge1xyXG4gIC8vICAgICB0aGlzLl91cGxvYWRDb3VudCsrO1xyXG4gIC8vICAgICBsZXQgb2JzID0gdGhpcy5odHRwLnB1dDxTZXNzaW9uPihzZXNzc1VybCwgc2Vzc2lvbiwge3dpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAvLyAgICAgb2JzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAvLyAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xyXG4gIC8vICAgICB9LCBlcnJvciA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5fdXBsb2FkQ291bnQtLTtcclxuICAvLyAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcclxuICAvLyAgICAgfSwgKCkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuX3VwbG9hZENvdW50LS07XHJcbiAgLy8gICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgcmV0dXJuIHdyYXBPYnM7XHJcbiAgLy8gfVxyXG4gIC8vXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from "@angular/core";
|
|
2
|
-
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/material/dialog";
|
|
5
|
-
import * as i2 from "@angular/material/icon";
|
|
6
|
-
import * as i3 from "@angular/material/button";
|
|
7
|
-
export class SessionFinishedDialog {
|
|
8
|
-
constructor(dialogRef, data) {
|
|
9
|
-
this.dialogRef = dialogRef;
|
|
10
|
-
this.data = data;
|
|
11
|
-
}
|
|
12
|
-
closeDialog() {
|
|
13
|
-
this.dialogRef.close();
|
|
14
|
-
}
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
|
|
17
|
-
<div mat-dialog-content>
|
|
18
|
-
|
|
19
|
-
<p>Thank you! The recording session is complete.</p>
|
|
20
|
-
|
|
21
|
-
</div>
|
|
22
|
-
<div mat-dialog-actions>
|
|
23
|
-
<button mat-button (click)="closeDialog()">OK</button>
|
|
24
|
-
</div>
|
|
25
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
|
|
26
|
-
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
|
|
28
|
-
type: Component,
|
|
29
|
-
args: [{
|
|
30
|
-
selector: 'spr-session-finished-dialog',
|
|
31
|
-
template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
|
|
32
|
-
<div mat-dialog-content>
|
|
33
|
-
|
|
34
|
-
<p>Thank you! The recording session is complete.</p>
|
|
35
|
-
|
|
36
|
-
</div>
|
|
37
|
-
<div mat-dialog-actions>
|
|
38
|
-
<button mat-button (click)="closeDialog()">OK</button>
|
|
39
|
-
</div>
|
|
40
|
-
`
|
|
41
|
-
}]
|
|
42
|
-
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
43
|
-
type: Inject,
|
|
44
|
-
args: [MAT_DIALOG_DATA]
|
|
45
|
-
}] }] });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbl9maW5pc2hlZF9kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7OztBQWV6RSxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ1MsU0FBOEMsRUFDckIsSUFBUztRQURsQyxjQUFTLEdBQVQsU0FBUyxDQUFxQztRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFLO0lBQUksQ0FBQztJQUVoRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDOytHQVJVLHFCQUFxQiw4Q0FJdEIsZUFBZTttR0FKZCxxQkFBcUIsbUVBWHRCOzs7Ozs7Ozs7R0FTVDs7NEZBRVUscUJBQXFCO2tCQWJqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRTs7Ozs7Ozs7O0dBU1Q7aUJBQ0Y7OzBCQUtJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3ByLXNlc3Npb24tZmluaXNoZWQtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZTogYDxoMSBtYXQtZGlhbG9nLXRpdGxlPjxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwiJ2dyZWVuJ1wiPmRvbmVfYWxsPC9tYXQtaWNvbj4gU2Vzc2lvbiBmaW5pc2hlZDwvaDE+XHJcbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG4gICAgPHA+VGhhbmsgeW91ISBUaGUgcmVjb3JkaW5nIHNlc3Npb24gaXMgY29tcGxldGUuPC9wPlxyXG5cclxuICA8L2Rpdj5cclxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPk9LPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkZpbmlzaGVkRGlhbG9ne1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZXNzaW9uRmluaXNoZWREaWFsb2c+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHsgfVxyXG5cclxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|