feat: implement ActionSet orchestration framework and GenPatcher tool integration#242
Open
undead2146 wants to merge 12 commits into
Open
feat: implement ActionSet orchestration framework and GenPatcher tool integration#242undead2146 wants to merge 12 commits into
undead2146 wants to merge 12 commits into
Conversation
7e78ca0 to
c2e6cbd
Compare
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
66f12bd to
ce88f33
Compare
This comment was marked as resolved.
This comment was marked as resolved.
ce88f33 to
e296325
Compare
5f39e03 to
b82a6db
Compare
b82a6db to
b39ba53
Compare
- Refactored DirectXRuntimeFix and D3D8XDLLCheck to use core retail DLL detection (d3d8.dll, d3dx9_43.dll) instead of skippable legacy helpers. - Enhanced StartMenuFix to search both Common and User program folders and handle naming variations (& vs and). - Disabled redundant fixes (Patch104Fix, Patch108Fix, ZeroHourExecutableFix) as they are handled by the Downloads system. - Refactored GenPatcherViewModel to accurately calculate summary counts based on applicable fixes only. - Removed marker-based persistence hacks in favor of reliable system-state checks. - Updated ExternalUrls.cs with corrected download links for DirectX and game patches. - Improved logging and error handling across the ActionSet infrastructure.
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
df51ca7 to
44d7619
Compare
…into feat/genpatcher
44d7619 to
6010bb4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds a new Tool under the tools tab that applies all the core fixes which GenPatcher applies aswell.
Greptile Summary
This PR introduces a comprehensive ActionSet orchestration framework that ports GenPatcher functionality into GenHub as a new tool. The implementation adds 36+ automated fixes for Command & Conquer Generals/Zero Hour, including registry fixes, file system operations, DirectX/VC++ redistributable installers, and game configuration optimizations.
Key Changes:
IActionSetinterface andBaseActionSetabstract class for extensible fix implementationActionSetOrchestratorto manage sequential fix application with crucial fix handlingGenPatcherToolplugin with UI (GenPatcherViewModel) for fix managementIHttpClientFactoryfor downloading patches and redistributables (now properly registered in DI)ActionSetConstants,RegistryConstants,ExternalUrls, andGameSettingsConstantsArchitecture Strengths:
GenHub.Core) and Windows-specific implementationsCritical Issues Previously Addressed:
IHttpClientFactoryregistration added toWindowsServicesModule.cs:36NahimicFixprocess checking logic correctedRemaining Concerns:
docs/features/actionsets.mdcontains duplicate sectionsRemoveReadOnlyFixhave marker file logic inconsistenciesBuild Status:
Confidence Score: 4/5
EAAppRegistryFix.cs(serial key logic),OptionsINIFix.cs(resolution reporting),RemoveReadOnlyFix.cs(marker file logic),DirectXRuntimeFix.cs(argument assignment), andOneDriveFix.cs(folder merge handling)Important Files Changed
Sequence Diagram
sequenceDiagram participant User participant GenPatcherViewModel participant ActionSetOrchestrator participant IActionSet participant RegistryService participant FileSystem participant HttpClient User->>GenPatcherViewModel: Open GenPatcher Tool GenPatcherViewModel->>GenPatcherViewModel: Check Admin Privileges GenPatcherViewModel->>ActionSetOrchestrator: GetAllActionSets() ActionSetOrchestrator-->>GenPatcherViewModel: List of ActionSets loop For each ActionSet GenPatcherViewModel->>IActionSet: IsApplicableAsync(installation) IActionSet-->>GenPatcherViewModel: bool GenPatcherViewModel->>IActionSet: IsAppliedAsync(installation) IActionSet-->>GenPatcherViewModel: bool end GenPatcherViewModel-->>User: Display ActionSets with Status User->>GenPatcherViewModel: Apply All Fixes GenPatcherViewModel->>RegistryService: IsRunningAsAdministrator() alt Not Admin GenPatcherViewModel-->>User: Show Error (Admin Required) else Is Admin loop For each unapplied fix GenPatcherViewModel->>IActionSet: ApplyAsync(installation) alt Registry Fix IActionSet->>RegistryService: SetStringValue/SetIntValue RegistryService-->>IActionSet: Success/Failure else File System Fix IActionSet->>FileSystem: Copy/Move/Create Files FileSystem-->>IActionSet: Success/Failure else Download Fix IActionSet->>HttpClient: Download Patch HttpClient-->>IActionSet: Patch File IActionSet->>FileSystem: Extract & Install FileSystem-->>IActionSet: Success/Failure end IActionSet-->>GenPatcherViewModel: ActionSetResult alt Crucial Fix Failed GenPatcherViewModel-->>User: Abort & Show Error else Non-Crucial Fix Failed GenPatcherViewModel-->>User: Continue & Log Warning else Fix Succeeded GenPatcherViewModel->>IActionSet: IsAppliedAsync(installation) IActionSet-->>GenPatcherViewModel: bool GenPatcherViewModel-->>User: Show Success end end GenPatcherViewModel-->>User: Show Final Summary endContext used (3)
dashboard- What: All compiler warnings and linter warnings across the entire codebase must be resolved before m... (source)dashboard- Custom context (source)dashboard- Use dedicated constants classes instead of hardcoding constants string, integers or variables in ser... (source)