Skip to content

feat(ui): cleaned uninstalled feature missing ini message, added "required-version" based on cs version#1153

Closed
davo0411 wants to merge 25 commits into
community-shaders:devfrom
davo0411:version-info
Closed

feat(ui): cleaned uninstalled feature missing ini message, added "required-version" based on cs version#1153
davo0411 wants to merge 25 commits into
community-shaders:devfrom
davo0411:version-info

Conversation

@davo0411
Copy link
Copy Markdown
Collaborator

@davo0411 davo0411 commented Jun 16, 2025

Cleans up the duplicate error messages when features are uninstalled or not loaded.

Adds a statement "Version required 1-0-0" (or whatever version).
This indicates to users who might not have the latest base cs the specific version they should download to avoid conflicts.

20A5EA~1

Summary by CodeRabbit

  • New Features

    • Error messages for missing feature files now clearly indicate when a feature is obsolete or not installed, including cleaned and consistent version information.
  • Bug Fixes

    • Improved accuracy and clarity of error messages related to missing feature files.
    • Version strings in error and UI messages are now consistently formatted for better readability.
  • Refactor

    • Simplified and streamlined failure message handling and display in the user interface.
    • Removed outdated or redundant UI elements and methods related to failure message display.
  • Style

    • Updated feature summary wording for improved clarity, including stronger claims and additional notes.
    • Standardized messaging by adjusting punctuation in log and warning texts.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 16, 2025

## Walkthrough

This change refines feature version error handling by normalizing minimal required version strings for consistent messaging and adding detailed version info when feature INI files are missing. It alters UI behavior by changing the default of `DrawFailLoadMessage()` to false, updating `DrawUnloadedUI()` to show dynamic messages, and removing several feature-specific UI methods and failure message renderings.

## Changes

| File(s)                                   | Change Summary                                                                                       |
|-------------------------------------------|----------------------------------------------------------------------------------------------------|
| src/Feature.cpp, src/Feature.h             | Normalized minimal required version strings; changed default `DrawFailLoadMessage()` to false; updated error message construction and UI logic for unloaded features. |
| src/Features/TerrainHelper.cpp, .h        | Removed `DrawUnloadedUI()` and `DrawFailLoadMessage()` methods and their declarations; updated feature summary with usage note.             |
| src/Features/TerrainVariation.cpp, .h     | Removed `DrawFailLoadMessage()` method and declaration; changed feature summary wording from "Reduces" to "Removes" terrain texture tiling. |
| src/Menu.cpp                              | Removed conditional UI rendering of feature failure messages in the feature configuration interface. |
| src/FeatureIssues.cpp                     | Applied version string cleaning utility to display version info in feature issue UI elements.      |
| src/Utils/Format.cpp, .h                  | Added `Util::CleanVersionString()` function to remove trailing "-0" suffix from version strings.    |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant Menu
    participant Feature

    User->>Menu: Open feature configuration
    Menu->>Feature: Check if feature is loaded
    alt Feature not loaded
        Feature->>Feature: Get minimal required version (normalize string)
        Feature-->>Menu: Return required version or "Unknown"
        Menu->>User: Display detailed error message with required version info
    else Feature loaded
        Menu->>Feature: Render feature settings UI
        Feature-->>Menu: UI elements
        Menu->>User: Show settings
    end

Possibly related PRs

Poem

🐇 Hop along, the versions clear,
No more errors vague or drear.
Messages crisp, the UI bright,
Features guide with gentle light.
A rabbit’s cheer, code’s delight,
Hopping forward, day and night!
✨🌿


<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 560b498591a5a27d20efb35a6d291e47165b8a0e and d0d695de554b1b514a2e253fd193612e110638fe.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `src/Feature.cpp` (6 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* src/Feature.cpp

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (1)</summary>

* GitHub Check: Build plugin and addons

</details>

</details>
<!-- internal state start -->


<!-- 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= -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=doodlum/skyrim-community-shaders&utm_content=1153):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

Automated formatting by clang-format, prettier, and other hooks.
See https://pre-commit.ci for details.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
src/Features/TerrainVariation.h (1)

26-32: Bullet wording contradicts the preceding description

Line 26 says the feature “reduces the repeating pattern”, while the new bullet (line 28) claims it “Removes terrain texture tiling”. “Removes” is a stronger statement than “reduces” and may set unrealistic expectations.

Consider making the wording consistent (e.g., “Reduces terrain texture tiling”) or adjusting the description above the bullet to match the stronger claim.

src/Feature.cpp (1)

110-114: Minor UX: “Version required: Unknown” may confuse users

If the feature’s short-name is missing from FEATURE_MINIMAL_VERSIONS, GetRequiredVersion() returns "Unknown", resulting in a message like
“… not installed! Version required: Unknown”.
That does not help users understand what they need to install.

  1. Detect the "Unknown" sentinel and tailor the message, e.g.
failedLoadedMessage = std::format(
    "The {} file is missing. This feature is not installed!", ini_filename);
  1. Alternatively, enrich FEATURE_MINIMAL_VERSIONS so “unknown” never happens.
src/Feature.h (1)

72-88: Guard UI calls when message/summary are empty

DrawUnloadedUI() now prints the description and key-feature list unconditionally when non-empty – good.
However, ImGui::Spacing() is always called after each block, which can leave trailing blank space if, say, there is no description but there are key features.

Wrap each ImGui::Spacing() inside the same if that prints the preceding block to avoid extra padding.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b9e1401 and 44cc983.

