Skip to content

fernandoncidade/Launcher_EBook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Launcher EBook

Launcher EBook é uma aplicação desktop em C++17 com Qt 6 Widgets para catalogar arquivos locais de e-books e documentos, exibir metadados básicos, reportar estatísticas e abrir cada item com aplicativos associados do sistema operacional ou com um executável escolhido manualmente pelo usuário.

O projeto foi estruturado para builds reproduzíveis no Windows com CMake Presets, Ninja, MSVC e MinGW, gerando binários Release autossuficientes com as dependências Qt implantadas via windeployqt.

Principais funcionalidades

  • Seleção de um diretório pai da biblioteca por diálogo nativo.
  • Varredura recursiva de arquivos em subdiretórios.
  • Filtro por extensões de e-book, documentos, texto, HTML, XML, TeX, CSV, logs e arquivos de quadrinhos.
  • Listagem tabular com nome, extensão, tipo MIME, tamanho legível e caminho absoluto.
  • Abertura por duplo clique com uma janela intermediária de escolha de aplicativo.
  • Descoberta de aplicativos associados no Windows por associação padrão e Registro.
  • Escolha manual de executável quando a associação do sistema não for suficiente.
  • Botão e ação de menu para limpar os dados carregados.
  • Rodapé com total de itens reconhecidos e relatórios opcionais de arquivos e pastas.
  • Barra de menus com ações de arquivos, configurações, idiomas, estatísticas e informações legais.
  • Persistência das preferências de relatório e idioma em arquivo JSON.
  • Suporte a português e inglês por arquivos .ts e .qm.
  • Geração de gráficos simples por extensão: pizza e histograma.
  • Textos de Sobre carregados de assets/about.
  • Ícone de aplicação incorporado ao executável Windows.

Organização do projeto

.
├── assets/
│   ├── about/                 # Textos carregados pelo menu Sobre
│   └── icon/                  # Ícone .ico usado na janela e no executável
├── build/                     # Diretórios regeneráveis de build
│   ├── mingw-release/
│   ├── msvc-ninja-release/
│   └── mocks/
├── locale/                    # Traduções Qt Linguist (.ts e .qm)
├── mocks/                     # Ferramentas auxiliares GUI para manutenção
├── source/                    # Código-fonte principal da aplicação
├── .vscode/                   # Integração com VS Code, CMake e tasks
├── CMakeLists.txt
├── CMakePresets.json
└── main.cpp

O diretório source/ concentra os módulos de domínio e interface. O diretório build/ é regenerável e pode ser removido quando for necessário forçar uma configuração limpa.

Arquitetura

main.cpp

Inicializa QApplication, define o nome lógico da aplicação como Launcher EBook, registra a organização LocalTools e exibe a janela principal.

source/MainWindow.*

Implementa a janela principal e coordena a maior parte do fluxo da aplicação:

  • composição da UI com QMainWindow, QMenuBar, QStatusBar, QTableWidget e botões de ação;
  • criação das ações de menu e atalhos;
  • varredura recursiva com QDirIterator;
  • identificação MIME com QMimeDatabase;
  • contagem de arquivos e pastas;
  • renderização de gráficos por extensão com QPainter;
  • carregamento de textos legais em assets/about;
  • carregamento de ícone em assets/icon;
  • troca de idioma via QTranslator;
  • persistência de preferências em JSON.

source/AssociatedApps.*

Isola a descoberta e execução de aplicativos associados a arquivos. No Windows, consulta associações registradas e constrói uma lista de candidatos para o diálogo de escolha. Também mantém a opção de seleção manual para cenários em que o Registro ou a associação padrão não retornem um leitor adequado.

source/AppChooserDialog.*

Implementa o diálogo de escolha de aplicativo. A janela exibe os candidatos encontrados, permite seleção manual de executável e retorna a escolha final para a janela principal executar a abertura do arquivo.

Persistência de configurações

As preferências do menu Configurações são salvas em:

%LOCALAPPDATA%\EBookLauncherQt\settings.json

Formato atual:

{
  "version": 1,
  "settings": {
    "language": "pt_BR",
    "reportFileCount": false,
    "reportFolderCount": false
  }
}

Campos:

  • language: idioma carregado na próxima inicialização. Valores suportados: pt_BR e en_US.
  • reportFileCount: controla a exibição do contador de arquivos no rodapé.
  • reportFolderCount: controla a exibição do contador de pastas no rodapé.
  • version: versão do esquema de configuração.

A escrita usa QSaveFile, reduzindo o risco de corromper o arquivo em caso de falha durante a gravação.

Internacionalização

Os arquivos de tradução ficam em locale/:

  • Launcher EBook_pt_BR.ts
  • Launcher EBook_en_US.ts

Durante a build, o CMake executa lrelease e gera os arquivos .qm correspondentes no diretório de build. Após a compilação, os .qm são copiados para locale/ ao lado do executável, permitindo que a troca de idioma funcione no binário implantado.

O aplicativo procura os recursos em ordem:

  1. diretório do executável;
  2. diretório relativo acima do executável;
  3. diretório de origem definido por EBOOKLAUNCHER_SOURCE_DIR;
  4. diretório corrente do processo.

Esse comportamento permite executar tanto a partir da árvore de desenvolvimento quanto a partir da pasta de build implantada.

Builds suportadas

O projeto usa CMake Presets com Ninja e gera builds Release.

Presets principais:

  • mingw-release: Qt 6.10.3 MinGW, compilador g++ do Qt Tools.
  • msvc-ninja-release: Qt 6.10.3 MSVC 2022, compilador cl.exe.

