Skip to content

Add overview home screen#461

Merged
DropSnorz merged 4 commits into
v2from
feat/home
Jun 22, 2026
Merged

Add overview home screen#461
DropSnorz merged 4 commits into
v2from
feat/home

Conversation

@DropSnorz

@DropSnorz DropSnorz commented Apr 26, 2026

Copy link
Copy Markdown
Owner

Requires #464

@DropSnorz DropSnorz added this to the 2.0.0 milestone Apr 26, 2026
@DropSnorz DropSnorz self-assigned this Apr 26, 2026
@DropSnorz DropSnorz added Status: In Progress Work in Progress Status: Proposal Request for comments labels Apr 26, 2026
@coderabbitai

coderabbitai Bot commented Apr 26, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 2f94677c-4e42-4b27-b001-1f63cadcd7e4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

Adds a new Home dashboard tab to OwlPlug showing plugin/project metrics, a top-5 file-size bar chart, scan-progress animation, and setup suggestions. Splits PluginScanEvent into PluginScanStartedEvent and PluginScanCompletedEvent. Adds repository count/query methods to feed dashboard data. Redesigns the welcome dialog into a two-step format-selection flow. Refactors TaskBar to use ContextMenu.

Changes

Home Dashboard, Welcome Dialog Redesign, and Scan Event Split

