Add CHD support, Disc Info panel, icon system, splash screen, and cross-platform CI #4

Open
marcelofrau wants to merge 75 commits from marcelofrau/main into main
marcelofrau commented 2026-06-26 04:22:05 -05:00 (Migrated from github.com)

Summary

This pull request consolidates multiple feature additions and improvements to OpenBurningSuite, focused on expanding disc image format support, enhancing the user experience with rich disc information, and modernizing the UI.


🎯 Features

1. CHD (MAME Compressed Hunks of Data) Support

  • ChdHelper.cs — New helper class that detects chdman, validates CHD files, and extracts them to BIN/CUE format via chdman.exe
  • BurnService.cs — Added ConvertChdToBinCueAsync method for transparent CHD-to-BIN/CUE conversion during burn operations
  • AppSettings.cs — Added ChdmanPath configuration setting for locating the MAME chdman tool
  • File picker filters — All 6 wizard views (Audio, Blank, Copy, Data, Game, Video) + Advanced, Read, Write, and Verify views updated to accept .chd files
  • Watermarks & descriptions — Updated across all views to mention CHD format support
  • VerifyService.cs — CHD verification support

2. Disc Information Panel

  • DiscInfoService.cs — Comprehensive disc information retrieval service (1100+ lines) supporting:
    • Physical format detection (CD-R, CD-RW, DVD±R, DVD±R DL, BD-R, BD-RE, etc.)
    • Media manufacturer lookup via ATIP and Disc ID database (422 entries in MediaManufacturerLookup.cs)
    • Write speed and capability detection
    • Disc status (blank, finished, closed, empty)
    • Session and track count
    • Lead-in/Lead-out info
    • Support status flags (isBurned, isRewritable, isDualLayer, etc.)
  • DiscInfoView.axaml / .cs — New view displaying all disc properties in a rich layout
  • DiscInfoResult.cs, DiscMedia.cs, PhysicalFormatInfo.cs, AtipInfo.cs — Model classes for disc information
  • WindowsDeviceNotifier.cs — Device change monitoring for disc insertion/removal
  • DriveWatcherService.cs — Service to track drive state changes
  • NativeDeviceDiscovery.Windows.cs — Windows-native device discovery via SetupAPI
  • DiscDrive.cs — Added IsBusy property

3. Icon System (Emoji → PNG Replacement)

  • IconHelper.cs — New helper for loading PNG icons from embedded resources
  • IconButton.cs — Custom Avalonia control: icon + text button with themed hover states
  • IconTextBlock.cs — Custom control for icon+label display
  • IconConverter.cs — Value converter for icon path-to-image binding
  • IconSourceExtension.cs — XAML markup extension for icon resolution
  • All 20+ views — Replaced emoji characters with proper PNG icons (icon set documented in icons-review/)
  • Themed interaction states — Icons respond to hover, active, and disabled states

4. Splash Screen

  • SplashWindow.axaml / .cs — Custom splash window displayed on app startup
  • Custom background image — Supports splash-bg.png in app directory for branding
  • Version display — Shows build version on splash
  • Auto-dismiss — Transitions to main window after loading completes

5. About Dialog

  • About button in main window toolbar opens a dialog with app info
  • Displays version, description, and fork notice
  • Integrated into the Help view and main navigation

6. Settings Enhancements

  • SettingsView.axaml — Redesigned with expandable sections, icon support, and chdman path configuration
  • SettingsView.axaml.cs — Settings persistence, dark theme toggle (planned), chdman validation

7. Logging Improvements

  • Logger.cs — Millisecond precision timestamps for all log entries
  • Centralized helper for consistent log format

8. Build & CI/CD

  • .github/workflows/build-Windows.yml — Added PublishReadyToRun, fixed artifact naming, release upload for all platforms
  • .github/workflows/build-linux.yml — Linux CI pipeline (new)
  • .github/workflows/build-macOS.yml — macOS CI pipeline (new)
  • .github/workflows/build.yml — Consolidated build triggers
  • build-release.ps1 — Windows release packaging script
  • build-release.sh — Linux release packaging script
  • run.ps1 / run.sh — Cross-platform run scripts

9. Cross-Platform Support

  • Linux build and runtime scripts
  • macOS CI pipeline
  • Cross-platform run scripts (auto-detect platform)

10. Code Quality & Maintenance

  • BurnEngine.cs — Fixed simulation mode: SCSI WRITE commands now send correct Simu bit
  • OpticalDrive.cs — Fixed simulation mode detection logic
  • MainWindow.axaml — Redesigned layout with icon toolbar, improved spacing, cleaner navigation
  • HelpView.axaml — Restructured with categorized help sections
  • Various .csproj updates for new dependencies and asset bundling

Files Changed

  • 147 files changed across the codebase
  • +13,586 / -697 lines net
  • New services: DiscInfoService, DriveWatcherService, ChdHelper, IconHelper
  • New views: DiscInfoView, SplashWindow
  • New controls: IconButton, IconTextBlock, IconConverter, IconSourceExtension
  • CI: Windows, Linux, and macOS pipelines
  • Docs: CHANGELOG, STATUS, supported-formats, manual test reports

Testing

  • Manual testing completed for CHD detection and conversion
  • Disc info panel tested across CD, DVD, and BD media types
  • Icon rendering verified across all views and themes
  • Build pipelines tested on Windows (x64/x86) and Linux
  • Splash screen verified on Windows 10/11

Notes

  • All changes are backward-compatible with existing functionality.
  • Fork will continue to send PRs upstream to keep the original project alive (as stated in README).
## Summary This pull request consolidates multiple feature additions and improvements to OpenBurningSuite, focused on expanding disc image format support, enhancing the user experience with rich disc information, and modernizing the UI. --- ## 🎯 Features ### 1. CHD (MAME Compressed Hunks of Data) Support - **`ChdHelper.cs`** — New helper class that detects chdman, validates CHD files, and extracts them to BIN/CUE format via chdman.exe - **`BurnService.cs`** — Added `ConvertChdToBinCueAsync` method for transparent CHD-to-BIN/CUE conversion during burn operations - **`AppSettings.cs`** — Added `ChdmanPath` configuration setting for locating the MAME chdman tool - **File picker filters** — All 6 wizard views (Audio, Blank, Copy, Data, Game, Video) + Advanced, Read, Write, and Verify views updated to accept `.chd` files - **Watermarks & descriptions** — Updated across all views to mention CHD format support - **`VerifyService.cs`** — CHD verification support ### 2. Disc Information Panel - **`DiscInfoService.cs`** — Comprehensive disc information retrieval service (1100+ lines) supporting: - Physical format detection (CD-R, CD-RW, DVD±R, DVD±R DL, BD-R, BD-RE, etc.) - Media manufacturer lookup via ATIP and Disc ID database (422 entries in `MediaManufacturerLookup.cs`) - Write speed and capability detection - Disc status (blank, finished, closed, empty) - Session and track count - Lead-in/Lead-out info - Support status flags (isBurned, isRewritable, isDualLayer, etc.) - **`DiscInfoView.axaml` / `.cs`** — New view displaying all disc properties in a rich layout - **`DiscInfoResult.cs`**, **`DiscMedia.cs`**, **`PhysicalFormatInfo.cs`**, **`AtipInfo.cs`** — Model classes for disc information - **`WindowsDeviceNotifier.cs`** — Device change monitoring for disc insertion/removal - **`DriveWatcherService.cs`** — Service to track drive state changes - **`NativeDeviceDiscovery.Windows.cs`** — Windows-native device discovery via SetupAPI - **`DiscDrive.cs`** — Added `IsBusy` property ### 3. Icon System (Emoji → PNG Replacement) - **`IconHelper.cs`** — New helper for loading PNG icons from embedded resources - **`IconButton.cs`** — Custom Avalonia control: icon + text button with themed hover states - **`IconTextBlock.cs`** — Custom control for icon+label display - **`IconConverter.cs`** — Value converter for icon path-to-image binding - **`IconSourceExtension.cs`** — XAML markup extension for icon resolution - **All 20+ views** — Replaced emoji characters with proper PNG icons (icon set documented in `icons-review/`) - **Themed interaction states** — Icons respond to hover, active, and disabled states ### 4. Splash Screen - **`SplashWindow.axaml` / `.cs`** — Custom splash window displayed on app startup - **Custom background image** — Supports `splash-bg.png` in app directory for branding - **Version display** — Shows build version on splash - **Auto-dismiss** — Transitions to main window after loading completes ### 5. About Dialog - **About button** in main window toolbar opens a dialog with app info - Displays version, description, and fork notice - Integrated into the Help view and main navigation ### 6. Settings Enhancements - **`SettingsView.axaml`** — Redesigned with expandable sections, icon support, and chdman path configuration - **`SettingsView.axaml.cs`** — Settings persistence, dark theme toggle (planned), chdman validation ### 7. Logging Improvements - **`Logger.cs`** — Millisecond precision timestamps for all log entries - Centralized helper for consistent log format ### 8. Build & CI/CD - **`.github/workflows/build-Windows.yml`** — Added PublishReadyToRun, fixed artifact naming, release upload for all platforms - **`.github/workflows/build-linux.yml`** — Linux CI pipeline (new) - **`.github/workflows/build-macOS.yml`** — macOS CI pipeline (new) - **`.github/workflows/build.yml`** — Consolidated build triggers - **`build-release.ps1`** — Windows release packaging script - **`build-release.sh`** — Linux release packaging script - **`run.ps1` / `run.sh`** — Cross-platform run scripts ### 9. Cross-Platform Support - Linux build and runtime scripts - macOS CI pipeline - Cross-platform run scripts (auto-detect platform) ### 10. Code Quality & Maintenance - **BurnEngine.cs** — Fixed simulation mode: SCSI WRITE commands now send correct Simu bit - **OpticalDrive.cs** — Fixed simulation mode detection logic - **MainWindow.axaml** — Redesigned layout with icon toolbar, improved spacing, cleaner navigation - **HelpView.axaml** — Restructured with categorized help sections - Various .csproj updates for new dependencies and asset bundling --- ## Files Changed - **147 files** changed across the codebase - **+13,586 / -697** lines net - New services: DiscInfoService, DriveWatcherService, ChdHelper, IconHelper - New views: DiscInfoView, SplashWindow - New controls: IconButton, IconTextBlock, IconConverter, IconSourceExtension - CI: Windows, Linux, and macOS pipelines - Docs: CHANGELOG, STATUS, supported-formats, manual test reports --- ## Testing - Manual testing completed for CHD detection and conversion - Disc info panel tested across CD, DVD, and BD media types - Icon rendering verified across all views and themes - Build pipelines tested on Windows (x64/x86) and Linux - Splash screen verified on Windows 10/11 ## Notes - All changes are backward-compatible with existing functionality. - Fork will continue to send PRs upstream to keep the original project alive (as stated in README).
BlastBlaster17 commented 2026-06-28 16:34:39 -05:00 (Migrated from github.com)

