@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.3 → 5.0.0-beta.4
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.
- package/dist/diagnostics.js +67 -9
- package/dist/diagnostics.js.map +1 -1
- package/dist/ui/server.js +26 -4
- package/dist/ui/server.js.map +1 -1
- package/homebridge-ui/public/app.css +234 -2
- package/homebridge-ui/public/i18n/en.json +18 -14
- package/homebridge-ui/public/i18n/fr.json +18 -14
- package/homebridge-ui/public/index.html +24 -32
- package/homebridge-ui/public/js/app.js +160 -65
- package/homebridge-ui/public/js/profile-wizard.js +22 -29
- package/package.json +1 -1
|
@@ -384,11 +384,230 @@ button.diagnostics-quiet-action {
|
|
|
384
384
|
gap: 8px;
|
|
385
385
|
}
|
|
386
386
|
|
|
387
|
-
|
|
388
|
-
|
|
387
|
+
/*
|
|
388
|
+
* The two steps of the handoff share one shape, so the sequence reads as a sequence: same height, same
|
|
389
|
+
* gap, same badge, and a colour each. The download is a button because it acts here; the report is an
|
|
390
|
+
* anchor because it navigates to GitHub.
|
|
391
|
+
*/
|
|
392
|
+
.diagnostics-result [data-diagnostics-export],
|
|
393
|
+
.diagnostics-result [data-diagnostics-issue] {
|
|
394
|
+
display: flex;
|
|
395
|
+
width: 100%;
|
|
396
|
+
min-height: 44px;
|
|
397
|
+
align-items: center;
|
|
398
|
+
justify-content: center;
|
|
399
|
+
gap: 10px;
|
|
389
400
|
margin-top: 8px;
|
|
401
|
+
border-radius: var(--radius-control);
|
|
402
|
+
font-weight: 600;
|
|
403
|
+
text-decoration: none;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/*
|
|
407
|
+
* The step number is generated content rather than an element, because translation assigns `textContent`
|
|
408
|
+
* on the control and would remove any child it had.
|
|
409
|
+
*/
|
|
410
|
+
.diagnostics-result [data-diagnostics-export]::before,
|
|
411
|
+
.diagnostics-result [data-diagnostics-issue]::before {
|
|
412
|
+
display: inline-flex;
|
|
413
|
+
width: 22px;
|
|
414
|
+
height: 22px;
|
|
415
|
+
flex: none;
|
|
416
|
+
align-items: center;
|
|
417
|
+
justify-content: center;
|
|
418
|
+
border-radius: 50%;
|
|
419
|
+
font-size: 12px;
|
|
420
|
+
font-variant-numeric: tabular-nums;
|
|
421
|
+
font-weight: 700;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/* Each badge inverts its own control's pair, so the digit keeps its contrast on either background. */
|
|
425
|
+
.diagnostics-result [data-diagnostics-export]::before {
|
|
426
|
+
background: var(--on-accent);
|
|
427
|
+
color: var(--accent);
|
|
428
|
+
content: '1';
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/*
|
|
432
|
+
* Step two is the same progression as step one and is filled differently rather than coloured
|
|
433
|
+
* differently: a success colour would claim the task is complete, and colour alone must not be what
|
|
434
|
+
* tells two controls apart.
|
|
435
|
+
*/
|
|
436
|
+
.diagnostics-result [data-diagnostics-issue] {
|
|
437
|
+
border: 1px solid var(--accent);
|
|
438
|
+
background: transparent;
|
|
390
439
|
color: var(--accent-ink);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
.diagnostics-result [data-diagnostics-issue]::before {
|
|
443
|
+
background: var(--accent);
|
|
444
|
+
color: var(--on-accent);
|
|
445
|
+
content: '2';
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* Without an archive there is nothing to attach, so the step is present and not yet a link. */
|
|
449
|
+
.diagnostics-result a[data-diagnostics-issue][aria-disabled='true'] {
|
|
450
|
+
border-color: var(--line);
|
|
451
|
+
color: var(--ink-disabled);
|
|
452
|
+
cursor: default;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
.diagnostics-result a[data-diagnostics-issue][aria-disabled='true']::before {
|
|
456
|
+
background: var(--ink-disabled);
|
|
457
|
+
color: var(--panel);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/*
|
|
461
|
+
* The opening screen: every area at once, three to a row.
|
|
462
|
+
*
|
|
463
|
+
* Each tile carries a Material Symbols outline glyph (Apache-2.0) as a mask rather than an element, because
|
|
464
|
+
* translation assigns `textContent` on the tile and would remove any child it had. A mask also lets the glyph
|
|
465
|
+
* take the tile's own colour in every state instead of being baked into an image. The data URI is inline, so
|
|
466
|
+
* the panel renders the same on a host with no route to the internet.
|
|
467
|
+
*/
|
|
468
|
+
.diagnostics-tiles {
|
|
469
|
+
display: grid;
|
|
470
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
471
|
+
gap: 8px;
|
|
472
|
+
margin-top: 12px;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.diagnostics-tiles button {
|
|
476
|
+
display: flex;
|
|
477
|
+
min-height: 88px;
|
|
478
|
+
flex-direction: column;
|
|
479
|
+
align-items: center;
|
|
480
|
+
justify-content: center;
|
|
481
|
+
gap: 8px;
|
|
482
|
+
padding: 10px 6px;
|
|
483
|
+
border: 1px solid var(--line-strong);
|
|
484
|
+
background: transparent;
|
|
485
|
+
color: var(--ink);
|
|
486
|
+
font-size: 12px;
|
|
391
487
|
font-weight: 600;
|
|
488
|
+
line-height: 1.25;
|
|
489
|
+
overflow-wrap: break-word;
|
|
490
|
+
text-align: center;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.diagnostics-tiles button::before {
|
|
494
|
+
width: 26px;
|
|
495
|
+
height: 26px;
|
|
496
|
+
flex: none;
|
|
497
|
+
background: currentColor;
|
|
498
|
+
content: '';
|
|
499
|
+
mask-position: center;
|
|
500
|
+
mask-repeat: no-repeat;
|
|
501
|
+
mask-size: contain;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
.diagnostics-tiles button:hover:not(:disabled) {
|
|
505
|
+
border-color: var(--accent);
|
|
506
|
+
background: var(--accent-soft);
|
|
507
|
+
color: var(--accent-ink);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.diagnostics-tiles [data-diagnostics-tile='startup-authentication']::before {
|
|
511
|
+
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=%22M480-120v-80h280v-560H480v-80h280q33%200%2056.5%2023.5T840-760v560q0%2033-23.5%2056.5T760-120H480Zm-80-160-55-58%20102-102H120v-80h327L345-622l55-58%20200%20200-200%20200Z%22/%3E%3C/svg%3E');
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.diagnostics-tiles [data-diagnostics-tile='device-representation']::before {
|
|
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=%22M400-560ZM160-160q-33%200-56.5-23.5T80-240v-480q0-33%2023.5-56.5T160-800h640q33%200%2056.5%2023.5T880-720H160v480h80v80h-80Zm640-80v-320H640v320h160Zm-180%2080q-25%200-42.5-17.5T560-220v-360q0-25%2017.5-42.5T620-640h200q25%200%2042.5%2017.5T880-580v360q0%2025-17.5%2042.5T820-160H620Zm100-300q13%200%2021.5-9t8.5-21q0-13-8.5-21.5T720-520q-12%200-21%208.5t-9%2021.5q0%2012%209%2021t21%209ZM340-160l-20-70q-19-17-29.5-40T280-320q0-27%2010.5-50t29.5-40l20-70h120l20%2070q19%2017%2029.5%2040t10.5%2050q0%2027-10.5%2050T480-230l-20%2070H340Zm60-100q26%200%2043-17.5t17-42.5q0-25-18-42.5T400-380q-24%200-42%2017t-18%2043q0%2026%2017%2043t43%2017Zm320-140Z%22/%3E%3C/svg%3E');
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
.diagnostics-tiles [data-diagnostics-tile='control-state']::before {
|
|
519
|
+
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');
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.diagnostics-tiles [data-diagnostics-tile='live-media']::before {
|
|
523
|
+
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');
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.diagnostics-tiles [data-diagnostics-tile='hksv-recording']::before {
|
|
527
|
+
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-800%2080%20160h120l-80-160h80l80%20160h120l-80-160h80l80%20160h120l-80-160h120q33%200%2056.5%2023.5T880-720v480q0%2033-23.5%2056.5T800-160H160q-33%200-56.5-23.5T80-240v-480q0-33%2023.5-56.5T160-800Zm0%20240v320h640v-320H160Zm0%200v320-320Z%22/%3E%3C/svg%3E');
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.diagnostics-tiles [data-diagnostics-tile='dashboard-ui']::before {
|
|
531
|
+
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=%22M520-600v-240h320v240H520ZM120-440v-400h320v400H120Zm400%20320v-400h320v400H520Zm-400%200v-240h320v240H120Zm80-400h160v-240H200v240Zm400%20320h160v-240H600v240Zm0-480h160v-80H600v80ZM200-200h160v-80H200v80Zm160-320Zm240-160Zm0%20240ZM360-280Z%22/%3E%3C/svg%3E');
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.diagnostics-tiles [data-diagnostics-tile='other']::before {
|
|
535
|
+
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=%22M513.5-254.5Q528-269%20528-290t-14.5-35.5Q499-340%20478-340t-35.5%2014.5Q428-311%20428-290t14.5%2035.5Q457-240%20478-240t35.5-14.5ZM442-394h74q0-33%207.5-52t42.5-52q26-26%2041-49.5t15-56.5q0-56-41-86t-97-30q-57%200-92.5%2030T342-618l66%2026q5-18%2022.5-39t53.5-21q32%200%2048%2017.5t16%2038.5q0%2020-12%2037.5T506-526q-44%2039-54%2059t-10%2073Zm38%20314q-83%200-156-31.5T197-197q-54-54-85.5-127T80-480q0-83%2031.5-156T197-763q54-54%20127-85.5T480-880q83%200%20156%2031.5T763-763q54%2054%2085.5%20127T880-480q0%2083-31.5%20156T763-197q-54%2054-127%2085.5T480-80Zm0-80q134%200%20227-93t93-227q0-134-93-227t-227-93q-134%200-227%2093t-93%20227q0%20134%2093%20227t227%2093Zm0-320Z%22/%3E%3C/svg%3E');
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/* The same grid as the areas, so picking hardware reads as the same kind of act as picking an area. */
|
|
539
|
+
.diagnostics-device-list {
|
|
540
|
+
display: grid;
|
|
541
|
+
max-height: 264px;
|
|
542
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
543
|
+
gap: 8px;
|
|
544
|
+
overflow-y: auto;
|
|
545
|
+
margin: 8px 0 12px;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.diagnostics-device-list button {
|
|
549
|
+
display: flex;
|
|
550
|
+
min-height: 104px;
|
|
551
|
+
flex-direction: column;
|
|
552
|
+
align-items: center;
|
|
553
|
+
justify-content: center;
|
|
554
|
+
gap: 6px;
|
|
555
|
+
padding: 8px 6px;
|
|
556
|
+
border: 1px solid var(--line-strong);
|
|
557
|
+
background: transparent;
|
|
558
|
+
color: var(--ink);
|
|
559
|
+
font-size: 11px;
|
|
560
|
+
font-weight: 600;
|
|
561
|
+
line-height: 1.2;
|
|
562
|
+
overflow-wrap: break-word;
|
|
563
|
+
text-align: center;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.diagnostics-device-list img {
|
|
567
|
+
width: 24px;
|
|
568
|
+
height: 24px;
|
|
569
|
+
flex: none;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/*
|
|
573
|
+
* The device's own artwork, contained rather than cropped and at half the tile.
|
|
574
|
+
*
|
|
575
|
+
* `contain` is how the devices view draws the same image, because it is a cutout of the hardware and not a
|
|
576
|
+
* scene: cropping it to fill cuts the device out of its own picture. Half the tile keeps the name it belongs
|
|
577
|
+
* to from competing with it. That view's darkening filter is not carried over — it exists to seat the image
|
|
578
|
+
* under white text on a coloured tile, and these tiles read dark text on the panel.
|
|
579
|
+
*/
|
|
580
|
+
.diagnostics-device-list img.device-photo {
|
|
581
|
+
width: 100%;
|
|
582
|
+
max-width: 100%;
|
|
583
|
+
height: auto;
|
|
584
|
+
max-height: 50%;
|
|
585
|
+
object-fit: contain;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
.diagnostics-device-list button:hover {
|
|
589
|
+
border-color: var(--accent);
|
|
590
|
+
background: var(--accent-soft);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/* Pressed is the selection, so it is the border and the fill that say so rather than the colour alone. */
|
|
594
|
+
.diagnostics-device-list button[aria-pressed='true'] {
|
|
595
|
+
border-color: var(--accent);
|
|
596
|
+
border-width: 2px;
|
|
597
|
+
background: var(--accent-soft);
|
|
598
|
+
color: var(--accent-ink);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.diagnostics-step-hint {
|
|
602
|
+
margin: 4px 0 0;
|
|
603
|
+
color: var(--muted);
|
|
604
|
+
font-size: 12px;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
.diagnostics-local-note {
|
|
608
|
+
margin: 12px 0 0;
|
|
609
|
+
color: var(--ink-secondary);
|
|
610
|
+
font-size: 12px;
|
|
392
611
|
}
|
|
393
612
|
|
|
394
613
|
.diagnostics-result button {
|
|
@@ -1734,6 +1953,19 @@ input:focus-visible {
|
|
|
1734
1953
|
}
|
|
1735
1954
|
|
|
1736
1955
|
@media (max-width: 420px) {
|
|
1956
|
+
/*
|
|
1957
|
+
* Two across rather than three. Seven areas still fit on one screen at this width, and a third column
|
|
1958
|
+
* leaves each label about ninety pixels, where the longest of them runs to four lines.
|
|
1959
|
+
*/
|
|
1960
|
+
.diagnostics-tiles {
|
|
1961
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
.diagnostics-device-list {
|
|
1965
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1966
|
+
}
|
|
1967
|
+
|
|
1968
|
+
|
|
1737
1969
|
.status-row {
|
|
1738
1970
|
display: grid;
|
|
1739
1971
|
}
|
|
@@ -77,22 +77,20 @@
|
|
|
77
77
|
"diagnosticOnly": "Diagnostic only",
|
|
78
78
|
"diagnosticsActionLabel": "What to do",
|
|
79
79
|
"diagnosticsArchiveCoverageGap": "{classes}: evidence older than {retainedFrom} was dropped at the archive limit, so those classes do not reach the start of the reproduction you marked. Reproduce the fault again over a shorter interval.",
|
|
80
|
-
"
|
|
80
|
+
"diagnosticsArchiveDetail": "Technical detail",
|
|
81
|
+
"diagnosticsArchiveExcluded": "Never included:",
|
|
81
82
|
"diagnosticsArchiveExpires": "expires {expiresAt}",
|
|
82
83
|
"diagnosticsArchiveExport": "Download encrypted archive",
|
|
83
84
|
"diagnosticsArchiveFields": "fields:",
|
|
84
85
|
"diagnosticsArchiveMode": "mode:",
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"diagnosticsArchiveReviewIntro": "Review the evidence classes and permanent exclusions before creating an encrypted local download. Nothing is uploaded.",
|
|
86
|
+
"diagnosticsArchiveReviewConfirm": "I have read the summary above and want to create this file.",
|
|
87
|
+
"diagnosticsArchiveReviewIntro": "Creating the file is the next step. Below is what it never contains.",
|
|
88
88
|
"diagnosticsArchiveTruncated": "newest records retained at the archive limit",
|
|
89
89
|
"diagnosticsAuthorize": "Start diagnostics session",
|
|
90
90
|
"diagnosticsAuthorized": "Ready to collect. Start when you are ready.",
|
|
91
|
-
"diagnosticsBackToQuestions": "Back to questions",
|
|
92
91
|
"diagnosticsBeforeLabel": "Before you start",
|
|
93
92
|
"diagnosticsBestMatch": "Best match",
|
|
94
93
|
"diagnosticsChangeAnswers": "Change answers",
|
|
95
|
-
"diagnosticsChooseDirectly": "Choose a profile directly",
|
|
96
94
|
"diagnosticsCollectingFinishHere": "Debug diagnostics — collection is active. Finish here.",
|
|
97
95
|
"diagnosticsComplete": "Collection complete.",
|
|
98
96
|
"diagnosticsContinue": "Continue",
|
|
@@ -104,6 +102,10 @@
|
|
|
104
102
|
"diagnosticsDashboardSummary": "Tracks a problem in the dashboard, login, or setup screens.",
|
|
105
103
|
"diagnosticsDevicesAction": "Refresh the devices or reopen the affected tile, then finish when the problem appears.",
|
|
106
104
|
"diagnosticsDevicesBefore": "Note which accessory is missing, duplicated, or shown as the wrong type.",
|
|
105
|
+
"diagnosticsDevicesChosen": "Continue",
|
|
106
|
+
"diagnosticsDevicesEvery": "Select all",
|
|
107
|
+
"diagnosticsDevicesHeading": "Which devices are affected?",
|
|
108
|
+
"diagnosticsDevicesHint": "Tap the ones involved. Every log is collected either way — naming them tells us where to look, and saves you being asked again.",
|
|
107
109
|
"diagnosticsDevicesSummary": "Checks why a HomeKit accessory is missing, duplicated, or shown as the wrong type.",
|
|
108
110
|
"diagnosticsEndReproduction": "Issue happened: end reproduction",
|
|
109
111
|
"diagnosticsEvidenceReady": "Collection complete.",
|
|
@@ -118,6 +120,8 @@
|
|
|
118
120
|
"diagnosticsIntermittentReproducing": "Collection is waiting for the issue to happen.",
|
|
119
121
|
"diagnosticsIntermittentStartWaiting": "Start waiting",
|
|
120
122
|
"diagnosticsIntermittentWaitingGuidance": "Collection is waiting. Return here and finish when the issue happens.",
|
|
123
|
+
"diagnosticsIssueNeedsArchive": "Available once you have downloaded the file above.",
|
|
124
|
+
"diagnosticsIssueOpensTab": "Opens GitHub in a new tab. You will need to attach the downloaded file there.",
|
|
121
125
|
"diagnosticsLiveAction": "Open the live view, request one snapshot, or try talkback once, then finish when the result is visible.",
|
|
122
126
|
"diagnosticsLiveBefore": "Choose one camera and one action to try. Video and talkback audio are never included.",
|
|
123
127
|
"diagnosticsLiveSummary": "Checks one live view, snapshot, or talkback problem.",
|
|
@@ -137,18 +141,11 @@
|
|
|
137
141
|
"diagnosticsProfileControl": "Control or state mismatch",
|
|
138
142
|
"diagnosticsProfileDashboard": "Dashboard or setup interface",
|
|
139
143
|
"diagnosticsProfileDevices": "Missing or incorrect device",
|
|
140
|
-
"diagnosticsProfileLabel": "Issue profile",
|
|
141
144
|
"diagnosticsProfileLiveMedia": "Live video, snapshot, or talkback",
|
|
142
145
|
"diagnosticsProfileOther": "Other issue",
|
|
143
146
|
"diagnosticsProfileRecording": "HomeKit Secure Video recording",
|
|
144
147
|
"diagnosticsProfileStartup": "Startup or authentication",
|
|
145
|
-
"diagnosticsQuestionControl": "Does a HomeKit control disagree with the actual device state?",
|
|
146
|
-
"diagnosticsQuestionDashboard": "Is the problem in the dashboard, login, or setup screens?",
|
|
147
|
-
"diagnosticsQuestionDevices": "Is an accessory missing, duplicated, or shown as the wrong type in HomeKit?",
|
|
148
|
-
"diagnosticsQuestionLiveMedia": "Is the problem with live video, a snapshot, or talkback?",
|
|
149
|
-
"diagnosticsQuestionRecording": "Is a HomeKit Secure Video recording missing or unplayable?",
|
|
150
148
|
"diagnosticsQuestionReproduceNow": "Can you reproduce the problem now?",
|
|
151
|
-
"diagnosticsQuestionStartup": "Is this a startup or sign-in problem?",
|
|
152
149
|
"diagnosticsReauthorize": "Start a new diagnostics session",
|
|
153
150
|
"diagnosticsRecordingAction": "Trigger one event that should be recorded, wait for the recording to appear, then finish.",
|
|
154
151
|
"diagnosticsRecordingBefore": "Confirm HomeKit Secure Video is enabled and note roughly when the event happens. Recordings are never included.",
|
|
@@ -160,10 +157,17 @@
|
|
|
160
157
|
"diagnosticsStartupAction": "Restart Homebridge or repeat the failed sign-in step, then return here and finish.",
|
|
161
158
|
"diagnosticsStartupBefore": "Start collecting before a restart. Never share a password, captcha answer, or verification code.",
|
|
162
159
|
"diagnosticsStartupSummary": "Checks a Homebridge startup, connection, or sign-in problem.",
|
|
160
|
+
"diagnosticsStaysLocal": "The file is encrypted and stays on this machine. Nothing is uploaded.",
|
|
163
161
|
"diagnosticsSummary": "Choose the problem, then collect what happens while it occurs.",
|
|
162
|
+
"diagnosticsTilesHeading": "What is going wrong?",
|
|
164
163
|
"diagnosticsTitle": "Guided diagnostics",
|
|
165
|
-
"diagnosticsUseProfile": "Use this profile",
|
|
166
164
|
"diagnosticsYes": "Yes",
|
|
165
|
+
"excludedCredentials": "your eufy login and password",
|
|
166
|
+
"excludedInternalData": "raw internal data that was never reviewed",
|
|
167
|
+
"excludedKeys": "encryption keys",
|
|
168
|
+
"excludedMedia": "any camera image, video or audio",
|
|
169
|
+
"excludedSessions": "saved sessions and push registrations",
|
|
170
|
+
"excludedTokens": "access tokens and cookies",
|
|
167
171
|
"firstSetupAcknowledgement": "I have created a dedicated guest account and shared my Eufy home and devices with it.",
|
|
168
172
|
"firstSetupContinue": "Continue",
|
|
169
173
|
"firstSetupEyebrow": "First-time setup",
|
|
@@ -77,22 +77,20 @@
|
|
|
77
77
|
"diagnosticOnly": "Diagnostic uniquement",
|
|
78
78
|
"diagnosticsActionLabel": "À faire",
|
|
79
79
|
"diagnosticsArchiveCoverageGap": "{classes} : les preuves antérieures à {retainedFrom} ont été écartées à la limite de l'archive, donc ces classes ne remontent pas au début de la reproduction que vous avez marquée. Reproduisez la panne sur un intervalle plus court.",
|
|
80
|
-
"
|
|
80
|
+
"diagnosticsArchiveDetail": "Détail technique",
|
|
81
|
+
"diagnosticsArchiveExcluded": "Jamais inclus :",
|
|
81
82
|
"diagnosticsArchiveExpires": "expire le {expiresAt}",
|
|
82
83
|
"diagnosticsArchiveExport": "Télécharger l’archive chiffrée",
|
|
83
84
|
"diagnosticsArchiveFields": "champs :",
|
|
84
85
|
"diagnosticsArchiveMode": "mode :",
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"diagnosticsArchiveReviewIntro": "Examinez les catégories de preuves et les exclusions permanentes avant de créer un téléchargement local chiffré. Rien n’est envoyé.",
|
|
86
|
+
"diagnosticsArchiveReviewConfirm": "J’ai lu le résumé ci-dessus et je veux créer ce fichier.",
|
|
87
|
+
"diagnosticsArchiveReviewIntro": "L’étape suivante crée le fichier. Ci-dessous, ce qu’il ne contient jamais.",
|
|
88
88
|
"diagnosticsArchiveTruncated": "enregistrements les plus récents conservés à la limite de l’archive",
|
|
89
89
|
"diagnosticsAuthorize": "Démarrer la session de diagnostic",
|
|
90
90
|
"diagnosticsAuthorized": "La collecte est prête. Démarrez lorsque vous le souhaitez.",
|
|
91
|
-
"diagnosticsBackToQuestions": "Retour aux questions",
|
|
92
91
|
"diagnosticsBeforeLabel": "Avant de commencer",
|
|
93
92
|
"diagnosticsBestMatch": "Meilleur profil",
|
|
94
93
|
"diagnosticsChangeAnswers": "Modifier les réponses",
|
|
95
|
-
"diagnosticsChooseDirectly": "Choisir directement un profil",
|
|
96
94
|
"diagnosticsCollectingFinishHere": "Diagnostics de débogage — la collecte est active. Terminez ici.",
|
|
97
95
|
"diagnosticsComplete": "Collecte terminée.",
|
|
98
96
|
"diagnosticsContinue": "Continuer",
|
|
@@ -104,6 +102,10 @@
|
|
|
104
102
|
"diagnosticsDashboardSummary": "Suit un problème dans les écrans du tableau de bord, de connexion ou de configuration.",
|
|
105
103
|
"diagnosticsDevicesAction": "Actualisez les appareils ou rouvrez la tuile concernée, puis terminez lorsque le problème apparaît.",
|
|
106
104
|
"diagnosticsDevicesBefore": "Notez quel accessoire est absent, dupliqué ou affiché avec le mauvais type.",
|
|
105
|
+
"diagnosticsDevicesChosen": "Continuer",
|
|
106
|
+
"diagnosticsDevicesEvery": "Tout sélectionner",
|
|
107
|
+
"diagnosticsDevicesHeading": "Quels appareils sont concernés ?",
|
|
108
|
+
"diagnosticsDevicesHint": "Touchez ceux qui sont concernés. Tous les journaux sont collectés dans les deux cas — les nommer indique où regarder, et évite qu’on vous repose la question.",
|
|
107
109
|
"diagnosticsDevicesSummary": "Vérifie pourquoi un accessoire HomeKit est absent, dupliqué ou affiché avec le mauvais type.",
|
|
108
110
|
"diagnosticsEndReproduction": "Le problème est survenu : terminer la reproduction",
|
|
109
111
|
"diagnosticsEvidenceReady": "Collecte terminée.",
|
|
@@ -118,6 +120,8 @@
|
|
|
118
120
|
"diagnosticsIntermittentReproducing": "La collecte attend que le problème survienne.",
|
|
119
121
|
"diagnosticsIntermittentStartWaiting": "Commencer l’attente",
|
|
120
122
|
"diagnosticsIntermittentWaitingGuidance": "La collecte est en attente. Revenez ici et terminez-la lorsque le problème survient.",
|
|
123
|
+
"diagnosticsIssueNeedsArchive": "Disponible une fois le fichier ci-dessus téléchargé.",
|
|
124
|
+
"diagnosticsIssueOpensTab": "Ouvre GitHub dans un nouvel onglet. Il faudra y joindre le fichier téléchargé.",
|
|
121
125
|
"diagnosticsLiveAction": "Ouvrez la vue en direct, demandez un instantané ou essayez l’interphone une fois, puis terminez lorsque le résultat est visible.",
|
|
122
126
|
"diagnosticsLiveBefore": "Choisissez une caméra et une action à essayer. La vidéo et l’audio de l’interphone ne sont jamais inclus.",
|
|
123
127
|
"diagnosticsLiveSummary": "Vérifie un problème de vue en direct, d’instantané ou d’interphone.",
|
|
@@ -137,18 +141,11 @@
|
|
|
137
141
|
"diagnosticsProfileControl": "Décalage de commande ou d’état",
|
|
138
142
|
"diagnosticsProfileDashboard": "Tableau de bord ou interface de configuration",
|
|
139
143
|
"diagnosticsProfileDevices": "Appareil manquant ou incorrect",
|
|
140
|
-
"diagnosticsProfileLabel": "Profil du problème",
|
|
141
144
|
"diagnosticsProfileLiveMedia": "Vidéo en direct, instantané ou interphone",
|
|
142
145
|
"diagnosticsProfileOther": "Autre problème",
|
|
143
146
|
"diagnosticsProfileRecording": "Enregistrement vidéo sécurisé HomeKit",
|
|
144
147
|
"diagnosticsProfileStartup": "Démarrage ou authentification",
|
|
145
|
-
"diagnosticsQuestionControl": "Une commande HomeKit diffère-t-elle de l’état réel de l’appareil ?",
|
|
146
|
-
"diagnosticsQuestionDashboard": "Le problème se situe-t-il dans les écrans du tableau de bord, de connexion ou de configuration ?",
|
|
147
|
-
"diagnosticsQuestionDevices": "Un accessoire est-il absent, dupliqué ou affiché avec le mauvais type dans HomeKit ?",
|
|
148
|
-
"diagnosticsQuestionLiveMedia": "Le problème concerne-t-il la vidéo en direct, un instantané ou l’interphone ?",
|
|
149
|
-
"diagnosticsQuestionRecording": "Un enregistrement vidéo sécurisé HomeKit est-il absent ou illisible ?",
|
|
150
148
|
"diagnosticsQuestionReproduceNow": "Pouvez-vous reproduire le problème maintenant ?",
|
|
151
|
-
"diagnosticsQuestionStartup": "S’agit-il d’un problème de démarrage ou de connexion ?",
|
|
152
149
|
"diagnosticsReauthorize": "Démarrer une nouvelle session de diagnostic",
|
|
153
150
|
"diagnosticsRecordingAction": "Déclenchez un événement qui devrait être enregistré, attendez que l’enregistrement apparaisse, puis terminez.",
|
|
154
151
|
"diagnosticsRecordingBefore": "Vérifiez que la vidéo sécurisée HomeKit est activée et notez approximativement quand l’événement survient. Les enregistrements ne sont jamais inclus.",
|
|
@@ -160,10 +157,17 @@
|
|
|
160
157
|
"diagnosticsStartupAction": "Redémarrez Homebridge ou répétez l’étape de connexion en échec, puis revenez ici et terminez.",
|
|
161
158
|
"diagnosticsStartupBefore": "Commencez la collecte avant un redémarrage. Ne partagez jamais de mot de passe, de réponse captcha ou de code de vérification.",
|
|
162
159
|
"diagnosticsStartupSummary": "Vérifie un problème de démarrage, de connexion ou d’authentification de Homebridge.",
|
|
160
|
+
"diagnosticsStaysLocal": "Le fichier est chiffré et reste sur cette machine. Rien n’est envoyé.",
|
|
163
161
|
"diagnosticsSummary": "Choisissez le problème, puis collectez ce qui se passe lorsqu’il survient.",
|
|
162
|
+
"diagnosticsTilesHeading": "Qu’est-ce qui ne va pas ?",
|
|
164
163
|
"diagnosticsTitle": "Diagnostics guidés",
|
|
165
|
-
"diagnosticsUseProfile": "Utiliser ce profil",
|
|
166
164
|
"diagnosticsYes": "Oui",
|
|
165
|
+
"excludedCredentials": "vos identifiants eufy et votre mot de passe",
|
|
166
|
+
"excludedInternalData": "les données internes brutes non relues",
|
|
167
|
+
"excludedKeys": "les clés de chiffrement",
|
|
168
|
+
"excludedMedia": "toute image, vidéo ou audio de caméra",
|
|
169
|
+
"excludedSessions": "les sessions enregistrées et les inscriptions push",
|
|
170
|
+
"excludedTokens": "les jetons d’accès et les cookies",
|
|
167
171
|
"firstSetupAcknowledgement": "J'ai créé un compte invité dédié et partagé mon domicile et mes appareils Eufy avec ce compte.",
|
|
168
172
|
"firstSetupContinue": "Continuer",
|
|
169
173
|
"firstSetupEyebrow": "Première configuration",
|
|
@@ -188,44 +188,34 @@
|
|
|
188
188
|
<div class="diagnostics-stage">
|
|
189
189
|
<div class="diagnostics-wizard diagnostics-surface" data-diagnostics-wizard aria-live="polite">
|
|
190
190
|
<div class="diagnostics-question" data-diagnostics-question>
|
|
191
|
-
<strong
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
></button>
|
|
199
|
-
<button type="button" data-diagnostics-
|
|
191
|
+
<strong
|
|
192
|
+
id="diagnostics-question-heading"
|
|
193
|
+
tabindex="-1"
|
|
194
|
+
data-diagnostics-question-text
|
|
195
|
+
data-i18n="diagnosticsTilesHeading"
|
|
196
|
+
></strong>
|
|
197
|
+
<div class="diagnostics-tiles" role="group" aria-labelledby="diagnostics-question-heading">
|
|
198
|
+
<button type="button" data-diagnostics-tile="startup-authentication" data-i18n="diagnosticsProfileStartup"></button>
|
|
199
|
+
<button type="button" data-diagnostics-tile="device-representation" data-i18n="diagnosticsProfileDevices"></button>
|
|
200
|
+
<button type="button" data-diagnostics-tile="control-state" data-i18n="diagnosticsProfileControl"></button>
|
|
201
|
+
<button type="button" data-diagnostics-tile="live-media" data-i18n="diagnosticsProfileLiveMedia"></button>
|
|
202
|
+
<button type="button" data-diagnostics-tile="hksv-recording" data-i18n="diagnosticsProfileRecording"></button>
|
|
203
|
+
<button type="button" data-diagnostics-tile="dashboard-ui" data-i18n="diagnosticsProfileDashboard"></button>
|
|
204
|
+
<button type="button" data-diagnostics-tile="other" data-i18n="diagnosticsProfileOther"></button>
|
|
200
205
|
</div>
|
|
201
|
-
<button
|
|
202
|
-
type="button"
|
|
203
|
-
class="diagnostics-quiet-action"
|
|
204
|
-
data-diagnostics-direct
|
|
205
|
-
data-i18n="diagnosticsChooseDirectly"
|
|
206
|
-
></button>
|
|
207
206
|
</div>
|
|
208
|
-
<div class="diagnostics-
|
|
209
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
<option value="startup-authentication" data-i18n="diagnosticsProfileStartup"></option>
|
|
213
|
-
<option value="device-representation" data-i18n="diagnosticsProfileDevices"></option>
|
|
214
|
-
<option value="control-state" data-i18n="diagnosticsProfileControl"></option>
|
|
215
|
-
<option value="live-media" data-i18n="diagnosticsProfileLiveMedia"></option>
|
|
216
|
-
<option value="hksv-recording" data-i18n="diagnosticsProfileRecording"></option>
|
|
217
|
-
<option value="dashboard-ui" data-i18n="diagnosticsProfileDashboard"></option>
|
|
218
|
-
<option value="other" data-i18n="diagnosticsProfileOther"></option>
|
|
219
|
-
</select>
|
|
220
|
-
</label>
|
|
207
|
+
<div class="diagnostics-devices" data-diagnostics-devices hidden>
|
|
208
|
+
<strong id="diagnostics-devices-heading" tabindex="-1" data-i18n="diagnosticsDevicesHeading"></strong>
|
|
209
|
+
<p data-i18n="diagnosticsDevicesHint"></p>
|
|
210
|
+
<div class="diagnostics-device-list" data-diagnostics-device-list role="group" aria-labelledby="diagnostics-devices-heading"></div>
|
|
221
211
|
<div class="diagnostics-choice-actions">
|
|
222
212
|
<button
|
|
223
213
|
type="button"
|
|
224
214
|
class="diagnostics-secondary-action"
|
|
225
|
-
data-diagnostics-
|
|
226
|
-
data-i18n="
|
|
215
|
+
data-diagnostics-devices-every
|
|
216
|
+
data-i18n="diagnosticsDevicesEvery"
|
|
227
217
|
></button>
|
|
228
|
-
<button type="button" data-diagnostics-
|
|
218
|
+
<button type="button" data-diagnostics-devices-chosen disabled data-i18n="diagnosticsDevicesChosen"></button>
|
|
229
219
|
</div>
|
|
230
220
|
</div>
|
|
231
221
|
<div class="diagnostics-frequency" data-diagnostics-frequency hidden>
|
|
@@ -288,20 +278,22 @@
|
|
|
288
278
|
<div class="diagnostics-result diagnostics-surface" data-diagnostics-result hidden>
|
|
289
279
|
<strong tabindex="-1" data-diagnostics-result-heading data-i18n="diagnosticsEvidenceReady"></strong>
|
|
290
280
|
<p data-i18n="diagnosticsArchiveReviewIntro"></p>
|
|
291
|
-
<button type="button" data-diagnostics-review data-i18n="diagnosticsArchiveReview"></button>
|
|
292
281
|
<div class="diagnostics-manifest" data-diagnostics-manifest hidden></div>
|
|
293
282
|
<label class="diagnostics-review-confirm" data-diagnostics-review-confirm-label hidden>
|
|
294
283
|
<input type="checkbox" data-diagnostics-review-confirm />
|
|
295
284
|
<span data-i18n="diagnosticsArchiveReviewConfirm"></span>
|
|
296
285
|
</label>
|
|
286
|
+
<p class="diagnostics-local-note" data-i18n="diagnosticsStaysLocal"></p>
|
|
297
287
|
<button type="button" data-diagnostics-export disabled hidden data-i18n="diagnosticsArchiveExport"></button>
|
|
298
288
|
<a
|
|
299
289
|
data-diagnostics-issue
|
|
300
290
|
hidden
|
|
301
291
|
target="_blank"
|
|
302
292
|
rel="noopener noreferrer"
|
|
293
|
+
aria-describedby="diagnostics-issue-hint"
|
|
303
294
|
data-i18n="diagnosticsOpenIssue"
|
|
304
295
|
></a>
|
|
296
|
+
<p class="diagnostics-step-hint" id="diagnostics-issue-hint" data-diagnostics-issue-hint></p>
|
|
305
297
|
<button
|
|
306
298
|
type="button"
|
|
307
299
|
class="diagnostics-secondary-action"
|