Layer / File(s) Summary
Plugin scan event split and wiring
owlplug-client/src/main/java/com/owlplug/plugin/events/PluginScanCompletedEvent.java, owlplug-client/src/main/java/com/owlplug/plugin/events/PluginScanStartedEvent.java, owlplug-client/src/main/java/com/owlplug/plugin/components/PluginTaskFactory.java, owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginsController.java
Renames PluginScanEvent to PluginScanCompletedEvent, adds PluginScanStartedEvent record, updates PluginTaskFactory to publish both events on task lifecycle (start, success, failure, cancellation), and updates PluginsController to listen for the renamed event and adds setSearch(String) method.
Repository and service query methods
owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java, owlplug-client/src/main/java/com/owlplug/plugin/repositories/PluginRepository.java, owlplug-client/src/main/java/com/owlplug/plugin/repositories/FileStatRepository.java, owlplug-client/src/main/java/com/owlplug/project/repositories/PluginLookupRepository.java, owlplug-client/src/main/java/com/owlplug/project/services/ProjectService.java, owlplug-client/src/main/java/com/owlplug/core/services/OptionsService.java
Adds LAST_PLUGIN_SCAN_DATE_KEY constant, countByFormat/countByDisabledTrue to PluginRepository, findTop5ByParentIsNullOrderByLengthDesc to FileStatRepository, countByResult to PluginLookupRepository, and getProjectDirectories() to ProjectService to support dashboard metrics; extends clearAllUserData() to delete project repository data.
HomeController initialization and metrics
owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java
Adds HomeController with Spring-injected repositories/services/controllers, declares FXML-bound dashboard elements, implements initialize() to wire navigation/action handlers and start chart/animation setup, and implements initFileSizeChart() to construct the BarChart.
HomeController chart rendering and listeners
owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java
Implements refresh() to asynchronously compute dashboard metrics (plugin totals by format, project stats, file sizes, last scan timestamp); implements applyFileSizeChart() to render top-5 file-size chart with deferred per-bar tooltips and labels; defines DashboardData record; adds event listeners for scan start/completion and plugin updates.
HomeView FXML and MainController wiring
owlplug-client/src/main/java/com/owlplug/core/controllers/MainController.java, owlplug-client/src/main/resources/fxml/HomeView.fxml, owlplug-client/src/main/resources/fxml/MainView.fxml
Adds HOME_TAB_INDEX constant; defines HomeView.fxml with Overview header, Quick Actions (search + buttons), scan-progress pane, GET STARTED suggestions, PLUGINS/PROJECTS/STORAGE stat tiles; wires Home tab in MainView.fxml header and content.
Welcome dialog multi-step redesign
owlplug-client/src/main/java/com/owlplug/core/controllers/dialogs/WelcomeDialogController.java, owlplug-client/src/main/resources/fxml/dialogs/WelcomeView.fxml
Replaces single-step welcome with two-step flow: Step 1 hero/feature-highlights; Step 2 format toggles (VST2/VST3/AU/LV2, AU disabled on non-macOS). initialize() wires step buttons; buildFormatToggles()/buildFormatRow() create format rows with preference-synced toggles; showStep() toggles visibility; getLayout() simplified to body-only.
TaskBar presentation refactor
owlplug-client/src/main/java/com/owlplug/core/controllers/TaskBarController.java, owlplug-client/src/main/java/com/owlplug/core/utils/TimeUtils.java, owlplug-client/src/main/resources/fxml/TaskBarView.fxml
TaskBarController now renders task history as ContextMenu with FontIcon status icons (replaces Popup/ListView); simplifies initialize(), openTaskHistory(), and setErrorLog(). TaskBarView.fxml refactored to VBox root with icon-only buttons and separate ProgressBar. TimeUtils.toDuration() returns "Just now" instead of "0 seconds ago" for empty results.
Dashboard CSS theme and chart colors
owlplug-client/src/main/resources/owlplug.css
Updates .pane-card to uniform padding (14px) and 8px radius with -color-bg-subtle background. Adds explicit chart-bar -fx-bar-fill colors for .default-color0–7. Introduces Home Dashboard CSS section with dashboard tile/hover/typography, bar chart appearance overrides (transparent plot, hidden axis, muted styling), and scan-indicator styling. Removes .progress-bar-error > .bar styling; adjusts task-bar-* presentation.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • DropSnorz/OwlPlug#359: Both PRs refactor the plugin scanning flow end-to-end with new PluginScan* events, scan task scheduling in welcome/home flows, and repository methods for dashboard/scan data aggregation.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.71% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add overview home screen' clearly and concisely describes the main change: introducing a new home dashboard/overview screen to the application.
Description check ✅ Passed The description 'Requires #464' is minimal but related to the changeset, indicating a dependency on another PR for this feature's completion.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/home

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@DropSnorz DropSnorz changed the base branch from master to v2 June 19, 2026 19:35
@DropSnorz DropSnorz marked this pull request as ready for review June 20, 2026 14:35
@DropSnorz

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 20, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@owlplug-client/src/main/java/com/owlplug/core/controllers/dialogs/WelcomeDialogController.java`:
- Around line 91-107: The buildFormatToggles method uses a hardcoded index
get(2) to disable the AU format row on non-macOS systems, which is fragile and
will break if the format order changes. Instead of relying on the hardcoded
index, capture a direct reference to the AU format row returned by
buildFormatRow when PluginFormat.AU is passed, store it in a variable, and then
use that variable reference to call setDisable(true) in the conditional block
that checks for non-macOS operating systems. This eliminates the dependency on
array position and makes the code more maintainable.

In
`@owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java`:
- Around line 222-233: The refresh() method performs multiple synchronous
database queries (pluginRepository.count(), pluginRepository.countByFormat(),
dawProjectRepository.count(), pluginLookupRepository.countByResult(),
pluginService.getDirectoriesExplorationSet(), and
projectService.getProjectDirectories()) directly on the UI thread, which blocks
JavaFX interactions. Move these data fetching operations into a background task
(using Task or similar threading mechanism), collect all the metric results, and
then apply the UI updates back on the JavaFX thread using FX.run(). Apply the
same pattern to the refreshFileSizeChart() method which also queries the
database synchronously. This ensures I/O operations do not freeze the user
interface.
- Around line 315-331: The handle method for PluginScanStartedEvent shows the
progress pane and starts the rotation animation, but the corresponding handle
method for PluginScanCompletedEvent only hides it when the scan succeeds. To fix
this, add event listener handler methods for scan failure and cancellation
events (likely PluginScanFailedEvent or similar terminal states) that perform
the same cleanup as the PluginScanCompletedEvent handler: hide the
scanProgressPane, set managed to false, and stop the scanRotation animation.
Alternatively, extract the cleanup logic (hide, setManaged, stop) into a shared
private method and call it from all terminal event handlers to reduce
duplication.
- Around line 281-285: The current implementation in the Platform.runLater()
lambda uses name equality to match chart data back to FileStat objects, but this
is unreliable when multiple top entries have the same name, causing incorrect
tooltip/label data to be displayed. Instead of filtering topStats by matching
fs.getName().equals(data.getYValue()), use a more reliable matching approach
such as using the index position of the data point in the series or a unique
identifier from the FileStat object that corresponds to the chart data, ensuring
each data point maps to exactly the correct FileStat regardless of duplicate
names.

In
`@owlplug-client/src/main/java/com/owlplug/plugin/components/PluginTaskFactory.java`:
- Around line 124-127: The scanTask in PluginTaskFactory only publishes
PluginScanCompletedEvent in the success path via setOnSucceeded, but does not
emit any terminal event when the task fails or is cancelled. Add setOnFailed and
setOnCancelled handlers to the scanTask (alongside the existing setOnSucceeded
handler) that also publish PluginScanCompletedEvent to ensure UI consumers
receive a signal that the scan has ended regardless of whether it succeeded,
failed, or was cancelled.

In `@owlplug-client/src/main/resources/owlplug.css`:
- Around line 794-795: The stylelint error occurs because type selectors in the
CSS stylesheet are using uppercase naming (such as Label, Button) when they must
be lowercase per stylelint rules (such as label, button). Locate and fix all 9
instances of uppercase type selectors throughout the file by converting them to
lowercase. This includes the selector Label in the .dashboard-scan-indicator
rule at line 794, and all other uppercase type selectors referenced at the
additional line numbers mentioned in the comment. Ensure all CSS type selectors
consistently use lowercase convention to satisfy stylelint validation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 43bba058-8b76-47e9-a551-ac6cdccccd3f

📥 Commits

Reviewing files that changed from the base of the PR and between 0a740fe and 6800635.

📒 Files selected for processing (16)
  • owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/MainController.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/dialogs/WelcomeDialogController.java
  • owlplug-client/src/main/java/com/owlplug/core/services/OptionsService.java
  • owlplug-client/src/main/java/com/owlplug/plugin/components/PluginTaskFactory.java
  • owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginsController.java
  • owlplug-client/src/main/java/com/owlplug/plugin/events/PluginScanCompletedEvent.java
  • owlplug-client/src/main/java/com/owlplug/plugin/events/PluginScanStartedEvent.java
  • owlplug-client/src/main/java/com/owlplug/plugin/repositories/FileStatRepository.java
  • owlplug-client/src/main/java/com/owlplug/plugin/repositories/PluginRepository.java
  • owlplug-client/src/main/java/com/owlplug/project/repositories/PluginLookupRepository.java
  • owlplug-client/src/main/java/com/owlplug/project/services/ProjectService.java
  • owlplug-client/src/main/resources/fxml/HomeView.fxml
  • owlplug-client/src/main/resources/fxml/MainView.fxml
  • owlplug-client/src/main/resources/fxml/dialogs/WelcomeView.fxml
  • owlplug-client/src/main/resources/owlplug.css

Comment thread owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java Outdated
Comment thread owlplug-client/src/main/resources/owlplug.css Outdated
@DropSnorz

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@owlplug-client/src/main/java/com/owlplug/core/controllers/TaskBarController.java`:
- Around line 88-90: In the TaskBarController class where the failed task error
dialog is being set up (in the setOnAction lambda), guard against null
exceptions by checking if task.getException() is null before dereferencing it.
If the exception is null, provide null-safe fallback values for both the title
and content parameters being passed to the showErrorDialog method instead of
calling getMessage() and toString() directly on a potentially null exception
object.