Is there also something in there that fixes issue #5, the one I just made? I think I might try building it myself to find out.

Is there also something in there that fixes issue #5, the one I just made? I think I might try building it myself to find out.
marcelofrau commented 2026-06-28 17:09:04 -05:00 (Migrated from github.com)

not sure.. I added some support to CHD, refactored the UI emoji things, and added a new disc info utility.. maybe you can understand more in the new disc info.. you can check in my fork, there is an release there as well.. also, if you open the issue there I can also see how to address it.

not sure.. I added some support to CHD, refactored the UI emoji things, and added a new disc info utility.. maybe you can understand more in the new disc info.. you can check in my fork, there is an release there as well.. also, if you open the issue there I can also see how to address it.
SvenGDK commented 2026-07-08 21:42:38 -05:00 (Migrated from github.com)

Thanks for your effort. I will check this entirely soon.

Thanks for your effort. I will check this entirely soon.
This pull request is broken due to missing fork information.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin 'marcelofrau/main:marcelofrau/main'
git switch 'marcelofrau/main'

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch 'main'
git merge --no-ff 'marcelofrau/main'
git switch 'marcelofrau/main'
git rebase 'main'
git switch 'main'
git merge --ff-only 'marcelofrau/main'
git switch 'marcelofrau/main'
git rebase 'main'
git switch 'main'
git merge --no-ff 'marcelofrau/main'
git switch 'main'
git merge --squash 'marcelofrau/main'
git switch 'main'
git merge --ff-only 'marcelofrau/main'
git switch 'main'
git merge 'marcelofrau/main'
git push origin 'main'
Sign in to join this conversation.
No description provided.