Skip to content

mu88/BlazorFotoManager

Repository files navigation

BlazorFotoManager (FotoFlipper)

A Windows desktop application for managing photo exports. Load images, assign the number of copies per photo, and export all copies in one step — ideal for printing workflows. Built with Blazor Server hosted inside an Electron shell via ElectronNET.

Combined CI / Release Mutation Testing Reliability Rating Security Rating Maintainability Rating Bugs Vulnerabilities Code Smells Coverage Mutation testing badge

Features

  • 📂 Load individual images or multi-select batches via native file dialogs
  • 🔢 Set the number of copies per image using +/- controls
  • ⬅️➡️ Navigate forward and backward through loaded images
  • 💾 Save and load projects as JSON files for later continuation
  • 📤 Export all copies to a target folder with a live progress bar
  • 🌍 Localized UI (German)

Architecture

The project follows an Onion Architecture (Clean Architecture) with two projects:

Project Layer Responsibility
FotoManagerLogic Domain / Business Entities (Project, Image), interfaces, DTOs — no infrastructure dependencies
FotoManager Application / UI Blazor pages, ProjectService, ElectronNET integration

Dependencies always point inward: FotoManagerFotoManagerLogic.

Infrastructure concerns (file I/O, Electron dialogs) are wrapped behind interfaces using the Humble Object pattern, keeping business logic fully unit-testable.

Prerequisites

Getting Started

cd FotoManager
electronize start

The first start takes a while as Electron downloads its binaries. Subsequent starts are faster.

Running Tests

dotnet test --filter Category=Unit
dotnet test --filter Category=Integration

For mutation testing (requires the tool to be installed first via dotnet tool restore):

dotnet tool run dotnet-stryker

Building a Release

The CI pipeline builds the Windows installer automatically via GitHub Actions on every push. For a local build:

dotnet publish FotoManager\FotoManager.csproj /p:PublishProfile=win-x64

The output EXE (FotoFlipper_<version>.exe) is placed under FotoManager/publish/Release/.

Releasing

This project uses Versionize and Conventional Commits. A release is triggered automatically when a commit with the message chore(release): X.Y.Z is pushed to the default branch.

License

Do No Harm

Features

  • 📂 Load individual images or multi-select batches via native file dialogs
  • 🔢 Set the number of copies per image using +/- controls
  • ⬅️➡️ Navigate forward and backward through loaded images
  • 💾 Save and load projects as JSON files for later continuation
  • 📤 Export all copies to a target folder with a live progress bar
  • 🌍 Localized UI (German)

Architecture

The project follows an Onion Architecture (Clean Architecture) with two projects:

Project Layer Responsibility
FotoManagerLogic Domain / Business Entities (Project, Image), interfaces, DTOs — no infrastructure dependencies
FotoManager Application / UI Blazor pages, ProjectService, ElectronNET integration

Dependencies always point inward: FotoManagerFotoManagerLogic.

Infrastructure concerns (file I/O, Electron dialogs) are wrapped behind interfaces using the Humble Object pattern, keeping business logic fully unit-testable.

Prerequisites

Getting Started

cd FotoManager
electronize start

The first start takes a while as Electron downloads its binaries. Subsequent starts are faster.

Running Tests

dotnet test --filter Category=Unit

For mutation testing (requires the tool to be installed first via dotnet tool restore):

dotnet tool run dotnet-stryker

Building a Release

The CI pipeline builds the Windows installer automatically via GitHub Actions on every push. For a local build:

dotnet publish FotoManager\FotoManager.csproj /p:PublishProfile=win-x64

The output EXE (FotoFlipper_<version>.exe) is placed under FotoManager/publish/Release/.

Releasing

This project uses Versionize and Conventional Commits. A release is triggered automatically when a commit with the message chore(release): X.Y.Z is pushed to the default branch.

License

Do No Harm

About

Rewrite of FotoManager in Blazor

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors