From 1df7612b8d6691bb818401cfbda4ab26dce9604a Mon Sep 17 00:00:00 2001 From: MrPlatnum Date: Sun, 14 Sep 2025 19:25:25 +0200 Subject: [PATCH] fix --- .../demographics-feedback.component.ts | 2 +- .../spatial-position-assessment.component.ts | 5 ++- .../spatial-stability-assessment.component.ts | 1 + .../text-legibility-assessment.component.ts | 8 +++- src/app/services/metrics-tracker.service.ts | 37 +++++++++---------- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts index 8014eab..94a81db 100644 --- a/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts +++ b/src/app/components/test-suite/assessments/demographics-feedback/demographics-feedback.component.ts @@ -125,6 +125,6 @@ export class DemographicsFeedbackComponent implements OnInit, OnDestroy { } ngOnDestroy() { - this.metricsService.fullCleanup(); + this.metricsService.resetMetrics(); } } diff --git a/src/app/components/test-suite/assessments/spatial-position-assessment/spatial-position-assessment.component.ts b/src/app/components/test-suite/assessments/spatial-position-assessment/spatial-position-assessment.component.ts index ca3c50a..577044c 100644 --- a/src/app/components/test-suite/assessments/spatial-position-assessment/spatial-position-assessment.component.ts +++ b/src/app/components/test-suite/assessments/spatial-position-assessment/spatial-position-assessment.component.ts @@ -23,7 +23,7 @@ import '../../../../../assets/scripts/model-viewer'; styleUrls: ['./spatial-position-assessment.component.css'], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) -export class SpatialPositionAssessmentComponent implements AfterViewInit { +export class SpatialPositionAssessmentComponent implements AfterViewInit, OnDestroy { @ViewChild('modelViewer') modelViewerRef!: ElementRef; @Output() testComplete = new EventEmitter(); @@ -39,6 +39,9 @@ export class SpatialPositionAssessmentComponent implements AfterViewInit { constructor(private cdr: ChangeDetectorRef) { this.logInteraction = this.logInteraction.bind(this); } + ngOnDestroy() { + this.metricsService.stopTracking(); + } ngAfterViewInit() { const mv = this.modelViewerRef.nativeElement; diff --git a/src/app/components/test-suite/assessments/spatial-stability-assessment/spatial-stability-assessment.component.ts b/src/app/components/test-suite/assessments/spatial-stability-assessment/spatial-stability-assessment.component.ts index e4626eb..760ea34 100644 --- a/src/app/components/test-suite/assessments/spatial-stability-assessment/spatial-stability-assessment.component.ts +++ b/src/app/components/test-suite/assessments/spatial-stability-assessment/spatial-stability-assessment.component.ts @@ -166,5 +166,6 @@ export class SpatialStabilityAssessmentComponent implements AfterViewInit, OnDes if (this.countdownInterval) { clearInterval(this.countdownInterval); } + this.metricsService.stopTracking(); } } diff --git a/src/app/components/test-suite/assessments/text-legibility-assessment/text-legibility-assessment.component.ts b/src/app/components/test-suite/assessments/text-legibility-assessment/text-legibility-assessment.component.ts index c1d70aa..9e763ce 100644 --- a/src/app/components/test-suite/assessments/text-legibility-assessment/text-legibility-assessment.component.ts +++ b/src/app/components/test-suite/assessments/text-legibility-assessment/text-legibility-assessment.component.ts @@ -23,7 +23,7 @@ import '../../../../../assets/scripts/model-viewer'; styleUrls: ['./text-legibility-assessment.component.css'], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) -export class TextLegibilityAssessmentComponent implements AfterViewInit { +export class TextLegibilityAssessmentComponent implements AfterViewInit, OnDestroy { @ViewChild('modelViewer') modelViewerRef!: ElementRef; @Output() testComplete = new EventEmitter(); @Output() redoTest = new EventEmitter(); @@ -127,4 +127,10 @@ export class TextLegibilityAssessmentComponent implements AfterViewInit { this.testComplete.emit(); } + ngOnDestroy() { + + this.metricsService.stopTracking(); + } + + } diff --git a/src/app/services/metrics-tracker.service.ts b/src/app/services/metrics-tracker.service.ts index 0f02e11..eb9d6e1 100644 --- a/src/app/services/metrics-tracker.service.ts +++ b/src/app/services/metrics-tracker.service.ts @@ -103,11 +103,16 @@ export class MetricsTrackerService { console.warn("logInteraction called with an unknown event type:", event); } } - + public startTracking(modelViewerElement: any): void { - if (this.trackingSubscription || !modelViewerElement) return; + this.stopTracking(); - console.log("Starting periodic metrics tracking..."); + if (!modelViewerElement) { + console.error("startTracking called with no modelViewerElement."); + return; + } + + console.log("Starting a new periodic metrics tracking subscription."); this.trackingSubscription = interval(500).subscribe(() => { if (!modelViewerElement.arActive) { return; @@ -128,6 +133,7 @@ export class MetricsTrackerService { }; this.metricsLog.arData.push(arData); + // Capture Device Orientation if (this.lastDeviceOrientation) { const orientation: DeviceOrientation = { timestamp: timestamp, @@ -140,6 +146,14 @@ export class MetricsTrackerService { }); } + public stopTracking(): void { + if (this.trackingSubscription) { + console.log("Stopping existing tracking subscription."); + this.trackingSubscription.unsubscribe(); + this.trackingSubscription = null; + } + } + public sendMetricsToServer(testName: string, formData?: any) { const payload = { testName, @@ -148,7 +162,7 @@ export class MetricsTrackerService { ...(formData && { formData }) }; console.log("Sending final payload:", payload); - this.stopTracking(); + this.stopTracking(); return this.http.post(this.serverUrl, payload).pipe( tap({ next: (response) => { @@ -160,22 +174,7 @@ export class MetricsTrackerService { ); } - public stopTracking(): void { - console.log("Stopping periodic metrics tracking."); - this.trackingSubscription?.unsubscribe(); - this.trackingSubscription = null; - } - public resetMetrics(): void { this.metricsLog = { interactions: [], deviceOrientations: [], arData: [] }; } - - public fullCleanup(): void { - console.log("Performing full cleanup of MetricsTrackerService."); - this.stopTracking(); - if (typeof window !== 'undefined') { - window.removeEventListener('deviceorientation', this.handleDeviceOrientation, true); - } - this.lastDeviceOrientation = null; - } }