feat(sync): le QR porte un lien pmserver://sync ouvert directement par l'app

Le scanner du telephone envoyait le texte a une recherche web (Google,
Chrome) : le jeton serait parti a un appui pres. Le lien a schema propre
n'a qu'une application pour l'ouvrir. Rien n'est enregistre avant Save.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-17 18:29:37 +01:00
parent 9bee179d1b
commit 780eecc11b
4 changed files with 79 additions and 32 deletions
+6 -8
View File
@@ -1336,8 +1336,10 @@ begin
// ne transite pas en clair par le moteur de rendu (meme raison que
// prefs/has). Le mot de passe de synchro n'y est JAMAIS : un QR se
// photographie par-dessus l'epaule.
// JSON nu, sans prefixe "pmsync:" : un prefixe a deux-points se lit comme un
// lien, et l'appareil photo proposait "Ouvrir avec" au lieu de copier.
// UN LIEN pmserver://sync?u=&t= ET NON DU TEXTE. Le scanner du telephone
// envoie tout texte a une recherche web (Google, Chrome) - le jeton serait
// parti chez Google a un appui pres. Un lien a schema propre n'a qu'une
// application pour l'ouvrir : la notre.
else if ACmd = 'sync/qr' then
begin
var LQrUrl := PM.UserPrefs.GetPref('syncUrl');
@@ -1346,16 +1348,13 @@ begin
var LSize := 0;
if (LQrUrl <> '') and (LQrTok <> '') then
begin
var LJson := TJSONObject.Create;
var LQr := TDelphiZXingQRCode.Create;
var LSb := TStringBuilder.Create;
try
LJson.AddPair('pmsync', TJSONNumber.Create(1));
LJson.AddPair('u', LQrUrl);
LJson.AddPair('t', LQrTok);
LQr.Encoding := qrUTF8NoBOM;
LQr.QuietZone := 4;
LQr.Data := LJson.ToJSON;
LQr.Data := 'pmserver://sync?u=' + TNetEncoding.URL.Encode(LQrUrl) +
'&t=' + TNetEncoding.URL.Encode(LQrTok);
LSize := LQr.Rows;
for var R := 0 to LQr.Rows - 1 do
for var C := 0 to LQr.Columns - 1 do
@@ -1364,7 +1363,6 @@ begin
finally
LSb.Free;
LQr.Free;
LJson.Free;
end;
end;
if LSize > 0 then