diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-23 21:55:20 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-23 21:55:20 +0200 |
| commit | b3709ac4d362987a9d025616c95065ceed0d216b (patch) | |
| tree | 32e0cc5cc2775eddf516d114fa9799347a214bda /packages/meshbay-hub/src/meshbay_hub/static/locales | |
| parent | 012ba5b0cb8c556ce773423ca38d5184b74659ac (diff) | |
| download | meshbay-b3709ac4d362987a9d025616c95065ceed0d216b.tar.gz | |
feat(node): persistent index cache, visible scan progress, adaptive reconcile, and delta sync
Indexer performance work, in four parts:
- Persistent (path, size, mtime) -> hash cache (indexer/cache.py) so a node
restart no longer re-hashes every file — measured at 23 minutes for a
114 GB library on a slow disk before this, near-instant after. Hashing
is deliberately kept sequential (max_workers=1): it was never actually
concurrent despite the pool size, and two interleaved reads seek-thrash
a spinning disk instead of going faster.
- Byte-based scan progress (IndexProgress), surfaced via the loopback
index-status route, the handshake ack, and a periodic INDEX_PROGRESS
push to connected peers — drives a progress bar in the Create Group
wizard and "add a directory" in Settings, and an animated presence dot.
Guaranteed to settle back to idle via try/finally and a final push on
the scanning->false transition.
- The reconcile backstop's directory walks now run in the executor
instead of blocking the daemon's event loop; its interval defaults to
10 min (was 60s) with adaptive backoff to 2h when nothing changes,
reset on a real change or a peer connecting, and is now a per-group
operator setting (signed op + group Settings UI).
- INDEX_DELTA wired up (protocol support existed, nothing called it):
_on_index_change now sends additions/deletions instead of rebuilding
the full entries list, coalesced over a short window so a burst of
file events produces one push, and the hub swarm registration for
public groups only (re-)registers newly added hashes.
Also fixes several bugs found while testing the above against real
libraries (a 114 GB and a 100+ GB group on a USB HDD):
- /api/reload blocked until the reload — including a brand-new group's
full initial scan — finished, which the Electron bridge's fixed 30s
call timeout turned into a hard failure on any real library. The route
now fires the reload without waiting (ops.start_reload), matching
add_root/remove_root's existing pattern; the wizard's own step order
was fixed to wait for the group to actually appear hosted before the
steps that need it (extra roots, GEK), with retries for the residual
race between that and the daemon's own bookkeeping.
- transport.js's hand-rolled msgpack codec had no case for uint64/int64
(0xcf/0xd3) and crashed decoding any message containing one — hit by
IndexProgress.scanned_bytes/total_bytes for any group over ~4.3 GB.
Verified against real msgpack-encoded bytes from the Python side.
- chat_hist_resp, and this change's own index_progress and
set_scan_settings_ack pushes, were not routed by message type and
could be handed to an unrelated pending request by the transport's
"oldest pending" fallback, stalling it until its own 30s timeout and
corrupting whatever received the wrong reply in its place.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016SF6RKNBKg9qejmoMJ9ybA
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
10 files changed, 110 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js index 59127af..866212f 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js @@ -457,6 +457,7 @@ export default { 'presence.online': 'Ein Node, der diese Gruppe hostet, ist online', 'presence.offline': 'Kein Node für diese Gruppe erreichbar', 'presence.unknown': 'Noch nicht geprüft', + 'presence.indexing': 'Indizierung läuft — {pct}%', 'chat.load_older': '{n} ältere Nachrichten laden', 'chat.start_of_history': 'Anfang des Gesprächs', 'chat.today': 'Heute', @@ -564,6 +565,13 @@ export default { // Settings (node) 'settings_node.detach_failed_continue': 'Die Gruppe konnte nicht vom Node getrennt werden. Trotzdem auf dem Hub löschen?', 'settings_node.roots': 'Freigegebene Verzeichnisse', + 'settings_node.scan_title': 'Scan', + 'settings_node.scan_hint': 'Wie oft der Node seine Verzeichnisse erneut auf verpasste Änderungen prüft und wie lange er nach einer Änderung wartet, bevor eine Datei indiziert wird.', + 'settings_node.scan_reconcile_label': 'Prüfintervall (Minuten)', + 'settings_node.scan_debounce_label': 'Wartezeit nach einer Änderung (Sekunden)', + 'settings_node.scan_save': 'Speichern', + 'settings_node.scan_saving': 'Wird gespeichert…', + 'settings_node.scan_saved': 'Gespeichert.', // Create-group wizard 'wizard.title': 'Gruppe erstellen', @@ -586,6 +594,9 @@ export default { 'wizard.step_add_roots': 'Verzeichnisse hinzufügen', 'wizard.step_gek': 'Verschlüsselungsschlüssel initialisieren', 'wizard.step_pair': 'Kopplung einrichten', + 'wizard.step_index': 'Dateien werden indiziert', + 'wizard.indexing_progress': 'Indizierung… {pct}%', + 'wizard.indexing_current_dir': 'Wird gescannt: {dir}', 'wizard.done_title': 'Gruppe erstellt', 'wizard.done_message': 'Ihre Gruppe ist bereit. Ihr Node hostet sie und die Verschlüsselung ist eingerichtet.', 'wizard.go_to_group': 'Zur Gruppe', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js index 58590b1..a83b067 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js @@ -364,6 +364,9 @@ export default { 'wizard.step_add_roots': 'Adding directories', 'wizard.step_gek': 'Initializing encryption key', 'wizard.step_pair': 'Setting up pairing', + 'wizard.step_index': 'Indexing files', + 'wizard.indexing_progress': 'Indexing… {pct}%', + 'wizard.indexing_current_dir': 'Scanning: {dir}', 'wizard.finish_later': 'Finish setup later', 'wizard.done_title': 'Group created', 'wizard.done_message': 'Your group is ready. Your node is hosting it and encryption is set up.', @@ -386,6 +389,13 @@ export default { // Unified Group Settings (node sections) 'settings_node.roots': 'Shared directories', 'settings_node.detach_failed_continue': 'Could not detach the group from the node. Delete on hub anyway?', + 'settings_node.scan_title': 'Scanning', + 'settings_node.scan_hint': 'How often the node re-checks its directories for changes it may have missed, and how long it waits after a file changes before indexing it.', + 'settings_node.scan_reconcile_label': 'Re-check interval (minutes)', + 'settings_node.scan_debounce_label': 'Wait after a change (seconds)', + 'settings_node.scan_save': 'Save', + 'settings_node.scan_saving': 'Saving…', + 'settings_node.scan_saved': 'Saved.', // Members 'members.col_role': 'Role', @@ -486,6 +496,7 @@ export default { 'presence.online': 'A node serving this group is online', 'presence.offline': 'No node is reachable for this group', 'presence.unknown': 'Not checked yet', + 'presence.indexing': 'Indexing — {pct}% done', 'chat.load_older': 'Load {n} older messages', 'chat.start_of_history': 'Beginning of the conversation', 'chat.today': 'Today', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js index 75a67b6..1621182 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js @@ -452,6 +452,7 @@ export default { 'presence.online': 'Un node que sirve este grupo está en línea', 'presence.offline': 'Ningún node accesible para este grupo', 'presence.unknown': 'Aún sin comprobar', + 'presence.indexing': 'Indexando — {pct}%', 'chat.load_older': 'Cargar {n} mensajes anteriores', 'chat.start_of_history': 'Inicio de la conversación', 'chat.today': 'Hoy', @@ -559,6 +560,13 @@ export default { // Node settings 'settings_node.detach_failed_continue': 'No se pudo desconectar el grupo del node. ¿Eliminar del hub de todos modos?', 'settings_node.roots': 'Directorios compartidos', + 'settings_node.scan_title': 'Escaneo', + 'settings_node.scan_hint': 'Con qué frecuencia el node vuelve a comprobar sus directorios en busca de cambios que pudo haber pasado por alto, y cuánto tiempo espera tras un cambio antes de indexar un archivo.', + 'settings_node.scan_reconcile_label': 'Intervalo de comprobación (minutos)', + 'settings_node.scan_debounce_label': 'Espera tras un cambio (segundos)', + 'settings_node.scan_save': 'Guardar', + 'settings_node.scan_saving': 'Guardando…', + 'settings_node.scan_saved': 'Guardado.', // Create group wizard 'wizard.title': 'Crear grupo', @@ -581,6 +589,9 @@ export default { 'wizard.step_add_roots': 'Añadiendo directorios', 'wizard.step_gek': 'Inicializando clave de cifrado', 'wizard.step_pair': 'Configurando emparejamiento', + 'wizard.step_index': 'Indexando archivos', + 'wizard.indexing_progress': 'Indexando… {pct}%', + 'wizard.indexing_current_dir': 'Analizando: {dir}', 'wizard.done_title': 'Grupo creado', 'wizard.done_message': 'Su grupo está listo. Su node lo aloja y el cifrado está configurado.', 'wizard.go_to_group': 'Ir al grupo', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js index d60c5d0..6e21a06 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js @@ -456,6 +456,7 @@ export default { 'presence.online': 'Un node servant ce groupe est en ligne', 'presence.offline': 'Aucun node joignable pour ce groupe', 'presence.unknown': 'Pas encore vérifié', + 'presence.indexing': 'Indexation en cours — {pct} %', 'chat.load_older': 'Charger {n} messages plus anciens', 'chat.start_of_history': 'Début de la conversation', 'chat.today': 'Aujourd’hui', @@ -575,6 +576,13 @@ export default { // Node settings 'settings_node.detach_failed_continue': 'Impossible de détacher le groupe du node. Supprimer quand même sur le hub ?', 'settings_node.roots': 'Répertoires partagés', + 'settings_node.scan_title': 'Analyse', + 'settings_node.scan_hint': 'À quelle fréquence le node revérifie ses répertoires à la recherche de changements manqués, et combien de temps il attend après une modification avant d\'indexer un fichier.', + 'settings_node.scan_reconcile_label': 'Intervalle de revérification (minutes)', + 'settings_node.scan_debounce_label': 'Attente après un changement (secondes)', + 'settings_node.scan_save': 'Enregistrer', + 'settings_node.scan_saving': 'Enregistrement…', + 'settings_node.scan_saved': 'Enregistré.', // Create group wizard 'wizard.title': 'Créer un groupe', @@ -597,6 +605,9 @@ export default { 'wizard.step_add_roots': 'Ajout des répertoires', 'wizard.step_gek': 'Initialisation de la clé de chiffrement', 'wizard.step_pair': 'Mise en place de l\'appariement', + 'wizard.step_index': 'Indexation des fichiers', + 'wizard.indexing_progress': 'Indexation… {pct} %', + 'wizard.indexing_current_dir': 'Analyse : {dir}', 'wizard.done_title': 'Groupe créé', 'wizard.done_message': 'Votre groupe est prêt. Votre node l\'héberge et le chiffrement est configuré.', 'wizard.go_to_group': 'Aller au groupe', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js index b65e2ce..edd15ab 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js @@ -454,6 +454,7 @@ export default { 'presence.online': 'Un node che ospita questo gruppo è online', 'presence.offline': 'Nessun node raggiungibile per questo gruppo', 'presence.unknown': 'Non ancora verificato', + 'presence.indexing': 'Indicizzazione in corso — {pct}%', 'chat.load_older': 'Carica {n} messaggi precedenti', 'chat.start_of_history': 'Inizio della conversazione', 'chat.today': 'Oggi', @@ -573,6 +574,13 @@ export default { // Settings — node 'settings_node.detach_failed_continue': 'Impossibile scollegare il gruppo dal node. Eliminare comunque dal hub?', 'settings_node.roots': 'Directory condivise', + 'settings_node.scan_title': 'Scansione', + 'settings_node.scan_hint': 'Con quale frequenza il node ricontrolla le sue directory per cambiamenti che potrebbe aver perso, e quanto tempo attende dopo una modifica prima di indicizzare un file.', + 'settings_node.scan_reconcile_label': 'Intervallo di ricontrollo (minuti)', + 'settings_node.scan_debounce_label': 'Attesa dopo una modifica (secondi)', + 'settings_node.scan_save': 'Salva', + 'settings_node.scan_saving': 'Salvataggio…', + 'settings_node.scan_saved': 'Salvato.', // Create-group wizard 'wizard.title': 'Crea gruppo', @@ -595,6 +603,9 @@ export default { 'wizard.step_add_roots': 'Aggiunta delle directory', 'wizard.step_gek': 'Inizializzazione della chiave di cifratura', 'wizard.step_pair': 'Configurazione del pairing', + 'wizard.step_index': 'Indicizzazione dei file', + 'wizard.indexing_progress': 'Indicizzazione… {pct}%', + 'wizard.indexing_current_dir': 'Scansione: {dir}', 'wizard.done_title': 'Gruppo creato', 'wizard.done_message': 'Il suo gruppo è pronto. Il suo node lo ospita e la cifratura è configurata.', 'wizard.go_to_group': 'Vai al gruppo', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js index e965590..00fffed 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js @@ -442,6 +442,7 @@ export default { 'presence.online': 'このグループをホストする node が稼働中です', 'presence.offline': 'このグループに到達できる node がありません', 'presence.unknown': '未確認', + 'presence.indexing': 'インデックス中 — {pct}%', 'chat.load_older': '以前のメッセージを {n} 件読み込む', 'chat.start_of_history': '会話のはじまり', 'chat.today': '今日', @@ -557,6 +558,13 @@ export default { // Settings — node 'settings_node.detach_failed_continue': 'node からグループを切り離せませんでした。それでも hub 上で削除しますか?', 'settings_node.roots': '共有ディレクトリ', + 'settings_node.scan_title': 'スキャン', + 'settings_node.scan_hint': 'node が見逃した変更がないかディレクトリを再確認する頻度と、ファイルの変更後にインデックスするまで待つ時間。', + 'settings_node.scan_reconcile_label': '再確認の間隔(分)', + 'settings_node.scan_debounce_label': '変更後の待機時間(秒)', + 'settings_node.scan_save': '保存', + 'settings_node.scan_saving': '保存中…', + 'settings_node.scan_saved': '保存しました。', // Wizard 'wizard.title': 'グループを作成', @@ -579,6 +587,9 @@ export default { 'wizard.step_add_roots': 'ディレクトリを追加中', 'wizard.step_gek': '暗号化鍵を初期化中', 'wizard.step_pair': 'ペアリングをセットアップ中', + 'wizard.step_index': 'ファイルをインデックス中', + 'wizard.indexing_progress': 'インデックス中… {pct}%', + 'wizard.indexing_current_dir': 'スキャン中: {dir}', 'wizard.done_title': 'グループを作成しました', 'wizard.done_message': 'グループの準備ができました。node がホストし、暗号化が設定されています。', 'wizard.go_to_group': 'グループを開く', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js index b37be08..2837ebb 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js @@ -456,6 +456,7 @@ export default { 'presence.online': 'Een node die deze groep host is online', 'presence.offline': 'Geen node bereikbaar voor deze groep', 'presence.unknown': 'Nog niet gecontroleerd', + 'presence.indexing': 'Bezig met indexeren — {pct}%', 'chat.load_older': '{n} oudere berichten laden', 'chat.start_of_history': 'Begin van het gesprek', 'chat.today': 'Vandaag', @@ -575,6 +576,13 @@ export default { // Node settings 'settings_node.detach_failed_continue': 'Kon de groep niet van de node loskoppelen. Toch op de hub verwijderen?', 'settings_node.roots': 'Gedeelde mappen', + 'settings_node.scan_title': 'Scannen', + 'settings_node.scan_hint': 'Hoe vaak de node zijn mappen opnieuw controleert op wijzigingen die zijn gemist, en hoe lang hij na een wijziging wacht voordat een bestand wordt geïndexeerd.', + 'settings_node.scan_reconcile_label': 'Controle-interval (minuten)', + 'settings_node.scan_debounce_label': 'Wachttijd na een wijziging (seconden)', + 'settings_node.scan_save': 'Opslaan', + 'settings_node.scan_saving': 'Bezig met opslaan…', + 'settings_node.scan_saved': 'Opgeslagen.', // Create group wizard 'wizard.title': 'Groep aanmaken', @@ -597,6 +605,9 @@ export default { 'wizard.step_add_roots': 'Mappen toevoegen', 'wizard.step_gek': 'Versleutelingssleutel initialiseren', 'wizard.step_pair': 'Koppeling instellen', + 'wizard.step_index': 'Bestanden indexeren', + 'wizard.indexing_progress': 'Bezig met indexeren… {pct}%', + 'wizard.indexing_current_dir': 'Scannen: {dir}', 'wizard.done_title': 'Groep aangemaakt', 'wizard.done_message': 'Uw groep is klaar. Uw node host de groep en de versleuteling is ingesteld.', 'wizard.go_to_group': 'Naar groep', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js index b445f79..760f29c 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js @@ -469,6 +469,7 @@ export default { 'presence.online': 'Node hostujący tę grupę jest dostępny', 'presence.offline': 'Brak osiągalnego node dla tej grupy', 'presence.unknown': 'Jeszcze nie sprawdzono', + 'presence.indexing': 'Indeksowanie — {pct}%', 'chat.load_older': 'Wczytaj {n} starszych wiadomości', 'chat.start_of_history': 'Początek rozmowy', 'chat.today': 'Dziś', @@ -596,6 +597,13 @@ export default { // Settings — node 'settings_node.detach_failed_continue': 'Nie udało się odłączyć grupy od node. Usunąć mimo to na hub?', 'settings_node.roots': 'Katalogi współdzielone', + 'settings_node.scan_title': 'Skanowanie', + 'settings_node.scan_hint': 'Jak często node ponownie sprawdza swoje katalogi w poszukiwaniu pominiętych zmian oraz jak długo czeka po zmianie pliku przed jego zindeksowaniem.', + 'settings_node.scan_reconcile_label': 'Interwał sprawdzania (minuty)', + 'settings_node.scan_debounce_label': 'Oczekiwanie po zmianie (sekundy)', + 'settings_node.scan_save': 'Zapisz', + 'settings_node.scan_saving': 'Zapisywanie…', + 'settings_node.scan_saved': 'Zapisano.', // Create-group wizard 'wizard.title': 'Utwórz grupę', @@ -618,6 +626,9 @@ export default { 'wizard.step_add_roots': 'Dodawanie katalogów', 'wizard.step_gek': 'Inicjalizacja klucza szyfrowania', 'wizard.step_pair': 'Konfigurowanie parowania', + 'wizard.step_index': 'Indeksowanie plików', + 'wizard.indexing_progress': 'Indeksowanie… {pct}%', + 'wizard.indexing_current_dir': 'Skanowanie: {dir}', 'wizard.done_title': 'Grupa utworzona', 'wizard.done_message': 'Grupa jest gotowa. Node ją hostuje, a szyfrowanie jest skonfigurowane.', 'wizard.go_to_group': 'Przejdź do grupy', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js index c3220ae..0001051 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js @@ -453,6 +453,7 @@ export default { 'presence.online': 'Um node que hospeda este grupo está on-line', 'presence.offline': 'Nenhum node acessível para este grupo', 'presence.unknown': 'Ainda não verificado', + 'presence.indexing': 'Indexando — {pct}%', 'chat.load_older': 'Carregar {n} mensagens anteriores', 'chat.start_of_history': 'Início da conversa', 'chat.today': 'Hoje', @@ -560,6 +561,13 @@ export default { // Settings — node 'settings_node.detach_failed_continue': 'Não foi possível desanexar o grupo do node. Excluir do hub mesmo assim?', 'settings_node.roots': 'Diretórios compartilhados', + 'settings_node.scan_title': 'Varredura', + 'settings_node.scan_hint': 'Com que frequência o node reverifica seus diretórios em busca de mudanças que possa ter perdido, e quanto tempo espera após uma mudança antes de indexar um arquivo.', + 'settings_node.scan_reconcile_label': 'Intervalo de reverificação (minutos)', + 'settings_node.scan_debounce_label': 'Espera após uma mudança (segundos)', + 'settings_node.scan_save': 'Salvar', + 'settings_node.scan_saving': 'Salvando…', + 'settings_node.scan_saved': 'Salvo.', // Create group wizard 'wizard.title': 'Criar grupo', @@ -582,6 +590,9 @@ export default { 'wizard.step_add_roots': 'Adicionando diretórios', 'wizard.step_gek': 'Inicializando chave de criptografia', 'wizard.step_pair': 'Configurando pareamento', + 'wizard.step_index': 'Indexando arquivos', + 'wizard.indexing_progress': 'Indexando… {pct}%', + 'wizard.indexing_current_dir': 'Analisando: {dir}', 'wizard.done_title': 'Grupo criado', 'wizard.done_message': 'Seu grupo está pronto. Seu node o está hospedando e a criptografia está configurada.', 'wizard.go_to_group': 'Ir para o grupo', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js index 0151c4b..ad8bf53 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js @@ -428,6 +428,7 @@ export default { 'presence.online': '有一个服务本群组的 node 在线', 'presence.offline': '本群组没有可达的 node', 'presence.unknown': '尚未检测', + 'presence.indexing': '正在索引 — {pct}%', 'chat.load_older': '加载更早的 {n} 条消息', 'chat.start_of_history': '对话开头', 'chat.today': '今天', @@ -543,6 +544,13 @@ export default { // Settings — node 'settings_node.detach_failed_continue': '无法从 node 上分离此群组。是否仍然在 hub 上删除?', 'settings_node.roots': '共享目录', + 'settings_node.scan_title': '扫描', + 'settings_node.scan_hint': 'node 多久重新检查一次目录以发现可能错过的变化,以及文件变化后等待多久才建立索引。', + 'settings_node.scan_reconcile_label': '重新检查间隔(分钟)', + 'settings_node.scan_debounce_label': '变化后的等待时间(秒)', + 'settings_node.scan_save': '保存', + 'settings_node.scan_saving': '保存中…', + 'settings_node.scan_saved': '已保存。', // Create group wizard 'wizard.title': '创建群组', @@ -566,6 +574,9 @@ export default { 'wizard.step_add_roots': '添加目录', 'wizard.step_gek': '初始化加密密钥', 'wizard.step_pair': '设置配对', + 'wizard.step_index': '正在索引文件', + 'wizard.indexing_progress': '正在索引… {pct}%', + 'wizard.indexing_current_dir': '正在扫描:{dir}', 'wizard.done_title': '群组已创建', 'wizard.done_message': '您的群组已就绪。您的 node 正在托管它,加密已设置完成。', 'wizard.go_to_group': '前往群组', |