Conversation
[WIP] Add hyperlink to download the latest version
Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
…nfig Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
…ssue Fix: extra_inventory_items written as object instead of array in SmokeAPI config
Add global.json for SDK resolution with .NET 8+
Agent-Logs-Url: https://github.com/ubden/CreamApi-CreamInstaller/sessions/dcd61999-e89a-498d-9245-db51edac20e0 Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
Agent-Logs-Url: https://github.com/ubden/CreamApi-CreamInstaller/sessions/4330adfa-3a87-42b3-9d87-6b672344e50a Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
docs: Add Wikipedia antivirus reference to false-positive warning section
…omments Agent-Logs-Url: https://github.com/ubden/CreamApi-CreamInstaller/sessions/8e5d9ac7-4144-49da-ac9b-411226fbdc45 Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
…ion fix Agent-Logs-Url: https://github.com/ubden/CreamApi-CreamInstaller/sessions/8e5d9ac7-4144-49da-ac9b-411226fbdc45 Co-authored-by: ubden <44896964+ubden@users.noreply.github.com>
…rmance-security fix: bugs, performance, security, and AV false-positive annotations
…ve UI components - Updated .NET SDK version to 9.0 in global.json and project files. - Added new entries to .gitignore for DLL files. - Enhanced README with community support links and installation instructions. - Improved UI elements in forms for better user experience, including dark mode support. - Added log export functionality in the installation form. - Implemented search/filter functionality in the selection form. - Updated various components to use new theming and styling conventions.
Removed community support section from README.
- Updated build.yml and release.yml to include FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 environment variable for improved compatibility with Node.js 24.
- Updated build workflow to change code formatting severity from 'warn' to 'info'. - Modified various components to use more explicit checks (e.g., replacing 'Any()' with 'Count > 0'). - Enhanced readability in string index operations by using single quotes for characters. - Ensured list conversions are explicitly handled in LINQ queries for better clarity.
- Add NoWarn (CA1806/CA1860/CA1865/CA2263/CA1861/CA1872) to csproj - Add TreatWarningsAsErrors=false to csproj and CI workflow - Remove dotnet format --verify-no-changes (was causing exit code 1) - Seal DarkButton class (CA1852) - Make GatherTreeNodes static (CA1822) Made-with: Cursor
- CustomTreeView: replace invisible dark colors with bright amber/sky-blue/green - ThemeManager: brighter TextDisabled, CheckBox EnabledChanged hook for ForeColor - ThemeManager: fix GroupBox paint to not cover header-area checkboxes - CustomForm: replace emoji with ASCII markers (WinForms GDI+ compatibility) Made-with: Cursor
This reverts commit be488f2.
This reverts commit b2200c3.
There was a problem hiding this comment.
Pull request overview
This PR upgrades CreamInstaller to v5.0 with a move to .NET 9, adds a new dark-themed UI layer and persistent app settings, and overhauls repo metadata/docs + GitHub Actions workflows for CI/release.
Changes:
- Upgrade to
net9.0-windows, update NuGet dependencies, addglobal.json, and refresh CI/release workflows. - Introduce dark theme components (buttons/progress bar), UI enhancements (search/filter + status strip), and persistent app settings.
- Expand README and GitHub community/support/security templates (disclaimers, support links, reporting guidance).
Reviewed changes
Copilot reviewed 40 out of 44 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Rewrites top-level documentation/disclaimer; updates install/build links and requirements. |
| global.json | Pins SDK selection behavior for .NET builds. |
| CreamInstaller/Utility/ProgramData.cs | Simplifies JSON tuple deserialization and normalizes empty checks. |
| CreamInstaller/Utility/HttpClientManager.cs | Adds a 60s HttpClient timeout and clarifying comments. |
| CreamInstaller/Utility/Diagnostics.cs | Hardens process launching and adds guards for missing paths/files. |
| CreamInstaller/Utility/AppSettings.cs | Adds persisted JSON settings for UX preferences/window state. |
| CreamInstaller/Resources/UplayR2.cs | Ensures StreamWriter is disposed; adds clarifying comments. |
| CreamInstaller/Resources/UplayR1.cs | Ensures StreamWriter is disposed; adds clarifying comments. |
| CreamInstaller/Resources/SmokeAPI.cs | Ensures StreamWriter is disposed; fixes JSON output for extra_inventory_items. |
| CreamInstaller/Resources/ScreamAPI.cs | Ensures StreamWriter is disposed; adds clarifying comments. |
| CreamInstaller/Resources/Resources.cs | Adds MD5 caching and cache invalidation on writes; adds clarifying comments. |
| CreamInstaller/Resources/Koaloader.cs | Ensures StreamWriter is disposed; adds clarifying comments. |
| CreamInstaller/Properties/Resources.resx | Fixes resource path casing for the app icon. |
| CreamInstaller/Program.cs | Updates repo metadata/links, switches DPI mode, initializes settings at startup. |
| CreamInstaller/Platforms/Steam/SteamCMD.cs | Adds clarifying comments; minor string-indexing simplification. |
| CreamInstaller/Forms/SelectForm.Designer.cs | UI refresh: dark controls, search box, status strip, resizable layout wiring. |
| CreamInstaller/Forms/SelectForm.cs | Adds scan timestamp persistence, search/filter logic, status strip updates, resize persistence. |
| CreamInstaller/Forms/SelectDialogForm.cs | Adjusts to new WriteProgramChoices(List<...>) signature. |
| CreamInstaller/Forms/MainForm.Designer.cs | UI refresh: adds header label and dark controls. |
| CreamInstaller/Forms/MainForm.cs | Updates styling and header display for the main update flow. |
| CreamInstaller/Forms/InstallForm.Designer.cs | UI refresh: dark controls + adds “Export Log” button. |
| CreamInstaller/Forms/InstallForm.cs | Adds log export feature; minor style refactor. |
| CreamInstaller/Forms/DialogForm.cs | Minor char-based IndexOf simplification. |
| CreamInstaller/CreamInstaller.csproj | Bumps to net9 + v5.0; updates package versions and metadata. |
| CreamInstaller/Components/ThemeManager.cs | Adds centralized dark theme palette + recursive application helpers. |
| CreamInstaller/Components/DarkProgressBar.cs | Adds owner-drawn themed progress bar control. |
| CreamInstaller/Components/DarkButton.cs | Adds owner-drawn themed button control. |
| CreamInstaller/Components/CustomTreeView.cs | Minor micro-optimization (Count > 0 vs Any()). |
| CreamInstaller/Components/CustomForm.cs | Applies theme on handle creation; adds dark title bar integration and updated help text. |
| .gitignore | Adds DLL ignore patterns. |
| .github/workflows/test.yml | Removes legacy test workflow. |
| .github/workflows/release.yml | Adds tag-based release publishing workflow. |
| .github/workflows/jekyll-gh-pages.yml | Removes GitHub Pages deployment workflow. |
| .github/workflows/delete_releases.yml | Removes release deletion workflow. |
| .github/workflows/build.yml | Adds Windows CI build + optional formatting verification + artifact upload. |
| .github/SUPPORT.md | Adds explicit “no official support” guidance and community links. |
| .github/SECURITY.md | Adds security policy and reporting guidance. |
| .github/ISSUE_TEMPLATE/false-positives.md | Reworks false-positive issue template and adds structured prompts. |
| .github/ISSUE_TEMPLATE/enhancement-request.md | Reworks enhancement template and adds community pointers. |
| .github/ISSUE_TEMPLATE/bug-report.md | Reworks bug template and adds community pointers. |
| .github/DISCUSSION_TEMPLATE/q-and-a.yml | Adds a structured Q&A discussion template. |
| .github/DISCUSSION_TEMPLATE/general.yml | Adds a structured general discussion template. |
| .github/dependabot.yml | Enables weekly Dependabot updates for NuGet and GitHub Actions. |
| .github/CONTRIBUTING.md | Adds contributor workflow and development setup guidance. |
Files not reviewed (3)
- CreamInstaller/Forms/InstallForm.Designer.cs: Language not supported
- CreamInstaller/Forms/MainForm.Designer.cs: Language not supported
- CreamInstaller/Forms/SelectForm.Designer.cs: Language not supported
Comments suppressed due to low confidence (1)
.github/ISSUE_TEMPLATE/bug-report.md:45
- This relative link (
.github/ISSUE_TEMPLATE/false-positives.md) will likely be broken when rendered inside a GitHub Issue body (relative links resolve against the issue URL, not the repo root). Prefer an absolute GitHub URL to the template file (or link to the repository’s issue template chooser / documentation section in the README).
---
> 🛡️ **Antivirus false positive?** See the [false-positives template](.github/ISSUE_TEMPLATE/false-positives.md).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # ⚠️ Disclaimer | ||
| ## (Read before installation and Follow Us on Github !) | ||
|
|
There was a problem hiding this comment.
"Github" should be capitalized as "GitHub" (project name) in this heading; also remove the extra space before the exclamation for consistent Markdown copy.
| selectionTreeView.AfterCheck += OnTreeViewNodeCheckedChanged; | ||
| // Restore window position/size from settings | ||
| AppSettings.Current.RestoreFormState(this, restoreSize: true); | ||
| AppSettings.Current.SortByName = sortCheckBox.Checked; |
There was a problem hiding this comment.
SortByName persistence is currently broken: on load you overwrite the stored setting with the current checkbox state, then immediately read it back, so the saved value is never applied. Instead, set sortCheckBox.Checked from AppSettings.Current.SortByName (and ideally update/save AppSettings.Current.SortByName inside OnSortCheckBoxChanged).
| AppSettings.Current.SortByName = sortCheckBox.Checked; |
| internal const string RepositoryOwner = "ubden-community"; | ||
| internal static readonly string RepositoryName = "CreamApi-CreamInstaller"; | ||
| internal static readonly string RepositoryPackage = Name + ".zip"; | ||
|
|
||
| internal const string CommunityDiscussions = "https://github.com/ubden/CreamApi-CreamInstaller/discussions"; | ||
| internal const string CommunityForum = "https://forum.ubden.com.tr/konu/creaminstaller-auto-dlc-unlocker-installer-config-gen.1602/"; |
There was a problem hiding this comment.
CommunityDiscussions points to github.com/ubden/... while the repository constants use ubden-community. This inconsistency will produce dead/incorrect links in the Help dialog and documentation if the discussions live in the same repo. Consider constructing the discussions URL from RepositoryOwner/RepositoryName (or update the owner here to match the actual hosting location).
| Mamson.A!ac, Trojan:Win32/ and other | ||
|
|
||
| #### File(s) flagged | ||
| Please review code line : "// ANTIVIRUS FALSE POSITIVE WARNING:" and folder /Resourcues |
There was a problem hiding this comment.
Typo in template text: "/Resourcues" should be "/Resources" (and consider replacing this line with a clearer instruction to include the exact file path(s) flagged by the AV).
| Please review code line : "// ANTIVIRUS FALSE POSITIVE WARNING:" and folder /Resourcues | |
| Please include the exact file path(s) flagged by the antivirus (for example: `/Resources/...`). |
| run: dotnet restore CreamInstaller/CreamInstaller.csproj | ||
|
|
||
| - name: Publish (self-contained single file) | ||
| run: | | ||
| dotnet publish CreamInstaller/CreamInstaller.csproj ` | ||
| -c Release ` | ||
| -r win-x64 ` | ||
| --self-contained false ` | ||
| -p:PublishSingleFile=true ` | ||
| -p:IncludeAllContentForSelfExtract=true ` |
There was a problem hiding this comment.
The step name says "Publish (self-contained single file)" but the command uses --self-contained false, which produces a framework-dependent single-file app. Either rename the step to avoid confusion or change the publish command to --self-contained true if you really intend a self-contained release.
| private static string ComputeMD5(this string filePath) | ||
| { | ||
| if (!File.Exists(filePath)) | ||
| return null; | ||
| // Performance: return cached hash if the file has already been hashed this session. | ||
| if (md5Cache.TryGetValue(filePath, out string cached)) | ||
| return cached; | ||
| #pragma warning disable CA5351 |
There was a problem hiding this comment.
The MD5 cache is keyed only by file path, so it can return a stale hash if the file is modified externally (game update, user replacing DLL) during the same app session. That can make IsResourceFile() return incorrect results. Consider caching alongside File.GetLastWriteTimeUtc/length and recomputing when metadata changes (or drop caching for correctness).
UBD-11 , UBD-12