Saídas esperadas:

build\mingw-release\Launcher EBook.exe
build\msvc-ninja-release\Launcher EBook.exe

Comandos equivalentes:

cmake --preset mingw-release
cmake --build --preset mingw-release --parallel
cmake --preset msvc-ninja-release
cmake --build --preset msvc-ninja-release --parallel

No VS Code, as tarefas em .vscode/tasks.json encapsulam o ambiente correto de cada toolchain, incluindo QTDIR, PATH, Ninja, MinGW e vcvars64.bat para MSVC.

Implantação Qt

Em builds Windows, o CMake executa windeployqt após a linkedição. Isso copia para o diretório do executável:

  • DLLs Qt necessárias;
  • plugins de plataforma;
  • plugins de imagem;
  • estilos;
  • componentes auxiliares exigidos pelo runtime Qt;
  • assets/;
  • locale/.

Esse passo evita erros de execução por ausência de Qt6Core.dll, Qt6Gui.dll ou Qt6Widgets.dll.

Distribuição externa

Depois do windeployqt, o CMake sincroniza os produtos executáveis para:

D:\MISCELANEAS\VSCode\Launcher_EBook

As variantes principais são publicadas em:

D:\MISCELANEAS\VSCode\Launcher_EBook\Launcher_EBook_mingw
D:\MISCELANEAS\VSCode\Launcher_EBook\Launcher_EBook_msvc

Os mocks são publicados em:

D:\MISCELANEAS\VSCode\Launcher_EBook\mocks\compile_translations
D:\MISCELANEAS\VSCode\Launcher_EBook\mocks\find_VersionEditor

O script repo/sync_distribution.ps1 remove residuos de CMake/Ninja das builds principais antes de copiar a distribuição. Os instaladores Inno Setup ficam em repo/Launcher_EBook*.iss e usam como entrada as pastas externas acima, gerando os instaladores em D:\MISCELANEAS\VSCode\Launcher_EBook\InnoSetupOutput.

No VS Code, a tarefa Gerar Distribuição Launcher EBook recompila as variantes principais e os mocks, enquanto Gerar Instaladores Launcher EBook (Inno Setup) recompila as variantes principais e chama ISCC.exe sobre repo/Launcher_EBook.iss.

Ferramentas auxiliares

O diretório mocks/ contém pequenas GUIs de manutenção:

  • compile_translations: compila arquivos .ts para .qm usando lrelease.
  • find_VersionEditor: atualiza versões em textos de Sobre e no CMakeLists.txt.

Ambas são compiladas com MinGW e usam o diretório único:

build\mocks

Presets:

cmake --preset mocks-mingw-release
cmake --build --preset mock-version-editor --parallel
cmake --build --preset mock-compile-translations --parallel

Atalhos de teclado

  • Ctrl+O: escolher diretório.
  • Ctrl+R: listar arquivos.
  • Ctrl+Shift+L: limpar dados.
  • Ctrl+Q: sair.
  • Ctrl+Alt+A: alternar relatório de quantidade de arquivos.
  • Ctrl+Alt+P: alternar relatório de quantidade de pastas.
  • Ctrl+Alt+1: português.
  • Ctrl+Alt+2: inglês.
  • Ctrl+Alt+G: gráfico de pizza.
  • Ctrl+Alt+H: histograma.
  • Ctrl+Alt+I: propriedade intelectual.
  • Ctrl+Alt+D: termo de isenção de responsabilidade.
  • Ctrl+Alt+M: licença MIT.

Boas práticas aplicadas

  • Separação entre UI principal, descoberta de aplicativos associados e diálogo de escolha.
  • Build declarativa com CMake Presets.
  • Builds Release por padrão.
  • Integração direta com VS Code por tasks.json, settings.json e c_cpp_properties.json.
  • Uso de APIs Qt para filesystem, MIME, JSON, tradução e UI.
  • Persistência atômica de configurações com QSaveFile.
  • Recursos externos copiados para o diretório de execução no pós-build.
  • Diretórios de build isolados por toolchain.
  • Mocks separados da aplicação principal para manutenção sem poluir o fluxo de execução do usuário final.

Requisitos

  • Windows 10 ou superior.
  • CMake 3.25 ou superior.
  • Ninja em C:\Qt\Tools\Ninja\ninja.exe.
  • Qt 6.10.3 com módulos Core, Gui, Widgets e LinguistTools.
  • MinGW 13.1 fornecido pelo Qt em C:\Qt\Tools\mingw1310_64.
  • Microsoft Visual Studio 2026/18 Community com toolchain MSVC x64 para o preset MSVC.

Limpeza de builds

Os diretórios abaixo são regeneráveis:

build\mingw-release
build\msvc-ninja-release
build\mocks

Para limpeza assistida dos artefatos regeneráveis dos mocks e builds conhecidos, use:

.\mocks\limpar_build_qt6_regeneravel.ps1

Use -WhatIf para simular antes de remover:

.\mocks\limpar_build_qt6_regeneravel.ps1 -WhatIf

Licença

O projeto inclui texto de Licença MIT em assets/about, em português e inglês, para exibição no menu Sobre.

About

Launcher EBook é uma aplicação desktop para catalogar arquivos locais de e-books e documentos, exibir metadados básicos, reportar estatísticas e abrir cada item com aplicativos associados do sistema operacional ou com um executável escolhido manualmente pelo usuário.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors