Skip to content

Commit 6c47ca5

Browse files
committed
fix issue when saving properties
1 parent a318c4f commit 6c47ca5

13 files changed

Lines changed: 64 additions & 9 deletions

File tree

‎backend/src/config/ConfigLoader.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ export function loadConfiguration(): Configuration {
222222
boopSensor: hasBoopSensor,
223223
videoPlayback: hasVideoPlayback,
224224
systemd,
225+
audioVisualizer: true, // Always available as a system capability
225226
};
226227

227228
if (!hasSerial) {

‎backend/src/config/objects/SystemFeatures.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ export interface SystemFeatures {
55
rgb: boolean;
66
videoPlayback: boolean;
77
systemd: boolean;
8+
audioVisualizer: boolean;
89
}

‎backend/src/rgb/effects/implementations/AudioReactiveEffect.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,11 @@ export class AudioReactiveEffect extends AbstractRgbEffect {
199199
}
200200

201201
const { r, g, b } = hueToRGB(finalHue);
202-
202+
203203
// Apply MaxBrightness scale adjustment (1-255 scaling)
204204
const maxB = this._maxBrightnessProperty.value;
205205
const scale = maxB / 255.0;
206-
206+
207207
return encodeRGB(
208208
Math.round(r * scale),
209209
Math.round(g * scale),

‎backend/src/webserver/ProtogenWebServer.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ export class ProtogenWebServer {
413413
boopSensorProfile,
414414
hudEnabled: this.protogen.hudManager?.enableHud ?? false,
415415
boopSensorEnabled: this.protogen.boopSensorManager?.enabled ?? false,
416+
audioVisualiserEnabled: this.protogen.audioVisualiser?.config.enabled ?? false,
416417
hasRenderLock: this.protogen.visor.hasRenderLock,
417418
}
418419
}
@@ -426,6 +427,7 @@ export interface OverviewData {
426427
boopSensorProfile: OverviewNamedObjectData | null;
427428
hudEnabled: boolean;
428429
boopSensorEnabled: boolean;
430+
audioVisualiserEnabled: boolean;
429431
hasRenderLock: boolean;
430432
}
431433

‎backend/src/webserver/routes/rgb/RgbRouter.ts‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { RgbScene } from "../../../rgb/scenes/RgbScene";
33
import { AbstractRouter } from "../../AbstractRouter";
44
import { ProtogenWebServer } from "../../ProtogenWebServer";
55
import { constructRgbEffect, RgbEffects } from "../../../rgb/effects/RgbEffects";
6+
import { RgbSceneEffect } from "../../../database/models/rgb/RgbSceneEffect.model";
67
import { RgbSceneEffectProperty } from "../../../database/models/rgb/RgbSceneEffectProperty.model";
78
import { Equal } from "typeorm";
89
import { RgbEditorPreviewElement } from "../../../database/models/rgb/RgbEditorConfig.model";
@@ -649,7 +650,26 @@ export class RgbRouter extends AbstractRouter {
649650

650651
await repo.save(prop);
651652
} else {
652-
this.protogen.logger.warn("RgbRouter", "Failed to fetch property " + req.params.property + " for saving");
653+
const effectRepo = this.protogen.database.dataSource.getRepository(RgbSceneEffect);
654+
const dbEffect = await effectRepo.findOne({
655+
where: {
656+
id: Equal(effect.id),
657+
scene: {
658+
id: Equal(scene.id)
659+
}
660+
}
661+
});
662+
663+
if (dbEffect != null) {
664+
const newProp = new RgbSceneEffectProperty();
665+
newProp.key = req.params.property;
666+
newProp.value = result.property.stringifyValue();
667+
newProp.effect = dbEffect;
668+
669+
await repo.save(newProp);
670+
} else {
671+
this.protogen.logger.warn("RgbRouter", "Failed to fetch effect " + effect.id + " to associate with new property " + req.params.property);
672+
}
653673
}
654674
}
655675

‎backend/src/webserver/socket/UserSocketSession.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { Socket } from "socket.io";
44
import { SocketMessageType } from "./SocketMessageType";
55
import { SocketMessage } from "./SocketMessage";
66
import { AuthData } from "../middleware/AuthMiddleware";
7-
import { z } from "zod";
87

98
export class UserSocketSession {
109
private _protogen;

‎frontend/src/app/core/services/api/overview-api.service.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface OverviewData {
1818
boopSensorProfile: OverviewNamedObjectData | null;
1919
hudEnabled: boolean;
2020
boopSensorEnabled: boolean;
21+
audioVisualiserEnabled: boolean;
2122
hasRenderLock: boolean;
2223
}
2324

‎frontend/src/app/core/services/system-config.service.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface SystemFeatures {
1111
boopSensor: boolean;
1212
videoPlayback: boolean;
1313
systemd: boolean;
14+
audioVisualizer?: boolean;
1415
}
1516

1617
export interface SystemConfig {

‎frontend/src/app/features/dashboard/components/dashboard-status-card/dashboard-status-card.component.html‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,19 @@ <h5 class="mb-0">Status</h5>
3434
<hr>
3535

3636
@if(systemConfig.features()?.hud) {
37-
<div class="form-check form-switch">
37+
<div class="form-check form-switch mb-2">
3838
<input class="form-check-input" type="checkbox" role="switch" id="hudToggle"
3939
[checked]="overview()?.hudEnabled ?? false" (change)="toggleHud.emit()">
4040
<label class="form-check-label" for="hudToggle">HUD Display</label>
4141
</div>
4242
}
43+
44+
@if(systemConfig.features()?.audioVisualizer) {
45+
<div class="form-check form-switch">
46+
<input class="form-check-input" type="checkbox" role="switch" id="audioToggle"
47+
[checked]="overview()?.audioVisualiserEnabled ?? false" (change)="toggleAudio.emit()">
48+
<label class="form-check-label" for="audioToggle">Audio Visualizer</label>
49+
</div>
50+
}
4351
</div>
4452
</div>

‎frontend/src/app/features/dashboard/components/dashboard-status-card/dashboard-status-card.component.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ import { SystemConfigService } from '../../../../core/services/system-config.ser
1212
export class DashboardStatusCardComponent {
1313
readonly overview = input<OverviewData | null>(null);
1414
readonly toggleHud = output<void>();
15+
readonly toggleAudio = output<void>();
1516
protected readonly systemConfig = inject(SystemConfigService);
1617
}

0 commit comments

Comments
 (0)