In `@owlplug-client/src/main/resources/fxml/TaskBarView.fxml`:
- Around line 22-28: The logsButton and taskHistoryButton controls in
TaskBarView.fxml are icon-only buttons with no textual affordance, making them
inaccessible to screen readers and keyboard users. Add accessible labels by
including accessibleText attributes to both buttons with descriptive text like
"Logs" and "Task History", and also add Tooltip elements nested inside each
button to provide additional context for all users when hovering over the
buttons.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c3eae0ab-8671-410a-a14c-b5f3271251a7

📥 Commits

Reviewing files that changed from the base of the PR and between 6800635 and b25ebeb.

📒 Files selected for processing (9)
  • owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/TaskBarController.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/dialogs/WelcomeDialogController.java
  • owlplug-client/src/main/java/com/owlplug/core/utils/TimeUtils.java
  • owlplug-client/src/main/java/com/owlplug/plugin/components/PluginTaskFactory.java
  • owlplug-client/src/main/resources/fxml/HomeView.fxml
  • owlplug-client/src/main/resources/fxml/TaskBarView.fxml
  • owlplug-client/src/main/resources/owlplug.css
🚧 Files skipped from review as they are similar to previous changes (4)
  • owlplug-client/src/main/resources/fxml/HomeView.fxml
  • owlplug-client/src/main/resources/owlplug.css
  • owlplug-client/src/main/java/com/owlplug/core/controllers/HomeController.java
  • owlplug-client/src/main/java/com/owlplug/core/controllers/dialogs/WelcomeDialogController.java

Comment thread owlplug-client/src/main/resources/fxml/TaskBarView.fxml Outdated
@DropSnorz DropSnorz merged commit 63c0921 into v2 Jun 22, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Status: In Progress Work in Progress Status: Proposal Request for comments

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant