Synchronisation et appareils

Vos saisies sont toujours enregistrées sur cet appareil. La synchronisation facultative partage vos journées et règles avec vos appareils autorisés, sous forme chiffrée.

{#if error}{/if} {#if message}

{message}

{/if} {#if busy}

Opération en cours…

{/if} {#if !syncState.linked}

Créer mon coffre

Le serveur ne peut pas lire votre historique. Sans appareil autorisé ni document de secours, l’accès sera perdu.

Lier à un appareil existant

Sur l’appareil déjà lié, ouvrez cet écran puis « Ajouter un appareil ». Saisissez son code ici ou scannez son QR code avec l’appareil photo de votre téléphone.

Les journées déjà présentes ici seront conservées et fusionnées. Les dates communes et les règles différentes pourront nécessiter un choix.

{#if joining}

Comparez toute cette empreinte avec celle affichée sur l’appareil d’origine, puis confirmez sur celui-ci :

{joining.fingerprint}

En attente de confirmation sur l’autre appareil…

{/if}

Récupérer mon coffre

Utilisez votre document de secours. Il donne accès à tout votre coffre ; gardez-le à l’abri.

Les données présentes ici seront conservées. La récupération retire les anciens appareils et renouvelle les clés ; vous pourrez les associer à nouveau.

{:else}

État de la synchronisation

{syncState.revoked ? 'Cet appareil a été révoqué.' : syncState.enabled ? syncState.busy ? 'Synchronisation en cours…' : syncState.pending ? 'Enregistré sur cet appareil · en attente d’envoi' : 'Modifications envoyées' : 'Synchronisation en pause'}

Dernière synchronisation : {when(syncState.lastSync)}.

{#if syncState.error}

{syncState.error} Vos données restent enregistrées ici.

{/if} {#if !syncState.revoked} {/if}

Appareils autorisés

{#each syncState.devices as device}
{device.name}{device.id === syncState.deviceId ? ' (cet appareil)' : ''} {device.revoked ? 'Révoqué' : device.id === syncState.owner ? 'Responsable des automatismes' : 'Saisie manuelle et consultation'} Dernier contact : {when(device.seen)} {#if !device.revoked && device.id !== syncState.deviceId}{/if}
{/each} {#if syncState.owner !== syncState.deviceId && !syncState.revoked}{/if}

Les automatismes nécessitent que l’appareil responsable puisse exécuter l’application. Un ancien responsable hors ligne apprend le transfert à sa reconnexion ; ses changements éventuels sont conservés.

{#if invite}

Invitation valable jusqu’à {new Date(invite.expires).toLocaleTimeString('fr-FR')}. Gardez cet écran visible ; le quitter annule l’invitation.

{invite.code.slice(0, 4)} {invite.code.slice(4)} {#if qr}QR code d’association à scanner sur le nouvel appareil{/if} {#if applicant}

Une demande est arrivée. Comparez l’empreinte complète sur les deux écrans :

{comparison} {:else}

En attente d’une demande sur cet écran…

{/if} {/if}

Versions à départager ({syncState.conflicts.length})

{#if !syncState.conflicts.length}

Aucun conflit.

{/if} {#each syncState.conflicts as conflict}

{conflict.key.startsWith('day:') ? `Journée du ${conflict.key.slice(4)}` : settingLabels[conflict.key.slice(8)]}

{conflict.reason} Les automatismes sont suspendus sur cet appareil pendant la résolution.

{#each conflict.versions as version}
{deviceName(version.device)} · {when(version.modifiedAt)} {#if version.value === null}

Suppression

{:else if conflict.key.startsWith('day:')}

{version.value.day.status === 'active' ? 'En cours' : 'Terminée'}

    {#each version.value.entries as entry}
  • {new Date(entry.startTs).toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})}–{entry.endTs === null ? 'en cours' : new Date(entry.endTs).toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})} · {entry.task} {entry.client ?? ''}
  • {/each}
{:else}

{settingValue(conflict.key, version.value)}

{/if}
{/each}

Les autres versions restent dans l’historique chiffré. Vous pouvez ensuite corriger la journée dans son écran habituel.

{/each}

Secours et déconnexion

Le document de secours n’est pas conservé sur les appareils liés. Vous pouvez en préparer un nouveau ; après validation, le précédent ne permettra plus de récupérer le coffre.

{/if} {#if recovery}

Conserver le document de secours

Enregistrez-le ailleurs que sur cet appareil, par exemple dans un gestionnaire de mots de passe. Toute personne qui le possède peut accéder au coffre.

Afficher le document pour le copier
{/if} {#if action}
{#if action === 'revoke'}

Retirer {deviceName(target)} ?

Son accès sera coupé et les clés renouvelées. Ses copies déjà téléchargées ne peuvent pas être effacées à distance. S’il possède le document de secours, renouvelez-le aussi.

{:else if action === 'disconnect'}

Déconnecter cet appareil ?

Les changements non envoyés ne seront plus synchronisés. Les autres appareils et le coffre restent accessibles.

{:else}

Supprimer le coffre en ligne ?

Les données en ligne et les accès des appareils seront supprimés. Les copies déjà téléchargées restent sur les appareils. Les sauvegardes de l’hébergeur suivent sa durée de conservation.

{/if}
{/if}