feat(handlers): add file icons with standard and retro variants

Introduce file icon support to the file browser. Icons are loaded on
startup and mapped based on file name and content type.

- Load file icon mappings in the App handler initialization.
- Add `HasThumbnail`, `IconURL`, and `IconRetroURL` to the file view.
- Update CSS to support displaying file icons alongside thumbnails.
- Add retro theme support to swap standard icons with pixelated retro
  variants when the retro theme is active.
This commit is contained in:
2026-06-02 13:02:51 +03:00
parent 6c87187c6d
commit 8e3f783780
33 changed files with 594 additions and 53 deletions

View File

@@ -20,9 +20,14 @@ type App struct {
banService *services.BanService
rateLimiter *rateLimiter
uploadGroups *uploadGrouper
fileIcons *fileIconSet
}
func NewApp(cfg config.Config, logger *slog.Logger, renderer *web.Renderer, uploadService *services.UploadService, authService *services.AuthService, settingsService *services.SettingsService, reactionService *services.ReactionService, banService *services.BanService) *App {
fileIcons, err := loadFileIcons(cfg.StaticDir)
if err != nil {
logger.Warn("failed to load file icon map", "source", "handlers", "severity", "warn", "error", err.Error())
}
return &App{
cfg: cfg,
logger: logger,
@@ -34,6 +39,7 @@ func NewApp(cfg config.Config, logger *slog.Logger, renderer *web.Renderer, uplo
banService: banService,
rateLimiter: newRateLimiter(),
uploadGroups: newUploadGrouper(),
fileIcons: fileIcons,
}
}