@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.41 → 5.0.0-beta.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -357,8 +357,27 @@ button.diagnostics-quiet-action {
357
357
  text-transform: uppercase;
358
358
  }
359
359
 
360
- .diagnostics-actions [data-diagnostics-reproduction] {
361
- flex: 1 1 auto;
360
+ .diagnostics-guidance .diagnostics-actions button,
361
+ .diagnostics-cameras .diagnostics-actions button {
362
+ flex: 1 1 0;
363
+ }
364
+
365
+ .diagnostics-actions:has(> [data-diagnostics-reproduction][hidden]) > [data-diagnostics-cancel] {
366
+ flex: 0 0 auto;
367
+ padding-inline: 24px;
368
+ }
369
+
370
+ .diagnostics-guidance [data-diagnostics-cancel],
371
+ .diagnostics-encode [data-encode-answer='live-picture-not-seen'],
372
+ .diagnostics-cameras [data-diagnostics-cameras-back] {
373
+ border: 1px solid var(--line-strong);
374
+ background: transparent;
375
+ color: var(--ink);
376
+ }
377
+
378
+ /* A guided live capture's step is the instruction, so the general one is not repeated beside it. */
379
+ .diagnostics-guidance:has(> [data-diagnostics-encode]:not([hidden])) > div:has(> [data-diagnostics-guidance-action]) {
380
+ display: none;
362
381
  }
363
382
 
364
383
  .diagnostics-result h2,
@@ -496,6 +515,7 @@ button.diagnostics-quiet-action {
496
515
  mask-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%20-960%20960%20960%22%3E%3Cpath%20d=%22M440-120v-240h80v80h320v80H520v80h-80Zm-320-80v-80h240v80H120Zm160-160v-80H120v-80h160v-80h80v240h-80Zm160-80v-80h400v80H440Zm160-160v-240h80v80h160v80H680v80h-80Zm-480-80v-80h400v80H120Z%22/%3E%3C/svg%3E');
497
516
  }
498
517
 
518
+ .diagnostics-camera-tiles button::before,
499
519
  .diagnostics-tiles [data-diagnostics-tile='live-media']::before {
500
520
  mask-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%20-960%20960%20960%22%3E%3Cpath%20d=%22M160-160q-33%200-56.5-23.5T80-240v-480q0-33%2023.5-56.5T160-800h480q33%200%2056.5%2023.5T720-720v180l160-160v440L720-420v180q0%2033-23.5%2056.5T640-160H160Zm0-80h480v-480H160v480Zm0%200v-480%20480Z%22/%3E%3C/svg%3E');
501
521
  }
@@ -577,7 +597,6 @@ button.diagnostics-quiet-action {
577
597
  grid-template-columns: auto minmax(0, 1fr) auto;
578
598
  align-items: center;
579
599
  gap: 16px;
580
- border-left: 4px solid var(--alert);
581
600
  }
582
601
 
583
602
  .notice-icon,
@@ -1539,28 +1558,13 @@ button.diagnostics-quiet-action {
1539
1558
  }
1540
1559
 
1541
1560
  .first-setup {
1542
- position: relative;
1543
1561
  margin-bottom: 16px;
1544
1562
  border: 1px solid var(--line);
1545
- border-left: 4px solid var(--accent);
1546
1563
  border-radius: var(--radius-card);
1547
1564
  background: var(--accent-soft);
1548
1565
  padding: 16px 20px;
1549
1566
  }
1550
1567
 
1551
- .first-setup::before {
1552
- content: '';
1553
- position: absolute;
1554
- top: 50%;
1555
- left: -3px;
1556
- width: 10px;
1557
- height: 10px;
1558
- border-top: 4px solid var(--accent);
1559
- border-right: 4px solid var(--accent);
1560
- background: var(--accent-soft);
1561
- transform: translate(-50%, -50%) rotate(225deg);
1562
- }
1563
-
1564
1568
  .first-setup h2 {
1565
1569
  margin-bottom: 8px;
1566
1570
  }
@@ -1650,7 +1654,6 @@ button.diagnostics-quiet-action {
1650
1654
 
1651
1655
  .handoff {
1652
1656
  border: 1px solid var(--line);
1653
- border-left: 4px solid var(--accent);
1654
1657
  border-radius: var(--radius-card);
1655
1658
  background: var(--accent-soft);
1656
1659
  padding: 12px 16px;
@@ -2424,3 +2427,45 @@ p.wizard-map-base {
2424
2427
  min-width: 160px;
2425
2428
  margin-top: 0;
2426
2429
  }
2430
+
2431
+ /* A live capture's camera step takes the place of the areas until it starts or goes back. */
2432
+ .diagnostics-question:has(> [data-diagnostics-cameras]:not([hidden])) > :not([data-diagnostics-cameras]) {
2433
+ display: none;
2434
+ }
2435
+
2436
+ .diagnostics-cameras:not([hidden]) {
2437
+ display: grid;
2438
+ gap: 12px;
2439
+ }
2440
+
2441
+ .diagnostics-cameras > h3 {
2442
+ margin: 0;
2443
+ font-size: clamp(17px, 4vw, 21px);
2444
+ line-height: 1.35;
2445
+ }
2446
+
2447
+ .diagnostics-camera-tiles button[aria-pressed='true'] {
2448
+ border-color: var(--accent);
2449
+ background: var(--accent-soft);
2450
+ color: var(--accent-ink);
2451
+ }
2452
+
2453
+ .diagnostics-encode-preview {
2454
+ display: block;
2455
+ width: 100%;
2456
+ aspect-ratio: 16 / 9;
2457
+ object-fit: contain;
2458
+ border-radius: var(--radius-card);
2459
+ background: #000;
2460
+ }
2461
+
2462
+ .diagnostics-encode-preview[hidden] {
2463
+ display: none;
2464
+ }
2465
+
2466
+ .diagnostics-encode [data-diagnostics-encode-step] {
2467
+ margin: 0;
2468
+ font-size: clamp(16px, 3.6vw, 19px);
2469
+ font-weight: 600;
2470
+ line-height: 1.4;
2471
+ }
@@ -126,6 +126,20 @@
126
126
  "diagnosticsLiveSummary": "Checks one live view, snapshot, or talkback problem.",
127
127
  "diagnosticsMissingEvidence": "Some details could not be captured. You can still download the diagnostics file.",
128
128
  "diagnosticsNothingRecorded": "Nothing was recorded. Reproduce the problem before finishing, or start another capture.",
129
+ "diagnosticsEncodeCameras": "Which cameras show no picture in the Home app?",
130
+ "diagnosticsEncodeStart": "Start the capture",
131
+ "diagnosticsEncodeKeepOpen": "Keep this page open until every attempt is done.",
132
+ "diagnosticsEncodeNotListed": "Not in the list",
133
+ "diagnosticsEncodePreview": "First, the live video of {camera} plays below, straight from the camera. Do you see it?",
134
+ "diagnosticsEncodeNoVideo": "No camera showed its video here, so there is nothing to try in the Home app. Press finish to get the file.",
135
+ "diagnosticsEncodeOpen": "In the Home app, open the live view of {camera}. Attempt {attempt} of {attempts}. Close it after about 20 seconds, or as soon as the picture shows.",
136
+ "diagnosticsEncodeWatching": "{camera} is streaming, attempt {attempt} of {attempts}. Close the live view after about 20 seconds, or as soon as the picture shows.",
137
+ "diagnosticsEncodeAsk": "Attempt {attempt} of {attempts} on {camera} ended. Did you see the picture?",
138
+ "diagnosticsEncodeSeen": "Yes, I saw it",
139
+ "diagnosticsEncodeNotSeen": "No picture",
140
+ "diagnosticsEncodeWrongCamera": "That is not one of the cameras you chose. Close it and open {camera}.",
141
+ "diagnosticsEncodeReminder": "Nothing has started for a few minutes: open the live view in the Home app.",
142
+ "diagnosticsEncodeDone": "Every attempt is done. Press finish to get the file.",
129
143
  "diagnosticsNowFinish": "It happened — finish",
130
144
  "diagnosticsOpenIssue": "Open a new GitHub issue",
131
145
  "diagnosticsOtherAction": "Try to make the problem happen and note what you see. Once it has happened, come back here and press finish; until then, leave the capture running.",
@@ -297,5 +311,6 @@
297
311
  "wizardEufyHelp": "Sent to the camera itself, the same settings as in the eufy app.",
298
312
  "wizardMapLabel": "Your devices",
299
313
  "wizardMapBase": "HomeBase",
300
- "wizardMapStandalone": "Standalone"
314
+ "wizardMapStandalone": "Standalone",
315
+ "diagnosticsBack": "Back"
301
316
  }
@@ -126,6 +126,20 @@
126
126
  "diagnosticsLiveSummary": "Vérifie un problème de vue en direct, d’instantané ou d’audio bidirectionnel.",
127
127
  "diagnosticsMissingEvidence": "Certains détails n’ont pas pu être capturés. Vous pouvez tout de même télécharger le fichier de diagnostic.",
128
128
  "diagnosticsNothingRecorded": "Rien n’a été enregistré. Reproduisez le problème avant de terminer, ou lancez une nouvelle capture.",
129
+ "diagnosticsEncodeCameras": "Quelles caméras n’affichent pas d’image dans l’app Maison ?",
130
+ "diagnosticsEncodeStart": "Démarrer la capture",
131
+ "diagnosticsEncodeKeepOpen": "Gardez cette page ouverte jusqu’à la fin de tous les essais.",
132
+ "diagnosticsEncodeNotListed": "Pas dans la liste",
133
+ "diagnosticsEncodePreview": "D’abord, la vidéo en direct de {camera} s’affiche ci-dessous, directement depuis la caméra. La voyez-vous ?",
134
+ "diagnosticsEncodeNoVideo": "Aucune caméra n’a affiché sa vidéo ici, il n’y a donc rien à essayer dans l’app Maison. Appuyez sur terminer pour obtenir le fichier.",
135
+ "diagnosticsEncodeOpen": "Dans l’app Maison, ouvrez la vue en direct de {camera}. Essai {attempt} sur {attempts}. Fermez-la après environ 20 secondes, ou dès que l’image s’affiche.",
136
+ "diagnosticsEncodeWatching": "{camera} diffuse, essai {attempt} sur {attempts}. Fermez la vue en direct après environ 20 secondes, ou dès que l’image s’affiche.",
137
+ "diagnosticsEncodeAsk": "L’essai {attempt} sur {attempts} de {camera} est terminé. Avez-vous vu l’image ?",
138
+ "diagnosticsEncodeSeen": "Oui, je l’ai vue",
139
+ "diagnosticsEncodeNotSeen": "Pas d’image",
140
+ "diagnosticsEncodeWrongCamera": "Ce n’est pas une des caméras choisies. Fermez-la et ouvrez {camera}.",
141
+ "diagnosticsEncodeReminder": "Rien n’a démarré depuis quelques minutes : ouvrez la vue en direct dans l’app Maison.",
142
+ "diagnosticsEncodeDone": "Tous les essais sont faits. Appuyez sur terminer pour obtenir le fichier.",
129
143
  "diagnosticsNowFinish": "C’est arrivé — terminer",
130
144
  "diagnosticsOpenIssue": "Ouvrir un nouveau ticket GitHub",
131
145
  "diagnosticsOtherAction": "Essayez de faire survenir le problème et notez ce que vous voyez. Une fois qu’il s’est produit, revenez ici et appuyez sur terminer ; d’ici là, laissez la capture en cours.",
@@ -297,5 +311,6 @@
297
311
  "wizardEufyHelp": "Envoyé à la caméra elle-même, les mêmes réglages que dans l’app eufy.",
298
312
  "wizardMapLabel": "Vos appareils",
299
313
  "wizardMapBase": "HomeBase",
300
- "wizardMapStandalone": "Autonomes"
314
+ "wizardMapStandalone": "Autonomes",
315
+ "diagnosticsBack": "Retour"
301
316
  }
@@ -362,17 +362,38 @@
362
362
  <small data-i18n="diagnosticsOtherSummary"></small>
363
363
  </button>
364
364
  </div>
365
+ <div class="diagnostics-cameras" data-diagnostics-cameras hidden>
366
+ <h3 id="diagnostics-cameras-heading" data-i18n="diagnosticsEncodeCameras"></h3>
367
+ <div
368
+ class="diagnostics-tiles diagnostics-camera-tiles"
369
+ role="group"
370
+ aria-labelledby="diagnostics-cameras-heading"
371
+ data-diagnostics-camera-list
372
+ ></div>
373
+ <div class="diagnostics-actions">
374
+ <button type="button" data-diagnostics-cameras-back data-i18n="diagnosticsBack"></button>
375
+ <button type="button" data-diagnostics-cameras-start data-i18n="diagnosticsEncodeStart"></button>
376
+ </div>
377
+ </div>
365
378
  </div>
366
379
  </div>
367
380
  <div class="diagnostics-guidance diagnostics-surface" data-diagnostics-guidance hidden>
368
381
  <h3 tabindex="-1" data-diagnostics-phase-title></h3>
382
+ <div class="diagnostics-encode" data-diagnostics-encode hidden>
383
+ <p aria-live="polite" data-diagnostics-encode-step></p>
384
+ <img class="diagnostics-encode-preview" alt="" data-diagnostics-encode-preview hidden />
385
+ <div class="diagnostics-actions" data-diagnostics-encode-answer hidden>
386
+ <button type="button" data-encode-answer="live-picture-seen" data-i18n="diagnosticsEncodeSeen"></button>
387
+ <button type="button" data-encode-answer="live-picture-not-seen" data-i18n="diagnosticsEncodeNotSeen"></button>
388
+ </div>
389
+ </div>
369
390
  <div>
370
391
  <span class="guidance-label" data-i18n="diagnosticsActionLabel"></span>
371
392
  <p data-diagnostics-guidance-action></p>
372
393
  </div>
373
394
  <div class="diagnostics-actions" data-diagnostics-actions hidden>
395
+ <button type="button" data-diagnostics-cancel data-i18n="diagnosticsCancel"></button>
374
396
  <button type="button" data-diagnostics-reproduction disabled data-i18n="diagnosticsNowFinish"></button>
375
- <button type="button" class="diagnostics-quiet-action" data-diagnostics-cancel data-i18n="diagnosticsCancel"></button>
376
397
  </div>
377
398
  <p class="diagnostics-note" data-diagnostics-capture-note></p>
378
399
  </div>
@@ -57,6 +57,13 @@ const diagnosticsGuidance = document.querySelector('[data-diagnostics-guidance]'
57
57
  const diagnosticsPhaseTitle = document.querySelector('[data-diagnostics-phase-title]');
58
58
  const diagnosticsGuidanceAction = document.querySelector('[data-diagnostics-guidance-action]');
59
59
  const diagnosticsCaptureNote = document.querySelector('[data-diagnostics-capture-note]');
60
+ const diagnosticsCameras = document.querySelector('[data-diagnostics-cameras]');
61
+ const diagnosticsCameraList = document.querySelector('[data-diagnostics-camera-list]');
62
+ const diagnosticsCamerasStart = document.querySelector('[data-diagnostics-cameras-start]');
63
+ const diagnosticsEncode = document.querySelector('[data-diagnostics-encode]');
64
+ const diagnosticsEncodeStep = document.querySelector('[data-diagnostics-encode-step]');
65
+ const diagnosticsEncodeAnswer = document.querySelector('[data-diagnostics-encode-answer]');
66
+ const diagnosticsEncodePreview = document.querySelector('[data-diagnostics-encode-preview]');
60
67
  const diagnosticsHandoff = document.querySelector('[data-diagnostics-handoff]');
61
68
  const diagnosticsHandoffNote = document.querySelector('[data-diagnostics-handoff-note]');
62
69
  const diagnosticsResultStatus = document.querySelector('[data-diagnostics-result-status]');
@@ -343,9 +350,118 @@ function renderDiagnostics(state) {
343
350
  });
344
351
  diagnosticsCaptureNote.textContent = (messages.diagnosticsCaptureKeepsRunning ?? '').replace('{time}', stopsAt);
345
352
  }
