diff --git a/README.md b/README.md index 5a90f3c..80e23f3 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,10 @@ A desktop app (Tauri) in the style of a file manager, designed for when Guará f

The explorer in the dark theme Settings with the language selector

- **Thumbnail grid** or **list**, grouping by day or month and virtual scrolling for tens of thousands of files. +- **Folder browsing:** open what was found one folder at a time, like a file manager, and recover whole folders or only some subfolders and files, recreated from the ticked folder down. + +

The Folders view: the root of the recovered files with DCIM ticked, Viagens partly ticked and the folder details on the right

+ - **Sidebar navigation** by type, real photo date (EXIF), folder, camera, confidence and GPS, with an option to hide duplicates. - **Finder or Explorer style selection** and full-screen **quick look** (Space, Enter or double click). - **Details panel** with preview, dates and metadata. diff --git a/README.pt-BR.md b/README.pt-BR.md index 19fc1f0..df37f82 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -77,6 +77,10 @@ App desktop (Tauri) no estilo de um gerenciador de arquivos, pensado para quando

O explorador no tema escuro Configurações com o seletor de idioma

- **Grade de miniaturas** ou **lista**, agrupamento por dia ou mês e rolagem virtual para dezenas de milhares de arquivos. +- **Navegação por pastas:** abra o que foi encontrado uma pasta por vez, como num gerenciador de arquivos, e recupere pastas inteiras ou só algumas subpastas e arquivos, recriados a partir da pasta marcada. + +

A visualização Pastas: a raiz dos arquivos encontrados com DCIM marcada, Viagens parcialmente marcada e os detalhes da pasta à direita

+ - **Navegação lateral** por tipo, data real da foto (EXIF), pasta, câmera, confiança e GPS, com opção de ocultar duplicadas. - **Seleção como no Finder ou Explorer** e **visualização rápida** em tela cheia (Espaço, Enter ou duplo clique). - **Painel de detalhes** com pré-visualização, datas e metadados. diff --git a/apps/gui/ui/explorer.js b/apps/gui/ui/explorer.js index 2b2abef..5fef63d 100644 --- a/apps/gui/ui/explorer.js +++ b/apps/gui/ui/explorer.js @@ -4,7 +4,7 @@ // fullscreen quick look. import { renderPreview, kindOf, KIND_LABEL } from './preview.js'; -import { LOC } from './i18n.js'; +import { LOC, tr } from './i18n.js'; const CAT = { image: ['Fotos', '🖼'], document: ['Documentos', '📄'], video: ['Vídeos', '🎞'], audio: ['Áudio', '🎵'], @@ -352,7 +352,7 @@ export function createExplorer(deps) { const st = dirState(it.path); return `
${I.folderBig}
-
${esc(it.name)}${it.files.toLocaleString(LOC())} ${it.files === 1 ? 'arquivo' : 'arquivos'}
+
${esc(it.name)}${it.files.toLocaleString(LOC())} ${tr(it.files === 1 ? 'arquivo' : 'arquivos')}
${human(it.bytes)}
`; } @@ -544,7 +544,7 @@ export function createExplorer(deps) { const c = E.fsCount; const here = dirState(E.path); const html = !fsEmpty() - ? `${c ? `${c.files.toLocaleString(LOC())} ${c.files === 1 ? 'arquivo' : 'arquivos'} · ${human(c.bytes)}` : 'Calculando seleção…'} + ? `${c ? `${c.files.toLocaleString(LOC())} ${tr(c.files === 1 ? 'arquivo' : 'arquivos')} · ${human(c.bytes)}` : 'Calculando seleção…'} ${here !== 'on' ? `` : ''} ` diff --git a/docs/img/explorer-dark-en.png b/docs/img/explorer-dark-en.png index 2d97aac..19a8199 100644 Binary files a/docs/img/explorer-dark-en.png and b/docs/img/explorer-dark-en.png differ diff --git a/docs/img/explorer-dark-pt.png b/docs/img/explorer-dark-pt.png index 15c24d3..3ddfce2 100644 Binary files a/docs/img/explorer-dark-pt.png and b/docs/img/explorer-dark-pt.png differ diff --git a/docs/img/explorer-light-en.png b/docs/img/explorer-light-en.png index 4f8b2c5..664192b 100644 Binary files a/docs/img/explorer-light-en.png and b/docs/img/explorer-light-en.png differ diff --git a/docs/img/explorer-light-pt.png b/docs/img/explorer-light-pt.png index 412957e..ea239d0 100644 Binary files a/docs/img/explorer-light-pt.png and b/docs/img/explorer-light-pt.png differ diff --git a/docs/img/folders-light-en.png b/docs/img/folders-light-en.png new file mode 100644 index 0000000..49c00f3 Binary files /dev/null and b/docs/img/folders-light-en.png differ diff --git a/docs/img/folders-light-pt.png b/docs/img/folders-light-pt.png new file mode 100644 index 0000000..9aada8e Binary files /dev/null and b/docs/img/folders-light-pt.png differ diff --git a/docs/interface.md b/docs/interface.md index c475dd2..118dc34 100644 --- a/docs/interface.md +++ b/docs/interface.md @@ -11,7 +11,7 @@ Guará has a desktop app (Tauri) and the same front end in the browser with `gua After a scan, results open in a file-manager style explorer built for thousands of items: - **Left:** navigation by type, real photo date (EXIF, by year and month), folder, camera, confidence and GPS, with an option to hide small files and duplicates. -- **Center:** thumbnail grid or list, grouped by day or month, with virtual scrolling. A filter chip shows what is active and clears it in one click. +- **Center:** thumbnail grid or list, grouped by day or month, with virtual scrolling, or the **Folders** view (below) to browse one folder at a time. A filter chip shows what is active and clears it in one click. - **Right:** details panel with the preview, folder, dates (taken, modified, created, accessed), camera, resolution and the file metadata. The badge shows the **confidence** of the file (high, medium or low). - **Bottom bar:** selection count and the recovery buttons. Recovery always goes to another folder and writes a manifest with MD5, SHA-1 and SHA-256. @@ -19,6 +19,8 @@ Arrow keys move through the files, and Space opens the full-screen quick look. S ### Browsing by folder +

The Folders view: the root of the recovered files with DCIM ticked, Viagens partly ticked, the selection total at the bottom and the folder details on the right

+ The third view button (the folder icon, next to grid and list) turns the explorer into a file manager over what was found. The center shows **one folder at a time**: its subfolders first, each with how many files and how much space it holds counting everything below it, then the files directly inside. A breadcrumb at the top (`Root › Documents › Project`) goes back up; double-click or Enter opens a folder, Backspace or Alt+↑ goes up, and clicking a folder in the sidebar tree jumps to it. Files found only by signature, which have no known folder, sit in **By signature** at the root. Filters (type, date, confidence…) still apply and change the counts. To recover, tick folders and files with their boxes; the selection survives navigation. Ticking a folder takes **everything inside it**, at any depth, even what the active filters hide. Unticking a subfolder or a file inside a ticked folder leaves the folder half-ticked and keeps that item out. The bottom bar shows the exact total, and **Recover selection** recreates each ticked folder in the destination **from itself down**: recovering `Documents/Clients/Project` writes `Project/...` with all its subfolders. Files ticked on their own go to the root of the destination, and two ticked folders with the same name become `Project` and `Project (2)`. The manifest with MD5, SHA-1 and SHA-256 is written as always. diff --git a/docs/pt-BR/interface.md b/docs/pt-BR/interface.md index 93a4ed6..bb7a4a7 100644 --- a/docs/pt-BR/interface.md +++ b/docs/pt-BR/interface.md @@ -11,7 +11,7 @@ O Guará tem um app desktop (Tauri) e o mesmo front-end no navegador com `guara Depois da varredura, os resultados abrem num explorador no estilo de um gerenciador de arquivos, pensado para milhares de itens: - **Esquerda:** navegação por tipo, data real da foto (EXIF, por ano e mês), pasta, câmera, confiança e GPS, com opção de ocultar arquivos pequenos e duplicadas. -- **Centro:** grade de miniaturas ou lista, agrupadas por dia ou mês, com rolagem virtual. Uma etiqueta mostra o filtro ativo e o remove com um clique. +- **Centro:** grade de miniaturas ou lista, agrupadas por dia ou mês, com rolagem virtual, ou a visualização **Pastas** (abaixo) para navegar uma pasta por vez. Uma etiqueta mostra o filtro ativo e o remove com um clique. - **Direita:** painel de detalhes com a pré-visualização, pasta, datas (tirada, modificada, criada, acessada), câmera, resolução e os metadados do arquivo. O selo mostra a **confiança** do arquivo (alta, média ou baixa). - **Barra inferior:** quantidade selecionada e os botões de recuperação. A recuperação sempre vai para outra pasta e grava um manifesto com MD5, SHA-1 e SHA-256. @@ -19,6 +19,8 @@ As setas navegam pelos arquivos e a barra de espaço abre a visualização rápi ### Navegando por pastas +

