Skip to content

Releases: EDDataAPI/eddata-addon-launcher

v2.0.0-beta3 - Localization Infrastructure

Choose a tag to compare

@gOOvER gOOvER released this 02 Dec 13:12

Changelog

All notable changes to the EDData Addon Helper project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[Unreleased]

[2.0.0-beta3] - 2025-12-02

🌍 Internationalization

Localization Infrastructure (Weblate-Ready)

  • Added RESX-based localization system for multi-language support
  • English (en) - Default language with ~60 localization keys
  • German (de) - Complete German translation
  • New LocalizeExtension for easy XAML binding: {loc:Localize Key=MainWindow_AddApp}
  • Strings helper class for code-behind access: Strings.Get("key"), Strings.Format("key", args)
  • Culture switching support via Strings.SetCulture("de")
  • Localization test suite in Tests/LocalizationTests.cs
  • Ready for Weblate integration (monolingual RESX format)

Language Selection

  • Added language selector dropdown in main window (System/English/Deutsch)
  • Language preference is saved and persisted across sessions
  • "System" option automatically uses the operating system's language

🐛 Bug Fixes

  • Fixed steam:// URL scheme being rejected as "invalid or unsafe URL"
  • Steam game launches now work correctly with proper protocol handler support
  • Fixed Elite Dangerous edit dialog not allowing save when changing options (OK button stayed disabled)

[2.0.0-beta2] - 2025-12-01

🎉 Highlights

  • Application Renamed: "Elite Dangerous Addon Launcher V2" → "EDData Addon Helper"
  • Framework Upgrade: .NET 8.0 → .NET 10 LTS (supported until November 2028)
  • Professional Installer: WiX Toolset MSI installer with full customization
  • Elite Dangerous Auto-Detection: Automatic detection for Steam, Epic Games, and Frontier Standalone

🚀 Added

