Skip to content

Conversation

@ThomasKroes
Copy link
Contributor

No description provided.

@ThomasKroes ThomasKroes added the enhancement New feature or request label May 2, 2025
@ThomasKroes ThomasKroes self-assigned this May 2, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request introduces a comprehensive app features system to manage optional downloadable content in ManiVault Studio. The changes provide users with granular control over which dynamic features they want to enable, including tutorials, videos, projects, and error logging.

Key Changes:

  • Introduces a new AppFeatureAction base class and specific feature actions (Videos, Tutorials, Projects, ErrorLogging) to manage optional app features
  • Refactors error logging settings into the new app features framework
  • Renames toggle action variables throughout the codebase to include "Section" suffix for improved clarity and consistency

Reviewed changes

Copilot reviewed 50 out of 50 changed files in this pull request and generated 36 comments.

Show a summary per file
File Description
ManiVault/src/actions/AppFeatureAction.h/cpp New base class for managing app features with consent dialogs and enable/disable functionality
ManiVault/src/actions/*AppFeatureAction.h/cpp Individual app feature implementations for Videos, Tutorials, Projects, and ErrorLogging
ManiVault/src/AppFeaturesSettingsAction.h/cpp New settings action that groups all app features together
ManiVault/src/private/SettingsManager.h/cpp Adds app features settings and removes deprecated error logging settings
ManiVault/src/AbstractSettingsManager.h Updates interface with const overloads and app features support
ManiVault/src/private/StartPageContentWidget.h/cpp Renames toggle actions with "Section" suffix and integrates tutorials app feature visibility
ManiVault/src/private/StartPageGetStartedWidget.cpp Adds conditional tutorials widget visibility based on app feature setting
ManiVault/src/private/LearningPageContentWidget.h/cpp Renames actions and integrates videos/tutorials app feature visibility controls
ManiVault/src/private/HelpMenu.cpp Conditionally adds videos and tutorials menus based on app feature settings
ManiVault/src/private/HelpManager.cpp Updates to support videos DSN synchronization and app feature-based visibility
ManiVault/src/models/LearningCenterVideosModel.h/cpp Adds DSN synchronization capability and app feature integration
ManiVault/src/models/LearningCenterTutorialsModel.cpp Integrates tutorials app feature check in DSN synchronization
ManiVault/src/actions/StringAction.h/cpp Adds new TextBrowser widget type for HTML content display
ManiVault/src/actions/GroupAction.h/cpp Removes unnecessary virtual keywords and improves code formatting
ManiVault/src/private/ErrorManager.cpp Refactors error logging integration (work in progress with TODOs)
ManiVault/src/private/AppFeaturesDialog.h/cpp Renamed from ErrorLoggingConsentDialog to support all app features
ManiVault/res/html/AppFeature*.html New HTML resources describing each app feature for consent dialogs
ManiVault/src/PluginFactory.h/cpp Adds videos DSN action for plugin-provided video content
ManiVault/src/CoreInterface.h Adds constSettings() convenience function for const access
ManiVault/cmake/*.cmake Updates CMake configuration to include new app feature files

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

addMenu(mv::help().getVideosMenu());

if (tutorialsAppFeatureEnabledAction.isChecked())
addMenu(mv::help().getTutorialsMenu());
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Inconsistent whitespace detected. This line uses a tab character for indentation while the surrounding code uses spaces. Please use consistent spacing throughout the file.

Copilot uses AI. Check for mistakes.
Comment on lines +35 to +43
//TODO
//public: // Action getters
//
// const ToggleAction& getTutorialsAction() const { return _tutorialsAction; }
// const ToggleAction& getProjectsAction() const { return _projectsAction; }
//
//private:
// ToggleAction _tutorialsAction; /** Toggle tutorials dynamic content */
// ToggleAction _projectsAction; /** Toggle projects dynamic content */
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Incomplete TODO comments. These comments in the file indicate work in progress but provide no context about what needs to be done. Please either complete the implementation or add details about what's needed.

