2026-10-04 PulseUp 작업일지입니다. 오늘은 1건의 작업을 진행했습니다.
리모컨 「모니터 배치」 — 심박 모니터 지정·모니터 연결 감지 (`electron-app`, `web-app` 리모컨)
현상/기능
- 심박계 모니터 창을 추가해 실제 적용하니 LG TV를 내장그래픽 VGA로 붙이면 분배기 가로 모니터가 꺼지고 Windows 식별 번호가 바뀌는 문제가 발생함
- 센터마다 심박계를 쓰는 센터와 쓰지 않는 센터가 있어 프로그램의 위치값을 변경할 수 있어야 하는 상황임
작업
- 프로그램이 Windows 식별 번호가 아닌 디스플레이 배열의 왼쪽→오른쪽 순서로 창을 배치하고 심박 창을 맨 오른쪽 모니터에 띄우던 방식, 모니터 연결·해제 시 재배치 처리가 없었던 원인을 정리함
- 를 신규로 추가해 저장값과 연결된 모니터를 id·모양 우선으로 맞추고(id가 바뀌면 같은 모델을 위치 순으로 짝지음), 순서 모니터(chain)·심박 모니터 계산, 상태(auto/applied/partial/mismatch) 처리, 리모컨 입력 검사·번호 다시 매기기, 화면 표시용 목록을 구현하고 테스트 10건을 추가함
- 를 신규로 추가해 monitor-layout.json 읽기·저장 처리를 구현함(저장 성공 시에만 적용)
- 를 신규로 추가해 「화면에 번호 표시」 기능(모니터마다 큰 번호·지금 뜬 창·모니터 이름을 5초간 표시)을 구현함
- 를 신규로 추가해 릴레이 명령 get-monitor-layout·set-monitor-layout({monitors}/{reset:true}, 운동 중 거절)·identify-monitors 처리와 모니터 연결·해제·위치/회전 변경 감지 후 1.5초 뒤 창 재배치 로직을 구현함
- 를 수정해 심박 창을 지정 모니터(없으면 마지막 순서 모니터)에 배치하고 SINGLE 심박도 지정 모니터를 우선하도록 함, 3분할은 순서 모니터 5대 이상이면 가운데 3대(2~4번째)를 사용하도록 함(카운터는 5분할과 같은 3번째), 테스트 5건을 추가함
- multi/single/의 buildPlan이 모니터 목록 대신 MonitorTargets {chain, heart}를 받도록 수정함
- 에 MonitorLayoutController를 연결하고 창 배치 계획을 getMonitorArrangement 기준으로 계산하도록 수정함, relayoutWindows(창 종류가 같으면 위치만 이동하며 운동 중에도 적용, 종류가 바뀌면 운동 중이 아닐 때만 창 재생성)와 isWorkoutActive를 추가함, 5분할 모니터 수 판단도 순서 모니터 기준으로 바꿈
- 모니터 배치 명령 3개를 onMonitorLayoutCommand 콜백으로 전달하도록 수정함
- web-app/src/services/에 getMonitorLayout·setMonitorLayout·resetMonitorLayout·identifyMonitors와 관련 타입을 추가함
- web-app/src/components/monitor-layout/ 디렉터리를 신규로 추가함 — (처음 자리, 자리 맞바꾸기, 검사, 안내·결과 문구, 예전 앱 업데이트 안내, 테스트 22건), (불러오기·번호 표시·저장·되돌리기), (번호·모니터·지금 뜬 창·자리 Select), (안내·저장·「자동 배치로 되돌리기」 확인)
- 의 화면 구성 영역에 「모니터 배치 (심박 모니터 지정)」 버튼을 추가함(제어 권한 필요), 는 deviceId 전달만 하도록 수정함
- 저장 결과가 창 재생성(recreated)이면 「월간프로그램에서 Play 다시 실행」 안내를 표시하도록 함
- 모두 기본값으로 작업을 진행함