Skip to content

fix: display proper status for empty folders in AI tagging#604

Open
SiddharthJiyani wants to merge 3 commits into
AOSSIE-Org:mainfrom
SiddharthJiyani:592-fix-empty-folder-ai-tagging-status
Open

fix: display proper status for empty folders in AI tagging#604
SiddharthJiyani wants to merge 3 commits into
AOSSIE-Org:mainfrom
SiddharthJiyani:592-fix-empty-folder-ai-tagging-status

Conversation

@SiddharthJiyani
Copy link
Copy Markdown
Contributor

@SiddharthJiyani SiddharthJiyani commented Oct 31, 2025

Changes

Backend (Sync Microservice)

  • Added total_images and tagged_images fields to tagging status API response
  • Updated schema, database queries, and routes to include detailed image counts

Frontend

  • Implemented per-folder timestamp tracking in Redux store (folderStatusTimestamps)
  • Timestamp updates only when folder's image counts actually change
  • Added 3-second grace period for folders showing 0 images (prevents premature "empty" message)
  • Three display states based on folder status:
    • Loading: Spinner with "Loading status..." when AI tagging first enabled
    • Empty: Alert icon with "No images found in this folder" when confirmed empty
    • Progress: Progress bar showing percentage

Key Improvements

  • Each folder maintains independent loading state (no cascading effects)
  • Adding/deleting folders doesn't trigger status flickering in other folders
fix_issue_592.mp4

Summary by CodeRabbit

  • New Features
    • Added per-folder loading indicators for AI Tagging status with visual spinner feedback.
    • Implemented empty folder detection with alert messaging.
    • Enhanced progress tracking to display total and tagged image counts alongside percentage completion.
    • Improved folder status UI with dynamic states for loading, empty, and complete statuses.

Review Change Stack

@github-actions github-actions Bot added backend bug Something isn't working frontend labels Oct 31, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Oct 31, 2025

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 41480c52-f795-4110-b3c6-d513eb21e98b

📥 Commits

Reviewing files that changed from the base of the PR and between 94f4a21 and ac4b5a1.

📒 Files selected for processing (1)
  • frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx

Walkthrough

This PR extends the folder AI tagging feature to distinguish between empty folders and those actively processing. Backend now tracks total and tagged image counts, enabling the frontend to render loading state, empty-folder messages, or progress conditionally based on per-folder timestamps and image count data.

Changes

Folder Tagging Status Enhancement

Layer / File(s) Summary
Backend data model extension for image counts
sync-microservice/app/database/folders.py, sync-microservice/app/schemas/folders.py, sync-microservice/app/routes/folders.py
FolderTaggingInfo NamedTuple and Pydantic schema extend to include total_images and tagged_images fields; database query aggregates these from the images table with division-by-zero guard for percentage computation; route handler populates both into response objects.
Frontend type contract update
frontend/src/types/FolderStatus.ts
FolderTaggingInfo interface adds total_images: number and tagged_images: number alongside existing tagging_percentage.
Redux state and timestamp tracking
frontend/src/features/folderSlice.ts
FolderState adds folderStatusTimestamps: Record<string, number> to track per-folder update times; setTaggingStatus captures a single timestamp and updates it only when folder status is new or differs by image counts; clearTaggingStatus resets both timestamps and status.
UI conditional rendering with smart state detection
frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx
Imports Loader2 and AlertCircle icons; defines isStatusLoading() using timestamps and 3-second recency window; replaces progress rendering with conditional display: spinner while loading, alert message if no images, progress bar or checkmark when images exist.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • AOSSIE-Org/PictoPy#516: Modifies the same FolderManagementCard component and folder status/AI-tagging UI logic.
  • AOSSIE-Org/PictoPy#574: Adds/modifies folder tagging status state and types, updates folder tagging UI and backend data structures.
  • AOSSIE-Org/PictoPy#486: Extends sync microservice folder tagging data and modifies related database, routes, and schema modules.

Suggested labels

TypeScript/JavaScript, Python

Suggested reviewers

  • rahulharpal1603

Poem

