About This File
Hello everyone, I'm proud to present a new RomM server plugin for LaunchBox. Currently, it offers a complete solution, both synchronizing your server and updating it with LaunchBox data, as well as functions to install and uninstall games. Please take advantage of it and provide your feedback.
https://github.com/phscezario/launchbox-romm-plugin
## ๐ v1.0.0 โ First Stable Release!
After a lot of work, the plugin now reliably syncs metadata, cover art, and keeps your LaunchBox library in sync with your RomM server. ๐
---
## ๐ฎ LaunchBox RomM Plugin โ Release Notes
### ๐ What's New
#### ๐ Metadata Sync (RomM โ LaunchBox)
Sync now auto-fills LaunchBox game metadata from the RomM server:
- Release date, max players, play mode
- Video (YouTube), Wikipedia, ESRB
- Community rating and votes
- Synopsis / notes
- Genres, companies, game modes
- LaunchBox ID (LaunchBoxDbId)
Priority: **LaunchBoxMetadata > ScreenScraper > IGDB > RomM Metadata**.
#### ๐ผ๏ธ Automatic Cover Art Download
- Box - Front cover art is downloaded automatically from the RomM server
- Only downloads if the game has no existing cover in LaunchBox
- `ForceReload` runs after sync so images appear immediately
#### ๐งน Orphan Image Cleanup
- When a game is removed from the RomM server, the sync removes the game from LaunchBox and deletes its associated images
- Cleanup happens **after** the full sync completes, preventing partial deletions on failure
#### โ๏ธ KeepLocalData Flag
New setting that controls overwrite behavior:
- `KeepLocalData = true` โ only fills empty fields, preserves existing data
- `KeepLocalData = false` โ overwrites all fields
#### ๐ Cover Art Upload (Update RomM Metadata)
`Update RomM Metadata` now also sends the Box - Front cover from LaunchBox back to the RomM server.
### ๐ Fixes
- Fixed cover download failing due to unencoded spaces in RomM's timestamp parameter (`?ts=...`)
- Fixed image path by using LaunchBox's `GetNextAvailableImageFilePath` instead of hardcoded paths
### โก Improvements
- `dataManager.ForceReload()` runs automatically after sync โ no more restarting LaunchBox to see images
- Detailed logging of downloaded image paths for easier debugging
---
### How to Update
1. Replace the `RomM LaunchBox Integration` folder in your LaunchBox Plugins directory
2. Launch LaunchBox and configure `KeepLocalData` in plugin settings if desired
3. Run `RomM: Sync roms list from server`
ย
Edited by ByakkoKa
What's New in Version 2.0.2 See changelog
Released
LaunchBox RomM Plugin v2.0.0
Major release with significant architectural improvements, new features, and a complete test suite.
๐ New Features
-
Game Manager โ New UI form (
GameManagerForm) to browse, install, uninstall and manage ROMs directly from LaunchBox with progress tracking and queue support - Download Queue Service โ Full download manager with concurrent downloads, pause/resume/cancel, progress tracking, persistent state, and retry logic
- Play Session Tracking โ Track play sessions (start time, end time, duration, save slot) and sync them to the RomM server
- Auto-Update System โ Checks GitHub Releases for new versions, downloads and stages updates with UI notifications
-
Localization (i18n) โ Complete internationalization system with
en.jsonandpt-BR.jsonlocale files, fallback chain, and language selection in settings -
Remove All โ New admin action (
--remove-all) to fully clean installed ROMs, restart LaunchBox and reset UI state -
Install/Uninstall Menu Items โ Dedicated menu buttons for
RommInstallMenuItemandRommUninstallMenuItemwith per-platform operations -
Backup Service โ New
IRommBackupService/RommBackupServicefor creating backups before destructive operations -
Screenshot Sync โ
RommScreenshotSyncservice to upload and sync screenshots between LaunchBox and RomM -
Stats Service โ
RommStatsServiceto fetch and display play statistics (play count, total time, last played) -
Metadata Mapper โ
RommMetadataMapperwith diff-based comparison for efficient metadata synchronization - Platform Prefix for Apps โ Automatically prefix app names with platform name to avoid conflicts across systems
- ForcePushToServer โ New admin setting to force-push metadata even when no local changes are detected
๐ง Architecture & Refactoring
-
Dependency Injection โ Introduced
ServiceLocatorfor centralized service resolution -
Interface-driven design โ All major services now have corresponding interfaces (
IRommSyncService,IRommStatsService,IRommBackupService,IRommHierarchyCli,IRommScreenshotSync,IRommMetadataMapper, etc.) - SDK-style csproj โ Migrated all projects to modern SDK-style project format
- Singleton guards โ Added thread-safe singleton guards for Sync, Reset and Settings services
-
DI cleanup โ Removed
RommInstallerand legacy code, replaced with proper service abstractions -
Unified build output โ All projects output to
build/Releasewithout TFM subfolder - SafeFileWriter โ Atomic file writes with temp file + rename pattern to prevent corruption
- SecureCredentialStorage โ Encrypted credential storage for API tokens
- AuthHeaderHelper โ Centralized authentication header injection
๐งช Testing
-
New test project โ
RommPlugin.Testswith xUnit + Moq -
15+ test classes covering:
-
RommApiClientTestsโ API client request/response handling -
RommGameHelpersTestsโ Game matching and path resolution logic -
RommMetadataMapperTestsโ Metadata diff and mapping logic -
RommSyncServiceStatsTestsโ Sync statistics calculation -
DownloadItemTestsโ Download state management -
RommPluginSettingsTestsโ Settings serialization/deserialization -
LocaleManagerTestsโ i18n loading and fallback -
SafeFileWriterTestsโ Atomic write operations -
SecureCredentialStorageTestsโ Credential encryption -
AuthHeaderHelperTestsโ Header injection - And more...
-
๐ Documentation
-
Complete docs folder with:
-
architecture.mdโ System architecture and project structure -
development-setup.mdโ Prerequisites and IDE configuration -
contributing.mdโ Commit conventions, code style, PR process -
testing.mdโ How to run and write tests -
ci-cd.mdโ GitHub Actions workflows -
configuration.mdโ Full settings.json reference -
deployment.mdโ Build and release process -
release-process.mdโ Versioning and tagging -
localization.mdโ i18n system guide -
api-integration.mdโ RomM API endpoints reference
-
๐ CI/CD & DevOps
- ci.yml โ Build and test pipeline
- test.yml โ Automated test execution
- release.yml โ Release artifact publishing
- auto-tag.yml โ Automatic version tagging
- .editorconfig โ Enforced code style consistency
๐ Bug Fixes
-
Reuse existing playlist GUIDs in
Parents.xmlinstead of generating new ones -
Removed
TrySetResultcall inProgressRunner.FormClosingto prevent race conditions - Proper handling of cancelled download status and actions
- Fixed singleton initialization guards across services
๐ฆ Project Changes
- Version bump to 2.0.0
-
Added
settings.example.jsonfor reference -
Added
Sync-LaunchBoxMetadata.ps1PowerShell helper script -
Removed legacy
packages.config(NuGet PackageReference migration) - Cleaned up unused usings and dependencies
- Added XML documentation comments throughout codebase