feat: système de profils — historiques et drop stats séparés par profil

- Profils stockés dans profiles.json (userData), profil "Défaut" rétro-compatible
- Chaque profil a son propre historique de sessions et app state (fichiers suffixés par id)
- Drop stats : mode Privé (fichier propre) ou Partagé (pool dropstats-shared.json commun)
- Bouton 👤 dans la topbar ouvre une modal de gestion des profils
- Créer, renommer (double-clic), supprimer, activer un profil
- Basculer le mode de drop stats (Privé ↔ Partagé) par profil
- timers et alertes isolés par profil via clés localStorage préfixées par profil id
- Switch de profil = rechargement de page (données propres sans état résiduel)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
s
2026-07-02 18:15:42 +02:00
parent 4ce8b41a4c
commit cf43ada948
3 changed files with 373 additions and 137 deletions

View File

@@ -25,5 +25,12 @@ contextBridge.exposeInMainWorld('api', {
saveSessionHistory: (obj) => ipcRenderer.invoke('save-session-history', obj),
checkUpdateManual: () => ipcRenderer.invoke('check-update-manual'),
onUpdateProgress: (cb) => ipcRenderer.on('update-progress', (_, data) => cb(data))
onUpdateProgress: (cb) => ipcRenderer.on('update-progress', (_, data) => cb(data)),
getProfiles: () => ipcRenderer.invoke('get-profiles'),
createProfile: (name, mode) => ipcRenderer.invoke('create-profile', { name, dropStatsMode: mode }),
switchProfile: (id) => ipcRenderer.invoke('switch-profile', id),
renameProfile: (id, name) => ipcRenderer.invoke('rename-profile', { id, name }),
deleteProfile: (id) => ipcRenderer.invoke('delete-profile', id),
setDropStatsMode: (id, mode) => ipcRenderer.invoke('set-drop-stats-mode', { id, mode }),
});