🐰 Through empty folders once confessed,
Now status shows which ones are blessed—
With images yet to receive tags,
Or simply bare as empty bags.
A spinner spins, alerts now gleam,
Making folder states less of a dream!

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main fix: displaying proper status for empty folders in AI tagging, which aligns with the primary changeset objective.
Linked Issues check ✅ Passed The PR fully implements all coding requirements from issue #592: added total_images and tagged_images fields to backend API, implemented per-folder timestamp tracking with 3-second grace period, and displays three distinct states (loading, empty, progress) to distinguish empty folders from active processing.
Out of Scope Changes check ✅ Passed All changes are scoped to the objectives: backend additions to tagging API, frontend timestamp tracking, and per-folder status display logic are all directly necessary to fix empty folder handling.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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 and usage tips.

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 (2)
sync-microservice/app/database/folders.py (1)

115-117: Consider adding validation that tagged_images ≤ total_images.

While the SQL query logic makes it unlikely for tagged_images to exceed total_images, adding an assertion or validation could prevent potential data integrity issues from propagating to the API response.

Example validation:

if tagged_images > total_images:
    logger.warning(
        f"Data integrity issue in folder {folder_id}: "
        f"tagged_images ({tagged_images}) > total_images ({total_images})"
    )
    tagged_images = total_images
sync-microservice/app/schemas/folders.py (1)

10-11: Consider adding cross-field validation for data integrity.

While individual field validation ensures non-negative values, adding a validator to ensure tagged_images <= total_images would improve data integrity guarantees at the API boundary.

Example validator:

from pydantic import field_validator

@field_validator('tagged_images')
@classmethod
def validate_tagged_not_exceeds_total(cls, v, info):
    total = info.data.get('total_images')
    if total is not None and v > total:
        raise ValueError('tagged_images cannot exceed total_images')
    return v
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8980d72 and 8c28636.

📒 Files selected for processing (6)
  • frontend/src/features/folderSlice.ts (2 hunks)
  • frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (3 hunks)
  • frontend/src/types/FolderStatus.ts (1 hunks)
  • sync-microservice/app/database/folders.py (2 hunks)
  • sync-microservice/app/routes/folders.py (1 hunks)
  • sync-microservice/app/schemas/folders.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (1)
frontend/src/app/store.ts (1)
  • RootState (22-22)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Tauri Build Check (windows-latest)
  • GitHub Check: Tauri Build Check (macos-latest, --target aarch64-apple-darwin)
  • GitHub Check: Tauri Build Check (ubuntu-22.04)
  • GitHub Check: Backend Tests
🔇 Additional comments (10)
frontend/src/types/FolderStatus.ts (1)

4-6: LGTM! Interface correctly extended with image count fields.

The addition of total_images and tagged_images fields aligns with the backend schema changes and enables the frontend to distinguish between empty folders and folders with 0% progress.

sync-microservice/app/database/folders.py (1)

19-20: LGTM! NamedTuple correctly extended with image count fields.

The addition of total_images and tagged_images to the FolderTaggingInfo NamedTuple properly extends the data model to support the new frontend requirements.

sync-microservice/app/routes/folders.py (1)

36-38: LGTM! Route handler correctly propagates new fields.

The API response now includes total_images and tagged_images, enabling the frontend to distinguish between empty folders and folders with active tagging progress.

frontend/src/features/folderSlice.ts (3)

8-8: LGTM! Per-folder timestamp tracking properly initialized.

The addition of folderStatusTimestamps enables independent loading state management for each folder, preventing cascading effects when folders are added or deleted.

Also applies to: 15-15


77-94: LGTM! Timestamp update logic correctly implements change detection.

The implementation captures a single timestamp for the batch and updates per-folder timestamps only when total_images or tagged_images change. This prevents unnecessary timestamp updates while ensuring the UI can detect when folder status has meaningfully changed.

Note: The comparison excludes tagging_percentage since it's derived from the count fields—this is appropriate.


97-101: LGTM! Cleanup correctly clears timestamp state.

The clearTaggingStatus reducer properly resets both the tagging status and timestamps, ensuring a clean state.

frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (4)

31-33: LGTM! Timestamp selector properly integrated.

The folderStatusTimestamps selector enables per-folder loading state computation in the isStatusLoading helper.


35-51: LGTM! Loading state logic correctly implements 3-second grace period.

