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,38 +1,37 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
|
|
2
|
-
import { RecordingList } from "./recording_list";
|
|
3
|
-
import { AudioDisplay } from "../../audio/audio_display";
|
|
4
|
-
import { ResponsiveComponent } from "../../ui/responsive_component";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/cdk/layout";
|
|
7
|
-
import * as i2 from "../../audio/audio_display";
|
|
8
|
-
import * as i3 from "./recording_list";
|
|
9
|
-
export class RecorderCombiPane extends ResponsiveComponent {
|
|
10
|
-
constructor(bpo) {
|
|
11
|
-
super(bpo);
|
|
12
|
-
this.bpo = bpo;
|
|
13
|
-
this.selectDisabled = false;
|
|
14
|
-
this.selectedRecordingFileChanged = new EventEmitter();
|
|
15
|
-
this.selectedRecordingFile = null;
|
|
16
|
-
this.audioSignalCollapsed = true;
|
|
17
|
-
this.displayAudioClip = null;
|
|
18
|
-
}
|
|
19
|
-
ngAfterViewInit() {
|
|
20
|
-
}
|
|
21
|
-
addRecFile(rf) {
|
|
22
|
-
this.recordingListComp.addRecFile(rf);
|
|
23
|
-
}
|
|
24
|
-
setRecFileAudioData(recFile, adh) {
|
|
25
|
-
this.recordingListComp.setRecFileAudioData(recFile, adh);
|
|
26
|
-
}
|
|
27
|
-
selectRecordingFile(rf) {
|
|
28
|
-
this.selectedRecordingFileChanged.emit(rf);
|
|
29
|
-
}
|
|
30
|
-
selectTop() {
|
|
31
|
-
this.recordingListComp.selectTop();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
|
|
2
|
+
import { RecordingList } from "./recording_list";
|
|
3
|
+
import { AudioDisplay } from "../../audio/audio_display";
|
|
4
|
+
import { ResponsiveComponent } from "../../ui/responsive_component";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/cdk/layout";
|
|
7
|
+
import * as i2 from "../../audio/audio_display";
|
|
8
|
+
import * as i3 from "./recording_list";
|
|
9
|
+
export class RecorderCombiPane extends ResponsiveComponent {
|
|
10
|
+
constructor(bpo) {
|
|
11
|
+
super(bpo);
|
|
12
|
+
this.bpo = bpo;
|
|
13
|
+
this.selectDisabled = false;
|
|
14
|
+
this.selectedRecordingFileChanged = new EventEmitter();
|
|
15
|
+
this.selectedRecordingFile = null;
|
|
16
|
+
this.audioSignalCollapsed = true;
|
|
17
|
+
this.displayAudioClip = null;
|
|
18
|
+
}
|
|
19
|
+
ngAfterViewInit() {
|
|
20
|
+
}
|
|
21
|
+
addRecFile(rf) {
|
|
22
|
+
this.recordingListComp.addRecFile(rf);
|
|
23
|
+
}
|
|
24
|
+
setRecFileAudioData(recFile, adh) {
|
|
25
|
+
this.recordingListComp.setRecFileAudioData(recFile, adh);
|
|
26
|
+
}
|
|
27
|
+
selectRecordingFile(rf) {
|
|
28
|
+
this.selectedRecordingFileChanged.emit(rf);
|
|
29
|
+
}
|
|
30
|
+
selectTop() {
|
|
31
|
+
this.recordingListComp.selectTop();
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
36
35
|
<div class="scrollList">
|
|
37
36
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
38
37
|
</div>
|
|
@@ -44,9 +43,10 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
44
43
|
[autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
|
|
45
44
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
46
45
|
</div>
|
|
47
|
-
`, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "component", type: i2.AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: i3.RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }] });
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
`, isInline: true, styles: [".monospaced{font-family:monospace}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;padding-right:5px}.mat-mdc-card,.mat-mdc-card-header,.mat-mdc-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}.spr-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "component", type: i2.AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: i3.RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }] }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RecorderCombiPane, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
50
|
args: [{ selector: 'app-recordercombipane', template: `
|
|
51
51
|
<div class="scrollList">
|
|
52
52
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
@@ -59,30 +59,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
59
59
|
[autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
|
|
60
60
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
61
61
|
</div>
|
|
62
|
-
`, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
|
|
63
|
-
}], ctorParameters:
|
|
64
|
-
type: ViewChild,
|
|
65
|
-
args: [RecordingList]
|
|
66
|
-
}], selectDisabled: [{
|
|
67
|
-
type: Input
|
|
68
|
-
}], selectedRecordingFileChanged: [{
|
|
69
|
-
type: Output
|
|
70
|
-
}], selectedRecordingFile: [{
|
|
71
|
-
type: Input
|
|
72
|
-
}], audioDisplay: [{
|
|
73
|
-
type: ViewChild,
|
|
74
|
-
args: [AudioDisplay, { static: true }]
|
|
75
|
-
}], audioSignalCollapsed: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}], displayAudioClip: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], playStartAction: [{
|
|
80
|
-
type: Input
|
|
81
|
-
}], playSelectionAction: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], autoPlayOnSelectToggleAction: [{
|
|
84
|
-
type: Input
|
|
85
|
-
}], playStopAction: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}] } });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
`, styles: [".monospaced{font-family:monospace}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;padding-right:5px}.mat-mdc-card,.mat-mdc-card-header,.mat-mdc-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}.spr-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
|
|
63
|
+
}], ctorParameters: () => [{ type: i1.BreakpointObserver }], propDecorators: { recordingListComp: [{
|
|
64
|
+
type: ViewChild,
|
|
65
|
+
args: [RecordingList]
|
|
66
|
+
}], selectDisabled: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], selectedRecordingFileChanged: [{
|
|
69
|
+
type: Output
|
|
70
|
+
}], selectedRecordingFile: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], audioDisplay: [{
|
|
73
|
+
type: ViewChild,
|
|
74
|
+
args: [AudioDisplay, { static: true }]
|
|
75
|
+
}], audioSignalCollapsed: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], displayAudioClip: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], playStartAction: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], playSelectionAction: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], autoPlayOnSelectToggleAction: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], playStopAction: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}] } });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJfY29tYmlfcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGVyX2NvbWJpX3BhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUcvQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBK0RsRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQW1CO0lBZXhELFlBQXNCLEdBQXNCO1FBQzFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBWm5DLG1CQUFjLEdBQVMsS0FBSyxDQUFDO1FBQzVCLGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ2xFLDBCQUFxQixHQUFvQixJQUFJLENBQUM7UUFHOUMseUJBQW9CLEdBQVUsSUFBSSxDQUFDO1FBQ25DLHFCQUFnQixHQUFtQixJQUFJLENBQUM7SUFRakQsQ0FBQztJQUVELGVBQWU7SUFFZixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQWdCO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQXFCLEVBQUMsR0FBd0I7UUFDaEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBR0QsbUJBQW1CLENBQUMsRUFBZ0I7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQyxDQUFDOzhHQXRDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw2aEJBRWpCLGFBQWEsK0VBS2IsWUFBWSxxRkEvRGI7Ozs7Ozs7Ozs7OztHQVlUOzsyRkE0Q1UsaUJBQWlCO2tCQTVEN0IsU0FBUzsrQkFFRSx1QkFBdUIsWUFFdkI7Ozs7Ozs7Ozs7OztHQVlUO3VGQThDeUIsaUJBQWlCO3NCQUExQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2YsY0FBYztzQkFBdEIsS0FBSztnQkFDSSw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0UscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVxQyxZQUFZO3NCQUF0RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2hDLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZX0gZnJvbSBcIi4uL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge1JlY29yZGluZ0xpc3R9IGZyb20gXCIuL3JlY29yZGluZ19saXN0XCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge0F1ZGlvRGlzcGxheX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2F1ZGlvX2Rpc3BsYXlcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge1Jlc3BvbnNpdmVDb21wb25lbnR9IGZyb20gXCIuLi8uLi91aS9yZXNwb25zaXZlX2NvbXBvbmVudFwiO1xyXG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9sYXlvdXRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1yZWNvcmRlcmNvbWJpcGFuZScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsTGlzdFwiPlxyXG4gICAgICAgIDxhcHAtcmVjb3JkaW5nbGlzdCBbc2VsZWN0ZWRSZWNvcmRpbmdGaWxlXT1cInNlbGVjdGVkUmVjb3JkaW5nRmlsZVwiIFtzZWxlY3REaXNhYmxlZF09XCJzZWxlY3REaXNhYmxlZFwiIChzZWxlY3RlZFJlY29yZGluZ0ZpbGVDaGFuZ2VkKT1cInNlbGVjdFJlY29yZGluZ0ZpbGUoJGV2ZW50KVwiPjwvYXBwLXJlY29yZGluZ2xpc3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzYWJsZVwiICAjYXNDdCBbY2xhc3MuYWN0aXZlXT1cIiFhdWRpb1NpZ25hbENvbGxhcHNlZCAmJiAhc2NyZWVuWHNcIj5cclxuICAgICAgPGFwcC1hdWRpb2Rpc3BsYXkgI2F1ZGlvU2lnbmFsQ29udGFpbmVyIFtjbGFzcy5hY3RpdmVdPVwiIWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvQ2xpcF09XCJkaXNwbGF5QXVkaW9DbGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJwbGF5U3RhcnRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25dPVwiYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiPjwvYXBwLWF1ZGlvZGlzcGxheT5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JleTtcclxuICAgIHdpZHRoOiAxMDAlOyAvKiB1c2UgYWxsIGhvcml6b250YWwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBmbGV4OiAxOyAvKiAuLi4gYW5kIGZpbGwgcmVzdCBvZiB2ZXJ0aWNhbCBhdmFpbGFibGUgc3BhY2UgKG90aGVyIGNvbXBvbmVudHMgaGF2ZSBmbGV4IDApICovXHJcbiAgICAvKiBXb3JrYXJvdW5kIGZvciBGaXJlZm94XHJcbiAgICBJZiB0aGUgcHJvZ3Jlc3MgdGFibGUgZ2V0cyBsb25nIChzY3JpcHQgd2l0aCBtYW55IGl0ZW1zKSBGRiBpbmNyZWFzZXMgdGhlIGhlaWdodCBvZiB0aGUgb3ZlcmZsb3cgcHJvZ3Jlc3NDb250YWluZXIgYW5kXHJcbiAgICB0aGUgd2hvbGUgYXBwIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBwYWdlIGFueW1vcmUuIFRoZSBhcHAgb3ZlcmZsb3dzIGFuZCBzaG93cyBhIHZlcnRpY2FsIHNjcm9sbGJhciBmb3IgdGhlIHdob2xlIGFwcC5cclxuICAgIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgfWAsYC5zY3JvbGxMaXN0e1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JleTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgb3ZlcmZsb3cteTogYXV0bztcclxuICB9YCwgYFxyXG4gICAgLmNvbGxhcHNhYmxlIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB6LWluZGV4OiA1O1xyXG4gICAgfWAsIGBcclxuICAgIC5jb2xsYXBzYWJsZS5hY3RpdmUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMHB4O1xyXG4gICAgICBoZWlnaHQ6IDkwJTtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIHBhZGRpbmc6IDBweDtcclxuICAgICAgei1pbmRleDogMjAwOyAgLyogTmVlZHMgYSBoaWdoZXIgdmFsdWUgdGhlbiB0aGUgc3RpY2t5IE1hdGVyaWFsIHRhYmxlIGhlYWRlciAod2hpY2ggaXMgei1pbmRleDogMTAwKSAqL1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApXHJcbiAgICB9YF0sXHJcbiAgc3R5bGVVcmxzOiBbJy4uLy4uL3NwZWVjaHJlY29yZGVyX21hdC5zY3NzJ11cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRlckNvbWJpUGFuZSBleHRlbmRzIFJlc3BvbnNpdmVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0e1xyXG5cclxuICBAVmlld0NoaWxkKFJlY29yZGluZ0xpc3QpIHJlY29yZGluZ0xpc3RDb21wITpSZWNvcmRpbmdMaXN0O1xyXG4gIEBJbnB1dCgpIHNlbGVjdERpc2FibGVkOmJvb2xlYW49ZmFsc2U7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUmVjb3JkaW5nRmlsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbD1udWxsO1xyXG5cclxuICBAVmlld0NoaWxkKEF1ZGlvRGlzcGxheSwgeyBzdGF0aWM6IHRydWUgfSkgYXVkaW9EaXNwbGF5ITogQXVkaW9EaXNwbGF5O1xyXG4gIEBJbnB1dCgpIGF1ZGlvU2lnbmFsQ29sbGFwc2VkOiBib29sZWFuPXRydWU7XHJcbiAgQElucHV0KCkgZGlzcGxheUF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U2VsZWN0aW9uQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb246QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U3RvcEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJwbzpCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICAgIHN1cGVyKGJwbyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkUmVjRmlsZShyZjpSZWNvcmRpbmdGaWxlKXtcclxuICAgIHRoaXMucmVjb3JkaW5nTGlzdENvbXAuYWRkUmVjRmlsZShyZik7XHJcbiAgfVxyXG5cclxuICBzZXRSZWNGaWxlQXVkaW9EYXRhKHJlY0ZpbGU6UmVjb3JkaW5nRmlsZSxhZGg6QXVkaW9EYXRhSG9sZGVyfG51bGwpIHtcclxuICAgIHRoaXMucmVjb3JkaW5nTGlzdENvbXAuc2V0UmVjRmlsZUF1ZGlvRGF0YShyZWNGaWxlLCBhZGgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdFJlY29yZGluZ0ZpbGUocmY6UmVjb3JkaW5nRmlsZSl7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkaW5nRmlsZUNoYW5nZWQuZW1pdChyZik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUb3AoKSB7XHJcbiAgICB0aGlzLnJlY29yZGluZ0xpc3RDb21wLnNlbGVjdFRvcCgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { RecordingFileUtils } from "../recording";
|
|
2
|
+
export class BasicRecFilesCache {
|
|
3
|
+
constructor() {
|
|
4
|
+
//public static readonly DEFAULT_MAX_SAMPLES=30*48000; // TEST 30 seconds
|
|
5
|
+
this._sampleCount = 0;
|
|
6
|
+
this.maxSampleCount = BasicRecFilesCache.DEFAULT_MAX_SAMPLES;
|
|
7
|
+
this._currentRecordingFile = null;
|
|
8
|
+
}
|
|
9
|
+
static { this.DEBUG = false; }
|
|
10
|
+
static { this.DEFAULT_MAX_SAMPLES = 10 * 60 * 48000; } // 10 Minutes mono 48kHz
|
|
11
|
+
get currentRecordingFile() {
|
|
12
|
+
return this._currentRecordingFile;
|
|
13
|
+
}
|
|
14
|
+
set currentRecordingFile(value) {
|
|
15
|
+
this._currentRecordingFile = value;
|
|
16
|
+
this.expire();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class SprItemsCache extends BasicRecFilesCache {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this._items = new Array();
|
|
23
|
+
}
|
|
24
|
+
get items() {
|
|
25
|
+
return this._items;
|
|
26
|
+
}
|
|
27
|
+
addItem(item) {
|
|
28
|
+
this._items.push(item);
|
|
29
|
+
}
|
|
30
|
+
getItem(index) {
|
|
31
|
+
return this._items[index];
|
|
32
|
+
}
|
|
33
|
+
length() {
|
|
34
|
+
return this._items.length;
|
|
35
|
+
}
|
|
36
|
+
tryExpire(toBeExpiredRf) {
|
|
37
|
+
if (BasicRecFilesCache.DEBUG)
|
|
38
|
+
console.debug("Rec. files cache: " + toBeExpiredRf.toString() + " try expire:");
|
|
39
|
+
if (!RecordingFileUtils.equals(toBeExpiredRf, this.currentRecordingFile)) {
|
|
40
|
+
if (BasicRecFilesCache.DEBUG)
|
|
41
|
+
console.debug("Rec. files cache: " + toBeExpiredRf.toString() + " not current file...");
|
|
42
|
+
if (toBeExpiredRf.serverPersisted) {
|
|
43
|
+
if (BasicRecFilesCache.DEBUG)
|
|
44
|
+
console.debug("Rec. files cache: " + toBeExpiredRf.toString() + " is server persisted...");
|
|
45
|
+
// expire recording files first stored to the cache
|
|
46
|
+
let expiredSamples = RecordingFileUtils.expireAudioData(toBeExpiredRf);
|
|
47
|
+
this._sampleCount -= expiredSamples;
|
|
48
|
+
if (expiredSamples > 0) {
|
|
49
|
+
if (BasicRecFilesCache.DEBUG)
|
|
50
|
+
console.debug("Rec. files cache: Expired: " + toBeExpiredRf.toString() + ". Cache samples now: " + this._sampleCount);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (BasicRecFilesCache.DEBUG)
|
|
55
|
+
console.debug("Rec. files cache: #" + toBeExpiredRf.toString() + " not yet persisted on server.");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (BasicRecFilesCache.DEBUG)
|
|
60
|
+
console.debug("Rec. files cache: " + toBeExpiredRf.toString() + " is current file.");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
expire() {
|
|
64
|
+
// expire corrected versions first
|
|
65
|
+
if (BasicRecFilesCache.DEBUG)
|
|
66
|
+
console.debug("Rec. files cache: Expire? current: " + this._sampleCount + ", max: " + this.maxSampleCount);
|
|
67
|
+
if (this._sampleCount > this.maxSampleCount) {
|
|
68
|
+
// expire older versions of an item first
|
|
69
|
+
for (let ii = 0; ii < this._items.length; ii++) {
|
|
70
|
+
if (this._sampleCount <= this.maxSampleCount) {
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
let it = this._items[ii];
|
|
74
|
+
let itRfs = it.recs;
|
|
75
|
+
if (itRfs && itRfs.length > 1) {
|
|
76
|
+
for (let rfi = 0; rfi < itRfs.length - 1; rfi++) {
|
|
77
|
+
if (this._sampleCount <= this.maxSampleCount) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
let toBeExpiredRf = itRfs[rfi];
|
|
81
|
+
this.tryExpire(toBeExpiredRf);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// if that's not sufficient expire audio data of latest versions as well
|
|
86
|
+
for (let ii = 0; ii < this._items.length; ii++) {
|
|
87
|
+
if (this._sampleCount <= this.maxSampleCount) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
let it = this._items[ii];
|
|
91
|
+
let itRfs = it.recs;
|
|
92
|
+
if (itRfs && itRfs.length > 0) {
|
|
93
|
+
for (let rfi = 0; rfi < itRfs.length; rfi++) {
|
|
94
|
+
if (this._sampleCount <= this.maxSampleCount) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
let toBeExpiredRf = itRfs[rfi];
|
|
98
|
+
this.tryExpire(toBeExpiredRf);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
addSprRecFile(item, sprRecFile) {
|
|
105
|
+
this.expire();
|
|
106
|
+
if (!item.recs) {
|
|
107
|
+
item.recs = new Array();
|
|
108
|
+
}
|
|
109
|
+
item.recs[sprRecFile.version] = sprRecFile;
|
|
110
|
+
this._sampleCount += RecordingFileUtils.sampleCount(sprRecFile);
|
|
111
|
+
if (BasicRecFilesCache.DEBUG)
|
|
112
|
+
console.debug("Rec. files cache: Added. Cache samples: " + this._sampleCount);
|
|
113
|
+
}
|
|
114
|
+
setSprRecFileAudioData(sprRecFile, adh) {
|
|
115
|
+
this.expire();
|
|
116
|
+
if (BasicRecFilesCache.DEBUG)
|
|
117
|
+
console.debug("Rec. files cache: Set audio data after expire. Cache samples: " + this._sampleCount);
|
|
118
|
+
let currSampleCnt = RecordingFileUtils.sampleCount(sprRecFile);
|
|
119
|
+
this._sampleCount -= currSampleCnt;
|
|
120
|
+
if (BasicRecFilesCache.DEBUG)
|
|
121
|
+
console.debug("Rec. files cache: Set audio data subtracted curr sample count: " + currSampleCnt + ". Cache samples: " + this._sampleCount);
|
|
122
|
+
RecordingFileUtils.setAudioData(sprRecFile, adh);
|
|
123
|
+
let newSampleCnt = RecordingFileUtils.sampleCount(sprRecFile);
|
|
124
|
+
this._sampleCount += newSampleCnt;
|
|
125
|
+
if (BasicRecFilesCache.DEBUG)
|
|
126
|
+
console.debug("Rec. files cache: Set audio data added new sample count: " + newSampleCnt + ". Cache samples: " + this._sampleCount);
|
|
127
|
+
let fl = adh?.frameLen;
|
|
128
|
+
if (sprRecFile.frames == null && fl) {
|
|
129
|
+
sprRecFile.frames = fl;
|
|
130
|
+
}
|
|
131
|
+
if (BasicRecFilesCache.DEBUG)
|
|
132
|
+
console.debug("Rec. files cache: Set audio data. Cache samples: " + this._sampleCount);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export class RecFilesCache extends BasicRecFilesCache {
|
|
136
|
+
constructor() {
|
|
137
|
+
super(...arguments);
|
|
138
|
+
this._recFiles = new Array();
|
|
139
|
+
}
|
|
140
|
+
get recFiles() {
|
|
141
|
+
return this._recFiles;
|
|
142
|
+
}
|
|
143
|
+
getRecFile(index) {
|
|
144
|
+
return this._recFiles[index];
|
|
145
|
+
}
|
|
146
|
+
length() {
|
|
147
|
+
return this._recFiles.length;
|
|
148
|
+
}
|
|
149
|
+
expire() {
|
|
150
|
+
if (this._sampleCount > this.maxSampleCount) {
|
|
151
|
+
// audio recorder list is sorted: lower index is newer
|
|
152
|
+
for (let rfI = this._recFiles.length - 1; rfI >= 0; rfI--) {
|
|
153
|
+
if (this._sampleCount <= this.maxSampleCount) {
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
let toBeExpiredRf = this._recFiles[rfI];
|
|
157
|
+
if (toBeExpiredRf.serverPersisted) {
|
|
158
|
+
if (!RecordingFileUtils.equals(toBeExpiredRf, this.currentRecordingFile)) {
|
|
159
|
+
// expire recording files first stored to the cache
|
|
160
|
+
let expiredSamples = RecordingFileUtils.expireAudioData(toBeExpiredRf);
|
|
161
|
+
this._sampleCount -= expiredSamples;
|
|
162
|
+
if (expiredSamples > 0) {
|
|
163
|
+
if (BasicRecFilesCache.DEBUG)
|
|
164
|
+
console.debug("Rec. files cache: Expired #" + rfI + ". Cache samples: " + this._sampleCount);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
if (BasicRecFilesCache.DEBUG)
|
|
169
|
+
console.debug("Rec. files cache: #" + rfI + " is current file. (not expiring)");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
if (BasicRecFilesCache.DEBUG)
|
|
174
|
+
console.debug("Rec. files cache: #" + rfI + " not yet server persisted.");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
addRecFile(recFile) {
|
|
180
|
+
this.expire();
|
|
181
|
+
this._recFiles.push(recFile);
|
|
182
|
+
this._sampleCount += RecordingFileUtils.sampleCount(recFile);
|
|
183
|
+
if (BasicRecFilesCache.DEBUG)
|
|
184
|
+
console.debug("Rec. files cache: Added. Cache samples: " + this._sampleCount);
|
|
185
|
+
}
|
|
186
|
+
setRecFileAudioData(recFile, adh) {
|
|
187
|
+
this.expire();
|
|
188
|
+
this._sampleCount -= RecordingFileUtils.sampleCount(recFile);
|
|
189
|
+
RecordingFileUtils.setAudioData(recFile, adh);
|
|
190
|
+
this._sampleCount += RecordingFileUtils.sampleCount(recFile);
|
|
191
|
+
if (BasicRecFilesCache.DEBUG)
|
|
192
|
+
console.debug("Rec. files cache: Set audio data. Cache samples: " + this._sampleCount);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nX2ZpbGVfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9yZWNvcmRpbmdfZmlsZV9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGtCQUFrQixFQUFtQixNQUFNLGNBQWMsQ0FBQztBQUlqRixNQUFNLE9BQWdCLGtCQUFrQjtJQUF4QztRQUtFLDBFQUEwRTtRQUVoRSxpQkFBWSxHQUFRLENBQUMsQ0FBQztRQUNoQyxtQkFBYyxHQUFRLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO1FBQ3JELDBCQUFxQixHQUFvQixJQUFJLENBQUM7SUFXeEQsQ0FBQzthQWxCd0IsVUFBSyxHQUFDLEtBQUssQUFBTixDQUFPO2FBQ1osd0JBQW1CLEdBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxLQUFLLEFBQVosQ0FBYSxHQUFFLHdCQUF3QjtJQVNqRixJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUEyQjtRQUNsRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDOztBQUtILE1BQU0sT0FBTyxhQUFjLFNBQVEsa0JBQWtCO0lBQXJEOztRQUdZLFdBQU0sR0FBYSxJQUFJLEtBQUssRUFBUSxDQUFDO0lBOEdqRCxDQUFDO0lBNUdHLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVM7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtB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V0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUcsa0JBQWtCLENBQUMsS0FBSztZQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVjb3JkaW5nRmlsZSwgUmVjb3JkaW5nRmlsZVV0aWxzLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSBcIi4vaXRlbVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzaWNSZWNGaWxlc0NhY2hlIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUJVRz1mYWxzZTtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFYX1NBTVBMRVM9MTAqNjAqNDgwMDA7ICAvLyAxMCBNaW51dGVzIG1vbm8gNDhrSHpcclxuXHJcbiAgLy9wdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFYX1NBTVBMRVM9MzAqNDgwMDA7ICAvLyBURVNUIDMwIHNlY29uZHNcclxuXHJcbiAgcHJvdGVjdGVkIF9zYW1wbGVDb3VudDpudW1iZXI9MDtcclxuICBtYXhTYW1wbGVDb3VudDpudW1iZXI9QmFzaWNSZWNGaWxlc0NhY2hlLkRFRkFVTFRfTUFYX1NBTVBMRVM7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFJlY29yZGluZ0ZpbGU6UmVjb3JkaW5nRmlsZXxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cGlyZSgpOnZvaWQ7XHJcblxyXG4gIGdldCBjdXJyZW50UmVjb3JkaW5nRmlsZSgpOiBSZWNvcmRpbmdGaWxlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlY29yZGluZ0ZpbGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY3VycmVudFJlY29yZGluZ0ZpbGUodmFsdWU6IFJlY29yZGluZ0ZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50UmVjb3JkaW5nRmlsZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5leHBpcmUoKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNwckl0ZW1zQ2FjaGUgZXh0ZW5kcyBCYXNpY1JlY0ZpbGVzQ2FjaGV7XHJcblxyXG5cclxuICAgIHByaXZhdGUgX2l0ZW1zOkFycmF5PEl0ZW0+PW5ldyBBcnJheTxJdGVtPigpO1xyXG5cclxuICAgIGdldCBpdGVtcygpOiBBcnJheTxJdGVtPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW0oaXRlbTpJdGVtKXtcclxuICAgICAgICB0aGlzLl9pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW0oaW5kZXg6bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNbaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbmd0aCgpOm51bWJlcntcclxuICAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgdHJ5RXhwaXJlKHRvQmVFeHBpcmVkUmY6U3ByUmVjb3JkaW5nRmlsZSl7XHJcbiAgICAgIGlmKEJhc2ljUmVjRmlsZXNDYWNoZS5ERUJVRyljb25zb2xlLmRlYnVnKFwiUmVjLiBmaWxlcyBjYWNoZTogXCIgKyB0b0JlRXhwaXJlZFJmLnRvU3RyaW5nKCkrXCIgdHJ5IGV4cGlyZTpcIik7XHJcbiAgICAgIGlmKCFSZWNvcmRpbmdGaWxlVXRpbHMuZXF1YWxzKHRvQmVFeHBpcmVkUmYsdGhpcy5jdXJyZW50UmVjb3JkaW5nRmlsZSkpIHtcclxuICAgICAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IFwiICsgdG9CZUV4cGlyZWRSZi50b1N0cmluZygpK1wiIG5vdCBjdXJyZW50IGZpbGUuLi5cIik7XHJcbiAgICAgICAgaWYgKHRvQmVFeHBpcmVkUmYuc2VydmVyUGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IFwiICsgdG9CZUV4cGlyZWRSZi50b1N0cmluZygpK1wiIGlzIHNlcnZlciBwZXJzaXN0ZWQuLi5cIik7XHJcbiAgICAgICAgICAvLyBleHBpcmUgcmVjb3JkaW5nIGZpbGVzIGZpcnN0IHN0b3JlZCB0byB0aGUgY2FjaGVcclxuICAgICAgICAgIGxldCBleHBpcmVkU2FtcGxlcyA9IFJlY29yZGluZ0ZpbGVVdGlscy5leHBpcmVBdWRpb0RhdGEodG9CZUV4cGlyZWRSZik7XHJcbiAgICAgICAgICB0aGlzLl9zYW1wbGVDb3VudCAtPSBleHBpcmVkU2FtcGxlcztcclxuICAgICAgICAgIGlmKGV4cGlyZWRTYW1wbGVzPjApIHtcclxuICAgICAgICAgICAgaWYgKEJhc2ljUmVjRmlsZXNDYWNoZS5ERUJVRykgY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IEV4cGlyZWQ6IFwiICsgdG9CZUV4cGlyZWRSZi50b1N0cmluZygpICsgXCIuIENhY2hlIHNhbXBsZXMgbm93OiBcIiArIHRoaXMuX3NhbXBsZUNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYoQmFzaWNSZWNGaWxlc0NhY2hlLkRFQlVHKWNvbnNvbGUuZGVidWcoXCJSZWMuIGZpbGVzIGNhY2hlOiAjXCIgKyB0b0JlRXhwaXJlZFJmLnRvU3RyaW5nKCkgKyBcIiBub3QgeWV0IHBlcnNpc3RlZCBvbiBzZXJ2ZXIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgaWYoQmFzaWNSZWNGaWxlc0NhY2hlLkRFQlVHKWNvbnNvbGUuZGVidWcoXCJSZWMuIGZpbGVzIGNhY2hlOiBcIiArIHRvQmVFeHBpcmVkUmYudG9TdHJpbmcoKStcIiBpcyBjdXJyZW50IGZpbGUuXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIHByb3RlY3RlZCBleHBpcmUoKSB7XHJcbiAgICAvLyBleHBpcmUgY29ycmVjdGVkIHZlcnNpb25zIGZpcnN0XHJcbiAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IEV4cGlyZT8gY3VycmVudDogXCIrdGhpcy5fc2FtcGxlQ291bnQrXCIsIG1heDogXCIrdGhpcy5tYXhTYW1wbGVDb3VudCk7XHJcbiAgICBpZiAodGhpcy5fc2FtcGxlQ291bnQgPiB0aGlzLm1heFNhbXBsZUNvdW50KSB7XHJcblxyXG4gICAgICAvLyBleHBpcmUgb2xkZXIgdmVyc2lvbnMgb2YgYW4gaXRlbSBmaXJzdFxyXG4gICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgdGhpcy5faXRlbXMubGVuZ3RoOyBpaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NhbXBsZUNvdW50IDw9IHRoaXMubWF4U2FtcGxlQ291bnQpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXQgPSB0aGlzLl9pdGVtc1tpaV07XHJcbiAgICAgICAgbGV0IGl0UmZzID0gaXQucmVjcztcclxuXHJcbiAgICAgICAgaWYgKGl0UmZzICYmIGl0UmZzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIGZvciAobGV0IHJmaSA9IDA7IHJmaSA8IGl0UmZzLmxlbmd0aCAtIDE7IHJmaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zYW1wbGVDb3VudCA8PSB0aGlzLm1heFNhbXBsZUNvdW50KSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHRvQmVFeHBpcmVkUmYgPSBpdFJmc1tyZmldO1xyXG4gICAgICAgICAgICB0aGlzLnRyeUV4cGlyZSh0b0JlRXhwaXJlZFJmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIHRoYXQncyBub3Qgc3VmZmljaWVudCBleHBpcmUgYXVkaW8gZGF0YSBvZiBsYXRlc3QgdmVyc2lvbnMgYXMgd2VsbFxyXG4gICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgdGhpcy5faXRlbXMubGVuZ3RoOyBpaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NhbXBsZUNvdW50IDw9IHRoaXMubWF4U2FtcGxlQ291bnQpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXQgPSB0aGlzLl9pdGVtc1tpaV07XHJcbiAgICAgICAgbGV0IGl0UmZzID0gaXQucmVjcztcclxuXHJcbiAgICAgICAgaWYgKGl0UmZzICYmIGl0UmZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IHJmaSA9IDA7IHJmaSA8IGl0UmZzLmxlbmd0aDsgcmZpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NhbXBsZUNvdW50IDw9IHRoaXMubWF4U2FtcGxlQ291bnQpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdG9CZUV4cGlyZWRSZiA9IGl0UmZzW3JmaV07XHJcbiAgICAgICAgICAgIHRoaXMudHJ5RXhwaXJlKHRvQmVFeHBpcmVkUmYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkU3ByUmVjRmlsZShpdGVtOkl0ZW0sc3ByUmVjRmlsZTpTcHJSZWNvcmRpbmdGaWxlKXtcclxuICAgIHRoaXMuZXhwaXJlKCk7XHJcbiAgICBpZighaXRlbS5yZWNzKSB7XHJcbiAgICAgIGl0ZW0ucmVjcz1uZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgIH1cclxuICAgIGl0ZW0ucmVjc1tzcHJSZWNGaWxlLnZlcnNpb25dPXNwclJlY0ZpbGU7XHJcbiAgICB0aGlzLl9zYW1wbGVDb3VudCArPSBSZWNvcmRpbmdGaWxlVXRpbHMuc2FtcGxlQ291bnQoc3ByUmVjRmlsZSk7XHJcbiAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IEFkZGVkLiBDYWNoZSBzYW1wbGVzOiBcIit0aGlzLl9zYW1wbGVDb3VudCk7XHJcbiAgfVxyXG5cclxuICBzZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHNwclJlY0ZpbGU6U3ByUmVjb3JkaW5nRmlsZSwgYWRoOkF1ZGlvRGF0YUhvbGRlcnxudWxsKXtcclxuICAgIHRoaXMuZXhwaXJlKCk7XHJcbiAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IFNldCBhdWRpbyBkYXRhIGFmdGVyIGV4cGlyZS4gQ2FjaGUgc2FtcGxlczogXCIrdGhpcy5fc2FtcGxlQ291bnQpO1xyXG4gICAgbGV0IGN1cnJTYW1wbGVDbnQ9UmVjb3JkaW5nRmlsZVV0aWxzLnNhbXBsZUNvdW50KHNwclJlY0ZpbGUpO1xyXG4gICAgdGhpcy5fc2FtcGxlQ291bnQtPWN1cnJTYW1wbGVDbnQ7XHJcbiAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IFNldCBhdWRpbyBkYXRhIHN1YnRyYWN0ZWQgY3VyciBzYW1wbGUgY291bnQ6IFwiK2N1cnJTYW1wbGVDbnQrXCIuIENhY2hlIHNhbXBsZXM6IFwiK3RoaXMuX3NhbXBsZUNvdW50KTtcclxuICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEoc3ByUmVjRmlsZSxhZGgpO1xyXG4gICAgbGV0IG5ld1NhbXBsZUNudD1SZWNvcmRpbmdGaWxlVXRpbHMuc2FtcGxlQ291bnQoc3ByUmVjRmlsZSk7XHJcbiAgICB0aGlzLl9zYW1wbGVDb3VudCs9bmV3U2FtcGxlQ250O1xyXG4gICAgaWYoQmFzaWNSZWNGaWxlc0NhY2hlLkRFQlVHKWNvbnNvbGUuZGVidWcoXCJSZWMuIGZpbGVzIGNhY2hlOiBTZXQgYXVkaW8gZGF0YSBhZGRlZCBuZXcgc2FtcGxlIGNvdW50OiBcIituZXdTYW1wbGVDbnQrXCIuIENhY2hlIHNhbXBsZXM6IFwiK3RoaXMuX3NhbXBsZUNvdW50KTtcclxuICAgIGxldCBmbD1hZGg/LmZyYW1lTGVuO1xyXG4gICAgaWYoc3ByUmVjRmlsZS5mcmFtZXM9PW51bGwgJiYgZmwpe1xyXG4gICAgICBzcHJSZWNGaWxlLmZyYW1lcz1mbDtcclxuICAgIH1cclxuICAgIGlmKEJhc2ljUmVjRmlsZXNDYWNoZS5ERUJVRyljb25zb2xlLmRlYnVnKFwiUmVjLiBmaWxlcyBjYWNoZTogU2V0IGF1ZGlvIGRhdGEuIENhY2hlIHNhbXBsZXM6IFwiK3RoaXMuX3NhbXBsZUNvdW50KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUmVjRmlsZXNDYWNoZSBleHRlbmRzIEJhc2ljUmVjRmlsZXNDYWNoZXtcclxuXHJcbiAgcHJpdmF0ZSBfcmVjRmlsZXM6QXJyYXk8UmVjb3JkaW5nRmlsZT49bmV3IEFycmF5PFJlY29yZGluZ0ZpbGU+KCk7XHJcblxyXG4gIGdldCByZWNGaWxlcygpOiBBcnJheTxSZWNvcmRpbmdGaWxlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVjRmlsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRSZWNGaWxlKGluZGV4Om51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVjRmlsZXNbaW5kZXhdO1xyXG4gIH1cclxuXHJcbiAgbGVuZ3RoKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY0ZpbGVzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBleHBpcmUoKSB7XHJcbiAgICBpZiAodGhpcy5fc2FtcGxlQ291bnQgPiB0aGlzLm1heFNhbXBsZUNvdW50KSB7XHJcbiAgICAgIC8vIGF1ZGlvIHJlY29yZGVyIGxpc3QgaXMgc29ydGVkOiBsb3dlciBpbmRleCBpcyBuZXdlclxyXG4gICAgICBmb3IgKGxldCByZkkgPSB0aGlzLl9yZWNGaWxlcy5sZW5ndGgtMTsgcmZJID49MDsgcmZJLS0pIHtcclxuICAgICAgICBpZiAodGhpcy5fc2FtcGxlQ291bnQgPD0gdGhpcy5tYXhTYW1wbGVDb3VudCkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b0JlRXhwaXJlZFJmID0gdGhpcy5fcmVjRmlsZXNbcmZJXTtcclxuICAgICAgICBpZiAodG9CZUV4cGlyZWRSZi5zZXJ2ZXJQZXJzaXN0ZWQpIHtcclxuICAgICAgICAgIGlmKCFSZWNvcmRpbmdGaWxlVXRpbHMuZXF1YWxzKHRvQmVFeHBpcmVkUmYsdGhpcy5jdXJyZW50UmVjb3JkaW5nRmlsZSkpIHtcclxuICAgICAgICAgICAgLy8gZXhwaXJlIHJlY29yZGluZyBmaWxlcyBmaXJzdCBzdG9yZWQgdG8gdGhlIGNhY2hlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkU2FtcGxlcyA9IFJlY29yZGluZ0ZpbGVVdGlscy5leHBpcmVBdWRpb0RhdGEodG9CZUV4cGlyZWRSZik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NhbXBsZUNvdW50IC09IGV4cGlyZWRTYW1wbGVzO1xyXG4gICAgICAgICAgICBpZihleHBpcmVkU2FtcGxlcz4wKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEJhc2ljUmVjRmlsZXNDYWNoZS5ERUJVRykgY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6IEV4cGlyZWQgI1wiICsgcmZJICsgXCIuIENhY2hlIHNhbXBsZXM6IFwiICsgdGhpcy5fc2FtcGxlQ291bnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoQmFzaWNSZWNGaWxlc0NhY2hlLkRFQlVHKWNvbnNvbGUuZGVidWcoXCJSZWMuIGZpbGVzIGNhY2hlOiAjXCIrcmZJK1wiIGlzIGN1cnJlbnQgZmlsZS4gKG5vdCBleHBpcmluZylcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBpZihCYXNpY1JlY0ZpbGVzQ2FjaGUuREVCVUcpY29uc29sZS5kZWJ1ZyhcIlJlYy4gZmlsZXMgY2FjaGU6ICNcIityZkkrXCIgbm90IHlldCBzZXJ2ZXIgcGVyc2lzdGVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFJlY0ZpbGUocmVjRmlsZTpSZWNvcmRpbmdGaWxlKXtcclxuICAgIHRoaXMuZXhwaXJlKCk7XHJcbiAgICB0aGlzLl9yZWNGaWxlcy5wdXNoKHJlY0ZpbGUpO1xyXG4gICAgdGhpcy5fc2FtcGxlQ291bnQgKz0gUmVjb3JkaW5nRmlsZVV0aWxzLnNhbXBsZUNvdW50KHJlY0ZpbGUpO1xyXG4gICAgaWYoQmFzaWNSZWNGaWxlc0NhY2hlLkRFQlVHKWNvbnNvbGUuZGVidWcoXCJSZWMuIGZpbGVzIGNhY2hlOiBBZGRlZC4gQ2FjaGUgc2FtcGxlczogXCIrdGhpcy5fc2FtcGxlQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVjRmlsZUF1ZGlvRGF0YShyZWNGaWxlOlJlY29yZGluZ0ZpbGUsIGFkaDpBdWRpb0RhdGFIb2xkZXJ8bnVsbCl7XHJcbiAgICB0aGlzLmV4cGlyZSgpO1xyXG4gICAgdGhpcy5fc2FtcGxlQ291bnQtPVJlY29yZGluZ0ZpbGVVdGlscy5zYW1wbGVDb3VudChyZWNGaWxlKTtcclxuICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEocmVjRmlsZSxhZGgpO1xyXG4gICAgdGhpcy5fc2FtcGxlQ291bnQrPVJlY29yZGluZ0ZpbGVVdGlscy5zYW1wbGVDb3VudChyZWNGaWxlKTtcclxuICAgIGlmKEJhc2ljUmVjRmlsZXNDYWNoZS5ERUJVRyljb25zb2xlLmRlYnVnKFwiUmVjLiBmaWxlcyBjYWNoZTogU2V0IGF1ZGlvIGRhdGEuIENhY2hlIHNhbXBsZXM6IFwiK3RoaXMuX3NhbXBsZUNvdW50KTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|