Copilot uses AI. Check for mistakes.
gui::AppearanceSettingsAction& getAppearanceSettingsAction() override { return _appearanceSettingsAction; };
gui::TemporaryDirectoriesSettingsAction& getTemporaryDirectoriesSettingsAction() override { return _temporaryDirectoriesSettingsAction; };
gui::ErrorLoggingSettingsAction& getErrorLoggingSettingsAction() override { return _errorLoggingSettingsAction; };
//gui::AppFeaturesSettingsAction& getAppFeaturesSettingsAction() override { return _appFeaturesSettingsAction; }
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Commented-out code. The line contains a commented-out method declaration. If this is no longer needed, it should be removed. If it's still needed, please add a comment explaining why it's temporarily disabled.

Copilot uses AI. Check for mistakes.
connect(&tutorialsAppFeatureEnabledAction, &ToggleAction::toggled, this, [this](bool toggled) -> void {
if (toggled)
_toggleTutorialsSectionAction.setChecked(true);
});
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Inconsistent whitespace detected. This line uses a tab character for indentation while the surrounding code uses spaces. Please use consistent spacing throughout the file.

Copilot uses AI. Check for mistakes.
}
});
}

Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Inconsistent whitespace detected. This line uses a tab character for indentation while the surrounding code uses spaces. Please use consistent spacing throughout the file.

Copilot uses AI. Check for mistakes.
Comment on lines +104 to +107
connect(&tutorialsAppFeatureEnabledAction, &ToggleAction::toggled, this, [this](bool toggled) -> void {
if (toggled)
_toggleTutorialsSectionAction.setChecked(true);
});
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Potential dangling reference issue. The lambda captures tutorialsAppFeatureEnabledAction by reference and is connected to a signal. If this lambda outlives the scope where tutorialsAppFeatureEnabledAction is defined, the reference will be invalid. Consider capturing by value or ensuring the lambda's lifetime is properly managed.

Copilot uses AI. Check for mistakes.
Comment on lines +344 to +345
const auto toggleVisibility = [tutorialsMenu, &tutorialsAppFeatureEnabledAction]() -> void {
tutorialsMenu->setEnabled(tutorialsAppFeatureEnabledAction.isChecked());
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Potential dangling reference issue. The lambda captures tutorialsAppFeatureEnabledAction by reference and is connected to a signal. If this lambda outlives the scope where tutorialsAppFeatureEnabledAction is defined, the reference will be invalid. Consider capturing by value or ensuring the lambda's lifetime is properly managed.

Copilot uses AI. Check for mistakes.
Comment on lines +81 to +85
// TODO
//errorLoggingSettingsAction.addAction(&getLoggingAskConsentDialogAction());
//errorLoggingSettingsAction.addAction(&getLoggingEnabledAction());
//errorLoggingSettingsAction.addAction(&getLoggingDsnAction());
//errorLoggingSettingsAction.addAction(&getLoggingShowCrashReportDialogAction());
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Incomplete TODO comments. These comments indicate work in progress but provide no context about what needs to be done. Please either complete the implementation or add details about what's needed.

Copilot uses AI. Check for mistakes.
Comment on lines +35 to +43
// TODO
//public: // Action getters
//
// const ToggleAction& getTutorialsAction() const { return _tutorialsAction; }
// const ToggleAction& getProjectsAction() const { return _projectsAction; }
//
//private:
// ToggleAction _tutorialsAction; /** Toggle tutorials dynamic content */
// ToggleAction _projectsAction; /** Toggle projects dynamic content */
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Incomplete TODO comments. These comments in the file indicate work in progress but provide no context about what needs to be done. Please either complete the implementation or add details about what's needed.

Copilot uses AI. Check for mistakes.
}

updateActionsReadOnly();
//mv::help().addNotification("App Feature", QString("%1 app feature has been %2").arg(text(), toggled ? "enabled" : "disabled"), StyledIcon(toggled ? "toggle-on" : "toggle-off"));
Copy link

Copilot AI Dec 24, 2025

Choose a reason for hiding this comment

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

Commented-out notification code. This line contains a commented-out call to add a notification. If this feature is not yet ready for production, please add a comment explaining when/why it should be enabled. Otherwise, if it's no longer needed, it should be removed.

Suggested change
//mv::help().addNotification("App Feature", QString("%1 app feature has been %2").arg(text(), toggled ? "enabled" : "disabled"), StyledIcon(toggled ? "toggle-on" : "toggle-off"));

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants