fix(android): Sync ouvre puis synchronise, et l'accueil ne demande plus le nouveau code
Le garde pose juste avant fermait la seule porte : le bouton Sync ne vit que sur l'accueil, et une fois le coffre ouvert on est sur la liste, ou il n'existe pas. Synchroniser devenait impossible des qu'un code etait pose. Sync ouvre donc le coffre - ce qui verifie le code, seul LoadVault le peut - et OpenLocalNow reprend la synchronisation ou elle s'est arretee. Le drapeau est consomme des sa lecture, pour qu'un code faux ne laisse pas une synchronisation en embuscade. Le champ "new unlock code" quitte l'accueil : les reglages posent et changent le code, il y faisait doublon sur l'ecran ou l'on veut seulement ouvrir. Il reste dans la page, cache - c'est lui que "Set this code" remplit avant pushConfig. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -409,8 +409,12 @@
|
|||||||
regle, toute ecriture du cache rescellait sous ce qui trainait dans
|
regle, toute ecriture du cache rescellait sous ce qui trainait dans
|
||||||
le champ - une synchronisation, qui ne demande pourtant aucun code,
|
le champ - une synchronisation, qui ne demande pourtant aucun code,
|
||||||
suffisait a le changer sans qu'un mot le dise.
|
suffisait a le changer sans qu'un mot le dise.
|
||||||
Cache tant qu'aucun code n'est pose : on n'en change pas un qui
|
|
||||||
n'existe pas, on le pose avec le champ du dessus. -->
|
PLUS JAMAIS MONTRE. Les reglages posent et changent le code, et ce
|
||||||
|
champ y faisait doublon sur l'ecran ou l'on veut seulement ouvrir.
|
||||||
|
Il RESTE dans la page, cache : c'est lui que "Set this code" remplit
|
||||||
|
avant pushConfig, donc il porte toujours la valeur - il ne la
|
||||||
|
demande plus. -->
|
||||||
<div class="in-wrap" id="pin2wrap" hidden>
|
<div class="in-wrap" id="pin2wrap" hidden>
|
||||||
<input class="field-in" id="pin2" placeholder="new unlock code"
|
<input class="field-in" id="pin2" placeholder="new unlock code"
|
||||||
type="password" inputmode="numeric" autocomplete="off">
|
type="password" inputmode="numeric" autocomplete="off">
|
||||||
@@ -1630,7 +1634,8 @@ var PM = {
|
|||||||
setPinNeeded: function (on) {
|
setPinNeeded: function (on) {
|
||||||
document.getElementById('pin').placeholder =
|
document.getElementById('pin').placeholder =
|
||||||
on ? 'unlock code' : 'set an unlock code (optional)';
|
on ? 'unlock code' : 'set an unlock code (optional)';
|
||||||
document.getElementById('pin2wrap').hidden = !on;
|
// pin2wrap n'est plus deplie : le champ du nouveau code vit dans les
|
||||||
|
// reglages, celui-ci n'en est que le porteur.
|
||||||
},
|
},
|
||||||
/// Le code vient d'etre change : le champ du nouveau n'a plus rien a dire,
|
/// Le code vient d'etre change : le champ du nouveau n'a plus rien a dire,
|
||||||
/// et le laisser rempli le reproposerait a chaque ouverture.
|
/// et le laisser rempli le reproposerait a chaque ouverture.
|
||||||
|
|||||||
+30
-2
@@ -160,6 +160,11 @@ type
|
|||||||
FHistory: TArray<string>;
|
FHistory: TArray<string>;
|
||||||
/// Des modifications sont rangees ici sans avoir atteint le depot.
|
/// Des modifications sont rangees ici sans avoir atteint le depot.
|
||||||
FPending: Boolean;
|
FPending: Boolean;
|
||||||
|
/// Le geste etait "synchroniser", et l'ouverture n'a servi qu'a verifier le
|
||||||
|
/// code de deverrouillage. Remis a faux des sa lecture : sans cela une
|
||||||
|
/// ouverture ordinaire, plus tard, declencherait une synchronisation que
|
||||||
|
/// personne n'a demandee.
|
||||||
|
FSyncAfterOpen: Boolean;
|
||||||
/// Le depot porte quelque chose que nous n'avons pas.
|
/// Le depot porte quelque chose que nous n'avons pas.
|
||||||
FRemoteAhead: Boolean;
|
FRemoteAhead: Boolean;
|
||||||
/// Ticks du minuteur d'inactivite depuis la derniere verification du depot.
|
/// Ticks du minuteur d'inactivite depuis la derniere verification du depot.
|
||||||
@@ -1910,7 +1915,12 @@ procedure TForm8.OpenLocalNow;
|
|||||||
var
|
var
|
||||||
LPlain, LETag, LPwd: string;
|
LPlain, LETag, LPwd: string;
|
||||||
LSw: TStopwatch;
|
LSw: TStopwatch;
|
||||||
|
LChainSync: Boolean;
|
||||||
begin
|
begin
|
||||||
|
// LU ET CONSOMME ICI, une fois pour toutes : un drapeau qui survivrait a un
|
||||||
|
// code faux ferait synchroniser la prochaine ouverture, sans rapport.
|
||||||
|
LChainSync := FSyncAfterOpen;
|
||||||
|
FSyncAfterOpen := False;
|
||||||
// CHRONOMETRE EN TROIS TEMPS. Une ouverture depuis le cache doit etre
|
// CHRONOMETRE EN TROIS TEMPS. Une ouverture depuis le cache doit etre
|
||||||
// instantanee : c'est toute la raison d'etre de PMA.Store. Quand elle ne
|
// instantanee : c'est toute la raison d'etre de PMA.Store. Quand elle ne
|
||||||
// l'est pas, il faut savoir LEQUEL des trois coute - la lecture du fichier
|
// l'est pas, il faut savoir LEQUEL des trois coute - la lecture du fichier
|
||||||
@@ -2016,7 +2026,12 @@ begin
|
|||||||
// Afficher d'abord, synchroniser ensuite : le coffre est a l'ecran, le
|
// Afficher d'abord, synchroniser ensuite : le coffre est a l'ecran, le
|
||||||
// reseau se debrouille derriere. Sans mot de passe range, on ne peut
|
// reseau se debrouille derriere. Sans mot de passe range, on ne peut
|
||||||
// rien ouvrir de nouveau - inutile d'aller voir.
|
// rien ouvrir de nouveau - inutile d'aller voir.
|
||||||
if FSyncPwd = '' then
|
// Le geste de depart etait "synchroniser" : on enchaine sur la vraie
|
||||||
|
// synchronisation - qui publie et reconcilie - et non sur le simple
|
||||||
|
// rafraichissement de fond, qui ne fait que tirer.
|
||||||
|
if LChainSync then
|
||||||
|
TThread.ForceQueue(nil, procedure begin DoSync(nil); end)
|
||||||
|
else if FSyncPwd = '' then
|
||||||
Log(' no stored sync password - no background refresh')
|
Log(' no stored sync password - no background refresh')
|
||||||
else if (FLastRefresh > 0) and
|
else if (FLastRefresh > 0) and
|
||||||
(MinutesBetween(Now, FLastRefresh) < REFRESH_MIN_MINUTES) then
|
(MinutesBetween(Now, FLastRefresh) < REFRESH_MIN_MINUTES) then
|
||||||
@@ -2163,10 +2178,23 @@ begin
|
|||||||
// verification recopiee ici.
|
// verification recopiee ici.
|
||||||
if VaultNeedsPin and (FVault.Count = 0) then
|
if VaultNeedsPin and (FVault.Count = 0) then
|
||||||
begin
|
begin
|
||||||
Status('Open the vault first');
|
// NE PAS S'ARRETER LA. Refuser tout court fermait la seule porte : le
|
||||||
|
// bouton Sync ne vit que sur l'accueil, et une fois le coffre ouvert on est
|
||||||
|
// sur la liste, ou il n'existe pas. Synchroniser devenait impossible des
|
||||||
|
// qu'un code etait pose.
|
||||||
|
//
|
||||||
|
// On ouvre donc - ce qui verifie le code, seul LoadVault le peut - et
|
||||||
|
// OpenLocalNow reprend la synchronisation la ou elle s'est arretee.
|
||||||
|
if FPin = '' then
|
||||||
|
begin
|
||||||
|
Status('Unlock code required');
|
||||||
WebCall('PM.focusPin()');
|
WebCall('PM.focusPin()');
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
FSyncAfterOpen := True;
|
||||||
|
OpenVault(False);
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
// UN COFFRE NE ICI A QUI L'ON DONNE UN DEPOT : il faut fondre les deux, pas
|
// UN COFFRE NE ICI A QUI L'ON DONNE UN DEPOT : il faut fondre les deux, pas
|
||||||
|
|||||||
Reference in New Issue
Block a user