From 006e82db12673369f9229b288af3234ad86c2414 Mon Sep 17 00:00:00 2001 From: Victor Klomp Date: Fri, 6 Feb 2026 22:12:27 +0100 Subject: [PATCH] feat: add mock poster handler --- .env.example | 2 +- .../screen/poster/carousel-poster-handler.ts | 8 +- .../screen/poster/mock/mock-poster-manager.ts | 91 +++++++++++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/modules/handlers/screen/poster/mock/mock-poster-manager.ts diff --git a/.env.example b/.env.example index 9c597d29..debe8415 100644 --- a/.env.example +++ b/.env.example @@ -41,7 +41,7 @@ ROLE_BAC="PRIV - Narrowcasting Prod BAC" ROLE_AVICO="PRIV - Narrowcasting Prod AViCo" TRELLO_KEY= -TRELLO_BOARD_ID= +TRELLO_BOARD_ID=mock TRELLO_TOKEN= TRELLO_SECRET= TRELLO_BASE_POSTER_LIST_NAME=BasePosters diff --git a/src/modules/handlers/screen/poster/carousel-poster-handler.ts b/src/modules/handlers/screen/poster/carousel-poster-handler.ts index 5f990579..8c60f398 100644 --- a/src/modules/handlers/screen/poster/carousel-poster-handler.ts +++ b/src/modules/handlers/screen/poster/carousel-poster-handler.ts @@ -5,6 +5,7 @@ import { TrelloPosterManager } from './trello/trello-poster-manager'; import { TrackChangeEvent } from '../../../events/music-emitter-events'; import { PosterManager } from './poster-manager'; import { ISettings } from '../../../server-settings/server-setting'; +import { MockPosterManager } from './mock/mock-poster-manager'; @FeatureEnabled('Poster') export default class CarouselPosterHandler extends BaseScreenHandler { @@ -21,7 +22,12 @@ export default class CarouselPosterHandler extends BaseScreenHandler { // Check whether we need to enable/disable borrel mode this.borrelModeInterval = setInterval(this.checkBorrelMode.bind(this), 60 * 1000); } - this.posterManager = new TrelloPosterManager(); + // Overwrite with mock poster manager if we are in development and the trello board id is set to "mock" + if (process.env.NODE_ENV === 'development' && process.env.TRELLO_BOARD_ID === 'mock') { + this.posterManager = new MockPosterManager(); + } else { + this.posterManager = new TrelloPosterManager(); + } } forceUpdate(): void { diff --git a/src/modules/handlers/screen/poster/mock/mock-poster-manager.ts b/src/modules/handlers/screen/poster/mock/mock-poster-manager.ts new file mode 100644 index 00000000..08a26640 --- /dev/null +++ b/src/modules/handlers/screen/poster/mock/mock-poster-manager.ts @@ -0,0 +1,91 @@ +import { PosterManager } from '../poster-manager'; +import { FooterSize, Poster, PosterType } from '../poster'; + +/** + * A mock poster manager that returns a fixed set of posters. This can be used for development and testing purposes. + * + * Sources are from Github, TU Ilmenau, and some random websites. + */ +export class MockPosterManager extends PosterManager { + public get posters(): Poster[] | undefined { + return [ + { + id: '1', + name: 'Test Poster 1', + label: 'Mock external poster | Full footer', + timeout: 10, + footer: FooterSize.FULL, + type: PosterType.EXTERNAL, + source: ['https://kanikeenkortebroekaan.nl/'], + }, + { + id: '2', + name: 'Test Poster 2', + label: 'Mock image poster | Minimal footer', + timeout: 10, + footer: FooterSize.MINIMAL, + type: PosterType.IMAGE, + source: [ + 'https://raw.githubusercontent.com/D3Ext/aesthetic-wallpapers/main/images/alfa.png', + ], + }, + { + id: '7', + name: 'Test Poster 7', + label: 'Mock video poster | Full footer', + timeout: 10, + footer: FooterSize.FULL, + type: PosterType.VIDEO, + source: [ + 'https://avtshare01.rz.tu-ilmenau.de/avt-vqdb-uhd-1/test_1/segments/cutting_orange_tuil_15000kbps_1080p_59.94fps_vp9.mkv', + ], + }, + { + id: '3', + name: 'Test Poster 3', + label: 'Mock external poster | Minimal footer', + timeout: 10, + footer: FooterSize.MINIMAL, + type: PosterType.EXTERNAL, + source: ['http://www.bakkenvouwenals.nl/'], + }, + { + id: '4', + name: 'Test Poster 4', + label: 'Mock image poster | Full footer', + timeout: 10, + footer: FooterSize.FULL, + type: PosterType.IMAGE, + source: [ + 'https://raw.githubusercontent.com/D3Ext/aesthetic-wallpapers/main/images/fox.png', + ], + }, + { + id: '5', + name: 'Test Poster 5', + label: 'Mock image poster | Full footer', + timeout: 10, + footer: FooterSize.FULL, + type: PosterType.IMAGE, + source: [ + 'https://raw.githubusercontent.com/D3Ext/aesthetic-wallpapers/main/images/trigonometry.png', + ], + }, + { + id: '6', + name: 'Test Poster 6', + label: 'Mock video poster | Minimal footer', + timeout: 10, + footer: FooterSize.MINIMAL, + type: PosterType.VIDEO, + source: [ + 'https://avtshare01.rz.tu-ilmenau.de/avt-vqdb-uhd-1/test_1/segments/bigbuck_bunny_8bit_15000kbps_1080p_60.0fps_vp9.mkv', + ], + }, + ]; + } + + async fetchPosters(): Promise { + return this.posters ?? []; + } +}