mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-11 00:02:13 +00:00
Premières photos : compter chaque souvenir par son chemin d'origine
Les correspondances gardent le chemin cité par le logiciel (sourcePath) : plusieurs fichiers d'une même personne ne se confondent plus, le décompte des fichiers ajoutés et restants est juste, et le pied du panneau parle de fichiers quand des documents ont été ajoutés. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3097768af5
commit
2fccf287b3
4 files changed
+20
-4
No files matched your search
@@ -33,7 +33,8 @@ function folderOf(filePath) {
|
||||
|
||||
// Après un import GEDCOM (ou depuis les paramètres) : retrouver les photos que le logiciel connaissait,
|
||||
// et demander les premiers visages un par un.
|
||||
const refKey = (ref) => `${ref.personId}|${ref.file}`
|
||||
// Une référence et sa correspondance retrouvée partagent le chemin cité par le logiciel
|
||||
const refKey = (ref) => `${ref.personId}|${ref.sourcePath ?? ref.file}`
|
||||
|
||||
export default function PhotoStartPanel({
|
||||
visible,
|
||||
@@ -58,6 +59,7 @@ export default function PhotoStartPanel({
|
||||
const [faceState, setFaceState] = useState({})
|
||||
const [shownFaces, setShownFaces] = useState(faces)
|
||||
const [placedTotal, setPlacedTotal] = useState(0)
|
||||
const [memoriesTotal, setMemoriesTotal] = useState(0)
|
||||
|
||||
// La liste des visages et les chemins sont figés à l'ouverture : une ligne ne disparaît pas sous le doigt
|
||||
useEffect(() => {
|
||||
@@ -69,6 +71,7 @@ export default function PhotoStartPanel({
|
||||
setFaceState({})
|
||||
setShownFaces(faces)
|
||||
setPlacedTotal(0)
|
||||
setMemoriesTotal(0)
|
||||
}, [visible]) // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
useEffect(() => {
|
||||
@@ -132,7 +135,8 @@ export default function PhotoStartPanel({
|
||||
setRemaining(nextRemaining)
|
||||
onRefsChange?.(nextRemaining)
|
||||
setFound(null)
|
||||
setPlacedTotal((n) => n + placedIds.size + addedKeys.size)
|
||||
setPlacedTotal((n) => n + placedIds.size)
|
||||
setMemoriesTotal((n) => n + addedKeys.size)
|
||||
setBulk({ running: false, done: total, total, placed: placedIds.size, added: addedKeys.size, failed: total - placedIds.size - addedKeys.size })
|
||||
}
|
||||
|
||||
@@ -318,7 +322,9 @@ export default function PhotoStartPanel({
|
||||
|
||||
<div className="pz-modal-actions pz-modal-actions--split">
|
||||
<p className="pz-small">
|
||||
{addedCount > 0 ? plural(addedCount, '1 photo ajoutée.', '{n} photos ajoutées.') : t('Vous pourrez en ajouter plus tard depuis chaque fiche.')}
|
||||
{memoriesTotal > 0
|
||||
? plural(addedCount + memoriesTotal, '1 fichier ajouté.', '{n} fichiers ajoutés.')
|
||||
: addedCount > 0 ? plural(addedCount, '1 photo ajoutée.', '{n} photos ajoutées.') : t('Vous pourrez en ajouter plus tard depuis chaque fiche.')}
|
||||
</p>
|
||||
<button type="button" className="pz-btn pz-btn--primary" onClick={onClose} disabled={bulk.running}>
|
||||
{t("Voir l'arbre")}
|
||||
|
||||
@@ -37,6 +37,8 @@ export default {
|
||||
"1 autre fichier": "1 other file",
|
||||
"{n} autres fichiers": "{n} other files",
|
||||
"Ajouter ce fichier": "Add this file",
|
||||
"1 fichier ajouté.": "1 file added.",
|
||||
"{n} fichiers ajoutés.": "{n} files added.",
|
||||
"Tout ajouter ({n})": "Add everything ({n})",
|
||||
"1 fichier ajouté aux souvenirs.": "1 file added to the memories.",
|
||||
"{n} fichiers ajoutés aux souvenirs.": "{n} files added to the memories.",
|
||||
|
||||
@@ -57,7 +57,7 @@ export function matchPhotoFiles(photoRefs, files) {
|
||||
}
|
||||
}
|
||||
// Les autres champs de la référence (légende, source d'un souvenir) suivent le fichier retrouvé
|
||||
matches.push({ ...ref, file: best })
|
||||
matches.push({ ...ref, file: best, sourcePath: ref.file })
|
||||
}
|
||||
return { matches, missing }
|
||||
}
|
||||
|
||||
@@ -85,3 +85,11 @@ describe('souvenirs cités par le logiciel', () => {
|
||||
expect(matches[0].file.name).toBe('Naissance Ragot.jpg')
|
||||
})
|
||||
})
|
||||
|
||||
describe('chemin d’origine', () => {
|
||||
it('chaque correspondance garde le chemin cité, même pour trois fichiers de la même personne', () => {
|
||||
const refs = ['a.jpg', 'b.pdf', 'c.jpg'].map((name) => ({ personId: 'p', file: `Medias/${name}` }))
|
||||
const { matches } = matchPhotoFiles(refs, ['a.jpg', 'b.pdf', 'c.jpg'].map((name) => file(name, `Medias/${name}`)))
|
||||
expect(matches.map((m) => m.sourcePath)).toEqual(['Medias/a.jpg', 'Medias/b.pdf', 'Medias/c.jpg'])
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user