A visualização Pastas: a raiz dos arquivos encontrados com DCIM marcada, Viagens parcialmente marcada, o total da seleção embaixo e os detalhes da pasta à direita

+ O terceiro botão de visualização (o ícone de pasta, ao lado de grade e lista) transforma o explorador num gerenciador de arquivos sobre o que foi encontrado. O centro mostra **uma pasta por vez**: primeiro as subpastas, cada uma com quantos arquivos e quanto espaço contém somando tudo abaixo dela, depois os arquivos que estão diretamente nela. Um caminho no topo (`Raiz › Documentos › Projeto`) volta para cima; duplo clique ou Enter abre uma pasta, Backspace ou Alt+↑ sobe, e clicar numa pasta da árvore lateral vai direto até ela. Arquivos achados só por assinatura, que não têm pasta conhecida, ficam em **Por assinatura** na raiz. Os filtros (tipo, data, confiança…) continuam valendo e mudam as contagens. Para recuperar, marque pastas e arquivos pelas caixas; a seleção continua ao navegar. Marcar uma pasta leva **tudo o que está dentro dela**, em qualquer profundidade, inclusive o que os filtros ativos escondem. Desmarcar uma subpasta ou um arquivo dentro de uma pasta marcada deixa a pasta parcialmente marcada e mantém aquele item de fora. A barra de baixo mostra o total exato, e **Recuperar seleção** recria cada pasta marcada no destino **a partir dela mesma**: recuperar `Documentos/Clientes/Projeto` grava `Projeto/...` com todas as subpastas. Arquivos marcados soltos vão para a raiz do destino, e duas pastas marcadas com o mesmo nome viram `Projeto` e `Projeto (2)`. O manifesto com MD5, SHA-1 e SHA-256 é gravado como sempre.