fix(sync): QR plus court (adresse du depot, sans sur-echappement) + TRY_HARDER au decodage

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-17 18:48:04 +01:00
parent dd9fd62dcb
commit 23967ddfca
2 changed files with 64 additions and 7 deletions
+17 -2
View File
@@ -1353,8 +1353,23 @@ begin
try
LQr.Encoding := qrUTF8NoBOM;
LQr.QuietZone := 4;
LQr.Data := 'pmserver://sync?u=' + TNetEncoding.URL.Encode(LQrUrl) +
'&t=' + TNetEncoding.URL.Encode(LQrTok);
// LE PLUS COURT POSSIBLE : moins de caracteres = modules plus gros,
// lisibles par une camera. L'adresse du depot plutot que l'URL d'API
// (le telephone la rallonge a l'enregistrement), et seuls les
// caracteres qui casseraient la requete sont echappes - TNetEncoding
// changeait chaque ":" et "/" en trois caracteres.
var LShort := LQrUrl;
var LApi := Pos('/api/v1/repos/', LShort);
if (LApi > 0) and EndsText('/contents/vault-sync.json', LShort) then
LShort := Copy(LShort, 1, LApi) +
Copy(LShort, LApi + Length('/api/v1/repos/'),
Length(LShort) - LApi - Length('/api/v1/repos/') - Length('/contents/vault-sync.json') + 1);
LShort := StringReplace(LShort, '%', '%25', [rfReplaceAll]);
LShort := StringReplace(LShort, '&', '%26', [rfReplaceAll]);
LShort := StringReplace(LShort, '#', '%23', [rfReplaceAll]);
LShort := StringReplace(LShort, '+', '%2B', [rfReplaceAll]);
LShort := StringReplace(LShort, ' ', '%20', [rfReplaceAll]);
LQr.Data := 'pmserver://sync?u=' + LShort + '&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