The isStatusLoading helper properly handles all states:

  • Returns false when AI tagging is disabled
  • Returns true during initial load (no status or timestamp)
  • Implements a 3-second grace period for empty folders to prevent premature display of "No images found"

Note: The grace period transition from loading to empty relies on subsequent API polls to trigger component re-renders. This is acceptable behavior assuming the tagging status API is polled regularly (e.g., every few seconds). The component will update when taggingStatus changes, even if the folder's timestamp remains unchanged.


61-67: LGTM! Per-folder state variables correctly computed.

The per-folder state computation properly derives loading, hasImages, isEmpty, and isComplete from the tagging status, enabling conditional rendering of appropriate UI elements.


110-146: LGTM! Conditional UI rendering correctly implements three display states.

The implementation properly renders:

  • Loading state: Spinner with "Loading status..." for folders during initial load or grace period
  • Empty state: Alert icon with "No images found in this folder" for confirmed empty folders
  • Progress state: Progress bar with percentage, including green completion indicator and check icon at 100%

The logic correctly handles all edge cases, including folders without status data (shows loading) and completed tagging (shows green checkmark).

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 (1)
frontend/src/features/folderSlice.ts (1)

77-96: Consider cleaning up stale timestamps for removed folders.

The timestamp update logic correctly tracks when each folder's status changes. However, folderStatusTimestamps is not pruned when folders are removed from the payload (e.g., when AI tagging is disabled). This creates a minor memory leak.

Consider adding cleanup logic to remove timestamps for folders no longer in the payload:

 setTaggingStatus(state, action: PayloadAction<FolderTaggingInfo[]>) {
   const map: Record<string, FolderTaggingInfo> = {};
   const now = Date.now();
+  const activeFolderIds = new Set<string>();

   for (const info of action.payload) {
     map[info.folder_id] = info;
+    activeFolderIds.add(info.folder_id);

     const existingStatus = state.taggingStatus[info.folder_id];
     if (
       !existingStatus ||
       existingStatus.total_images !== info.total_images ||
       existingStatus.tagged_images !== info.tagged_images
     ) {
       state.folderStatusTimestamps[info.folder_id] = now;
     }
   }

+  // Clean up timestamps for folders no longer in payload
+  for (const folderId in state.folderStatusTimestamps) {
+    if (!activeFolderIds.has(folderId)) {
+      delete state.folderStatusTimestamps[folderId];
+    }
+  }

   state.taggingStatus = map;
   state.lastUpdatedAt = now;
 },
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8c28636 and 94f4a21.

📒 Files selected for processing (2)
  • frontend/src/features/folderSlice.ts (2 hunks)
  • frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (1)
frontend/src/app/store.ts (1)
  • RootState (22-22)
🔇 Additional comments (5)
frontend/src/features/folderSlice.ts (2)

8-8: LGTM! Per-folder timestamp tracking added.

The folderStatusTimestamps field enables independent loading states for each folder, which aligns with the PR objective to prevent cascading status flickering when folders are added or deleted.


99-103: LGTM! Cleanup logic correctly resets timestamps.

The clearTaggingStatus reducer properly resets both taggingStatus and folderStatusTimestamps together, maintaining consistency.

frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (3)

2-2: LGTM! New icons imported for enhanced status indicators.

Loader2 and AlertCircle are correctly used for loading and empty folder states, improving the visual feedback for users.


31-33: LGTM! Selector correctly retrieves per-folder timestamps.

The folderStatusTimestamps selector enables the component to access per-folder update times for calculating loading states.


113-149: LGTM! Three-state UI correctly implements PR objectives.

The conditional rendering implements the three distinct states as specified in the PR objectives:

  1. Loading: Spinner with "Loading status..." during initial fetch or 3-second grace period for empty folders
  2. Empty: Alert icon with "No images found in this folder" when folder is confirmed empty
  3. Progress: Progress bar showing tagging percentage, with green styling when complete

This effectively distinguishes between "0 images" and "0% progress," resolving issue #592.

Comment thread frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx
Comment thread frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx Outdated
@rohan-pandeyy
Copy link
Copy Markdown
Contributor

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 3, 2026

✅ Actions performed

Full review triggered.

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.

♻️ Duplicate comments (2)
frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx (2)

73-73: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

key={index} — unresolved from previous review.

Using the array index as the React key causes incorrect DOM recycling when folders are reordered, added, or removed.

- key={index}
+ key={folder.folder_id}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx` at line
73, In FolderManagementCard where the list item uses key={index}, replace the
index key with a stable unique identifier from the folder object (e.g.,
folder.id or folder.path/name) used in the map render so React can track items
correctly when reordering/adding/removing; update the mapped element where
key={index} appears to use folder.id (or folder.path/name) and if some folders
lack an id, derive or persist a stable id (generate once and store on the folder
record or use a deterministic key) rather than falling back to the array index.

41-42: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

!timestamp causes indefinite loading spinner — unresolved from previous review.

When status is present but timestamp is absent (e.g., persisted Redux state missing the new field), isStatusLoading always returns true, pinning the folder in the loading state forever.

🛠️ Proposed fix
  const timestamp = folderStatusTimestamps[folderId];
- if (!timestamp) return true;
-
- const timeSinceUpdate = Date.now() - timestamp;
+ // If timestamp is missing, skip the grace period and show actual state
+ const timeSinceUpdate = timestamp ? Date.now() - timestamp : Infinity;

  if (status.total_images === 0 && timeSinceUpdate < 3000) {

Infinity bypasses the < 3000 check, so a missing timestamp falls back to displaying the real state rather than spinning indefinitely.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx` around
lines 41 - 42, The check in isStatusLoading uses
folderStatusTimestamps[folderId] and currently does `if (!timestamp) return
true`, which treats a missing timestamp as "loading" forever; instead, when
timestamp is missing (undefined or null) return Infinity (or a very large
number) so that the subsequent `< 3000` staleness check evaluates false and the
real status displays. Update the logic in the function that reads
folderStatusTimestamps (referencing folderStatusTimestamps and folderId, e.g.,
inside isStatusLoading) to explicitly detect undefined/null and return Infinity
rather than returning true.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx`:
- Line 73: In FolderManagementCard where the list item uses key={index}, replace
the index key with a stable unique identifier from the folder object (e.g.,
folder.id or folder.path/name) used in the map render so React can track items
correctly when reordering/adding/removing; update the mapped element where
key={index} appears to use folder.id (or folder.path/name) and if some folders
lack an id, derive or persist a stable id (generate once and store on the folder
record or use a deterministic key) rather than falling back to the array index.
- Around line 41-42: The check in isStatusLoading uses
folderStatusTimestamps[folderId] and currently does `if (!timestamp) return
true`, which treats a missing timestamp as "loading" forever; instead, when
timestamp is missing (undefined or null) return Infinity (or a very large
number) so that the subsequent `< 3000` staleness check evaluates false and the
real status displays. Update the logic in the function that reads
folderStatusTimestamps (referencing folderStatusTimestamps and folderId, e.g.,
inside isStatusLoading) to explicitly detect undefined/null and return Infinity
rather than returning true.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b4ca82ce-e216-4f34-9cb1-f233b2fcba0c

📥 Commits

Reviewing files that changed from the base of the PR and between 8980d72 and 94f4a21.

📒 Files selected for processing (6)
  • frontend/src/features/folderSlice.ts
  • frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx
  • frontend/src/types/FolderStatus.ts
  • sync-microservice/app/database/folders.py
  • sync-microservice/app/routes/folders.py
  • sync-microservice/app/schemas/folders.py

Copilot AI review requested due to automatic review settings May 12, 2026 16:41
Copy link
Copy Markdown

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 PR fixes incorrect AI tagging status display for empty folders by extending the backend tagging-status API to include explicit image counts and updating the frontend UI logic to differentiate “loading”, “empty”, and “in-progress” states per folder.

Changes:

  • Backend: include total_images and tagged_images in folder tagging status data from DB → schema → route response.
  • Frontend: track per-folder status timestamps in Redux to drive independent loading/empty/progress rendering with a 3s grace period for 0-image folders.
  • Frontend UI: add explicit “Loading status…” and “No images found in this folder” states instead of showing a stuck 0% progress bar.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
sync-microservice/app/schemas/folders.py Adds total_images/tagged_images to the tagging status response schema.
sync-microservice/app/routes/folders.py Populates the new image-count fields in the /folders/status response.
sync-microservice/app/database/folders.py Returns total/tagged image counts alongside computed tagging percentage.
frontend/src/types/FolderStatus.ts Extends the frontend type to include total_images/tagged_images.
frontend/src/features/folderSlice.ts Stores per-folder “counts changed” timestamps to support stable UI state transitions.
frontend/src/pages/SettingsPage/components/FolderManagementCard.tsx Renders per-folder loading/empty/progress states using timestamps and new API fields.

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

Comment on lines +34 to +45

const isStatusLoading = (folderId: string, folderHasAITagging: boolean) => {
if (!folderHasAITagging) return false;

const status = taggingStatus[folderId];
if (!status) return true;

const timestamp = folderStatusTimestamps[folderId];
const timeSinceUpdate = timestamp ? Date.now() - timestamp : Infinity;

if (status.total_images === 0 && timeSinceUpdate < 3000) {
return true;
Comment on lines +42 to +45
const timeSinceUpdate = timestamp ? Date.now() - timestamp : Infinity;

if (status.total_images === 0 && timeSinceUpdate < 3000) {
return true;
Comment on lines 77 to +95
setTaggingStatus(state, action: PayloadAction<FolderTaggingInfo[]>) {
const map: Record<string, FolderTaggingInfo> = {};
const now = Date.now();

for (const info of action.payload) {
map[info.folder_id] = info;

const existingStatus = state.taggingStatus[info.folder_id];
if (
!existingStatus ||
existingStatus.total_images !== info.total_images ||
existingStatus.tagged_images !== info.tagged_images
) {
state.folderStatusTimestamps[info.folder_id] = now;
}
}

state.taggingStatus = map;
state.lastUpdatedAt = Date.now();
state.lastUpdatedAt = now;
Comment on lines +111 to +145
{folder.AI_Tagging && (
<div className="mt-3">
{loading ? (
<div className="text-muted-foreground flex items-center gap-2 text-xs">
<Loader2 className="h-3 w-3 animate-spin" />
<span>Loading status...</span>
</div>
) : isEmpty ? (
<div className="text-muted-foreground flex items-center gap-2 text-xs">
<AlertCircle className="h-3 w-3" />
<span>No images found in this folder</span>
</div>
) : hasImages ? (
<>
<div className="text-muted-foreground mb-1 flex items-center justify-between text-xs">
<span>AI Tagging Progress</span>
<span
className={
isComplete
? 'flex items-center gap-1 text-green-500'
: 'text-muted-foreground'
}
>
{isComplete && <Check className="h-3 w-3" />}
{Math.round(status.tagging_percentage)}%
</span>
</div>
<Progress
value={status.tagging_percentage}
indicatorClassName={
isComplete ? 'bg-green-500' : 'bg-blue-500'
}
/>
</>
) : null}
Copy link
Copy Markdown
Contributor

@rohan-pandeyy rohan-pandeyy left a comment

Choose a reason for hiding this comment

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

Hi @SiddharthJiyani,
Thanks for the PR!

Currently, there's a "randomness" caused by a race condition between how long the user's backend takes to scan a folder on the disk, and the hardcoded 3-second timeout.

If the user's folder has only a few images or the disk is fast, the backend might finish the scan in 1.5 seconds (comfortably inside the 3-second grace period👍) but if the folder is large and takes 4-6 seconds to scan, we see the "No images found" flicker.

We should avoid time-guessing. Modify the backend to return an explicit is_scanning: boolean flag for each folder, or return status.total_images = null instead of 0 while the initial disk scan is still in progress. The frontend can then simply say: const loading = status.is_scanning;

Before you start, pull the latest changes into your SiddharthJiyani:592-fix-empty-folder-ai-tagging-status branch. Then continue with the backend changes, otherwise we’ll run into merge conflicts with the master branch.

@github-actions
Copy link
Copy Markdown
Contributor

⚠️ This PR has merge conflicts.

Please resolve the merge conflicts before review.

Your PR will only be reviewed by a maintainer after all conflicts have been resolved.

📺 Watch this video to understand why conflicts occur and how to resolve them:
https://www.youtube.com/watch?v=Sqsz1-o7nXk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BUG: AI Tagging Shows 0% Progress for Empty Folders Instead of "No Images" Message

3 participants