From 6fbb040be2cbabe39581c1c49b55ce12b0afd932 Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:13:15 -0300 Subject: [PATCH 1/8] Guarda as opcoes do tecnico e esquece alvos Quantidade de maiores arquivos, minimo dos duplicados e criterios do Sugerir passam a valer entre sessoes, num arquivo do perfil. Fecha as pendencias das fatias 3, 6 e 7. Autores: Manfred Heil Junior --- .../painel/dependencias-painel.cs | 3 + src/mapdisk.nucleo/painel/painel-analises.cs | 6 +- src/mapdisk.nucleo/painel/painel-principal.cs | 42 ++++++ src/mapdisk.nucleo/painel/preferencias.cs | 130 ++++++++++++++++++ src/mapdisk.nucleo/painel/ultimos-alvos.cs | 3 + testes/mapdisk.testes/preferencias-testes.cs | 96 +++++++++++++ 6 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 src/mapdisk.nucleo/painel/preferencias.cs create mode 100644 testes/mapdisk.testes/preferencias-testes.cs diff --git a/src/mapdisk.nucleo/painel/dependencias-painel.cs b/src/mapdisk.nucleo/painel/dependencias-painel.cs index 6a0d1ee..a6ee175 100644 --- a/src/mapdisk.nucleo/painel/dependencias-painel.cs +++ b/src/mapdisk.nucleo/painel/dependencias-painel.cs @@ -21,6 +21,9 @@ public sealed class DependenciasPainel /// Leitura de conteúdo para os duplicados. A demonstração troca por uma que não abre arquivo. public ILeitorConteudo Leitor { get; init; } = new LeitorConteudo(); + /// Opções guardadas. O padrão fica só na memória; o Padrao() do painel liga o arquivo. + public IArmazemPreferencias Preferencias { get; init; } = new PreferenciasEmMemoria(); + public IRegistroAcoes Registro { get; init; } = new RegistroEmMemoria(); public LocaisProtegidos Locais { get; init; } = LocaisProtegidos.DoSistema(); diff --git a/src/mapdisk.nucleo/painel/painel-analises.cs b/src/mapdisk.nucleo/painel/painel-analises.cs index 420aa64..bdf8e29 100644 --- a/src/mapdisk.nucleo/painel/painel-analises.cs +++ b/src/mapdisk.nucleo/painel/painel-analises.cs @@ -30,6 +30,9 @@ public sealed class PainelAnalises : INotifyPropertyChanged /// A aba Duplicados. O resultado diz de qual pasta é e só some numa nova varredura. public PainelDuplicados Duplicados { get; } + /// Quantos arquivos a aba "Maiores arquivos" mostra. Vem das Opções. + public int QuantosMaiores { get; set; } = 100; + public event PropertyChangedEventHandler? PropertyChanged; public AbaAnalise Aba { get; private set; } @@ -80,8 +83,9 @@ public async Task CalcularAsync(NoPasta pasta, DateTime hoje) { _pasta = pasta; var idade = Idade; + var quantos = QuantosMaiores; var r = await Task.Run(() => ( - Maiores: Analises.MaioresArquivos(pasta), + Maiores: Analises.MaioresArquivos(pasta, quantos), Antigos: Analises.ArquivosAntigos(pasta, idade, hoje), Categorias: Analises.PorCategoria(pasta), Extensoes: Analises.PorExtensao(pasta), diff --git a/src/mapdisk.nucleo/painel/painel-principal.cs b/src/mapdisk.nucleo/painel/painel-principal.cs index 4eedf5c..a1014f0 100644 --- a/src/mapdisk.nucleo/painel/painel-principal.cs +++ b/src/mapdisk.nucleo/painel/painel-principal.cs @@ -19,6 +19,7 @@ public sealed class PainelPrincipal : INotifyPropertyChanged private readonly Func> _listarUnidades; private readonly IHistoricoAlvos _historico; private readonly Func _elevar; + private readonly IArmazemPreferencias _preferencias; private CancellationTokenSource? _cancelar; private Varredura? _varredura; private InfoVolume? _volume; @@ -36,6 +37,8 @@ public PainelPrincipal(DependenciasPainel dependencias) LocalDoRegistro = dependencias.Registro.Local; Locais = dependencias.Locais; Analises = new PainelAnalises(dependencias.Leitor); + _preferencias = dependencias.Preferencias; + Aplicar(_preferencias.Ler()); Unidades = _listarUnidades(); TextoAlvo = Unidades.FirstOrDefault()?.Raiz ?? string.Empty; MontarOpcoes(); @@ -57,8 +60,19 @@ public PainelPrincipal(IMotorVarredura motor, Func> li Elevar = Elevacao.Reabrir, Operacoes = new OperacoesArquivo(), Registro = RegistroAcoes.Padrao(), + Preferencias = ArquivoPreferencias.Padrao(), }); + public Preferencias Preferencias { get; private set; } = new(); + + /// Volume da última varredura, para o relatório do técnico. + public InfoVolume? Volume => _volume; + + /// A última varredura foi interrompida antes do fim. + public bool Interrompida { get; private set; } + + public IReadOnlyList UltimosUsados => _historico.Ler(); + /// O processo já roda como administrador. public bool Administrador { get; } @@ -381,6 +395,7 @@ private void Concluir() { var r = varredura.Conclusao.Result; _volume = r.Volume; + Interrompida = r.Cancelada; TextoEstado = r.Cancelada ? $"Varredura interrompida em {Formatador.Duracao(r.Duracao)}. Os números mostram só o que foi lido até ali." : $"Varredura concluída em {Formatador.Duracao(r.Duracao)}."; @@ -430,6 +445,33 @@ private void AtualizarTextos() Avisar(); } + public void GravarPreferencias(Preferencias preferencias) + { + _preferencias.Gravar(preferencias); + Aplicar(preferencias); + } + + public void EsquecerAlvo(string alvo) + { + _historico.Gravar(UltimosAlvos.Esquecer(_historico.Ler(), alvo)); + MontarOpcoes(); + Avisar(); + } + + public void LimparAlvos() + { + _historico.Gravar([]); + MontarOpcoes(); + Avisar(); + } + + private void Aplicar(Preferencias p) + { + Preferencias = p; + Analises.QuantosMaiores = p.MaioresArquivos; + Analises.Duplicados.TamanhoMinimoMb = p.DuplicadosMinimoMb; + } + private void MontarOpcoes() { var unidades = Unidades.Select(u => new ItemAlvo(u.Raiz, u.Descricao)).ToList(); diff --git a/src/mapdisk.nucleo/painel/preferencias.cs b/src/mapdisk.nucleo/painel/preferencias.cs new file mode 100644 index 0000000..4fdfe6d --- /dev/null +++ b/src/mapdisk.nucleo/painel/preferencias.cs @@ -0,0 +1,130 @@ +using System.Globalization; + +namespace MapDisk.Nucleo; + +/// Escolhas do técnico que valem entre sessões, só nesta máquina. +public sealed record Preferencias( + int MaioresArquivos = 100, + long DuplicadosMinimoMb = 1, + int SugerirPastas = 20, + int SugerirArquivos = 50, + int SugerirAnos = 2, + long SugerirMinimoMb = 100) +{ + private const long Mb = 1024 * 1024; + + private static readonly Dictionary Faixas = new() + { + ["maiores-arquivos"] = (10, 1000), + ["duplicados-minimo-mb"] = (1, 102400), + ["sugerir-pastas"] = (0, 1000), + ["sugerir-arquivos"] = (0, 1000), + ["sugerir-anos"] = (1, 50), + ["sugerir-minimo-mb"] = (0, 1048576), + }; + + public CriteriosSugestao Criterios => new(SugerirPastas, SugerirArquivos, SugerirAnos, SugerirMinimoMb * Mb); + + public Preferencias ComCriterios(CriteriosSugestao c) => this with + { + SugerirPastas = c.MaioresPastas, + SugerirArquivos = c.MaioresArquivos, + SugerirAnos = c.AnosSemAlteracao, + SugerirMinimoMb = c.TamanhoMinimo / Mb, + }; + + public IReadOnlyList ParaTexto() => + [ + $"maiores-arquivos={N(MaioresArquivos)}", + $"duplicados-minimo-mb={N(DuplicadosMinimoMb)}", + $"sugerir-pastas={N(SugerirPastas)}", + $"sugerir-arquivos={N(SugerirArquivos)}", + $"sugerir-anos={N(SugerirAnos)}", + $"sugerir-minimo-mb={N(SugerirMinimoMb)}", + ]; + + /// Linha que não se entende fica de fora; valor fora da faixa fica com o padrão. + public static Preferencias DeTexto(IEnumerable linhas) + { + var valores = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var linha in linhas) + { + var i = linha.IndexOf('='); + if (i > 0) + { + valores[linha[..i].Trim()] = linha[(i + 1)..].Trim(); + } + } + + var p = new Preferencias(); + return p with + { + MaioresArquivos = (int)Ler(valores, "maiores-arquivos", p.MaioresArquivos), + DuplicadosMinimoMb = Ler(valores, "duplicados-minimo-mb", p.DuplicadosMinimoMb), + SugerirPastas = (int)Ler(valores, "sugerir-pastas", p.SugerirPastas), + SugerirArquivos = (int)Ler(valores, "sugerir-arquivos", p.SugerirArquivos), + SugerirAnos = (int)Ler(valores, "sugerir-anos", p.SugerirAnos), + SugerirMinimoMb = Ler(valores, "sugerir-minimo-mb", p.SugerirMinimoMb), + }; + } + + /// Confere um valor digitado na tela de Opções. + public static bool Valido(string nome, string texto) => + Faixas.TryGetValue(nome, out var f) + && long.TryParse(texto.Trim(), NumberStyles.None, CultureInfo.InvariantCulture, out var n) + && n >= f.Minimo && n <= f.Maximo; + + private static long Ler(Dictionary valores, string nome, long padrao) => + valores.TryGetValue(nome, out var texto) && Valido(nome, texto) + ? long.Parse(texto.Trim(), CultureInfo.InvariantCulture) + : padrao; + + private static string N(long n) => n.ToString(CultureInfo.InvariantCulture); +} + +public interface IArmazemPreferencias +{ + Preferencias Ler(); + + void Gravar(Preferencias preferencias); +} + +/// Opções num arquivo do perfil do usuário. Falha de leitura ou de gravação deixa os padrões. +public sealed class ArquivoPreferencias(string arquivo) : IArmazemPreferencias +{ + public static ArquivoPreferencias Padrao() => new(Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MapDisk", "opcoes.txt")); + + public Preferencias Ler() + { + try + { + return File.Exists(arquivo) ? Preferencias.DeTexto(File.ReadAllLines(arquivo)) : new Preferencias(); + } + catch (Exception e) when (e is IOException or UnauthorizedAccessException) + { + return new Preferencias(); + } + } + + public void Gravar(Preferencias preferencias) + { + try + { + Directory.CreateDirectory(Path.GetDirectoryName(arquivo)!); + File.WriteAllLines(arquivo, preferencias.ParaTexto()); + } + catch (Exception e) when (e is IOException or UnauthorizedAccessException) + { + } + } +} + +public sealed class PreferenciasEmMemoria : IArmazemPreferencias +{ + private Preferencias _atual = new(); + + public Preferencias Ler() => _atual; + + public void Gravar(Preferencias preferencias) => _atual = preferencias; +} diff --git a/src/mapdisk.nucleo/painel/ultimos-alvos.cs b/src/mapdisk.nucleo/painel/ultimos-alvos.cs index f4a7d4b..6a7bbf0 100644 --- a/src/mapdisk.nucleo/painel/ultimos-alvos.cs +++ b/src/mapdisk.nucleo/painel/ultimos-alvos.cs @@ -64,4 +64,7 @@ public static IReadOnlyList Acrescentar(IReadOnlyList atuais, st .Concat(atuais.Where(a => !string.Equals(a, alvo, StringComparison.OrdinalIgnoreCase))) .Take(Maximo) .ToList(); + + public static IReadOnlyList Esquecer(IReadOnlyList atuais, string alvo) => + atuais.Where(a => !string.Equals(a, alvo, StringComparison.OrdinalIgnoreCase)).ToList(); } diff --git a/testes/mapdisk.testes/preferencias-testes.cs b/testes/mapdisk.testes/preferencias-testes.cs new file mode 100644 index 0000000..6971924 --- /dev/null +++ b/testes/mapdisk.testes/preferencias-testes.cs @@ -0,0 +1,96 @@ +namespace MapDisk.Testes; + +public class PreferenciasTestes +{ + [Fact] + public void Texto_vai_e_volta_igual() + { + var p = new Preferencias(MaioresArquivos: 250, DuplicadosMinimoMb: 10, SugerirPastas: 5, SugerirArquivos: 7, SugerirAnos: 3, SugerirMinimoMb: 500); + Assert.Equal(p, Preferencias.DeTexto(p.ParaTexto())); + } + + [Fact] + public void Valor_estranho_ou_fora_da_faixa_volta_ao_padrao() + { + var p = Preferencias.DeTexto(["maiores-arquivos=5", "duplicados-minimo-mb=abc", "sugerir-anos=0", "outra=1", "sem igual", "sugerir-pastas=30"]); + Assert.Equal(100, p.MaioresArquivos); + Assert.Equal(1, p.DuplicadosMinimoMb); + Assert.Equal(2, p.SugerirAnos); + Assert.Equal(30, p.SugerirPastas); + Assert.True(Preferencias.Valido("maiores-arquivos", " 50 ")); + Assert.False(Preferencias.Valido("maiores-arquivos", "2000")); + Assert.False(Preferencias.Valido("nao-existe", "1")); + } + + [Fact] + public void Criterios_saem_em_bytes_e_voltam() + { + var p = new Preferencias(SugerirMinimoMb: 200); + Assert.Equal(200L * 1024 * 1024, p.Criterios.TamanhoMinimo); + var c = new CriteriosSugestao(1, 2, 3, 4L * 1024 * 1024); + Assert.Equal(c, p.ComCriterios(c).Criterios); + } + + [Fact] + public void Arquivo_grava_le_e_tolera_falta() + { + var arquivo = Path.Combine(AppContext.BaseDirectory, "preferencias-" + Guid.NewGuid().ToString("N"), "opcoes.txt"); + var armazem = new ArquivoPreferencias(arquivo); + Assert.Equal(new Preferencias(), armazem.Ler()); + armazem.Gravar(new Preferencias(MaioresArquivos: 300)); + Assert.Equal(300, armazem.Ler().MaioresArquivos); + Directory.Delete(Path.GetDirectoryName(arquivo)!, true); + } + + [Fact] + public void Esquecer_tira_so_aquele_alvo() + { + Assert.Equal([@"D:\"], UltimosAlvos.Esquecer([@"C:\Dados", @"D:\"], @"c:\dados")); + } + + [Fact] + public void Painel_aplica_e_grava_as_preferencias() + { + var armazem = new PreferenciasEmMemoria(); + armazem.Gravar(new Preferencias(MaioresArquivos: 20, DuplicadosMinimoMb: 8)); + var painel = new PainelPrincipal(new DependenciasPainel + { + Motor = Demonstracao.Motor(), + ListarUnidades = () => [], + Preferencias = armazem, + }); + Assert.Equal(20, painel.Analises.QuantosMaiores); + Assert.Equal(8, painel.Analises.Duplicados.TamanhoMinimoMb); + + painel.GravarPreferencias(new Preferencias(MaioresArquivos: 40)); + Assert.Equal(40, armazem.Ler().MaioresArquivos); + Assert.Equal(40, painel.Analises.QuantosMaiores); + } + + [Fact] + public void Painel_esquece_e_limpa_os_alvos() + { + var historico = new HistoricoEmMemoria(); + historico.Gravar([@"E:\Fotos", @"F:\"]); + var painel = new PainelPrincipal(new DependenciasPainel + { + Motor = Demonstracao.Motor(), + ListarUnidades = () => [], + Historico = historico, + }); + painel.EsquecerAlvo(@"E:\Fotos"); + Assert.Equal([@"F:\"], painel.UltimosUsados); + Assert.DoesNotContain(painel.Opcoes, o => o.Caminho == @"E:\Fotos"); + painel.LimparAlvos(); + Assert.Empty(painel.UltimosUsados); + } + + [Fact] + public async Task Analises_usam_a_quantidade_de_maiores() + { + var raiz = (await Demonstracao.Motor().Iniciar(@"C:\", CancellationToken.None).Conclusao).Raiz; + var analises = new PainelAnalises { QuantosMaiores = 3 }; + await analises.CalcularAsync(raiz, new DateTime(2026, 10, 1)); + Assert.Equal(3, analises.Maiores.Count); + } +} From 22955d398cd95f9560d970a90f144f6737ce5fbd Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:14:40 -0300 Subject: [PATCH 2/8] Cria o relatorio HTML do tecnico R17: um arquivo so, com o logo da MT e o grafico em blocos dentro, imprimivel em PDF pelo navegador. Pasta sem leitura aparece com o motivo, nunca com zero. Os ajudantes de HTML e as cores do grafico passam a ser comuns aos dois relatorios e a tela. Autores: Manfred Heil Junior --- src/mapdisk.nucleo/grafico/paleta.cs | 13 + src/mapdisk.nucleo/painel/painel-grafico.cs | 15 +- src/mapdisk.nucleo/relatorios/html.cs | 20 ++ .../relatorios/pagina-avaliacao.cs | 15 +- .../relatorios/relatorio-tecnico.cs | 224 ++++++++++++++++++ .../relatorio-tecnico-testes.cs | 83 +++++++ 6 files changed, 342 insertions(+), 28 deletions(-) create mode 100644 src/mapdisk.nucleo/relatorios/html.cs create mode 100644 src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs create mode 100644 testes/mapdisk.testes/relatorio-tecnico-testes.cs diff --git a/src/mapdisk.nucleo/grafico/paleta.cs b/src/mapdisk.nucleo/grafico/paleta.cs index f4c8879..46d4bb3 100644 --- a/src/mapdisk.nucleo/grafico/paleta.cs +++ b/src/mapdisk.nucleo/grafico/paleta.cs @@ -26,4 +26,17 @@ public static class Paleta /// Grafite sobre as cores claras, branco sobre as escuras. public static string CorTexto(string cor) => Claras.Contains(cor) ? "#202020" : "#FFFFFF"; + + /// As subpastas contam a posição entre elas, para a primeira ser sempre o verde da MT. + public static string[] CoresDe(IReadOnlyList itens) + { + var cores = new string[itens.Count]; + var pasta = 0; + for (var i = 0; i < itens.Count; i++) + { + cores[i] = Cor(itens[i].Tipo == TipoItemGrafico.Pasta ? pasta++ : 0, itens[i].Tipo); + } + + return cores; + } } diff --git a/src/mapdisk.nucleo/painel/painel-grafico.cs b/src/mapdisk.nucleo/painel/painel-grafico.cs index b2f0f1b..7201776 100644 --- a/src/mapdisk.nucleo/painel/painel-grafico.cs +++ b/src/mapdisk.nucleo/painel/painel-grafico.cs @@ -89,7 +89,7 @@ private void Montar() { var c = ItensGrafico.DaPasta(pasta, Modo, Tipo == TipoGrafico.Blocos ? MaximoBlocos : MaximoFatias); TextoNaoLidas = c.NaoLidas.Count == 0 ? string.Empty : $"Sem leitura, fora do gráfico: {string.Join(", ", c.NaoLidas)}"; - var cores = Cores(c.Itens); + var cores = Paleta.CoresDe(c.Itens); if (Tipo == TipoGrafico.Blocos) { var r = Treemap.Dispor(c.Itens.Select(i => i.Valor).ToList(), _largura, _altura); @@ -116,19 +116,6 @@ private void Montar() PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(string.Empty)); } - // As subpastas contam a posição entre elas, para a primeira ser sempre o verde da MT. - private static string[] Cores(IReadOnlyList itens) - { - var cores = new string[itens.Count]; - var pasta = 0; - for (var i = 0; i < itens.Count; i++) - { - cores[i] = Paleta.Cor(itens[i].Tipo == TipoItemGrafico.Pasta ? pasta++ : 0, itens[i].Tipo); - } - - return cores; - } - private string TextoValor(long valor) => Modo == ModoExibicao.Contagem ? Formatador.Plural(valor, "arquivo", "arquivos") : Formatador.Tamanho(valor); diff --git a/src/mapdisk.nucleo/relatorios/html.cs b/src/mapdisk.nucleo/relatorios/html.cs new file mode 100644 index 0000000..f8d8b5e --- /dev/null +++ b/src/mapdisk.nucleo/relatorios/html.cs @@ -0,0 +1,20 @@ +using System.Net; + +namespace MapDisk.Nucleo; + +/// O que os dois relatórios HTML usam: escape e o logo da MT embutido. +public static class Html +{ + public static string H(string texto) => WebUtility.HtmlEncode(texto); + + /// Texto dentro de aspas no JavaScript: barra, aspas e o fim de script escapados. + public static string Js(string texto) => texto.Replace(@"\", @"\\").Replace("\"", "\\\"").Replace("<", "\\u003c"); + + public static string Logo() + { + using var fluxo = typeof(Html).Assembly.GetManifestResourceStream("mt-logo.png")!; + using var memoria = new MemoryStream(); + fluxo.CopyTo(memoria); + return Convert.ToBase64String(memoria.ToArray()); + } +} diff --git a/src/mapdisk.nucleo/relatorios/pagina-avaliacao.cs b/src/mapdisk.nucleo/relatorios/pagina-avaliacao.cs index 6409400..2302d91 100644 --- a/src/mapdisk.nucleo/relatorios/pagina-avaliacao.cs +++ b/src/mapdisk.nucleo/relatorios/pagina-avaliacao.cs @@ -1,6 +1,6 @@ using System.Globalization; -using System.Net; using System.Text; +using static MapDisk.Nucleo.Html; namespace MapDisk.Nucleo; @@ -110,17 +110,4 @@ private static void Resumo(StringBuilder s, Avaliacao a) s.Append($"

Sem alteração há mais de 2 anos

{H(Formatador.Plural(antigos.Quantidade, "arquivo", "arquivos"))}, "); s.Append($"{H(Formatador.Tamanho(antigos.Tamanho))}

"); } - - private static string H(string texto) => WebUtility.HtmlEncode(texto); - - // Texto dentro de aspas no JavaScript: barra, aspas e o fim de script escapados. - private static string Js(string texto) => texto.Replace(@"\", @"\\").Replace("\"", "\\\"").Replace("<", "\\u003c"); - - private static string Logo() - { - using var fluxo = typeof(PaginaAvaliacao).Assembly.GetManifestResourceStream("mt-logo.png")!; - using var memoria = new MemoryStream(); - fluxo.CopyTo(memoria); - return Convert.ToBase64String(memoria.ToArray()); - } } diff --git a/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs b/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs new file mode 100644 index 0000000..65b75b4 --- /dev/null +++ b/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs @@ -0,0 +1,224 @@ +using System.Globalization; +using System.Text; +using static MapDisk.Nucleo.Html; + +namespace MapDisk.Nucleo; + +public sealed record DadosRelatorio(NoPasta Pasta, DateTime Gerado, string Computador, InfoVolume? Volume, bool Interrompida, int Quantos, ResultadoDuplicados? Duplicados); + +/// +/// Relatório do técnico (R17): um arquivo HTML só, com logo, estilo e gráfico dentro, sem nada +/// da internet (regra 6). Pasta sem leitura aparece com o motivo, nunca com zero (regra 3). +/// +public static class RelatorioTecnico +{ + private const int LarguraGrafico = 960; + private const int AlturaGrafico = 360; + private const int MaximoNoGrafico = 20; + + private const string Estilo = + "body{font-family:Segoe UI,Arial,sans-serif;color:#202020;background:#F4F4F4;margin:0}" + + "header{display:flex;gap:16px;align-items:center;background:#006B2D;color:#fff;padding:12px 20px}" + + "header img{height:56px;background:#fff;border-radius:8px;padding:4px}header h1{margin:0;font-size:22px}header p{margin:4px 0 0}" + + "main{max-width:1100px;margin:0 auto;padding:16px 20px}h2{color:#006B2D;border-left:4px solid #43A92C;padding-left:8px}" + + ".aviso{background:#fff4d6;border:1px solid #e0b100;padding:8px 12px}" + + "table{width:100%;border-collapse:collapse;background:#fff}th,td{border:1px solid #ddd;padding:6px;font-size:13px;vertical-align:top}" + + "th{background:#eef6ea;text-align:left}td.n{text-align:right;white-space:nowrap}svg{max-width:100%;height:auto;background:#fff}" + + ".cor{display:inline-block;width:12px;height:12px;margin-right:6px;vertical-align:middle}" + + "footer{margin-top:24px;font-size:12px;color:#666}" + + "@media print{body{background:#fff}header{background:#fff;color:#006B2D;border-bottom:2px solid #006B2D}tr{page-break-inside:avoid}svg{page-break-inside:avoid}}"; + + public static void Gravar(DadosRelatorio dados, string arquivo) => + File.WriteAllText(arquivo, Gerar(dados), new UTF8Encoding(false)); + + public static string Gerar(DadosRelatorio d) + { + var p = d.Pasta; + var caminho = p.CaminhoCompleto(); + var s = new StringBuilder(); + s.Append(""); + s.Append(""); + s.Append($"Espaço em disco - {H(caminho)}"); + s.Append($"
\"MT

Relatório de espaço em disco

"); + s.Append($"

{H(d.Computador)} | {H(caminho)} | {d.Gerado.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture)}

"); + if (d.Interrompida) + { + s.Append("

A varredura foi interrompida antes do fim. Os números mostram só o que foi lido até ali.

"); + } + + Resumo(s, d); + Grafico(s, p); + MaioresPastas(s, p, d.Quantos); + Arquivos(s, "Maiores arquivos", Analises.MaioresArquivos(p, d.Quantos)); + Tipos(s, p); + var antigos = Analises.ArquivosAntigos(p, Idade.DoisAnos, d.Gerado, d.Quantos); + s.Append($"

Sem alteração há mais de 2 anos

{H(Formatador.Plural(antigos.Quantidade, "arquivo", "arquivos"))}, {H(Formatador.Tamanho(antigos.Tamanho))}.

"); + Arquivos(s, null, antigos.Maiores); + Usuarios(s, p); + if (d.Duplicados is { } dup) + { + Duplicados(s, dup, d.Quantos); + } + + s.Append($"
Gerado pelo MapDisk - MT {H(ExecutorCli.Versao)}, da MT - Manfred Tecnologia (www.manfred.com.br).
"); + s.Append("
"); + return s.ToString(); + } + + private static void Resumo(StringBuilder s, DadosRelatorio d) + { + var p = d.Pasta; + s.Append($"

Resumo

Total lido: {H(Formatador.Tamanho(p.Tamanho))} ({H(Formatador.Tamanho(p.Alocado))} alocados) "); + s.Append($"em {H(Formatador.Plural(p.ArquivosTotal, "arquivo", "arquivos"))} e {H(Formatador.Plural(p.PastasTotal, "pasta", "pastas"))}."); + if (d.Volume is { } v) + { + s.Append($" Unidade {H(v.Raiz)}: {H(Formatador.Tamanho(v.Livre))} livres de {H(Formatador.Tamanho(v.Total))} ({H(v.SistemaArquivos)})."); + } + + s.Append("

"); + var semLeitura = p.PastasSemAcesso + p.PastasComErro; + if (semLeitura > 0) + { + s.Append($"

{H(Formatador.Plural(semLeitura, "pasta não pôde ser lida e não entra nesta conta", "pastas não puderam ser lidas e não entram nesta conta"))}. "); + s.Append("Varrer como administrador lê as pastas locais sem acesso.

"); + } + } + + private static void Grafico(StringBuilder s, NoPasta p) + { + var c = ItensGrafico.DaPasta(p, ModoExibicao.Tamanho, MaximoNoGrafico); + if (c.Itens.Count == 0) + { + return; + } + + var blocos = Treemap.Dispor(c.Itens.Select(i => i.Valor).ToList(), LarguraGrafico, AlturaGrafico); + var cores = Paleta.CoresDe(c.Itens); + s.Append($"

Gráfico

"); + for (var i = 0; i < blocos.Count; i++) + { + var b = blocos[i]; + s.Append(FormattableString.Invariant($"{H(c.Itens[i].Nome)}")); + if (b.Largura >= 90 && b.Altura >= 28) + { + s.Append(FormattableString.Invariant($"{H(c.Itens[i].Nome)}")); + } + } + + s.Append(""); + for (var i = 0; i < c.Itens.Count; i++) + { + var item = c.Itens[i]; + s.Append($""); + s.Append($""); + } + + s.Append("
ItemTamanho% da pasta
{H(item.Nome)}{H(Formatador.Tamanho(item.Valor))}{H(Formatador.Porcentagem(c.Total > 0 ? (double)item.Valor / c.Total : 0))}
"); + if (c.NaoLidas.Count > 0) + { + s.Append($"

Fora do gráfico, sem leitura: {H(string.Join(", ", c.NaoLidas))}.

"); + } + } + + private static void MaioresPastas(StringBuilder s, NoPasta p, int quantos) + { + s.Append("

Maiores pastas

"); + var lidas = p.Subpastas.Where(x => x.Estado == EstadoPasta.Lida).OrderByDescending(x => x.Tamanho).Take(quantos); + var semLeitura = p.Subpastas.Where(x => x.Estado is EstadoPasta.SemAcesso or EstadoPasta.ErroLeitura or EstadoPasta.Pendente); + foreach (var x in lidas) + { + s.Append($""); + s.Append($""); + s.Append($""); + } + + foreach (var x in semLeitura) + { + var estado = x.Estado switch + { + EstadoPasta.SemAcesso => "sem acesso", + EstadoPasta.ErroLeitura => "erro de leitura", + _ => "não lida", + }; + s.Append($""); + } + + s.Append("
PastaTamanho% da pastaArquivosÚltima alteração
{H(x.Nome)}{H(Formatador.Tamanho(x.Tamanho))}{H(Formatador.Porcentagem(p.Tamanho > 0 ? (double)x.Tamanho / p.Tamanho : 0))}{H(Formatador.Numero(x.ArquivosTotal))}{H(Formatador.Data(x.UltimaModificacao))}
{H(x.Nome)}{estado}
"); + } + + private static void Arquivos(StringBuilder s, string? titulo, IReadOnlyList arquivos) + { + if (titulo is not null) + { + s.Append($"

{H(titulo)}

"); + } + + if (arquivos.Count == 0) + { + s.Append("

Nenhum.

"); + return; + } + + s.Append(""); + foreach (var a in arquivos) + { + s.Append($""); + s.Append($""); + } + + s.Append("
ArquivoPastaTamanhoÚltima alteração
{H(a.Arquivo.Nome)}{H(a.Pasta.CaminhoCompleto())}{H(Formatador.Tamanho(a.Arquivo.Tamanho))}{H(Formatador.Data(a.Arquivo.Modificacao))}
"); + } + + private static void Tipos(StringBuilder s, NoPasta p) + { + s.Append("

Por tipo

"); + foreach (var t in Analises.PorCategoria(p)) + { + s.Append($""); + s.Append($""); + } + + s.Append("
TipoArquivosTamanho% da pasta
{H(t.Nome)}{H(Formatador.Numero(t.Quantidade))}{H(Formatador.Tamanho(t.Tamanho))}{H(Formatador.Porcentagem(p.Tamanho > 0 ? (double)t.Tamanho / p.Tamanho : 0))}
"); + } + + private static void Usuarios(StringBuilder s, NoPasta p) + { + var u = Analises.PorUsuario(p); + if (u.PastaDePerfis is null) + { + return; + } + + s.Append("

Por usuário

"); + foreach (var perfil in u.Perfis) + { + var valor = perfil.Estado == EstadoPasta.Lida ? Formatador.Tamanho(perfil.Tamanho) : "sem acesso"; + s.Append($""); + } + + s.Append("
PerfilTamanho
{H(perfil.Nome)}{H(valor)}
"); + } + + private static void Duplicados(StringBuilder s, ResultadoDuplicados r, int quantos) + { + s.Append("

Duplicados

"); + if (r.Grupos.Count == 0) + { + s.Append("

Nenhum arquivo repetido acima do tamanho mínimo da busca.

"); + return; + } + + var copias = r.Grupos.Sum(g => g.Repetido); + s.Append($"

{H(Formatador.Plural(r.Grupos.Count, "grupo", "grupos"))} com {H(Formatador.Tamanho(copias))} em cópias.

