feat(apk): URL du depot affichee en forme courte + sync password quand le coffre vient de la synchro

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-17 17:38:47 +01:00
parent a9618e9395
commit 826b0809aa
2 changed files with 29 additions and 10 deletions
+15 -5
View File
@@ -1622,7 +1622,7 @@ document.addEventListener('click', function (ev) {
// LES REGLAGES. Ils lisent et ecrivent les MEMES champs que l'accueil - la
// page n'en garde qu'une copie, Delphi reste la seule source.
function openSettings() {
document.getElementById('sUrl').value = elUrl.value;
document.getElementById('sUrl').value = shortRepoUrl(elUrl.value);
document.getElementById('sTok').value = elTok.value;
document.getElementById('sPwd').value = elPwd.value;
document.getElementById('sPinNew').value = '';
@@ -1639,6 +1639,13 @@ function openSettings() {
// https://git.example.com/OWNER/REPO (ou .../src/branch/main/FICHIER) devient
// l'URL de l'API des contenus. Une URL d'API ou d'endpoint PHP passe telle quelle,
// et une forme non reconnue aussi - Sync dira alors ce qui ne va pas.
// L'inverse, pour l'affichage : l'URL d'API se relit comme l'adresse du depot.
function shortRepoUrl(u) {
var m = /^(https?:\/\/[^\/]+)\/api\/v1\/repos\/([^\/]+)\/([^\/]+)\/contents\/(.+)$/i.exec(u || '');
if (!m) return u;
return m[1] + '/' + m[2] + '/' + m[3] +
(m[4] === 'vault-sync.json' ? '' : '/src/branch/main/' + m[4]);
}
function normalizeRepoUrl(u) {
u = u.replace(/\s+/g, '');
if (!u || /\/api\/v1\/repos\//i.test(u) || /\.php(\?|$)/i.test(u)) return u;
@@ -1648,8 +1655,8 @@ function normalizeRepoUrl(u) {
}
document.getElementById('sSave').addEventListener('click', function () {
var sUrl = document.getElementById('sUrl');
sUrl.value = normalizeRepoUrl(sUrl.value);
elUrl.value = sUrl.value;
elUrl.value = normalizeRepoUrl(sUrl.value);
sUrl.value = shortRepoUrl(elUrl.value);
elTok.value = document.getElementById('sTok').value.trim();
elPwd.value = document.getElementById('sPwd').value;
pushConfig();
@@ -1687,6 +1694,9 @@ document.getElementById('sLog').addEventListener('click', function () {
// verrouillage d'ecran, c'est retirer le code : il faut donc le code courant.
var unlockMode = 'none', canDeviceLock = false, hasContainer = false;
function syncUnlockUi() {
var pw = hasContainer ? 'vault password' : 'sync password';
document.getElementById('sModePwd').dataset.label =
pw.charAt(0).toUpperCase() + pw.slice(1) + ' (type it above)';
['device', 'code', 'password'].forEach(function (m) {
var id = { device: 'sModeDevice', code: 'sModeCode', password: 'sModePwd' }[m];
var b = document.getElementById(id), on = unlockMode === m;
@@ -1698,7 +1708,7 @@ function syncUnlockUi() {
document.getElementById('sModeNote').textContent =
{ device: 'Now: screen lock. Changing the screen lock or adding a fingerprint never deletes the vault.',
code: 'Now: app code. To go back to the screen lock, type the current code above.',
password: 'Now: vault password. To go back to the screen lock, type it above.',
password: 'Now: ' + pw + '. To go back to the screen lock, type it above.',
none: 'Now: no protection - anyone holding the phone unlocked can open the vault.' }[unlockMode]
+ (canDeviceLock ? '' : ' This phone has no screen lock.');
document.getElementById('btnUsePwd').hidden =
@@ -1716,7 +1726,7 @@ document.getElementById('sModeCode').addEventListener('click', function () {
});
document.getElementById('sModePwd').addEventListener('click', function () {
var v = modeField();
if (!v) { toast('Type the vault password above first'); return; }
if (!v) { toast('Type the ' + (hasContainer ? 'vault' : 'sync') + ' password above first'); return; }
send('pinset?pw=1&c=' + encodeURIComponent(v));
});
document.getElementById('sModeDevice').addEventListener('click', function () {