From e677212c63dd15ff3d7d2d891ec3134f26dd927d Mon Sep 17 00:00:00 2001 From: paflov <paf@titelfrei.de> Date: Fri, 9 Apr 2021 12:45:29 +0200 Subject: [PATCH] makes the testController only connect to commands-stream if the testMode has the new capabillity `isMonitorable` --- docs/test-mode.md | 1 + src/app/config/mode-options.json | 3 ++- src/app/config/test-mode.ts | 2 ++ src/app/config/test-modes.json | 15 ++++++++++----- src/app/test-controller/command.service.ts | 15 ++++++++++----- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/test-mode.md b/docs/test-mode.md index 861f47e9..6e783997 100644 --- a/docs/test-mode.md +++ b/docs/test-mode.md @@ -29,3 +29,4 @@ test like a testtaker. |Sollte ein Testabschnitt mit einem Freigabewort geschützt sein, wird dieses bei der Eingabebox schon eingetragen.|X |X | |X |X | |Sollte eine Maximalzeit für einen Testabschnitt festgelegt sein, wird die verbleibende Zeit angezeigt, auch wenn die Booklet-Konfiguration dies unterbindet.|X |X | |X | | |Die Seite mit der Aufgaben-Übersicht wird erlaubt, auch wenn das Booklet dies unterbindet.| | | |X | | +|Kann aus dem Gruppen-Monitor aus gesteuert werden| | |X | | | diff --git a/src/app/config/mode-options.json b/src/app/config/mode-options.json index 8c286e53..2d70276c 100644 --- a/src/app/config/mode-options.json +++ b/src/app/config/mode-options.json @@ -5,5 +5,6 @@ "forceNaviRestrictions": "Alle Navigationsbeschränkungen des Booklets werden angewendet (z. B. erst weiter, wenn vollständig angezeigt).", "presetCode": "Sollte ein Testabschnitt mit einem Freigabewort geschützt sein, wird dieses bei der Eingabebox schon eingetragen.", "showTimeLeft": "Sollte eine Maximalzeit für einen Testabschnitt festgelegt sein, wird die verbleibende Zeit angezeigt, auch wenn die Booklet-Konfiguration dies unterbindet.", - "showUnitMenu": "Die Seite mit der Aufgaben-Übersicht wird erlaubt, auch wenn das Booklet dies unterbindet." + "showUnitMenu": "Die Seite mit der Aufgaben-Übersicht wird erlaubt, auch wenn das Booklet dies unterbindet.", + "isMonitorable": "Kann aus dem Gruppen-Monitor aus gesteuert werden" } diff --git a/src/app/config/test-mode.ts b/src/app/config/test-mode.ts index a821d65c..fb591585 100644 --- a/src/app/config/test-mode.ts +++ b/src/app/config/test-mode.ts @@ -12,6 +12,7 @@ export class TestMode { presetCode: true; showTimeLeft: true; showUnitMenu: false; + isMonitorable: false; modeLabel: "Nur Ansicht (Demo)"; modeId: string = "DEMO"; @@ -28,6 +29,7 @@ export class TestMode { this.presetCode = modeConfig.config.presetCode; this.showTimeLeft = modeConfig.config.showTimeLeft; this.showUnitMenu = modeConfig.config.showUnitMenu; + this.isMonitorable = modeConfig.config.isMonitorable; this.modeLabel = modeConfig.label; this.modeId = mode; } else { diff --git a/src/app/config/test-modes.json b/src/app/config/test-modes.json index fc64f7fe..f1c07009 100644 --- a/src/app/config/test-modes.json +++ b/src/app/config/test-modes.json @@ -8,7 +8,8 @@ "forceNaviRestrictions": false, "presetCode": true, "showTimeLeft": true, - "showUnitMenu": false + "showUnitMenu": false, + "isMonitorable": false } }, "MONITOR-GROUP": { @@ -20,7 +21,8 @@ "forceNaviRestrictions": false, "presetCode": true, "showTimeLeft": true, - "showUnitMenu": false + "showUnitMenu": false, + "isMonitorable": false } }, "HOT": { @@ -32,7 +34,8 @@ "forceNaviRestrictions": true, "presetCode": false, "showTimeLeft": false, - "showUnitMenu": false + "showUnitMenu": false, + "isMonitorable": true } }, "REVIEW": { @@ -44,7 +47,8 @@ "forceNaviRestrictions": false, "presetCode": true, "showTimeLeft": true, - "showUnitMenu": true + "showUnitMenu": true, + "isMonitorable": false } }, "TRIAL": { @@ -56,7 +60,8 @@ "forceNaviRestrictions": true, "presetCode": true, "showTimeLeft": false, - "showUnitMenu": false + "showUnitMenu": false, + "isMonitorable": false } } } diff --git a/src/app/test-controller/command.service.ts b/src/app/test-controller/command.service.ts index b8788f60..0e4151e0 100644 --- a/src/app/test-controller/command.service.ts +++ b/src/app/test-controller/command.service.ts @@ -10,7 +10,8 @@ import { map, mergeMap, startWith, - switchMap, tap + switchMap, + tap } from 'rxjs/operators'; import { HttpClient } from '@angular/common/http'; import { @@ -72,12 +73,16 @@ export class CommandService extends WebsocketBackendService<Command[]> implement // this unsubscriptions are only for the case, the project's architecture will be changed dramatically once // while not having a OnInit-hook services *do have* an OnDestroy-hook (see: https://v9.angular.io/api/core/OnDestroy) ngOnDestroy(): void { - this.commandSubscription.unsubscribe(); - this.testStartedSubscription.unsubscribe(); + if (this.commandSubscription) { + this.commandSubscription.unsubscribe(); + } + if (this.testStartedSubscription) { + this.testStartedSubscription.unsubscribe(); + } } private subscribeReceivedCommands() { - this.commandReceived$ + this.commandSubscription = this.commandReceived$ .pipe( filter((command: Command) => (this.executedCommandIds.indexOf(command.id) < 0)), // min delay between items @@ -103,7 +108,7 @@ export class CommandService extends WebsocketBackendService<Command[]> implement distinctUntilChanged(), map(CommandService.testStartedOrStopped), filter(testStartedOrStopped => testStartedOrStopped !== ''), - map(testStartedOrStopped => ((testStartedOrStopped === 'started') ? `test/${this.tcs.testId}/commands` : '')), + map(testStartedOrStopped => (((testStartedOrStopped === 'started') && (this.tcs.testMode.isMonitorable)) ? `test/${this.tcs.testId}/commands` : '')), filter(newPollingEndpoint => newPollingEndpoint !== this.pollingEndpoint), switchMap((pollingEndpoint: string) => { this.pollingEndpoint = pollingEndpoint; -- GitLab