"); + s.Append(""); + foreach (var g in r.Grupos.Take(quantos)) + { + foreach (var a in g.Arquivos) + { + s.Append($""); + } + } + + s.Append("
GrupoArquivoTamanho
{g.Numero}{H(a.Caminho)}{H(Formatador.Tamanho(g.Tamanho))}
"); + } +} diff --git a/testes/mapdisk.testes/relatorio-tecnico-testes.cs b/testes/mapdisk.testes/relatorio-tecnico-testes.cs new file mode 100644 index 0000000..22e5144 --- /dev/null +++ b/testes/mapdisk.testes/relatorio-tecnico-testes.cs @@ -0,0 +1,83 @@ +using System.Net; + +namespace MapDisk.Testes; + +public class RelatorioTecnicoTestes +{ + private static NoPasta Raiz() => Demonstracao.Motor().Iniciar(@"C:\", CancellationToken.None).Conclusao.Result.Raiz; + + private static DadosRelatorio Dados(NoPasta pasta, bool interrompida = false, ResultadoDuplicados? duplicados = null) => + new(pasta, new DateTime(2026, 10, 1, 14, 30, 0), "ESTACAO-01", new InfoVolume(@"C:\", "Sistema", "NTFS", 50L << 30, 200L << 30, 4096), interrompida, 10, duplicados); + + // O HTML codifica os acentos; os testes de texto leem o que o navegador mostra. + private static string Texto(DadosRelatorio dados) => WebUtility.HtmlDecode(RelatorioTecnico.Gerar(dados)); + + [Fact] + public void Tem_marca_resumo_grafico_e_listas() + { + var html = Texto(Dados(Raiz())); + Assert.StartsWith("", html); + Assert.Contains("data:image/png;base64,", html); + Assert.Contains("ESTACAO-01", html); + Assert.Contains("01/10/2026 14:30", html); + Assert.Contains("{titulo}", html); + } + + Assert.Contains($"{Formatador.Tamanho(50L << 30)} livres de {Formatador.Tamanho(200L << 30)}", html); + } + + [Fact] + public void Pasta_sem_acesso_nunca_vira_zero() + { + var html = Texto(Dados(Raiz())); + Assert.Contains("System Volume Information", html); + Assert.Contains("sem acesso", html); + Assert.Contains("não entra nesta conta", html); + } + + [Fact] + public void Varredura_interrompida_avisa_no_topo() + { + var html = Texto(Dados(Raiz(), interrompida: true)); + Assert.Contains("A varredura foi interrompida", html); + } + + [Fact] + public void Nao_carrega_nada_de_fora() + { + var html = RelatorioTecnico.Gerar(Dados(Raiz())); + Assert.DoesNotContain("src=\"http", html); + Assert.DoesNotContain("pasta", raiz)]); + var html = RelatorioTecnico.Gerar(Dados(raiz)); + Assert.DoesNotContain("pasta", html); + Assert.Contains("<b>pasta</b>", html); + } + + [Fact] + public void Duplicados_entram_so_quando_houve_busca() + { + Assert.DoesNotContain("

Duplicados

", Texto(Dados(Raiz()))); + var vazio = new ResultadoDuplicados(Raiz(), [], 0, false); + Assert.Contains("

Duplicados

", Texto(Dados(Raiz(), duplicados: vazio))); + } + + [Fact] + public void Grava_em_utf8() + { + var arquivo = Path.Combine(AppContext.BaseDirectory, "relatorio-" + Guid.NewGuid().ToString("N") + ".html"); + RelatorioTecnico.Gravar(Dados(Raiz()), arquivo); + Assert.Contains("Relatório de espaço em disco", WebUtility.HtmlDecode(File.ReadAllText(arquivo))); + File.Delete(arquivo); + } +} From 424371d9de9807b463bf7f7f630964c105d482e5 Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:15:06 -0300 Subject: [PATCH 3/8] Cria o item Analisar com MapDisk do Explorer R19: tres chaves em HKCU, sem administrador, que saem por completo ao desligar. O argumento --abrir corrige a aspa que o Explorer deixa na raiz da unidade. Autores: Manfred Heil Junior --- .../integracao/integracao-explorer.cs | 115 ++++++++++++++++++ src/mapdisk.nucleo/sistema/abertura.cs | 16 +++ testes/mapdisk.testes/abertura-testes.cs | 19 +++ .../integracao-explorer-testes.cs | 44 +++++++ 4 files changed, 194 insertions(+) create mode 100644 src/mapdisk.nucleo/integracao/integracao-explorer.cs create mode 100644 src/mapdisk.nucleo/sistema/abertura.cs create mode 100644 testes/mapdisk.testes/abertura-testes.cs create mode 100644 testes/mapdisk.testes/integracao-explorer-testes.cs diff --git a/src/mapdisk.nucleo/integracao/integracao-explorer.cs b/src/mapdisk.nucleo/integracao/integracao-explorer.cs new file mode 100644 index 0000000..b06083c --- /dev/null +++ b/src/mapdisk.nucleo/integracao/integracao-explorer.cs @@ -0,0 +1,115 @@ +using Microsoft.Win32; + +namespace MapDisk.Nucleo; + +/// Chaves do registro do usuário atual. Os testes usam a versão em memória. +public interface IChavesUsuario +{ + void Gravar(string chave, string? nome, string valor); + + string? Ler(string chave, string? nome); + + void ApagarArvore(string chave); +} + +/// HKCU de verdade. Não precisa de administrador (regra 4). +public sealed class ChavesUsuarioWindows : IChavesUsuario +{ + public void Gravar(string chave, string? nome, string valor) + { + using var k = Registry.CurrentUser.CreateSubKey(chave, writable: true); + k.SetValue(nome ?? string.Empty, valor, RegistryValueKind.String); + } + + public string? Ler(string chave, string? nome) + { + using var k = Registry.CurrentUser.OpenSubKey(chave); + return k?.GetValue(nome ?? string.Empty) as string; + } + + public void ApagarArvore(string chave) => Registry.CurrentUser.DeleteSubKeyTree(chave, throwOnMissingSubKey: false); +} + +public sealed class ChavesEmMemoria : IChavesUsuario +{ + private readonly Dictionary<(string Chave, string Nome), string> _valores = []; + + public IReadOnlyCollection Todas => _valores.Keys.Select(k => k.Chave).Distinct().ToList(); + + public void Gravar(string chave, string? nome, string valor) => _valores[(chave.ToLowerInvariant(), nome ?? string.Empty)] = valor; + + public string? Ler(string chave, string? nome) => + _valores.TryGetValue((chave.ToLowerInvariant(), nome ?? string.Empty), out var v) ? v : null; + + public void ApagarArvore(string chave) + { + var prefixo = chave.ToLowerInvariant(); + foreach (var k in _valores.Keys.Where(k => k.Chave == prefixo || k.Chave.StartsWith(prefixo + "\\", StringComparison.Ordinal)).ToList()) + { + _valores.Remove(k); + } + } +} + +public enum EstadoIntegracao +{ + Desligada, + Ligada, + + /// Ligada, mas apontando para outro .exe (o programa mudou de lugar). + OutroLocal, +} + +/// Item "Analisar com MapDisk" no menu clássico do Explorer (R19). Sai por completo ao desligar (regra 5). +public static class IntegracaoExplorer +{ + public const string Texto = "Analisar com MapDisk"; + + public static readonly string[] Chaves = + [ + @"Software\Classes\Directory\shell\MapDisk", + @"Software\Classes\Drive\shell\MapDisk", + @"Software\Classes\Directory\Background\shell\MapDisk", + ]; + + public static string ComandoDe(string exe, string marcador) => $"\"{exe}\" {Abertura.Argumento} \"{marcador}\""; + + public static void Ligar(IChavesUsuario chaves, string exe) + { + foreach (var chave in Chaves) + { + var marcador = chave.Contains(@"\Background\", StringComparison.Ordinal) ? "%V" : "%1"; + chaves.Gravar(chave, null, Texto); + chaves.Gravar(chave, "Icon", exe + ",0"); + chaves.Gravar(chave + @"\command", null, ComandoDe(exe, marcador)); + } + } + + public static void Desligar(IChavesUsuario chaves) + { + foreach (var chave in Chaves) + { + chaves.ApagarArvore(chave); + } + } + + /// O .exe que o item chama hoje, ou null quando desligado. + public static string? ExeRegistrado(IChavesUsuario chaves) + { + var comando = chaves.Ler(Chaves[0] + @"\command", null); + if (comando is null || !comando.StartsWith('"')) + { + return null; + } + + var fim = comando.IndexOf('"', 1); + return fim > 1 ? comando[1..fim] : null; + } + + public static EstadoIntegracao Estado(IChavesUsuario chaves, string exe) => ExeRegistrado(chaves) switch + { + null => EstadoIntegracao.Desligada, + var e when string.Equals(e, exe, StringComparison.OrdinalIgnoreCase) => EstadoIntegracao.Ligada, + _ => EstadoIntegracao.OutroLocal, + }; +} diff --git a/src/mapdisk.nucleo/sistema/abertura.cs b/src/mapdisk.nucleo/sistema/abertura.cs new file mode 100644 index 0000000..1884687 --- /dev/null +++ b/src/mapdisk.nucleo/sistema/abertura.cs @@ -0,0 +1,16 @@ +namespace MapDisk.Nucleo; + +/// Pedido do Explorer: abrir a janela já varrendo a pasta clicada. +public static class Abertura +{ + public const string Argumento = "--abrir"; + + /// O Explorer manda a raiz da unidade como "C:\", e o Windows lê a barra antes da aspa como aspa escapada. + public static string Corrigir(string alvo) => alvo.EndsWith('"') ? alvo[..^1] + "\\" : alvo; + + public static bool EhPedido(IReadOnlyList args, out string? alvo) + { + alvo = args is [var a, var b] && string.Equals(a, Argumento, StringComparison.OrdinalIgnoreCase) ? Corrigir(b) : null; + return alvo is not null; + } +} diff --git a/testes/mapdisk.testes/abertura-testes.cs b/testes/mapdisk.testes/abertura-testes.cs new file mode 100644 index 0000000..a06a6b6 --- /dev/null +++ b/testes/mapdisk.testes/abertura-testes.cs @@ -0,0 +1,19 @@ +namespace MapDisk.Testes; + +public class AberturaTestes +{ + [Theory] + [InlineData("C:\"", @"C:\")] + [InlineData(@"D:\Dados", @"D:\Dados")] + [InlineData(@"\\servidor\pasta", @"\\servidor\pasta")] + public void Corrige_a_aspa_que_o_explorer_deixa(string recebido, string esperado) => + Assert.Equal(esperado, Abertura.Corrigir(recebido)); + + [Fact] + public void Reconhece_o_pedido() + { + Assert.True(Abertura.EhPedido(["--abrir", "C:\""], out var alvo)); + Assert.Equal(@"C:\", alvo); + Assert.False(Abertura.EhPedido(["varrer", "C:"], out _)); + } +} diff --git a/testes/mapdisk.testes/integracao-explorer-testes.cs b/testes/mapdisk.testes/integracao-explorer-testes.cs new file mode 100644 index 0000000..ef0a64c --- /dev/null +++ b/testes/mapdisk.testes/integracao-explorer-testes.cs @@ -0,0 +1,44 @@ +namespace MapDisk.Testes; + +public class IntegracaoExplorerTestes +{ + private const string Exe = @"E:\Ferramentas\mapdisk.exe"; + + [Fact] + public void Ligar_grava_as_tres_chaves_no_usuario() + { + var chaves = new ChavesEmMemoria(); + IntegracaoExplorer.Ligar(chaves, Exe); + foreach (var raiz in IntegracaoExplorer.Chaves) + { + Assert.StartsWith(@"Software\Classes\", raiz); + Assert.Equal("Analisar com MapDisk", chaves.Ler(raiz, null)); + Assert.Equal(Exe + ",0", chaves.Ler(raiz, "Icon")); + Assert.Contains("--abrir", chaves.Ler(raiz + @"\command", null)); + } + + Assert.Equal("\"" + Exe + "\" --abrir \"%V\"", chaves.Ler(@"Software\Classes\Directory\Background\shell\MapDisk\command", null)); + Assert.Equal("\"" + Exe + "\" --abrir \"%1\"", chaves.Ler(@"Software\Classes\Drive\shell\MapDisk\command", null)); + } + + [Fact] + public void Desligar_tira_tudo() + { + var chaves = new ChavesEmMemoria(); + IntegracaoExplorer.Ligar(chaves, Exe); + IntegracaoExplorer.Desligar(chaves); + Assert.Empty(chaves.Todas); + Assert.Equal(EstadoIntegracao.Desligada, IntegracaoExplorer.Estado(chaves, Exe)); + } + + [Fact] + public void Estado_reconhece_outro_exe() + { + var chaves = new ChavesEmMemoria(); + IntegracaoExplorer.Ligar(chaves, @"F:\antigo\mapdisk.exe"); + Assert.Equal(EstadoIntegracao.OutroLocal, IntegracaoExplorer.Estado(chaves, Exe)); + Assert.Equal(@"F:\antigo\mapdisk.exe", IntegracaoExplorer.ExeRegistrado(chaves)); + IntegracaoExplorer.Ligar(chaves, Exe); + Assert.Equal(EstadoIntegracao.Ligada, IntegracaoExplorer.Estado(chaves, Exe)); + } +} From b1d6b63da7122e4cd7546361adc8a9badcb7c3ce Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:15:55 -0300 Subject: [PATCH 4/8] Completa a linha de comando R18: --relatorio grava o HTML do tecnico, --integrar e --remover-integracao ligam e desligam o item do Explorer. A linha de comando segue sem apagar nem mover arquivo. Autores: Manfred Heil Junior --- .../linha-de-comando/argumentos.cs | 35 ++++++++++++++++--- .../linha-de-comando/executor-cli.cs | 28 ++++++++++++++- testes/mapdisk.testes/argumentos-testes.cs | 25 +++++++++++++ testes/mapdisk.testes/executor-cli-testes.cs | 23 ++++++++++++ 4 files changed, 105 insertions(+), 6 deletions(-) diff --git a/src/mapdisk.nucleo/linha-de-comando/argumentos.cs b/src/mapdisk.nucleo/linha-de-comando/argumentos.cs index 1d3094e..762ab02 100644 --- a/src/mapdisk.nucleo/linha-de-comando/argumentos.cs +++ b/src/mapdisk.nucleo/linha-de-comando/argumentos.cs @@ -8,6 +8,8 @@ public enum ComandoCli Ajuda, Versao, Varrer, + Integrar, + RemoverIntegracao, } /// Argumentos da linha de comando já interpretados. A linha de comando só lê. @@ -20,6 +22,8 @@ public sealed class ArgumentosCli Uso: mapdisk abre a janela mapdisk varrer [opções] varre e mostra os maiores itens + mapdisk --integrar põe "Analisar com MapDisk" no menu do Explorer + mapdisk --remover-integracao tira o item do menu do Explorer mapdisk --ajuda mostra esta ajuda mapdisk --versao mostra a versão @@ -27,11 +31,14 @@ mapdisk varrer [opções] varre e mostra os maiores itens (\\servidor\pasta). Opções de varrer: - --csv grava todas as pastas num arquivo CSV - --top quantos itens mostrar, de 1 a 1000 (padrão: 10) + --csv grava todas as pastas num arquivo CSV + --relatorio grava o relatório com a marca da MT e o gráfico + --top quantos itens mostrar e pôr em cada lista do + relatório, de 1 a 1000 (padrão: 10) Exemplos: mapdisk varrer C: + mapdisk varrer D:\ --relatorio d.html mapdisk varrer \\servidor\dados --csv dados.csv --top 30 A linha de comando só lê. Ela nunca apaga nem move arquivos. @@ -44,6 +51,8 @@ A linha de comando só lê. Ela nunca apaga nem move arquivos. public string? Csv { get; private set; } + public string? Relatorio { get; private set; } + public int Top { get; private set; } = 10; public List Erros { get; } = []; @@ -74,6 +83,17 @@ public static ArgumentosCli Interpretar(IReadOnlyList args) a.Comando = ComandoCli.Varrer; comandos++; break; + case "--integrar": + a.Comando = ComandoCli.Integrar; + comandos++; + break; + case "--remover-integracao": + a.Comando = ComandoCli.RemoverIntegracao; + comandos++; + break; + case "--relatorio": + a.Relatorio = Valor(args, ref i, arg, a.Erros); + break; case "--csv": a.Csv = Valor(args, ref i, arg, a.Erros); break; @@ -101,7 +121,7 @@ public static ArgumentosCli Interpretar(IReadOnlyList args) if (comandos > 1) { - a.Erros.Add("Use só um comando por vez: varrer, --ajuda ou --versao."); + a.Erros.Add("Use só um comando por vez: varrer, --integrar, --remover-integracao, --ajuda ou --versao."); } if (a.Comando == ComandoCli.Varrer) @@ -127,6 +147,11 @@ public static ArgumentosCli Interpretar(IReadOnlyList args) { a.Erros.Add("O arquivo de --csv tem que terminar em .csv."); } + + if (a.Relatorio is { } rel && !rel.EndsWith(".html", StringComparison.OrdinalIgnoreCase)) + { + a.Erros.Add("O arquivo de --relatorio tem que terminar em .html."); + } } else { @@ -135,9 +160,9 @@ public static ArgumentosCli Interpretar(IReadOnlyList args) a.Erros.Add($"Comando desconhecido: {alvos[0]}. Use varrer ou --ajuda."); } - if (a.Csv != null || topDado) + if (a.Csv != null || a.Relatorio != null || topDado) { - a.Erros.Add("As opções --csv e --top pedem o comando varrer."); + a.Erros.Add("As opções --csv, --relatorio e --top pedem o comando varrer."); } } diff --git a/src/mapdisk.nucleo/linha-de-comando/executor-cli.cs b/src/mapdisk.nucleo/linha-de-comando/executor-cli.cs index 91d8908..967d4ac 100644 --- a/src/mapdisk.nucleo/linha-de-comando/executor-cli.cs +++ b/src/mapdisk.nucleo/linha-de-comando/executor-cli.cs @@ -11,7 +11,8 @@ public static class ExecutorCli public static string Versao => typeof(ExecutorCli).Assembly.GetName().Version!.ToString(3); - public static int Executar(ArgumentosCli argumentos, IMotorVarredura motor, TextWriter saida, TextWriter erro, CancellationToken cancelar) + /// As chaves e o .exe só mudam nos testes; o padrão é o registro do usuário e este programa. + public static int Executar(ArgumentosCli argumentos, IMotorVarredura motor, TextWriter saida, TextWriter erro, CancellationToken cancelar, IChavesUsuario? chaves = null, string? exe = null) { if (!argumentos.Valido) { @@ -32,6 +33,15 @@ public static int Executar(ArgumentosCli argumentos, IMotorVarredura motor, Text case ComandoCli.Ajuda or ComandoCli.Janela: saida.WriteLine(ArgumentosCli.TextoAjuda); return CodigoSucesso; + case ComandoCli.Integrar: + IntegracaoExplorer.Ligar(chaves ?? new ChavesUsuarioWindows(), exe ?? Environment.ProcessPath!); + saida.WriteLine("Item \"Analisar com MapDisk\" ligado no menu das pastas e unidades do Explorer."); + saida.WriteLine("No Windows 11, ele fica em \"Mostrar mais opções\". Se o mapdisk.exe mudar de lugar, rode --integrar de novo."); + return CodigoSucesso; + case ComandoCli.RemoverIntegracao: + IntegracaoExplorer.Desligar(chaves ?? new ChavesUsuarioWindows()); + saida.WriteLine("Item \"Analisar com MapDisk\" tirado do menu do Explorer."); + return CodigoSucesso; } saida.WriteLine($"Varrendo {argumentos.Caminho}..."); @@ -90,6 +100,22 @@ public static int Executar(ArgumentosCli argumentos, IMotorVarredura motor, Text saida.WriteLine($"CSV gravado em {Path.GetFullPath(csv)}"); } + if (argumentos.Relatorio is { } relatorio) + { + try + { + RelatorioTecnico.Gravar(new DadosRelatorio(raiz, DateTime.Now, Environment.MachineName, r.Volume, r.Cancelada, argumentos.Top, null), relatorio); + } + catch (Exception e) when (e is IOException or UnauthorizedAccessException) + { + erro.WriteLine($"Não foi possível gravar o relatório: {e.Message}"); + return CodigoFalha; + } + + saida.WriteLine(); + saida.WriteLine($"Relatório gravado em {Path.GetFullPath(relatorio)}"); + } + return r.Cancelada ? CodigoCancelado : CodigoSucesso; } diff --git a/testes/mapdisk.testes/argumentos-testes.cs b/testes/mapdisk.testes/argumentos-testes.cs index c39a922..3e6b1c8 100644 --- a/testes/mapdisk.testes/argumentos-testes.cs +++ b/testes/mapdisk.testes/argumentos-testes.cs @@ -63,4 +63,29 @@ public void A_ajuda_diz_que_a_linha_de_comando_so_le() { Assert.Contains("nunca apaga nem move", ArgumentosCli.TextoAjuda); } + + [Fact] + public void Le_o_relatorio_e_exige_html() + { + Assert.Equal("d.html", ArgumentosCli.Interpretar(["varrer", "D:", "--relatorio", "d.html"]).Relatorio); + Assert.Contains("O arquivo de --relatorio tem que terminar em .html.", ArgumentosCli.Interpretar(["varrer", "D:", "--relatorio", "d.txt"]).Erros); + Assert.Contains("As opções --csv, --relatorio e --top pedem o comando varrer.", ArgumentosCli.Interpretar(["--relatorio", "d.html"]).Erros); + } + + [Fact] + public void Le_integrar_e_remover() + { + Assert.Equal(ComandoCli.Integrar, ArgumentosCli.Interpretar(["--integrar"]).Comando); + Assert.Equal(ComandoCli.RemoverIntegracao, ArgumentosCli.Interpretar(["--remover-integracao"]).Comando); + Assert.False(ArgumentosCli.Interpretar(["--integrar", "varrer", "C:"]).Valido); + } + + [Fact] + public void Ajuda_lista_todas_as_opcoes() + { + foreach (var opcao in new[] { "--relatorio", "--integrar", "--remover-integracao", "--csv", "--top" }) + { + Assert.Contains(opcao, ArgumentosCli.TextoAjuda); + } + } } diff --git a/testes/mapdisk.testes/executor-cli-testes.cs b/testes/mapdisk.testes/executor-cli-testes.cs index a3f93d4..77d8f5d 100644 --- a/testes/mapdisk.testes/executor-cli-testes.cs +++ b/testes/mapdisk.testes/executor-cli-testes.cs @@ -128,4 +128,27 @@ public void Fim_com_pastas_nao_lidas_avisa_na_linha_de_comando() Assert.Contains("Atenção: 2 pastas não foram lidas", saida); } + + [Fact] + public void Grava_o_relatorio_pedido() + { + var arquivo = Path.Combine(AppContext.BaseDirectory, "cli-" + Guid.NewGuid().ToString("N") + ".html"); + var codigo = Rodar(Demonstracao.Motor(), out var saida, out _, "varrer", "C:", "--relatorio", arquivo); + Assert.Equal(ExecutorCli.CodigoSucesso, codigo); + Assert.Contains("Relatório gravado em", saida); + Assert.Contains("Relatório de espaço em disco", File.ReadAllText(arquivo)); + File.Delete(arquivo); + } + + [Fact] + public void Integrar_e_remover_mexem_so_nas_chaves() + { + var chaves = new ChavesEmMemoria(); + var s = new StringWriter(); + Assert.Equal(ExecutorCli.CodigoSucesso, ExecutorCli.Executar(ArgumentosCli.Interpretar(["--integrar"]), Demonstracao.Motor(), s, new StringWriter(), CancellationToken.None, chaves, @"E:\mapdisk.exe")); + Assert.Equal(EstadoIntegracao.Ligada, IntegracaoExplorer.Estado(chaves, @"E:\mapdisk.exe")); + Assert.Contains("Mostrar mais opções", s.ToString()); + ExecutorCli.Executar(ArgumentosCli.Interpretar(["--remover-integracao"]), Demonstracao.Motor(), s, new StringWriter(), CancellationToken.None, chaves, @"E:\mapdisk.exe"); + Assert.Empty(chaves.Todas); + } } From c22579ef95e904fb4a895b04f2a4c7f05f365c04 Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:19:59 -0300 Subject: [PATCH 5/8] Liga exportar, opcoes e a abertura pelo Explorer na janela O tecnico exporta HTML e CSV da pasta das analises, liga o item do Explorer e guarda as opcoes numa tela so. O registro de acoes passa para as Opcoes. O --abrir abre a janela ja varrendo, e o relatorio para o cliente comeca com os criterios guardados. Autores: Manfred Heil Junior --- .../relatorios/relatorio-tecnico.cs | 10 +- src/mapdisk/janela-opcoes.xaml | 104 +++++++++++++++++ src/mapdisk/janela-opcoes.xaml.cs | 108 ++++++++++++++++++ src/mapdisk/janela-principal.xaml | 15 ++- src/mapdisk/janela-principal.xaml.cs | 79 +++++++++++-- src/mapdisk/janela-relatorio.xaml.cs | 6 +- src/mapdisk/programa.cs | 11 +- testes/mapdisk.testes/recursos-testes.cs | 18 ++- .../relatorio-tecnico-testes.cs | 8 ++ 9 files changed, 343 insertions(+), 16 deletions(-) create mode 100644 src/mapdisk/janela-opcoes.xaml create mode 100644 src/mapdisk/janela-opcoes.xaml.cs diff --git a/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs b/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs index 65b75b4..ee9b08e 100644 --- a/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs +++ b/src/mapdisk.nucleo/relatorios/relatorio-tecnico.cs @@ -28,6 +28,14 @@ public static class RelatorioTecnico "footer{margin-top:24px;font-size:12px;color:#666}" + "@media print{body{background:#fff}header{background:#fff;color:#006B2D;border-bottom:2px solid #006B2D}tr{page-break-inside:avoid}svg{page-break-inside:avoid}}"; + /// Nome sugerido, sem extensão: "espaco-" mais a pasta e a data. A raiz "C:\" vira "c". + public static string NomeDoArquivo(NoPasta pasta, DateTime agora) + { + var invalidos = Path.GetInvalidFileNameChars(); + var nome = new string(pasta.Nome.Where(c => !invalidos.Contains(c) && c != ':').ToArray()).Trim().ToLowerInvariant(); + return $"espaco-{(nome.Length > 0 ? nome : "pasta")}-{agora.ToString("yyyyMMdd-HHmm", CultureInfo.InvariantCulture)}"; + } + public static void Gravar(DadosRelatorio dados, string arquivo) => File.WriteAllText(arquivo, Gerar(dados), new UTF8Encoding(false)); @@ -80,7 +88,7 @@ private static void Resumo(StringBuilder s, DadosRelatorio d) if (semLeitura > 0) { s.Append($"

{H(Formatador.Plural(semLeitura, "pasta não pôde ser lida e não entra nesta conta", "pastas não puderam ser lidas e não entram nesta conta"))}. "); - s.Append("Varrer como administrador lê as pastas locais sem acesso.

"); + s.Append("O botão \"Varrer como administrador\" lê as pastas locais que ficaram sem acesso.

"); } } diff --git a/src/mapdisk/janela-opcoes.xaml b/src/mapdisk/janela-opcoes.xaml new file mode 100644 index 0000000..86a4f38 --- /dev/null +++ b/src/mapdisk/janela-opcoes.xaml @@ -0,0 +1,104 @@ + + + + + + + + + + + - diff --git a/src/mapdisk/janela-principal.xaml.cs b/src/mapdisk/janela-principal.xaml.cs index 4d6f43d..70320c4 100644 --- a/src/mapdisk/janela-principal.xaml.cs +++ b/src/mapdisk/janela-principal.xaml.cs @@ -172,8 +172,12 @@ private void AoGerarRelatorio(object sender, RoutedEventArgs e) } var relatorio = new PainelRelatorio(raiz, Volumes.Ler(raiz.CaminhoCompleto())?.Livre, Environment.UserName, _painel.Locais, - _painel.Analises.Duplicados.Resultado); - new JanelaRelatorio(relatorio, () => _ultimaSelecao?.Cast().ToList() ?? []) { Owner = this }.ShowDialog(); + _painel.Analises.Duplicados.Resultado) + { + Criterios = _painel.Preferencias.Criterios, + }; + new JanelaRelatorio(relatorio, () => _ultimaSelecao?.Cast().ToList() ?? [], + c => _painel.GravarPreferencias(_painel.Preferencias.ComCriterios(c))) { Owner = this }.ShowDialog(); } private void AoLerResposta(object sender, RoutedEventArgs e) @@ -226,16 +230,77 @@ private async Task AgirSobre(IReadOnlyList itens, bool mover) await Agir(new PedidoAcao(TipoAcao.Mover, selecionados, dialogo.FolderName)); } - private void AoAbrirRegistro(object sender, RoutedEventArgs e) + private void AoAbrirOpcoes(object sender, RoutedEventArgs e) { - if (File.Exists(_painel.LocalDoRegistro)) + if (new JanelaOpcoes(_painel) { Owner = this }.ShowDialog() == true) { - Shell.MostrarNoExplorer(_painel.LocalDoRegistro, ehArquivo: true); + // A quantidade de maiores arquivos pode ter mudado: calcula de novo. + _pastaAnalisada = null; + _ = AtualizarAnalises(); } - else + } + + private void AoExportarHtml(object sender, RoutedEventArgs e) + { + if (PastaParaExportar() is not { } pasta + || Destino("Onde gravar o relatório", RelatorioTecnico.NomeDoArquivo(pasta, DateTime.Now) + ".html", "Página HTML (*.html)|*.html") is not { } arquivo) { - MessageBox.Show(this, $"Nenhuma ação registrada ainda. O registro fica em {_painel.LocalDoRegistro}.", "MapDisk - MT", + return; + } + + var dados = new DadosRelatorio(pasta, DateTime.Now, Environment.MachineName, _painel.Volume, _painel.Interrompida, + _painel.Preferencias.MaioresArquivos, _painel.Analises.Duplicados.Resultado); + if (Gravar(() => RelatorioTecnico.Gravar(dados, arquivo)) + && MessageBox.Show(this, "Relatório gravado. Abrir agora?", "MapDisk - MT", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + { + Shell.AbrirNoNavegador(arquivo); + } + } + + private void AoExportarCsv(object sender, RoutedEventArgs e) + { + if (PastaParaExportar() is not { } pasta + || Destino("Onde gravar a planilha", RelatorioTecnico.NomeDoArquivo(pasta, DateTime.Now) + ".csv", "CSV (*.csv)|*.csv") is not { } arquivo) + { + return; + } + + if (Gravar(() => ExportadorCsv.Gravar(pasta, arquivo))) + { + Shell.MostrarNoExplorer(arquivo, ehArquivo: true); + } + } + + // A mesma pasta das análises: a selecionada na árvore, ou a raiz mostrada. + private NoPasta? PastaParaExportar() + { + if (_painel.Estado != EstadoPainel.Parado || _painel.PastaDasAnalises(Tabela.SelectedItem as LinhaArvore) is not { } pasta) + { + MessageBox.Show(this, "Varra uma unidade ou pasta antes de exportar e espere o fim da varredura.", "MapDisk - MT", MessageBoxButton.OK, MessageBoxImage.Information); + return null; + } + + return pasta; + } + + private string? Destino(string titulo, string nome, string filtro) + { + var dialogo = new SaveFileDialog { Title = titulo, FileName = nome, Filter = filtro, OverwritePrompt = true }; + return dialogo.ShowDialog(this) == true ? dialogo.FileName : null; + } + + private bool Gravar(Action gravar) + { + try + { + gravar(); + return true; + } + catch (Exception erro) when (erro is IOException or UnauthorizedAccessException) + { + MessageBox.Show(this, $"Não foi possível gravar: {erro.Message}", "MapDisk - MT", MessageBoxButton.OK, MessageBoxImage.Warning); + return false; } } diff --git a/src/mapdisk/janela-relatorio.xaml.cs b/src/mapdisk/janela-relatorio.xaml.cs index aef7a9d..939f8ae 100644 --- a/src/mapdisk/janela-relatorio.xaml.cs +++ b/src/mapdisk/janela-relatorio.xaml.cs @@ -12,11 +12,14 @@ public partial class JanelaRelatorio : Window private const long Mb = 1024 * 1024; private readonly PainelRelatorio _painel; private readonly Func> _selecaoAtual; + private readonly Action _guardarCriterios; - public JanelaRelatorio(PainelRelatorio painel, Func> selecaoAtual) + /// Guarda os critérios usados no Sugerir para o próximo relatório. + public JanelaRelatorio(PainelRelatorio painel, Func> selecaoAtual, Action guardarCriterios) { _painel = painel; _selecaoAtual = selecaoAtual; + _guardarCriterios = guardarCriterios; DataContext = painel; InitializeComponent(); var c = painel.Criterios; @@ -38,6 +41,7 @@ private void AoSugerir(object sender, RoutedEventArgs e) } _painel.Criterios = new CriteriosSugestao(pastas, arquivos, anos, minimo * Mb); + _guardarCriterios(_painel.Criterios); _painel.Sugerir(DateTime.Now); } diff --git a/src/mapdisk/programa.cs b/src/mapdisk/programa.cs index 6259223..1bbfd65 100644 --- a/src/mapdisk/programa.cs +++ b/src/mapdisk/programa.cs @@ -24,7 +24,10 @@ private static int Main(string[] args) var demonstracao = args is [Demonstracao.Argumento]; var elevado = Elevacao.EhPedido(args, out var alvoElevado); - if (args.Length > 0 && !demonstracao && !elevado) + + // Pedido do item "Analisar com MapDisk" do Explorer: abre a janela já varrendo. + var aberto = Abertura.EhPedido(args, out var alvoAberto); + if (args.Length > 0 && !demonstracao && !elevado && !aberto) { return ModoLinhaDeComando.Executar(ArgumentosCli.Interpretar(args)); } @@ -41,12 +44,12 @@ private static int Main(string[] args) } var painel = PainelPrincipal.Padrao(); - if (elevado) + if (elevado || aberto) { - painel.TextoAlvo = alvoElevado!; + painel.TextoAlvo = (alvoElevado ?? alvoAberto)!; } - return aplicativo.Run(new JanelaPrincipal(painel, administrador ? " (administrador)" : string.Empty, varrerAoAbrir: elevado)); + return aplicativo.Run(new JanelaPrincipal(painel, administrador ? " (administrador)" : string.Empty, varrerAoAbrir: elevado || aberto)); } /// diff --git a/testes/mapdisk.testes/recursos-testes.cs b/testes/mapdisk.testes/recursos-testes.cs index d978c80..8223eca 100644 --- a/testes/mapdisk.testes/recursos-testes.cs +++ b/testes/mapdisk.testes/recursos-testes.cs @@ -69,7 +69,7 @@ public void Janela_tem_as_acoes_com_confirmacao() var janela = File.ReadAllText(App("janela-principal.xaml")); Assert.Contains("Click=\"AoRemover\"", janela); Assert.Contains("Click=\"AoMover\"", janela); - Assert.Contains("Click=\"AoAbrirRegistro\"", janela); + Assert.Contains("Click=\"AoAbrirRegistro\"", File.ReadAllText(App("janela-opcoes.xaml"))); Assert.Contains("SelectionMode=\"Extended\"", janela); Assert.Contains("ToolTipService.ShowOnDisabled=\"True\"", janela); Assert.Contains("{Binding TextoSessao}", janela); @@ -89,6 +89,22 @@ public void Janela_tem_o_relatorio_para_o_cliente() Assert.True(File.Exists(App("janela-resposta.xaml"))); } + [Fact] + public void Janela_tem_exportar_e_opcoes() + { + var janela = File.ReadAllText(App("janela-principal.xaml")); + Assert.Contains("Click=\"AoAbrirOpcoes\"", janela); + Assert.Contains("Click=\"AoExportarHtml\"", janela); + Assert.Contains("Click=\"AoExportarCsv\"", janela); + var opcoes = File.ReadAllText(App("janela-opcoes.xaml")); + foreach (var nome in new[] { "BotaoLigar", "BotaoDesligar", "CampoMaiores", "CampoMinimoDuplicados", "CampoPastas", "CampoArquivos", "CampoAnos", "CampoMinimo", "ListaAlvos", "TextoRegistro" }) + { + Assert.Contains($"x:Name=\"{nome}\"", opcoes); + } + + Assert.Contains("Abertura.EhPedido", File.ReadAllText(App("programa.cs"))); + } + [Fact] public void Janela_tem_a_aba_de_duplicados() { diff --git a/testes/mapdisk.testes/relatorio-tecnico-testes.cs b/testes/mapdisk.testes/relatorio-tecnico-testes.cs index 22e5144..36a0486 100644 --- a/testes/mapdisk.testes/relatorio-tecnico-testes.cs +++ b/testes/mapdisk.testes/relatorio-tecnico-testes.cs @@ -72,6 +72,14 @@ public void Duplicados_entram_so_quando_houve_busca() Assert.Contains("

Duplicados

", Texto(Dados(Raiz(), duplicados: vazio))); } + [Fact] + public void Nome_do_arquivo_vem_da_pasta_e_da_data() + { + var quando = new DateTime(2026, 10, 1, 9, 5, 0); + Assert.Equal("espaco-c-20261001-0905", RelatorioTecnico.NomeDoArquivo(new NoPasta(@"C:\", null), quando)); + Assert.Equal("espaco-financeiro-20261001-0905", RelatorioTecnico.NomeDoArquivo(new NoPasta("Financeiro", null), quando)); + } + [Fact] public void Grava_em_utf8() { From 2e2525487cdc374ab25552397241bb59cd0bc543 Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:25:09 -0300 Subject: [PATCH 6/8] Cria a pagina do programa Pagina estatica para mapdisk.manfred.com.br, sem script e sem nada de fora, com telas do modo demonstracao. Os textos passaram pela verificacao juridica, registrada na secao 11: Uso autorizado cobre as unidades removiveis e mapeadas, e a privacidade diz o que a hospedagem registra. Um teste novo confere que o programa nao usa classe de rede. O campo do alvo fica mais estreito para o botao Opcoes caber em 1280 px. A publicacao e outro passo, com autorizacao. Autores: Manfred Heil Junior --- ...ificacao-distribuicao-e-lgpd-2026-09-28.md | 49 +++++++ public/imagens/janela.png | Bin 0 -> 129697 bytes public/imagens/mapdisk.png | Bin 0 -> 5627 bytes public/imagens/mt-logo.png | Bin 0 -> 58954 bytes public/imagens/relatorio.png | Bin 0 -> 42421 bytes public/index.html | 129 ++++++++++++++++++ src/mapdisk/janela-principal.xaml | 2 +- testes/mapdisk.testes/pagina-testes.cs | 36 +++++ testes/mapdisk.testes/sem-rede-testes.cs | 22 +++ 9 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 public/imagens/janela.png create mode 100644 public/imagens/mapdisk.png create mode 100644 public/imagens/mt-logo.png create mode 100644 public/imagens/relatorio.png create mode 100644 public/index.html create mode 100644 testes/mapdisk.testes/pagina-testes.cs create mode 100644 testes/mapdisk.testes/sem-rede-testes.cs diff --git a/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md b/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md index 4774035..945d62f 100644 --- a/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md +++ b/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md @@ -162,3 +162,52 @@ Autorização, na página e na planilha: **RECOMENDAÇÃO de processo, fora do programa.** O relatório tem nomes de pastas e de arquivos do cliente. No atendimento, enviar só ao contato do cliente que pediu o serviço e guardar a resposta junto da ordem de serviço. Não há pendência de validação. + +## 11. Página do programa (acréscimo de 01/10/2026) + +**Contexto.** A fatia 8 cria a página `public/index.html`, para `mapdisk.manfred.com.br`, com o download, a lista do que o programa faz, os textos "Uso autorizado" e "Licença e garantias" da seção 5 e uma nota de privacidade. A página fica num serviço de hospedagem, atrás do Cloudflare. A publicação é um passo separado, com autorização do Manfred. + +**Premissas.** Valem as da seção 3. Vale também a premissa de que a distribuição gratuita pode ser relação de consumo, adotada por cautela. Na página, a MT é quem decide sobre os registros de acesso que a hospedagem e o Cloudflare guardam, como o endereço IP. Nessa condição, ela é controladora desses dados, que são dados pessoais (LGPD, art. 5º, I e VI, verificados na seção 3). + +**FATO LEGAL.** CDC, art. 30, verificado no Planalto em 01/10/2026 (`https://www.planalto.gov.br/ccivil_03/leis/l8078compilado.htm`): + +> "Toda informação ou publicidade, suficientemente precisa, veiculada por qualquer forma ou meio de comunicação com relação a produtos e serviços oferecidos ou apresentados, obriga o fornecedor que a fizer veicular ou dela se utilizar e integra o contrato que vier a ser celebrado." + +**Incidência:** a página apresenta o programa ao público, perto do download, e cada frase precisa sobre o que ele faz passa a valer como oferta. O art. 37, § 1º, verificado na mesma fonte e na mesma data, diz que "É enganosa qualquer modalidade de informação ou comunicação de caráter publicitário, inteira ou parcialmente falsa, ou, por qualquer outro modo, mesmo por omissão, capaz de induzir em erro o consumidor [...]". + +**FATO LEGAL.** LGPD, art. 6º, VI, na biblioteca local (`fontes-md/leis/03-lgpd-lei-13709-2018-compilado.md`), em dia no relatório de 23/09/2026: "transparência: garantia, aos titulares, de informações claras, precisas e facilmente acessíveis sobre a realização do tratamento e os respectivos agentes de tratamento [...]". + +**INTERPRETAÇÃO, ponto 1: "Uso autorizado".** O texto aprovado fala de exclusão definitiva só em pastas de rede. Desde a seção 9, a exclusão definitiva vale também em unidade removível e em unidade mapeada. Uma página que cita só a rede omite um caso de risco, e o art. 37, § 1º, alcança a omissão capaz de induzir em erro. O texto passa a citar as duas situações, com a mesma frase da seção 9 ("o MapDisk não usa a Lixeira"). + +**INTERPRETAÇÃO, ponto 2: frases sobre segurança.** As frases sobre segurança e funcionamento vinculam a MT (art. 30). Por isso, cada uma tem que corresponder ao que o programa faz e ao que os testes conferem: + +| Frase | Situação | +|---|---| +| "Feito para não dar susto" | Promessa vaga de resultado. Sai. O título passa a ser "Segurança" | +| "O programa não envia nenhuma informação pela internet" | Já aprovada na seção 5. Fica. A seção 6 pedia um teste que confira isso. A fatia 8 cria esse teste | +| "Pasta do sistema e raiz de unidade ficam bloqueadas" | Fica, com o alcance exato: bloqueadas para apagar e mover | +| "Nunca como zero" | Fica: regra 3 do produto, conferida por teste | +| Requisitos (Windows 10 e 11, Windows Server 2016 ou mais novo, 64 bits) | Fica. A página só vai ao ar depois do teste de lançamento do Manfred, que inclui um Windows Server | + +**INTERPRETAÇÃO, ponto 3: privacidade da página.** "Não usa cookies" seria uma afirmação absoluta sobre um serviço de terceiros que a MT não controla por completo: o Cloudflare pode gravar cookie técnico de segurança. O texto passa a dizer o que a página não tem e o que a hospedagem registra, para atender o art. 6º, VI, sem prometer o que depende de terceiros. + +**INTERPRETAÇÃO, ponto 4: GitHub.** O nome do GitHub aparece só para indicar onde está o download e o código, sem o logotipo e sem sugerir parceria. Não precisa de aviso de marca. A marca TreeSize não aparece, e um teste confere isso (seção 4.7). + +**RECOMENDAÇÃO aplicada.** Textos finais da página: + +> Segurança. O programa não envia nenhuma informação pela internet. Abre como usuário comum e só pede administrador pelo botão "Varrer como administrador". Não instala nada: roda de um pendrive ou de uma pasta de rede. Antes de apagar ou mover, mostra a lista, o total e o destino, e espera a sua confirmação. Cada ação fica registrada num arquivo do computador. As pastas do sistema do Windows e a raiz das unidades ficam bloqueadas para apagar e mover. Pasta que não pôde ser lida aparece como "sem acesso", nunca como zero. + +> Uso autorizado. O MapDisk - MT mostra o espaço ocupado em discos e pastas e permite enviar arquivos para a Lixeira, movê-los ou excluí-los definitivamente. Use o programa só em computadores e pastas que você tem autorização para administrar. Antes de apagar ou mover, confira a lista de itens e o destino. Em pastas de rede e em unidades removíveis ou mapeadas, o MapDisk não usa a Lixeira: a exclusão não pode ser desfeita pelo programa e os itens só voltam por uma cópia de segurança. O programa não envia nenhuma informação para fora do computador. + +> Licença e garantias. Texto da seção 5, sem mudança. + +> Privacidade. O programa não coleta nem envia dados. Esta página não tem formulário, propaganda nem ferramenta de estatística. A hospedagem e o Cloudflare, que entrega a página, registram dados técnicos de acesso, como o endereço IP, e podem gravar um cookie técnico de segurança. + +**Requisitos para implementação.** + +- [ ] Página com os quatro textos acima, "Uso autorizado" e "Licença e garantias" perto do botão de download (fatia 8). +- [ ] README com o novo "Uso autorizado" e com "Licença e garantias" perto do download (fatia 8). Fecha o primeiro item da seção 6. +- [ ] Teste que confere que o programa não usa classe de rede (fatia 8). Fecha o item "Nada sai da máquina" da seção 6. +- [ ] Página publicada só depois do teste de lançamento, que inclui um Windows Server. + +Não há pendência de validação. diff --git a/public/imagens/janela.png b/public/imagens/janela.png new file mode 100644 index 0000000000000000000000000000000000000000..7187f5b3437a53f2733a78de0c01e4cd398f71ad GIT binary patch literal 129697 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 literal 0 HcmV?d00001 diff --git a/public/imagens/mt-logo.png b/public/imagens/mt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f290f6580e994ef50ee195c3dfd098f10d6a61 GIT binary patch literal 58954 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 literal 0 HcmV?d00001 diff --git a/public/imagens/relatorio.png b/public/imagens/relatorio.png new file mode 100644 index 0000000000000000000000000000000000000000..741b71be7b363479ed23bce5c5851cb600f4cbac GIT binary patch literal 42421 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 A8vp + + + + +MapDisk - MT: onde está o espaço ocupado no disco + + + + + +
+ +
+
+ +
+
+

O que ele faz

+
+
+
    +
  • Varre uma unidade, uma pasta ou um caminho de rede e mostra as pastas em árvore, da maior para a menor.
  • +
  • Mostra num gráfico de blocos ou de pizza o que ocupa cada pasta.
  • +
  • Lista os maiores arquivos, os arquivos antigos e o espaço por tipo de arquivo e por usuário.
  • +
  • Acha arquivos repetidos, comparando o conteúdo, quando você pede.
  • +
  • Envia para a Lixeira ou move o que você escolher, sempre com confirmação.
  • +
  • Gera um relatório para o cliente decidir o que apagar e lê a resposta dele.
  • +
  • Grava o relatório do técnico em HTML, com o gráfico, e a lista das pastas em CSV.
  • +
  • Roda pela linha de comando, para varrer e gerar relatório sem abrir a janela.
  • +
+
+
+Janela do MapDisk com a árvore de pastas e o gráfico em blocos, em modo de demonstração +
A janela em modo de demonstração, com dados fictícios.
+
+
+
+ +
+

Relatório do técnico

+
+
+Relatório de espaço em disco com o resumo e o gráfico em blocos, gerado em modo de demonstração +
O relatório em HTML, também com dados fictícios.
+
+
+

Um arquivo só, com o resumo da pasta, o gráfico, as maiores pastas e arquivos, o espaço por tipo e os arquivos antigos. Abre em qualquer navegador e vira PDF pelo "Imprimir".

+

Pela linha de comando:

+

mapdisk varrer D:\ --relatorio d.html

+
+
+
+ +
+

Segurança

+
+

O programa não envia nenhuma informação pela internet. Abre como usuário comum e só pede administrador pelo botão "Varrer como administrador". Não instala nada: roda de um pendrive ou de uma pasta de rede.

+

Antes de apagar ou mover, mostra a lista, o total e o destino, e espera a sua confirmação. Cada ação fica registrada num arquivo do computador. As pastas do sistema do Windows e a raiz das unidades ficam bloqueadas para apagar e mover. Pasta que não pôde ser lida aparece como "sem acesso", nunca como zero.

+
+
+ +
+

Uso autorizado

+

O MapDisk - MT mostra o espaço ocupado em discos e pastas e permite enviar arquivos para a Lixeira, movê-los ou excluí-los definitivamente. Use o programa só em computadores e pastas que você tem autorização para administrar. Antes de apagar ou mover, confira a lista de itens e o destino. Em pastas de rede e em unidades removíveis ou mapeadas, o MapDisk não usa a Lixeira: a exclusão não pode ser desfeita pelo programa e os itens só voltam por uma cópia de segurança. O programa não envia nenhuma informação para fora do computador.

+ +

Licença e garantias

+

O MapDisk - MT é distribuído gratuitamente sob a GPL-3.0. Os tamanhos mostrados dependem do que o sistema de arquivos informa e das permissões da conta que roda o programa, e podem ficar incompletos quando alguma pasta não pode ser lida. A licença não inclui promessa de funcionamento em todo computador nem serviço de suporte técnico. Quem apaga ou move arquivos pelo programa decide o que tratar e deve ter cópia de segurança do que for importante. As disposições da GPL-3.0 sobre garantias e responsabilidade aplicam-se nos limites permitidos pela legislação brasileira e não restringem direitos assegurados ao consumidor por lei.

+

Código-fonte e versões: github.com/manfredjr/mapdisk.

+ +

Privacidade

+

O programa não coleta nem envia dados. Esta página não tem formulário, propaganda nem ferramenta de estatística. A hospedagem e o Cloudflare, que entrega a página, registram dados técnicos de acesso, como o endereço IP, e podem gravar um cookie técnico de segurança.

+
+
+ +
+
+MT - Manfred Tecnologia +
+MapDisk - MT. Desenvolvido por Manfred Heil Junior, da MT - Manfred Tecnologia (www.manfred.com.br).
+Copyright (c) 2026 MANFRED TECNOLOGIA LTDA. Licença GPL-3.0. +
+
+
+ + diff --git a/src/mapdisk/janela-principal.xaml b/src/mapdisk/janela-principal.xaml index 18303ca..2b47bbb 100644 --- a/src/mapdisk/janela-principal.xaml +++ b/src/mapdisk/janela-principal.xaml @@ -82,7 +82,7 @@
+public class SemRedeTestes +{ + private static readonly string[] ClassesDeRede = + [ + "HttpClient", "WebClient", "WebRequest", "HttpWebRequest", "TcpClient", "UdpClient", "Socket", "SmtpClient", + "System.Net.Http", "System.Net.Sockets", "System.Net.Mail", "Dns.", + ]; + + [Fact] + public void Programa_nao_usa_classe_de_rede() + { + var src = Path.Combine(CaracteresProibidosTestes.RaizDoRepositorio(), "src"); + var achados = Directory.EnumerateFiles(src, "*.cs", SearchOption.AllDirectories) + .Where(f => !f.Split(Path.DirectorySeparatorChar).Any(p => p is "bin" or "obj")) + .SelectMany(f => ClassesDeRede.Where(c => File.ReadAllText(f).Contains(c, StringComparison.Ordinal)).Select(c => $"{Path.GetFileName(f)}: {c}")) + .ToList(); + Assert.Empty(achados); + } +} From 627a297277f642a82cba6a8354a0b941cdc9a04f Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:26:11 -0300 Subject: [PATCH 7/8] Traz a documentacao da fatia 8 README com exportar, opcoes, o item do Explorer, a linha de comando completa e os textos Uso autorizado e Licenca e garantias perto do download. Pendencias das fatias 2 a 7 que apontavam para a 8 fechadas, e as da fatia 8 abertas. Requisitos da verificacao juridica marcados. Autores: Manfred Heil Junior --- README.md | 30 +++++++++++++++---- ...ificacao-distribuicao-e-lgpd-2026-09-28.md | 6 ++-- docs/superpowers/pendencias.md | 21 +++++++++---- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index def7074..39af3e3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,9 @@ As regras do projeto estão no [`AGENTS.md`](AGENTS.md) e o desenho em [`docs/su Baixe o `mapdisk.exe` e abra. Não precisa instalar nem ser administrador. Escolha a unidade, digite uma pasta ou um caminho de rede (`\\servidor\pasta`) e clique em **Varrer**. -> Uso autorizado. O MapDisk - MT mostra o espaço ocupado em discos e pastas e permite enviar arquivos para a Lixeira, movê-los ou, em pastas de rede, excluí-los definitivamente. Use o programa só em computadores e pastas que você tem autorização para administrar. Antes de apagar ou mover, confira a lista de itens e o destino. Em pastas de rede não existe Lixeira: a exclusão não pode ser desfeita pelo programa. O programa não envia nenhuma informação para fora do computador. +> Uso autorizado. O MapDisk - MT mostra o espaço ocupado em discos e pastas e permite enviar arquivos para a Lixeira, movê-los ou excluí-los definitivamente. Use o programa só em computadores e pastas que você tem autorização para administrar. Antes de apagar ou mover, confira a lista de itens e o destino. Em pastas de rede e em unidades removíveis ou mapeadas, o MapDisk não usa a Lixeira: a exclusão não pode ser desfeita pelo programa e os itens só voltam por uma cópia de segurança. O programa não envia nenhuma informação para fora do computador. + +> Licença e garantias. O MapDisk - MT é distribuído gratuitamente sob a GPL-3.0. Os tamanhos mostrados dependem do que o sistema de arquivos informa e das permissões da conta que roda o programa, e podem ficar incompletos quando alguma pasta não pode ser lida. A licença não inclui promessa de funcionamento em todo computador nem serviço de suporte técnico. Quem apaga ou move arquivos pelo programa decide o que tratar e deve ter cópia de segurança do que for importante. As disposições da GPL-3.0 sobre garantias e responsabilidade aplicam-se nos limites permitidos pela legislação brasileira e não restringem direitos assegurados ao consumidor por lei. Pastas que o Windows não deixa ler aparecem como **sem acesso**, e a barra de baixo diz quantas são. O total não inclui o que está nelas. @@ -26,7 +28,7 @@ Na árvore: À direita da árvore, o painel **Análises** responde "o que eu trato?" sobre a pasta selecionada: - **Gráfico:** o que pesa dentro da pasta, em blocos (área proporcional ao tamanho) ou em pizza (as 10 maiores, com legenda). Segue o "Mostrar" da árvore. Clique duplo num bloco ou numa fatia abre a pasta, e Voltar retorna. Pasta sem leitura fica fora do desenho e aparece pelo nome embaixo dele. -- **Maiores arquivos:** os 100 maiores. +- **Maiores arquivos:** os 100 maiores, ou a quantidade escolhida em **Opções**. - **Arquivos antigos:** sem alteração há mais de 6 meses, 1, 2 ou 5 anos, com a quantidade e o total. - **Por tipo:** vídeo, imagem, áudio, e-mail (.pst, .ost), imagem de disco, compactado e backup, instalador, documento e outros, mais o ranking por extensão. - **Por usuário:** o ranking das pastas de perfil em `Users`. @@ -42,17 +44,35 @@ Para tratar o que ocupa espaço, selecione pastas ou arquivos na árvore ou nas - **Excluir definitivamente**, em pasta de rede, unidade mapeada, pendrive e disco removível, onde o programa não usa a Lixeira. A confirmação pede que você digite EXCLUIR. - **Mover**, para a pasta que você escolher. Entre unidades, a origem só é apagada depois de a cópia ser conferida. -A confirmação mostra a lista, o total e o destino. O programa não deixa agir na raiz da unidade, nas pastas do Windows, em Program Files, em ProgramData, em arquivos do sistema e em pastas sem leitura, e diz o motivo. Cada item fica no registro de ações, em `%LOCALAPPDATA%\MapDisk\acoes.log`, que o botão **Registro de ações** mostra no Explorer. A barra de baixo soma o que a sessão enviou para a Lixeira, moveu e excluiu. No modo `--demonstracao`, as ações seguem o fluxo na tela, mas nada é apagado nem movido. +A confirmação mostra a lista, o total e o destino. O programa não deixa agir na raiz da unidade, nas pastas do Windows, em Program Files, em ProgramData, em arquivos do sistema e em pastas sem leitura, e diz o motivo. Cada item fica no registro de ações, em `%LOCALAPPDATA%\MapDisk\acoes.log`, que **Opções** > **Registro de ações** mostra no Explorer. A barra de baixo soma o que a sessão enviou para a Lixeira, moveu e excluiu. No modo `--demonstracao`, as ações seguem o fluxo na tela, mas nada é apagado nem movido. Quando os arquivos são do cliente, ele decide o que sai. O botão **Relatório do cliente**, no cartão Pastas, tem duas opções: - **Gerar relatório:** monte a lista com **Sugerir** (maiores pastas, maiores arquivos, antigos e tipos que costumam sobrar, com os critérios que você ajusta), com **Acrescentar a seleção** e com **Tirar da lista**. Escreva o nome do cliente e clique em **Gerar**. Saem dois arquivos: uma página HTML, que o cliente abre no navegador, marca e salva a resposta (ou imprime em PDF), e uma planilha Excel com a coluna Decisão. Para cada item, ele escolhe Apagar, Mover, Manter ou Conversar. Itens bloqueados pelas ações, como pastas do sistema, não entram. Se você já procurou duplicados, o **Sugerir** também traz as cópias repetidas, deixando a mais antiga. - **Ler resposta:** depois de varrer a pasta de novo, abra a planilha devolvida ou o arquivo salvo pela página. O MapDisk mostra o que o cliente decidiu e a situação de cada item. Item que mudou depois do relatório ou não existe mais fica de fora. Se a resposta veio por e-mail, use **Marcar pelos números** (por exemplo, `1, 3, 7-9`). Apagar e mover seguem a confirmação de sempre. Guarde a resposta com a ordem de serviço: ela é a autorização do cliente. -Linha de comando (só lê, nunca apaga nem move). O alvo é um caminho completo: +O botão **Exportar**, no cartão Pastas, grava a pasta das análises (a selecionada ou a raiz mostrada) em dois formatos: + +- **Relatório HTML:** um arquivo só, com o logo da MT, o resumo, o gráfico em blocos, as maiores pastas e arquivos, os tipos, os arquivos antigos, os perfis de usuário e, se você já procurou, os duplicados. Pasta sem leitura aparece como "sem acesso", nunca como zero. Para ter em PDF, use o "Imprimir" do navegador. +- **Planilha CSV:** todas as pastas, para abrir no Excel. + +O botão **Opções**, ao lado de Sobre, guarda o que vale entre sessões, em `%LOCALAPPDATA%\MapDisk\opcoes.txt`: + +- **Menu do Explorer:** **Ligar** põe "Analisar com MapDisk" no botão direito das pastas, das unidades e do fundo de uma pasta, só para o seu usuário e sem administrador. Esse item abre o MapDisk já varrendo. No Windows 11, ele fica em "Mostrar mais opções". Se o `mapdisk.exe` mudar de lugar, as Opções avisam e **Ligar** aponta para o novo lugar. **Desligar** tira o item por completo. +- **Análises:** quantos maiores arquivos mostrar e o tamanho mínimo dos duplicados. +- **Relatório para o cliente:** os critérios do **Sugerir**. A janela do relatório também guarda os critérios usados. +- **Últimos alvos:** **Esquecer** um alvo ou **Limpar a lista**. +- **Registro de ações:** onde ele fica, com o botão para abrir. + +Linha de comando (só lê, nunca apaga nem move arquivo). O alvo é um caminho completo: mapdisk varrer C: + mapdisk varrer D:\ --relatorio d.html mapdisk varrer \\servidor\dados --csv dados.csv --top 30 + mapdisk --integrar + mapdisk --remover-integracao + +`--relatorio` grava o relatório HTML, com `--top` itens em cada lista (padrão: 10). `--integrar` e `--remover-integracao` ligam e desligam o item do menu do Explorer. No Prompt de Comando, use `start /wait mapdisk varrer C:` para o prompt esperar o fim. No PowerShell, termine a linha com `| Out-Host`. @@ -67,4 +87,4 @@ No Prompt de Comando, use `start /wait mapdisk varrer C:` para o prompt esperar | 5 | Ações seguras: Lixeira, mover, exclusão onde não há Lixeira, proteção, registro de ações, "Nesta sessão" | `acoes` | Plano em [#9](https://github.com/manfredjr/mapdisk/pull/9), código em [#10](https://github.com/manfredjr/mapdisk/pull/10) | Concluída em 30/09/2026 | | 6 | Relatório para o cliente avaliar: página, planilha e leitura da resposta | `relatorio-cliente` | Spec em [#11](https://github.com/manfredjr/mapdisk/pull/11), plano em [#12](https://github.com/manfredjr/mapdisk/pull/12), código em [#13](https://github.com/manfredjr/mapdisk/pull/13) | Concluída em 30/09/2026 | | 7 | Duplicados: busca em três etapas, aba no painel e cópias no relatório para o cliente | `duplicados` | Plano em [#14](https://github.com/manfredjr/mapdisk/pull/14), código em [#15](https://github.com/manfredjr/mapdisk/pull/15) | Concluída em 01/10/2026 | -| 8 | Relatório do técnico em HTML com o gráfico, exportar pela janela, linha de comando completa, item "Analisar com MapDisk" no Explorer, tela de Opções e página do programa | `relatorio-e-integracao` | Plano em [#16](https://github.com/manfredjr/mapdisk/pull/16) | Plano em revisão | +| 8 | Relatório do técnico em HTML com o gráfico, exportar pela janela, linha de comando completa, item "Analisar com MapDisk" no Explorer, tela de Opções e página do programa | `relatorio-e-integracao` | Plano em [#16](https://github.com/manfredjr/mapdisk/pull/16), código em [#17](https://github.com/manfredjr/mapdisk/pull/17) | Aguardando o teste do Manfred | diff --git a/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md b/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md index 945d62f..2d414da 100644 --- a/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md +++ b/docs/legal/verificacao-distribuicao-e-lgpd-2026-09-28.md @@ -110,12 +110,12 @@ Os textos seguem o modelo do parecer do MapNet, adaptados ao risco do MapDisk. P ## 6. Requisitos para implementação -- [ ] Textos "Uso autorizado" e "Licença e garantias" na página e no README, perto do download (fatia 7). +- [x] Textos "Uso autorizado" e "Licença e garantias" na página e no README, perto do download (fatia 8, com o ajuste da seção 11). - [x] Confirmação de cada ação com a lista, o total e o destino, e o aviso de risco da seção 5 (fatia 5). - [x] Exclusão em rede com a palavra EXCLUIR digitada e o aviso de que não há Lixeira (fatia 5). Vale também para unidade removível e mapeada, com o texto da seção 9. - [x] Registro de ações só com data e hora, usuário do Windows, ação, origem, destino, tamanho e resultado. Sem conteúdo de arquivo (fatia 5). -- [x] Opções mostra onde fica o registro e abre a pasta dele (fatia 5). Por enquanto, pelo botão "Registro de ações" no cartão das pastas; vai para a tela de Opções na fatia 7. -- [ ] Nada sai da máquina: nenhum envio de rede no programa, conferido por teste (todas as fatias). +- [x] Opções mostra onde fica o registro e abre a pasta dele (fatia 5, e na tela de Opções desde a fatia 8). +- [x] Nada sai da máquina: nenhum envio de rede no programa, conferido pelo teste `SemRedeTestes` (fatia 8). - [ ] Fora do programa, no atendimento da MT: autorização do cliente para as exclusões registrada na ordem de serviço, com cópia do `acoes.log` anexada. Fica em `docs/superpowers/pendencias.md` como decisão de processo do Manfred. ## 7. Pendências de validação diff --git a/docs/superpowers/pendencias.md b/docs/superpowers/pendencias.md index 7c8fc15..81ef840 100644 --- a/docs/superpowers/pendencias.md +++ b/docs/superpowers/pendencias.md @@ -38,7 +38,7 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Item | Motivo | O que fecha | |---|---|---| -| Esquecer um alvo da lista de últimos alvos | Fora do escopo da fatia 2. A lista guarda até 10 caminhos só nesta máquina, em `%LOCALAPPDATA%\MapDisk\alvos.txt` | Opções da fatia 7, junto com "limpar a lista" | +| Esquecer um alvo da lista de últimos alvos | Fora do escopo da fatia 2. A lista guarda até 10 caminhos só nesta máquina, em `%LOCALAPPDATA%\MapDisk\alvos.txt` | Fechado: entrou na fatia 8, PR #17 (Opções > Últimos alvos) | | Hard link depois de "Atualizar esta pasta" | A releitura confere hard link só dentro da pasta relida. Um arquivo com outro nome fora dela passa a somar duas vezes | Aceito. Reavaliar se aparecer caso real | | Leitura como administrador em caminho de rede | O privilégio de backup vale só para disco local. Em `\\servidor\pasta`, quem manda são as permissões do servidor | Aceito, é como o Windows funciona | | Conferência da janela elevada | O aviso de elevação do Windows é confirmado pelo Manfred, não pelo agente | Teste do Manfred no PR da fatia 2 | @@ -47,7 +47,7 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Item | Motivo | O que fecha | |---|---|---| -| Quantidade de maiores arquivos configurável (R11) | A fatia 3 usa 100, o padrão da spec | Tela de Opções da fatia 8 (era a 7 antes da mudança de ordem de 30/09/2026) | +| Quantidade de maiores arquivos configurável (R11) | A fatia 3 usa 100, o padrão da spec | Fechado: entrou na fatia 8, PR #17 | | Pasta de perfis fora do padrão | O resumo por usuário procura a pasta `Users`. Perfis redirecionados para outra pasta ou compartilhamento de rede não entram | Aceito. Reavaliar se aparecer caso real | | Idade pela data de último acesso | "Antigo" usa a última modificação. O último acesso muitas vezes vem desligado no Windows e não é confiável | Aceito | @@ -55,7 +55,7 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Item | Motivo | O que fecha | |---|---|---| -| Imagem do gráfico no relatório | O R10 pede o gráfico na tela. Levar a imagem para o relatório é decisão do relatório | Relatório HTML da fatia 8 (era a 7 antes da mudança de ordem de 30/09/2026) | +| Imagem do gráfico no relatório | O R10 pede o gráfico na tela. Levar a imagem para o relatório é decisão do relatório | Fechado: entrou na fatia 8, PR #17 (gráfico em blocos no relatório do técnico) | | Gráfico com mais de um nível | O gráfico mostra um nível abaixo da pasta, que se lê de relance. Para descer, clique duplo | Aceito. Reavaliar se o uso pedir | | Clique duplo no gráfico conferido pelo agente | O Windows não deixou o roteiro de teste trazer a janela para a frente e clicar | Fechado: o Manfred testou no PR #8 em 30/09/2026 | @@ -65,7 +65,7 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. |---|---|---| | Registro de ações sem limite de tamanho | Uma linha por item, antes e depois. Em uso normal cresce devagar | Aceito. Reavaliar se aparecer registro grande | | Hard link apagado que deixa a outra cópia sem somar | Se o item apagado era a cópia que somava, a outra continua marcada como repetida até a próxima varredura | Aceito. Atualizar a pasta resolve | -| Botão "Registro de ações" no cartão das pastas | A tela de Opções ainda não existe | Tela de Opções da fatia 8 (era a 7 antes da mudança de ordem de 30/09/2026) | +| Botão "Registro de ações" no cartão das pastas | A tela de Opções ainda não existe | Fechado: entrou na fatia 8, PR #17 (Opções > Registro de ações) | | Permissões (ACL) no mover entre unidades | A cópia recebe as permissões da pasta de destino, como no Explorer | Aceito | | Teste da Lixeira real, da exclusão em rede e do mover pela janela | A Lixeira leva o arquivo para fora da pasta do projeto e o programa real grava o registro em `%LOCALAPPDATA%`. O agente testou pela janela só em demonstração | Fechado: o Manfred testou no PR #10 em 30/09/2026 | @@ -74,7 +74,7 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Item | Motivo | O que fecha | |---|---|---| | Duplicados como critério do "Sugerir" | Os duplicados ainda não existem | Fechado: entrou na fatia 7, PR #15 | -| Critérios do "Sugerir" guardados entre sessões | A tela de Opções ainda não existe. Cada relatório começa com os padrões | Opções da fatia 8 | +| Critérios do "Sugerir" guardados entre sessões | A tela de Opções ainda não existe. Cada relatório começa com os padrões | Fechado: entrou na fatia 8, PR #17 | | Planilha aberta e salva pelo Excel de verdade | Os testes simulam o jeito do Excel e do LibreOffice salvar. O agente não opera o Excel do computador do Manfred | Fechado: o Manfred testou no PR #13 em 30/09/2026 | | Varredura com a pasta do técnico em `C:\Users` | A pasta do registro de ações é protegida, então no computador do próprio técnico a pasta `Users` não entra no relatório | Aceito: no servidor do cliente, `Users` não é a do técnico | @@ -82,7 +82,16 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Item | Motivo | O que fecha | |---|---|---| -| Tamanho mínimo dos duplicados guardado entre sessões | A tela de Opções ainda não existe. Cada sessão começa com 1 MB | Opções da fatia 8 | +| Tamanho mínimo dos duplicados guardado entre sessões | A tela de Opções ainda não existe. Cada sessão começa com 1 MB | Fechado: entrou na fatia 8, PR #17 | | Resultado dos duplicados some ao atualizar uma pasta | "Atualizar esta pasta" e a releitura do destino do mover limpam o resultado, porque os caminhos podem ter mudado | Aceito. Procurar de novo | | Busca de duplicados num disco grande de verdade | Os testes usam arquivos pequenos. O tempo e o peso num servidor com muitos arquivos grandes só aparecem no uso | Fechado: teste do Manfred no PR #15, em 01/10/2026 | +## Fatia 8: relatório do técnico, linha de comando, Explorer, Opções e página + +| Item | Motivo | O que fecha | +|---|---|---| +| Pastas excluídas da varredura (spec, seção 6) | Fica para depois da versão 1, por decisão do Manfred em 01/10/2026. Mexe no motor e em todas as contas | Uma fatia própria depois da versão 1.0.0 | +| Item no menu compacto do Windows 11 | Exige empacotamento MSIX e assinatura (spec, seção 13) | Fora da versão 1 | +| Publicação da página | Publicar pede autorização. O roteiro do cPanel fica fora da pasta do projeto | Passo da versão 1.0.0, depois do teste de lançamento, com autorização | +| Teste do item do Explorer | Ligar grava no registro do Windows do Manfred. O agente testou só com as chaves em memória | Teste do Manfred no PR #17 | +| Exportar pela janela | O diálogo de salvar não foi operado pelo agente. O relatório e o CSV foram conferidos pela linha de comando, que usa o mesmo código | Teste do Manfred no PR #17 | From 48c539a2573020218039e383758469112471ccab Mon Sep 17 00:00:00 2001 From: Manfred Heil Junior Date: Thu, 1 Oct 2026 02:28:00 -0300 Subject: [PATCH 8/8] Marca a fatia 8 como concluida O Manfred conferiu o PR #17 e autorizou o merge. README e pendencias passam a dizer isso. Autores: Manfred Heil Junior --- README.md | 2 +- docs/superpowers/pendencias.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 39af3e3..7d3e731 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,4 @@ No Prompt de Comando, use `start /wait mapdisk varrer C:` para o prompt esperar | 5 | Ações seguras: Lixeira, mover, exclusão onde não há Lixeira, proteção, registro de ações, "Nesta sessão" | `acoes` | Plano em [#9](https://github.com/manfredjr/mapdisk/pull/9), código em [#10](https://github.com/manfredjr/mapdisk/pull/10) | Concluída em 30/09/2026 | | 6 | Relatório para o cliente avaliar: página, planilha e leitura da resposta | `relatorio-cliente` | Spec em [#11](https://github.com/manfredjr/mapdisk/pull/11), plano em [#12](https://github.com/manfredjr/mapdisk/pull/12), código em [#13](https://github.com/manfredjr/mapdisk/pull/13) | Concluída em 30/09/2026 | | 7 | Duplicados: busca em três etapas, aba no painel e cópias no relatório para o cliente | `duplicados` | Plano em [#14](https://github.com/manfredjr/mapdisk/pull/14), código em [#15](https://github.com/manfredjr/mapdisk/pull/15) | Concluída em 01/10/2026 | -| 8 | Relatório do técnico em HTML com o gráfico, exportar pela janela, linha de comando completa, item "Analisar com MapDisk" no Explorer, tela de Opções e página do programa | `relatorio-e-integracao` | Plano em [#16](https://github.com/manfredjr/mapdisk/pull/16), código em [#17](https://github.com/manfredjr/mapdisk/pull/17) | Aguardando o teste do Manfred | +| 8 | Relatório do técnico em HTML com o gráfico, exportar pela janela, linha de comando completa, item "Analisar com MapDisk" no Explorer, tela de Opções e página do programa | `relatorio-e-integracao` | Plano em [#16](https://github.com/manfredjr/mapdisk/pull/16), código em [#17](https://github.com/manfredjr/mapdisk/pull/17) | Concluída em 01/10/2026 | diff --git a/docs/superpowers/pendencias.md b/docs/superpowers/pendencias.md index 81ef840..ece68a1 100644 --- a/docs/superpowers/pendencias.md +++ b/docs/superpowers/pendencias.md @@ -93,5 +93,5 @@ Rascunho feito a partir da seção 4.2 da verificação jurídica de 28/09/2026. | Pastas excluídas da varredura (spec, seção 6) | Fica para depois da versão 1, por decisão do Manfred em 01/10/2026. Mexe no motor e em todas as contas | Uma fatia própria depois da versão 1.0.0 | | Item no menu compacto do Windows 11 | Exige empacotamento MSIX e assinatura (spec, seção 13) | Fora da versão 1 | | Publicação da página | Publicar pede autorização. O roteiro do cPanel fica fora da pasta do projeto | Passo da versão 1.0.0, depois do teste de lançamento, com autorização | -| Teste do item do Explorer | Ligar grava no registro do Windows do Manfred. O agente testou só com as chaves em memória | Teste do Manfred no PR #17 | -| Exportar pela janela | O diálogo de salvar não foi operado pelo agente. O relatório e o CSV foram conferidos pela linha de comando, que usa o mesmo código | Teste do Manfred no PR #17 | +| Teste do item do Explorer | Ligar grava no registro do Windows do Manfred. O agente testou só com as chaves em memória | Fechado: teste do Manfred no PR #17, em 01/10/2026 | +| Exportar pela janela | O diálogo de salvar não foi operado pelo agente. O relatório e o CSV foram conferidos pela linha de comando, que usa o mesmo código | Fechado: teste do Manfred no PR #17, em 01/10/2026 |