353
+ renderLiveEncode(state);
346
354
  diagnosticsStatus.textContent = '';
347
355
  }
348
356
 
357
+ let liveEncodePoll;
358
+ /** How many live starts the guided encoder attempts had recorded, and when that last changed. */
359
+ let liveEncodeProgress = { starts: -1, at: 0 };
360
+
361
+ /** A guided encoder message with its `{camera}`, `{attempt}` and `{attempts}` filled. */
362
+ function liveEncodeText(key, values) {
363
+ return Object.entries(values).reduce((text, [name, value]) => text.replace(`{${name}}`, value), messages[key] ?? '');
364
+ }
365
+
366
+ /**
367
+ * Walks a reporter through the guided encoder attempts of a live-media capture that named cameras: which camera to
368
+ * open next and which attempt it is, read back from the starts the capture recorded; a camera it did not name; a
369
+ * reminder after three minutes without a start; the picture question once an attempt ended; and finishing once
370
+ * every camera made its attempts. Polls the capture's status while the panel shows it.
371
+ */
372
+ function renderLiveEncode(state) {
373
+ clearTimeout(liveEncodePoll);
374
+ const live = state.status === 'reproducing' && !diagnosticsPanel.hidden ? state.liveEncode : undefined;
375
+ diagnosticsEncode.hidden = !live;
376
+ diagnosticsReproduction.textContent = messages[live ? 'wizardFinish' : 'diagnosticsNowFinish'] ?? '';
377
+ diagnosticsReproduction.hidden = Boolean(live);
378
+ const cameras = live ? state.affectedDevices : [];
379
+ const previewing = live && live.previews.length < cameras.length ? cameras[live.previews.length] : undefined;
380
+ previewLiveEncode(previewing);
381
+ if (!live) return;
382
+ diagnosticsCaptureNote.textContent = messages.diagnosticsEncodeKeepOpen ?? '';
383
+ liveEncodePoll = setTimeout(() => {
384
+ requestWithinDeadline('/diagnostics/status', undefined, 12000).then(renderDiagnostics, () =>
385
+ renderLiveEncode(diagnosticsState),
386
+ );
387
+ }, 3000);
388
+ const name = (index) => dashboardDevices.find(({ serial }) => serial === cameras[index])?.name ?? `#${index + 1}`;
389
+ if (previewing) {
390
+ const text = liveEncodeText('diagnosticsEncodePreview', { camera: name(live.previews.length) });
391
+ if (diagnosticsEncodeStep.textContent !== text) diagnosticsEncodeStep.textContent = text;
392
+ diagnosticsEncodeAnswer.hidden = false;
393
+ return;
394
+ }
395
+ const attempted = live.starts.filter(({ variant }) => variant !== undefined);
396
+ const made = cameras.map((_, index) =>
397
+ live.previews[index] ? attempted.filter(({ camera }) => camera === index).length : live.attempts,
398
+ );
399
+ const pending = attempted[live.answers];
400
+ const latest = live.starts.at(-1);
401
+ if (live.starts.length !== liveEncodeProgress.starts) liveEncodeProgress = { starts: live.starts.length, at: Date.now() };
402
+ const next = made.findIndex((count) => count < live.attempts);
403
+ const values = { attempts: live.attempts };
404
+ let text;
405
+ if (pending) {
406
+ Object.assign(values, { camera: name(pending.camera), attempt: pending.variant + 1 });
407
+ text = liveEncodeText(pending.state === 'ended' ? 'diagnosticsEncodeAsk' : 'diagnosticsEncodeWatching', values);
408
+ } else if (latest && latest.camera === undefined && latest.state !== 'ended') {
409
+ text = liveEncodeText('diagnosticsEncodeWrongCamera', { camera: name(Math.max(next, 0)) });
410
+ } else if (next < 0) {
411
+ diagnosticsReproduction.hidden = false;
412
+ text = messages[live.previews.some(Boolean) ? 'diagnosticsEncodeDone' : 'diagnosticsEncodeNoVideo'] ?? '';
413
+ } else {
414
+ text = liveEncodeText('diagnosticsEncodeOpen', { ...values, camera: name(next), attempt: made[next] + 1 });
415
+ if (Date.now() - liveEncodeProgress.at > 180000) text += ` ${messages.diagnosticsEncodeReminder ?? ''}`;
416
+ }
417
+ if (diagnosticsEncodeStep.textContent !== text) diagnosticsEncodeStep.textContent = text;
418
+ diagnosticsEncodeAnswer.hidden = pending?.state !== 'ended';
419
+ }
420
+
421
+ /** The camera whose own video the page shows before its attempts, so the reporter can say whether it plays at all. */
422
+ let liveEncodePreviewSerial;
423
+
424
+ /** Shows `serial`'s own video in the guided capture, stopping any other camera's first; nothing stops it. */
425
+ function previewLiveEncode(serial) {
426
+ if (serial === liveEncodePreviewSerial) return;
427
+ if (liveEncodePreviewSerial) void requestWithinDeadline('/device/live/stop', {}, 12000).catch(() => undefined);
428
+ liveEncodePreviewSerial = serial;
429
+ diagnosticsEncodePreview.src = '';
430
+ diagnosticsEncodePreview.hidden = !serial;
431
+ if (!serial) return;
432
+ const config = configuredBlock() ?? {};
433
+ const own = config.entityPreferences?.[serial] ?? {};
434
+ const adaptation = {
435
+ ask: 'wifi',
436
+ smallVideoPackets: config.smallVideoPackets === true,
437
+ liveVideoPassthrough: (own.liveVideoPassthrough ?? config.liveVideoPassthrough) === true,
438
+ hardwareVideoEncoder: config.hardwareVideoEncoder !== false,
439
+ ignoreHomeBitRate: (own.ignoreHomeBitRate ?? config.ignoreHomeBitRate) === true,
440
+ };
441
+ void requestWithinDeadline('/device/live/start', { serial, adaptation }, 12000).catch(() => undefined);
442
+ }
443
+
444
+ homebridge.addEventListener('device-live', (event) => {
445
+ if (!event.data?.image || event.data.serial !== liveEncodePreviewSerial || event.data.side === 'homekit') return;
446
+ diagnosticsEncodePreview.src = `data:image/jpeg;base64,${event.data.image}`;
447
+ diagnosticsEncodePreview.hidden = false;
448
+ });
449
+
450
+ for (const answer of document.querySelectorAll('[data-encode-answer]')) {
451
+ answer.addEventListener('click', async () => {
452
+ diagnosticsEncodeAnswer.hidden = true;
453
+ const event = liveEncodePreviewSerial
454
+ ? answer.dataset.encodeAnswer.replace('picture', 'preview')
455
+ : answer.dataset.encodeAnswer;
456
+ try {
457
+ await requestWithinDeadline('/diagnostics/ui-event', { event }, 12000);
458
+ renderDiagnostics(await requestWithinDeadline('/diagnostics/status', undefined, 12000));
459
+ } catch {
460
+ diagnosticsStatus.textContent = messages.diagnosticsFailed ?? '';
461
+ }
462
+ });
463
+ }
464
+
349
465
  /** Whether a finished capture holds no record of any log it selected, so its file carries nothing to diagnose. */
