Scan borné du système de fichiers (racines configurables, défaut home ; profondeur/nombre/timeout bornés ; symlinks non suivis ; exclusions node_modules/dotdirs) qui auto-enregistre les nouveaux dépôts. Insertion atomique ON CONFLICT DO NOTHING (idempotence + anti-résurrection d'un dépôt masqué + anti-course). Scan au démarrage + bouton manuel + re-scan périodique (RepoDiscoveryService, démarré dans runDaemon). Colonne repos.hidden : masquer = conservé en DB mais exclu du dashboard et jamais ré-ajouté ; supprimer = re-découvrable. UI : bouton œil par dépôt + bascule afficher-les-masqués sur le dashboard, section Découverte dans les Réglages (racines + intervalle, allow-list stricte). Robustesse : listAllWorktrees tolère l'échec git par dépôt ; flag --no-discover (escape hatch + hermétisme des acceptations). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { ref } from 'vue';
|
|
import type { ServerInfo, SettingsResponse, UpdateSettingsRequest } from '@arboretum/shared';
|
|
import { api } from '../lib/api';
|
|
|
|
// Réglages serveur + intégrations. `giteaUrl` alimente l'item de nav Gitea (affiché si défini).
|
|
// Les préférences purement client (langue) restent gérées par l'i18n/localStorage.
|
|
export const useSettingsStore = defineStore('settings', () => {
|
|
const server = ref<ServerInfo | null>(null);
|
|
const giteaUrl = ref<string | null>(null);
|
|
const scanRoots = ref<string[]>([]);
|
|
const scanIntervalMin = ref(0);
|
|
const loaded = ref(false);
|
|
const saving = ref(false);
|
|
|
|
function apply(res: SettingsResponse): void {
|
|
server.value = res.server;
|
|
giteaUrl.value = res.settings.giteaUrl;
|
|
scanRoots.value = res.settings.scanRoots;
|
|
scanIntervalMin.value = res.settings.scanIntervalMin;
|
|
loaded.value = true;
|
|
}
|
|
|
|
async function fetch(): Promise<void> {
|
|
apply(await api.get<SettingsResponse>('/api/v1/settings'));
|
|
}
|
|
|
|
async function save(patch: UpdateSettingsRequest): Promise<void> {
|
|
saving.value = true;
|
|
try {
|
|
apply(await api.patch<SettingsResponse>('/api/v1/settings', patch));
|
|
} finally {
|
|
saving.value = false;
|
|
}
|
|
}
|
|
|
|
return { server, giteaUrl, scanRoots, scanIntervalMin, loaded, saving, fetch, save };
|
|
});
|