Elite Dangerous Launch Dialog

  • New EliteLaunchDialog for selecting the launch method:
    • Standard Installation - Launch Frontier Launcher directly
    • Steam Version - Launch via Steam (steam://rungameid/359320)
    • Epic Games - Launch via Epic Games Store
    • Legendary - Launch via Open-Source Legendary Launcher
    • Browse Manually - Select custom path
  • Three additional launch options:
    • Auto Run (/autorun) - Start game directly without launcher dialog
    • Auto Quit (/autoquit) - Close launcher after game starts
    • VR Mode (/vr) - Start Elite Dangerous in VR mode
  • Dialog appears when adding AND editing Elite Dangerous entries

Auto-Detection for Elite Dangerous

  • Steam Library Detection:
    • Automatic detection via Windows Registry (HKCU:\Software\Valve\Steam)
    • Parsing of libraryfolders.vdf for all Steam libraries
    • Search for EDLaunch.exe in all Steam folders
  • Epic Games Store Detection:
    • Scanning all .item manifest files in Epic folder
    • Detection via AppName: "Eel" (Epic ID for Elite Dangerous)
    • Extraction of installation path from manifests
  • Frontier Standalone Detection:
    • Check known installation paths:
      • C:\Program Files (x86)\Frontier\EDLaunch\EDLaunch.exe
      • C:\Program Files\Frontier\Products\elite-dangerous-64\EDLaunch.exe
    • Registry lookup: HKLM:\SOFTWARE\WOW6432Node\Frontier Developments\Elite Dangerous
  • Fallback to full computer scan if auto-detection fails

WiX Toolset MSI Installer

  • Professional Windows Installer (.msi) with WiX Toolset v6.0.2
  • Features:
    • License display during installation
    • Custom installation directory selection
    • Start menu and desktop shortcuts
    • Automatic uninstaller registration
    • Upgrade detection for clean updates
  • Replaces NSIS/MSIX for better Windows integration

CI/CD Pipeline

  • GitHub Actions workflow for automated builds
  • Automatic release creation on tag push (v*)
  • MSI installer automatically uploaded as release asset
  • Uses softprops/action-gh-release@v2

🔧 Changed

Framework & Dependencies

  • Framework Upgrade: .NET 8.0 → .NET 10 LTS (net10.0-windows10.0.22621.0)
  • Dependencies updated:
    • MaterialDesignColors: 3.1.0 → 5.3.0
    • MaterialDesignThemes: 5.3.0
    • Newtonsoft.Json: 13.0.4
    • Serilog: 4.3.0
    • Serilog.Sinks.Console: 6.1.1
    • Serilog.Sinks.File: 7.0.0
    • gong-wpf-dragdrop: 4.0.0

UI/UX Improvements

  • DataGrid Columns: Button columns set to Auto width for flexible sizing
  • Application Title: New application name "EDData Addon Helper" updated everywhere
  • Window Titles: All window titles updated to new name

Project Rename

  • Project file: Elite Dangerous Addon Launcher V2.csproj → EDData Addon Helper.csproj
  • Assembly Name: EDData Addon Helper
  • Root Namespace: EDData_Addon_Helper
  • All XAML files updated with new namespace

🔒 Security

  • 8 critical security fixes implemented:
    1. Process Execution Hardening (UseShellExecute=false)
    2. JSON Deserialization Security (TypeNameHandling.None)
    3. Path Traversal Protection with validation methods
    4. URL Protocol Whitelist Validation
    5. File Size Validation (1MB manifest limit)
    6. Comprehensive Exception Handling
    7. Profile Import Validation
    8. Settings Import Validation

🐛 Fixed

Compiler Warnings

  • 130 compiler warnings eliminated in Debug configuration
  • Field Initialization Warnings (string fields → string.Empty)
  • Nullable Event Handler Warnings (PropertyChangedEventHandler?)
  • Null Reference Analysis Warnings in UI components

Bug Fixes

  • Added exception logging in profile loading
  • Fixed double loop bug in process cleanup
  • Fixed NullReferenceException in Btn_Launch_Click
  • Fixed thread-unsafe processList access
  • Fixed memory leak in Profile.Apps CollectionChanged event
  • Removed deprecated .csproj file with typo

⚡ Performance

  • Build Time: Reduced from 4.42s to 1.86s (-57%)
  • Thread.Sleep() replaced with async Task.Delay() - No more UI blocking
  • Epic Games Manifest Caching - ~70-80% fewer I/O operations
  • Directory.GetFiles() with filter - Reduced memory footprint
  • Process Handle Management - Using statements for proper cleanup

📦 Technical Details

New Files

  • EliteLaunchDialog.xaml / EliteLaunchDialog.xaml.cs - Launch method dialog
  • Constants.cs - 35+ centralized application constants
  • Package.wxs - WiX installer definition
  • .github/workflows/build-release.yml - CI/CD pipeline

Build Output

  • Installer: EDData-Addon-Helper-2.0.0-beta2.msi
  • Size: ~55 MiB (self-contained with .NET Runtime)
  • Target: Windows 10/11 x64

📋 Dependencies

Package Version
.NET 10.0 LTS
MaterialDesignColors 5.3.0
MaterialDesignThemes 5.3.0
Newtonsoft.Json 13.0.4
Serilog 4.3.0
Serilog.Sinks.Console 6.1.1
Serilog.Sinks.File 7.0.0
gong-wpf-dragdrop 4.0.0
WiX Toolset 6.0.2

For more information, see the Contributing Guidelines.

v2.0.0-beta2

v2.0.0-beta2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Dec 14:17

Changelog

All notable changes to the EDData Addon Helper project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[Unreleased]

[2.0.0-beta2] - 2025-12-01

🎉 Highlights

  • Application Renamed: "Elite Dangerous Addon Launcher V2" → "EDData Addon Helper"
  • Framework Upgrade: .NET 8.0 → .NET 10 LTS (supported until November 2028)
  • Professional Installer: WiX Toolset MSI installer with full customization
  • Elite Dangerous Auto-Detection: Automatic detection for Steam, Epic Games, and Frontier Standalone

🚀 Added

Elite Dangerous Launch Dialog

  • New EliteLaunchDialog for selecting the launch method:
    • Standard Installation - Launch Frontier Launcher directly
    • Steam Version - Launch via Steam (steam://rungameid/359320)
    • Epic Games - Launch via Epic Games Store
    • Legendary - Launch via Open-Source Legendary Launcher
    • Browse Manually - Select custom path
  • Three additional launch options:
    • Auto Run (/autorun) - Start game directly without launcher dialog
    • Auto Quit (/autoquit) - Close launcher after game starts
    • VR Mode (/vr) - Start Elite Dangerous in VR mode
  • Dialog appears when adding AND editing Elite Dangerous entries

Auto-Detection for Elite Dangerous

  • Steam Library Detection:
    • Automatic detection via Windows Registry (HKCU:\Software\Valve\Steam)
    • Parsing of libraryfolders.vdf for all Steam libraries
    • Search for EDLaunch.exe in all Steam folders
  • Epic Games Store Detection:
    • Scanning all .item manifest files in Epic folder
    • Detection via AppName: "Eel" (Epic ID for Elite Dangerous)
    • Extraction of installation path from manifests
  • Frontier Standalone Detection:
    • Check known installation paths:
      • C:\Program Files (x86)\Frontier\EDLaunch\EDLaunch.exe
      • C:\Program Files\Frontier\Products\elite-dangerous-64\EDLaunch.exe
    • Registry lookup: HKLM:\SOFTWARE\WOW6432Node\Frontier Developments\Elite Dangerous
  • Fallback to full computer scan if auto-detection fails

WiX Toolset MSI Installer

  • Professional Windows Installer (.msi) with WiX Toolset v6.0.2
  • Features:
    • License display during installation
    • Custom installation directory selection
    • Start menu and desktop shortcuts
    • Automatic uninstaller registration
    • Upgrade detection for clean updates
  • Replaces NSIS/MSIX for better Windows integration

CI/CD Pipeline

  • GitHub Actions workflow for automated builds
  • Automatic release creation on tag push (v*)
  • MSI installer automatically uploaded as release asset
  • Uses softprops/action-gh-release@v2

🔧 Changed

Framework & Dependencies

  • Framework Upgrade: .NET 8.0 → .NET 10 LTS (net10.0-windows10.0.22621.0)
  • Dependencies updated:
    • MaterialDesignColors: 3.1.0 → 5.3.0
    • MaterialDesignThemes: 5.3.0
    • Newtonsoft.Json: 13.0.4
    • Serilog: 4.3.0
    • Serilog.Sinks.Console: 6.1.1
    • Serilog.Sinks.File: 7.0.0
    • gong-wpf-dragdrop: 4.0.0

UI/UX Improvements

  • DataGrid Columns: Button columns set to Auto width for flexible sizing
  • Application Title: New application name "EDData Addon Helper" updated everywhere
  • Window Titles: All window titles updated to new name

Project Rename

  • Project file: Elite Dangerous Addon Launcher V2.csproj → EDData Addon Helper.csproj
  • Assembly Name: EDData Addon Helper
  • Root Namespace: EDData_Addon_Helper
  • All XAML files updated with new namespace

🔒 Security

  • 8 critical security fixes implemented:
    1. Process Execution Hardening (UseShellExecute=false)
    2. JSON Deserialization Security (TypeNameHandling.None)
    3. Path Traversal Protection with validation methods
    4. URL Protocol Whitelist Validation
    5. File Size Validation (1MB manifest limit)
    6. Comprehensive Exception Handling
    7. Profile Import Validation
    8. Settings Import Validation

🐛 Fixed

Compiler Warnings

  • 130 compiler warnings eliminated in Debug configuration
  • Field Initialization Warnings (string fields → string.Empty)
  • Nullable Event Handler Warnings (PropertyChangedEventHandler?)
  • Null Reference Analysis Warnings in UI components

Bug Fixes

  • Added exception logging in profile loading
  • Fixed double loop bug in process cleanup
  • Fixed NullReferenceException in Btn_Launch_Click
  • Fixed thread-unsafe processList access
  • Fixed memory leak in Profile.Apps CollectionChanged event
  • Removed deprecated .csproj file with typo

⚡ Performance

  • Build Time: Reduced from 4.42s to 1.86s (-57%)
  • Thread.Sleep() replaced with async Task.Delay() - No more UI blocking
  • Epic Games Manifest Caching - ~70-80% fewer I/O operations
  • Directory.GetFiles() with filter - Reduced memory footprint
  • Process Handle Management - Using statements for proper cleanup

📦 Technical Details

New Files

  • EliteLaunchDialog.xaml / EliteLaunchDialog.xaml.cs - Launch method dialog
  • Constants.cs - 35+ centralized application constants
  • Package.wxs - WiX installer definition
  • .github/workflows/build-release.yml - CI/CD pipeline

Build Output

  • Installer: EDData-Addon-Helper-2.0.0-beta2.msi
  • Size: ~55 MiB (self-contained with .NET Runtime)
  • Target: Windows 10/11 x64

📋 Dependencies

Package Version
.NET 10.0 LTS
MaterialDesignColors 5.3.0
MaterialDesignThemes 5.3.0
Newtonsoft.Json 13.0.4
Serilog 4.3.0
Serilog.Sinks.Console 6.1.1
Serilog.Sinks.File 7.0.0
gong-wpf-dragdrop 4.0.0
WiX Toolset 6.0.2

For more information, see the Contributing Guidelines.

v2.0.0-beta1

v2.0.0-beta1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Dec 13:31

Changelog

All notable changes to the EDData Addon Helper project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[Unreleased]

[2.0.0-rc.1] - 2025-11-24

Added

  • GitHub Actions CI/CD release pipeline with automated builds and installer generation
  • NSIS installer with professional UI:
    • License display during installation
    • Custom installation directory selection
    • Start menu and desktop shortcuts
    • Automatic uninstaller registration
  • PowerShell automation scripts:
    • build.ps1 - Local build with optional NSIS installer generation
    • release.ps1 - Automated release management with version tagging
  • Comprehensive documentation:
    • RELEASE_GUIDE.md - Step-by-step release procedures
    • CI_CD.md - CI/CD pipeline architecture and troubleshooting
    • QUICKSTART.md - Quick reference for common development tasks
    • INSTALLER_README.md - NSIS installer configuration guide

Security

  • Implemented 8 critical security fixes:
    • Process execution hardening (UseShellExecute=false)
    • JSON deserialization security (TypeNameHandling.None)
    • Path traversal protection with validation methods
    • URL protocol whitelist validation
    • File size validation (1MB manifest limit)
    • Comprehensive exception handling throughout codebase
    • Profile and settings import validation

Fixed

  • Eliminated all 130 compiler warnings in Debug build configuration
  • Field initialization warnings (string fields → string.Empty)
  • Nullable event handler warnings (PropertyChangedEventHandler?)
  • Null reference analysis warnings in UI components

[2.0.0-beta.1] - 2025-11-20

Added

  • Comprehensive security audit report documenting 12 identified vulnerabilities
  • Performance optimizations for Epic Games installation detection
  • Thread-safe process list management
  • Epic install cache with locking mechanism

Changed

  • Epic Games installation cache to prevent repeated manifest scanning
  • Thread-safe process list management with lock object (_processListLock)
  • Static Epic install cache with thread-safe locking (_epicInstallCache, _epicCacheLock)
  • Comprehensive exception logging in LegendaryConfigManager for better diagnostics
  • Constants class with 35+ centralized application constants (replacing magic strings)

Changed

  • Performance: Replaced all Thread.Sleep() calls with async Task.Delay()

    • Line 998: 5-second UI freeze now non-blocking (5-second wait loop → await Task.Delay(5000))
    • Line 757: EDLaunch detection race condition improved with polling + timeout (Thread.Sleep(2000) → intelligent polling with Stopwatch)
    • Line 713: Worker thread blocking eliminated (Thread.Sleep(500) → await Task.Delay(500) in async Task.Run)
    • Line 740: Process refresh delay non-blocking (Thread.Sleep(50) → await Task.Delay(50))
  • Memory: Improved IsEpicInstalled() method

    • Added caching layer to prevent repeated manifest scans (~70-80% performance improvement for repeated calls)
    • Result is cached using thread-safe Dictionary with lock synchronization
    • Cache reduces I/O operations during application lifecycle
  • I/O Optimization: Directory.GetFiles() with filter parameter

    • Changed from loading all files then filtering to using built-in filter
    • Reduced memory footprint for directories with many files
    • Line 1190: Directory.GetFiles(dir) loop → Directory.GetFiles(dir, targetFile, SearchOption.TopDirectoryOnly)
  • Performance: Moved Path.GetFileNameWithoutExtension() outside loop

    • Line 962: Calculate once before loop instead of per-iteration
    • Minor but consistent performance improvement in process cleanup routine
  • Resource Management: Added using statements for Process objects

    • Proper cleanup of process handles to prevent resource leaks
    • All Process.Start() calls now wrapped in using statements (5 locations):
      • ClickOnce application launch
      • Legendary CLI process execution
      • Web application launch
      • Log file viewer process
      • Update check process
  • Code Quality: All German log messages and comments converted to English

    • 3 German error messages in Constants.cs converted to English
    • All developer comments now in English for international collaboration
    • Improved code consistency and maintainability
  • Architecture: Made LaunchApp() async

    • Changed from void LaunchApp() to async Task LaunchApp()
    • Enables proper use of Task.Delay() without blocking UI thread
    • Event handlers updated to use await for launch operations
  • Async Patterns: Enhanced async/await patterns throughout

    • Btn_Launch_Click now properly awaits LaunchApp() calls
    • Dispatcher.Invoke() with async lambdas for proper UI thread management
    • Task.Run() lambdas now async for non-blocking operations
    • Added ConfigureAwait(false) to fire-and-forget async operations

Fixed

  • Critical: Exception logging in profile loading

    • Fixed silent failure in catch block (Line 196)
    • Added proper logging: Log.Error(ex, "Error loading profiles")
    • Exceptions now properly tracked for debugging
  • Critical: Double loop bug in process cleanup

    • Removed duplicate loop that processed each item multiple times
    • Fixed Lines 952-957: ProcessExitHandler was iterating twice over processList
    • Process cleanup now handles each item exactly once
  • Critical: NullReferenceException in Btn_Launch_Click

    • Added null-check guard before accessing CurrentProfile.Apps (Line 489)
    • Changed to: if (AppState.Instance.CurrentProfile?.Apps == null) return;
  • Critical: Fire-and-forget async without ConfigureAwait

    • Fixed 10+ instances of SaveProfilesAsync() not properly awaited
    • Added ConfigureAwait(false) to prevent context switching
    • Prevents thread pool starvation in long-running operations
  • Critical: Thread-unsafe processList access

    • Made processList private with proper synchronization
    • Added _processListLock object for future thread-safe operations
  • Critical: Null validation in LoadSettingsAsync

    • Fixed potential NullReferenceException from JsonConvert.DeserializeObject()
    • Added null-check with default creation (Line 817)
  • Memory Leak: Profile.Apps CollectionChanged event

    • Fixed event subscription without unsubscription in Profile.cs
    • Added proper cleanup in property setter to prevent memory leaks
  • Compiler Warnings: Magic string duplicates

    • Eliminated 15+ magic string duplicates that caused compiler warnings
    • Centralized all strings in Constants.cs reducing warnings from 170 to 0
  • Removed deprecated .csproj file

    • Deleted "Elite Dangerous Addon Launcer V2.csproj" (with typo)
    • Project now uses only "Elite Dangerous Addon Launcher V2.csproj"

Optimized

  • Build Performance: Reduced build time from 4.42s to 1.86s (-57%)

    • Parallel compilation more effective with constants
    • Fewer duplicate symbol definitions
    • More efficient incremental builds
  • Compiler Warnings: Reduced from 170 to 0 (100% reduction)

    • All magic strings centralized to Constants.cs
    • Proper null-safety patterns implemented
    • Fire-and-forget async properly marked with discard operator (_)

Technical Details

New Constants.cs File

Added 35+ application constants:

  • File names: ProfilesFileName, SettingsFileName
  • Executable names: EdLaunchExe, TargetGuiExe, VoiceAttackProcessName, etc.
  • Launch arguments: ProfileArgumentPrefix, AutoLaunchArgument
  • Error messages: All user-facing error strings
  • Window dimensions: Default min/max window heights
  • Process timeouts and delays: ProcessWaitTimeoutMs
  • Theme defaults: DefaultTheme

Performance Metrics

Metric Before After Change
Build Time 4.42s 1.86s -57%
Compiler Warnings 170 0 -100%
UI Thread Blocking 5+ seconds 0 Eliminated
Epic Manifest Scans Per launch Cached ~70-80% fewer
Process Handle Leaks Possible None Fixed

Threading Improvements

  • All UI blocking calls converted to async/await patterns
  • EDLaunch detection now uses intelligent polling instead of sleep
  • Process cleanup utilizes proper resource disposal patterns
  • Event subscriptions properly managed to prevent memory leaks

Code Quality Metrics

  • Lines of Code: Reduced code duplication through Constants.cs
  • Code Coverage: Thread-safety mechanisms improved with locks
  • Maintainability: Single source of truth for all constants and messages
  • Internationalization: Ready for future localization (all strings English)

Dependencies

  • .NET 10.0 LTS (supported until November 2028)
  • MaterialDesignThemes v5.3.0
  • Newtonsoft.Json v13.0.4
  • Serilog v4.3.0 with File sink v7.0.0 and Console sink v6.1.1
  • gong-wpf-dragdrop v4.0.0

Breaking Changes

None

Deprecations

None

Known Issues

None

Migration Guide

No action required for users. All changes are internal optimizations and bug fixes.

Contributors

  • Code Quality Review and Optimization: Session Date 24. November 2025

Version History Summary

Session: 24. November 2025

Focus: Critical bug fixes, performance optimization, code quality improvement, and internationalization

Commits:

  1. 9e01b5d - Implement top-3 critical performance optimizations: Replace Thread.Sleep with Task.Delay for non-blocking delays
  2. d32df94 - Implement 5 additional optimizations: Epic cache, Directory.GetFiles filter, Path pre-calculation, Process using-statements

Key Achievements:

  • Fixed 6 critical bugs
  • Implemented 9 performance optimizations
  • Eliminat...
Read more