350
466
  function isNothingRecorded(state) {
351
467
  return state.status === 'complete' && state.selectedEvidence?.length > 0 &&
@@ -469,10 +585,15 @@ async function settleDiagnostics() {
469
585
  * Captures the area picked. The area is the only answer a capture needs, so the pick opens the session and starts
470
586
  * it in one go.
471
587
  */
472
- async function startDiagnosticsCapture(profile) {
588
+ async function startDiagnosticsCapture(profile, affectedDevices) {
473
589
  for (const tile of diagnosticsTiles) tile.disabled = true;
590
+ diagnosticsCameras.hidden = true;
474
591
  try {
475
- await requestWithinDeadline('/diagnostics/authorize', { profile }, 12000);
592
+ await requestWithinDeadline(
593
+ '/diagnostics/authorize',
594
+ affectedDevices?.length ? { profile, reproductionMode: 'now', affectedDevices } : { profile },
595
+ 12000,
596
+ );
476
597
  const state = await requestWithinDeadline('/diagnostics/reproduction/start', undefined, 12000);
477
598
  renderDiagnostics(state);
478
599
  if (isDashboardUiReproducing(state)) {
@@ -488,10 +609,56 @@ async function startDiagnosticsCapture(profile) {
488
609
  }
489
610
  }
490
611
 
612
+ /**
613
+ * A live-media capture first asks which cameras show no picture, each of which then makes the guided encoder
614
+ * attempts. The last tile, a camera not in the list, excludes the others and captures the area as any other; the
615
+ * capture starts once a tile is picked.
616
+ */
491
617
  for (const tile of diagnosticsTiles) {
492
- tile.addEventListener('click', () => startDiagnosticsCapture(tile.dataset.diagnosticsTile));
618
+ tile.addEventListener('click', () => {
619
+ const cameras = dashboardDevices.filter((device) => device.deviceClass === 'camera' && !device.diagnosticOnly);
620
+ if (tile.dataset.diagnosticsTile !== 'live-media' || cameras.length === 0) {
621
+ return startDiagnosticsCapture(tile.dataset.diagnosticsTile);
622
+ }
623
+ const choices = [...cameras, { serial: '', name: messages.diagnosticsEncodeNotListed ?? '' }].map((camera) => {
624
+ const choice = Object.assign(document.createElement('button'), { type: 'button', textContent: camera.name });
625
+ choice.dataset.serial = camera.serial;
626
+ choice.setAttribute('aria-pressed', 'false');
627
+ return choice;
628
+ });
629
+ for (const choice of choices) {
630
+ choice.addEventListener('click', () => {
631
+ const pressed = choice.getAttribute('aria-pressed') !== 'true';
632
+ for (const other of choices) {
633
+ if (other === choice) other.setAttribute('aria-pressed', String(pressed));
634
+ else if (pressed && (choice.dataset.serial === '' || other.dataset.serial === '')) {
635
+ other.setAttribute('aria-pressed', 'false');
636
+ }
637
+ }
638
+ diagnosticsCamerasStart.disabled = !choices.some((each) => each.getAttribute('aria-pressed') === 'true');
639
+ });
640
+ }
641
+ diagnosticsCameraList.replaceChildren(...choices);
642
+ diagnosticsCamerasStart.disabled = true;
643
+ diagnosticsCameras.hidden = false;
644
+ choices[0].focus?.();
645
+ });
493
646
  }
494
647
 
648
+ diagnosticsCamerasStart.addEventListener('click', () =>
649
+ startDiagnosticsCapture(
650
+ 'live-media',
651
+ [...diagnosticsCameraList.querySelectorAll('[aria-pressed="true"]')]
652
+ .map((tile) => tile.dataset.serial)
653
+ .filter(Boolean),
654
+ ),
655
+ );
656
+
657
+ document.querySelector('[data-diagnostics-cameras-back]').addEventListener('click', () => {
658
+ diagnosticsCameras.hidden = true;
659
+ diagnosticsQuestionText.focus?.();
660
+ });
661
+
495
662
  diagnosticsStartAnother.addEventListener('click', endDiagnosticsCase);
496
663
  /** Escape leaves the archive dialog only once its file is downloaded, and leaving it finishes the session. */
497
664
  diagnosticsResult.addEventListener('cancel', (event) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Homebridge Eufy",
3
3
  "name": "@homebridge-plugins/homebridge-eufy-security",
4
- "version": "5.0.0-beta.41",
4
+ "version": "5.0.0-beta.42",
5
5
  "description": "Control Eufy Security from homebridge.",
6
6
  "type": "module",
7
7
  "license": "Apache-2.0",