diff --git a/mainApk.pas b/mainApk.pas index 1885f10..9ee6fb5 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -586,6 +586,7 @@ begin LClient := TSyncClient.Create(FUrl, FToken); LDone := False; LErr := ''; + try try for LAttempt := 1 to 3 do begin @@ -652,17 +653,32 @@ begin end else WebCall('PM.toast(' + JsArg('Not saved - ' + LErr) + ')'); - // LE DETAIL DOIT REVENIR, dans les deux cas. AdoptVault reconstruit - // la LISTE ; la ligne en cours d'edition restait telle quelle, donc - // le champ de saisie demeurait a l'ecran et rien ne disait si - // l'enregistrement avait abouti. On la redessine depuis le coffre : - // apres un succes elle porte la nouvelle valeur, apres un echec - // l'ancienne - ce qui se lit sans commentaire. - ReopenEntryByUuid(LUuid); end); + except + // FILET. Le rechiffrement et le PUT sont hors du try qui + // couvre le dechiffrement : une exception y sortait sans un mot, + // et l'echec devenait indiscernable d'une lenteur. + on E: Exception do + begin + LErr := E.ClassName + ': ' + E.Message; + Log('save FAILED: ' + LErr); + TThread.Queue(nil, procedure + begin WebCall('PM.toast(' + JsArg('Not saved - ' + LErr) + ')'); end); + end; + end; finally LClient.Free; - TThread.Queue(nil, procedure begin SetBusy(False); end); + // LA REMISE EN ETAT EST ICI, PAS DANS LE CHEMIN NOMINAL. Elle etait + // apres la boucle : une exception au rechiffrement ou au PUT la + // sautait, et la ligne restait sur « Saving... » pour toujours - sans + // message, puisque le message aussi etait dans la partie sautee. + // Quoi qu'il arrive au-dessus, l'ecran redevient utilisable. + TThread.Queue(nil, + procedure + begin + SetBusy(False); + ReopenEntryByUuid(LUuid); + end); end; end).Start; end;