feat: resolve 9 bugs, integrate 6 PRs, add 5 features + debug logging (v2.0.0.0)#260
feat: resolve 9 bugs, integrate 6 PRs, add 5 features + debug logging (v2.0.0.0)#260diaverso wants to merge 16 commits into
Conversation
Bugs fixed: - Foxlider#255 forcedDifficulty missing quotes in server.cfg - Foxlider#254 Deploy All destroys symlink targets (ReparsePoint check) - Foxlider#251/Foxlider#115 Performance tab not cloned (JsonIgnore on PerfPreset) - Foxlider#242 Mod status stuck as NotComplete after cancel - Foxlider#184/Foxlider#221 logObjectNotFound field naming + nameof refactor (81 calls) - Foxlider#167 Bad Steam API Key silently fails (user-visible error) - Foxlider#259 Async deadlock in RunModsUpdater (.Wait -> await + Unwrap) - Foxlider#238 NullRef in SteamLogin after nulling SteamClient - Foxlider#131 Deploy mods: pre-flight check + UnauthorizedAccessException msg PRs integrated: - Foxlider#239 Pipelines: add missing DOTNET_VERSION env var - Foxlider#252 MaxMsgSend clone fix (covered by Foxlider#251 fix) - Foxlider#258 Steam API throttling 300ms + async Task (fixes SonarQube C grade) - Foxlider#230 Configurable server language (11 options) - Foxlider#231 New launch args: hugePages, bePath, exThreads, loadMissionToMemory, limitFPS, enableSteamLogs - Foxlider#246 class AdvancedOptions {} block in server.cfg output - Foxlider#198 Purge & Reinstall All / per-mod buttons Features added: - Foxlider#241 -keysFolder launch parameter - Foxlider#217 AntiFlood class configurable in server.cfg - Foxlider#229 missionHTTPDownloadBaseURL in server.cfg - Foxlider#209 Purge Unused Mods button - Foxlider#216 Profile reordering with Up/Down buttons in sidebar Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a simple build.yml workflow that runs on every push to master and pull requests. Does not depend on CodeQL environment or other workflow configurations, making it reliable on forks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
RaisePropertyChanged had a lowercase 'i' (DrawinginMap) introduced during the nameof() refactor. Corrected to match the actual property name. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `permissions: contents: write` to the release job so GITHUB_TOKEN can create releases and upload assets - Truncate changelog to 20k chars to stay under the 32766-char env var limit that caused `INPUT_BODY` to overflow in andelf/nightly-release Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The andelf/nightly-release action is unmaintained and incompatible with current GitHub Actions token permissions. Replaced with the widely-used softprops/action-gh-release@v2 which respects contents:write permission. Added a pre-step to delete the existing nightly tag before recreating it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Change workflow_run trigger from [Code Analysis] to [Build] so the nightly release fires after the new build.yml succeeds (CodeQL was unreliable in the fork due to missing 'Dev' environment) - Add github.event_name == 'workflow_dispatch' to the build job condition so manual triggers actually execute the job instead of being silently skipped Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
softprops/action-gh-release fails with 'already_exists' when a nightly release already exists. Added a step that uses gh CLI to delete both the GitHub release object AND the git tag before creating a fresh nightly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Also update FASTER_Version.xml URLs to point to the diaverso fork. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New Logger.cs static class: writes timestamped entries to %AppData%\FASTER\faster.log when enabled - Added enableDebugLog boolean setting (default: false) - Settings UI: new 'Enable Debug Logging' checkbox + 'Open Log File' button - Log calls added to: CheckForUpdates, PurgeAndReinstallMod, PurgeAndReinstallAll, DeployAll, LinkMod Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Covers SteamLogin steps, RunModsUpdater flow, DownloadForMultiple internals (SetupAsync/VerifyAsync/DownloadAsync), per-file events (FileVerified, FileDownloaded, VerificationCompleted, DownloadComplete), and full stack traces on any exception. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Any idea when this will be merged to the master code? |
Well, I have no idea—it looks like it's been inactive for several months. You can download the .exe file from my fork, which includes these things. |
|
Will try and look over it on the weekend. I get pretty smashed during the week with work |
|
This PR is way too big to be easily reviewed. There are many undocumented changes and testing will require time to ensure the functionalities are still OK and the fixes working as expected |
@diaverso this might need to go into a nightly build or update build as Keelah said this is a huge PR |
|
I'd suggest take this and PR like this PR 1 — Critical Bug Fixes PR 2 — Community PR integrations Just merge the existing community PRs separately. PR 3 — Features PR 4 — Logging system Needs isolated testing. PR 5 — CI/CD and release workflows Completely separate concern. As a maintainer I would NOT approve this as-is. Not because it’s bad. Because: it’s too large |




Summary
This PR resolves all open GitHub issues, integrates all open pull requests, and adds several requested features. Version bumped to 2.0.0.0.
Bug Fixes
forcedDifficultywas not quoted in server.cfg outputServerCfg.csRaisePropertyChangedcalled with literal strings instead ofnameof()across ServerCfg, BasicCfg and related modelsServerCfg.cs,BasicCfg.csMaxMsgSendto 256 —PerfPresetgetter always returns"Custom"so JSON deserialization triggered the setter; fixed with[JsonIgnore]BasicCfg.csLinkMod/DeleteLinkcalledDirectory.Delete(path, true)on symlinks, destroying the source folder instead of just the linkDeploymentViewModel.csDeployAlldid not check whether the install path exists before trying to create symlinksDeploymentViewModel.csmod.Statuswas incorrectly reset toNotCompletein the cancellation path before any download startedSteamUpdaterViewModel.csTask.Factory.StartNew(async () => ...)returnedTask<Task>; missing.Unwrap()causedContinueWithto fire immediately, not after async work completedSteamUpdaterViewModel.csNullReferenceExceptionwhenSteamClientwas set to null before the error message string was evaluatedSteamUpdaterViewModel.csUpdateInfos(), no user-visible error was shown; added one-time warning for bad Steam API KeyArmaMod.cs,SteamWebApi.csPull Requests Integrated
class AdvancedOptions { }block in server.cfgServerCfg.cslanguagesetting in BasicCfg with dropdown in Profile UIBasicCfg.cs,ProfileViewModel.cs,Profile.xamlServerProfile.cs,ProfileViewModel.cs,Profile.xamlModsViewModel.cs,Mods.xamlCheckForUpdatesmade async with 300ms delay between mods to avoid rate limitingModsViewModel.cs,Mods.xamlDOTNET_VERSIONenv var.github/workflows/New Features
ServerCfg.cs,Profile.xamlmissionHTTPDownloadBaseURLsetting in server.cfgServerCfg.cs,Profile.xaml-keysFoldercommand-line parameter with folder browser buttonServerProfile.cs,ProfileViewModel.cs,Profile.xamlMainWindow.xaml.cs,ServerProfile.csModsViewModel.cs,Mods.xamlAdditional Improvements
%AppData%\FASTER\faster.log; includes an "Open Log File" button; covers CheckForUpdates, PurgeAndReinstall, DeployAll, and LinkModbuild.ymlworkflow; fixedrelease.ymltrigger and permissions; replaced unmaintainedandelf/nightly-releasewithsoftprops/action-gh-release@v2