📒 Files selected for processing (7)
  • src/Feature.cpp (2 hunks)
  • src/Feature.h (1 hunks)
  • src/Features/TerrainHelper.cpp (0 hunks)
  • src/Features/TerrainHelper.h (0 hunks)
  • src/Features/TerrainVariation.cpp (0 hunks)
  • src/Features/TerrainVariation.h (1 hunks)
  • src/Menu.cpp (0 hunks)
💤 Files with no reviewable changes (4)
  • src/Features/TerrainVariation.cpp
  • src/Features/TerrainHelper.cpp
  • src/Features/TerrainHelper.h
  • src/Menu.cpp
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build plugin and addons

Comment thread src/Feature.cpp Outdated
Comment thread src/Feature.h Outdated
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 16, 2025

✅ A pre-release build is available for this PR:
Download

@davo0411 davo0411 changed the title feat(ui): Cleaned uninstalled feature missing ini message, added "required-version" based on CS version. feat(ui): cleaned uninstalled feature missing ini message, added "required-version" based on CS version Jun 16, 2025
@davo0411 davo0411 changed the title feat(ui): cleaned uninstalled feature missing ini message, added "required-version" based on CS version feat(ui): cleaned uninstalled feature missing ini message, added "required-version" based on cs version Jun 16, 2025
Copy link
Copy Markdown
Collaborator

@alandtse alandtse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing a virtual function from feature.h needs to be justified. It's used by every feature.

Comment thread src/Feature.cpp Outdated
Comment thread src/Feature.h
davo0411 and others added 4 commits June 17, 2025 12:42
@davo0411 davo0411 requested a review from alandtse June 17, 2025 13:29
Comment thread src/Feature.cpp Outdated
Comment thread src/Feature.cpp Outdated
Comment thread src/Features/TerrainHelper.cpp
Comment thread src/Feature.h
@davo0411 davo0411 requested a review from alandtse June 18, 2025 00:14
Comment thread src/Feature.cpp Outdated
Comment thread src/Feature.cpp Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/Utils/Format.h (1)

9-10: Prefer std::string_view (and add brief doc comment) for zero-copy input

The new helper doesn’t need ownership of the input; taking a std::string_view avoids unnecessary allocations when the caller already has a view or a temporary.
While touching the declaration, add a one-liner comment (as done for FixFilePath) to keep the public API self-documenting.

-   std::string CleanVersionString(const std::string& versionString);
+   /**
+    * @brief Strips trailing “-0” from semantic version strings (e.g. “1-2-3-0” → “1-2-3”).
+    */
+   std::string CleanVersionString(std::string_view versionString);

(Implementation change is trivial: accept std::string_view and construct the return std::string at the end.)

Please confirm no call-sites rely on mutating the argument; a ripgrep for CleanVersionString( will show all usages.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8cc0958 and a2e2728.

📒 Files selected for processing (5)
  • src/Feature.cpp (7 hunks)
  • src/Feature.h (3 hunks)
  • src/FeatureIssues.cpp (4 hunks)
  • src/Utils/Format.cpp (1 hunks)
  • src/Utils/Format.h (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • src/Utils/Format.cpp
  • src/FeatureIssues.cpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/Feature.h
  • src/Feature.cpp
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build plugin and addons

pre-commit-ci Bot and others added 4 commits June 18, 2025 01:52
Automated formatting by clang-format, prettier, and other hooks.
See https://pre-commit.ci for details.
Automated formatting by clang-format, prettier, and other hooks.
See https://pre-commit.ci for details.
@davo0411 davo0411 requested a review from alandtse June 18, 2025 02:17
@davo0411
Copy link
Copy Markdown
Collaborator Author

Pushed the function to Format.cpp/h. I think its been shrunk as much as it can.

Comment thread src/Feature.cpp Outdated
@davo0411 davo0411 requested a review from alandtse June 18, 2025 09:54
Copy link
Copy Markdown
Collaborator

@alandtse alandtse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please walk through all edge cases in the Advanced Ini test section. Your edits will break proper detection of bad inis and resurface cleaned up items. Until you understand what this code is doing for each edge case, this PR won't work.

Perhaps you should consider scoping down to a refactor of the messages so you focus on the stuff that won't break the main logic,

image

Comment thread src/Feature.cpp

if (rc < 0) {
if (!FeatureIssues::IsObsoleteFeature(GetShortName()))
if (FeatureIssues::IsObsoleteFeature(GetShortName())) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No. This doesn't make sense. If the file is deleted we don't have to talk about it.

Comment thread src/Feature.cpp
FeatureIssues::FeatureIssueInfo::IssueType::OBSOLETE, fileInfo, "");
} else {
logger::info("{} failed to load, feature disabled", ini_filename);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. I don't think you understand the code. The ini is missing because they didn't install or deleted it. Why is that an issue to raise?

@davo0411 davo0411 marked this pull request as draft June 19, 2025 03:27
@davo0411
Copy link
Copy Markdown
Collaborator Author

to simplify:

Just use minimumVersionRequired in FeatureIssue.cpp and print that in the uninstall error.

@alandtse
Copy link
Copy Markdown
Collaborator

Perhaps. Honestly this must be redundant with feature issues. You can probably sync some language or something.

@davo0411 davo0411 closed this Jun 24, 2025
@davo0411 davo0411 deleted the version-info branch July 1, 2025 08:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants