From e1d21d0a19587233fbd58df563c20c3068f5321d Mon Sep 17 00:00:00 2001 From: MrPlatnum Date: Sun, 14 Sep 2025 19:11:03 +0200 Subject: [PATCH] bugfix --- .../demographics-feedback.component.ts | 2 +- .../spatial-position-assessment.component.ts | 7 ++-- .../spatial-stability-assessment.component.ts | 1 - .../text-legibility-assessment.component.ts | 6 +--- src/app/services/metrics-tracker.service.ts | 32 ++++++++++++------- 5 files changed, 24 insertions(+), 24 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 2839336..8014eab 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.cleanup(); + this.metricsService.fullCleanup(); } } 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 813bb8e..ca3c50a 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,8 +23,8 @@ import '../../../../../assets/scripts/model-viewer'; styleUrls: ['./spatial-position-assessment.component.css'], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) -export class SpatialPositionAssessmentComponent implements AfterViewInit, OnDestroy { - +export class SpatialPositionAssessmentComponent implements AfterViewInit { + @ViewChild('modelViewer') modelViewerRef!: ElementRef; @Output() testComplete = new EventEmitter(); @Output() redoTest = new EventEmitter(); @@ -105,7 +105,4 @@ export class SpatialPositionAssessmentComponent implements AfterViewInit, OnDest this.redoTest.emit(1); } - ngOnDestroy() { - this.metricsService.cleanup(); - } } 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 95e7268..e4626eb 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,6 +166,5 @@ export class SpatialStabilityAssessmentComponent implements AfterViewInit, OnDes if (this.countdownInterval) { clearInterval(this.countdownInterval); } - this.metricsService.cleanup(); } } 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 eeaa943..c1d70aa 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, OnDestroy { +export class TextLegibilityAssessmentComponent implements AfterViewInit { @ViewChild('modelViewer') modelViewerRef!: ElementRef; @Output() testComplete = new EventEmitter(); @Output() redoTest = new EventEmitter(); @@ -127,8 +127,4 @@ export class TextLegibilityAssessmentComponent implements AfterViewInit, OnDestr this.testComplete.emit(); } - - ngOnDestroy() { - this.metricsService.cleanup(); - } } diff --git a/src/app/services/metrics-tracker.service.ts b/src/app/services/metrics-tracker.service.ts index 026eb31..0f02e11 100644 --- a/src/app/services/metrics-tracker.service.ts +++ b/src/app/services/metrics-tracker.service.ts @@ -3,7 +3,7 @@ import { inject, Injectable } from '@angular/core'; import { interval, Subscription, tap } from 'rxjs'; import { v4 as uuidv4 } from 'uuid'; -// --- Data Interfaces --- +// --- Data Interfaces (Unchanged) --- export interface InteractionEvent { timestamp: number; type: string; @@ -70,13 +70,16 @@ export class MetricsTrackerService { localStorage.setItem('device-uuid', this.deviceId); } console.log('Device ID for this session:', this.deviceId); + + if (typeof window !== 'undefined') { + window.addEventListener('deviceorientation', this.handleDeviceOrientation, true); + } } private handleDeviceOrientation(event: DeviceOrientationEvent): void { this.lastDeviceOrientation = event; } - public logInteraction(event: Event): void { if (event.target) { const target = event.target as HTMLElement; @@ -100,14 +103,11 @@ export class MetricsTrackerService { console.warn("logInteraction called with an unknown event type:", event); } } - + public startTracking(modelViewerElement: any): void { if (this.trackingSubscription || !modelViewerElement) return; - if (typeof window !== 'undefined') { - window.addEventListener('deviceorientation', this.handleDeviceOrientation); - } - + console.log("Starting periodic metrics tracking..."); this.trackingSubscription = interval(500).subscribe(() => { if (!modelViewerElement.arActive) { return; @@ -115,6 +115,7 @@ export class MetricsTrackerService { const timestamp = Date.now(); + // Capture AR Data const anchor = modelViewerElement.getAnchor ? modelViewerElement.getAnchor() : 'getAnchor not available'; const orbit = modelViewerElement.getCameraOrbit ? modelViewerElement.getCameraOrbit() : null; const target = modelViewerElement.getCameraTarget ? modelViewerElement.getCameraTarget() : null; @@ -147,6 +148,7 @@ export class MetricsTrackerService { ...(formData && { formData }) }; console.log("Sending final payload:", payload); + this.stopTracking(); return this.http.post(this.serverUrl, payload).pipe( tap({ next: (response) => { @@ -158,16 +160,22 @@ export class MetricsTrackerService { ); } - public cleanup(): void { - if (typeof window !== 'undefined') { - window.removeEventListener('deviceorientation', this.handleDeviceOrientation); - } + public stopTracking(): void { + console.log("Stopping periodic metrics tracking."); this.trackingSubscription?.unsubscribe(); this.trackingSubscription = null; - this.lastDeviceOrientation = 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; + } }