Uploads in the background: top-right progress bars that never take focus (single, bulk, bulk mesh) #1443

Open
opened 2026-11-04 08:48:30 +00:00 by sky_line · 0 comments
Owner

Goal

Uploads should never interrupt the user. Today an upload puts a modal "Uploading..." panel in the centre of the screen that takes keyboard focus. It's LLUploadDialog::modalUploadDialog, called from llviewerassetupload.cpp (~977), with LLUploadDialog::modalUploadFinished in llviewermenufile.cpp (~1417), and that file's upload path is marked bool blocking = true; // modal (~162). Bulk uploads and the bulk mesh upload work the same way (llfloaterbulkupload.cpp, llfloatermeshbulkupload.cpp, llmeshbulkupload.cpp).

The replacement:

  • All uploads run in the background: single images, sounds, animations and models, bulk upload, bulk mesh upload, and material and notecard/script-driven uploads (llsoundnotecardupload.cpp, llmaterialeditor.cpp). Normal play, movement, camera and chat keep working while they run, with no modal state and no focus grab.
  • Progress shows as small bars in the top-right corner, one per active upload or one per batch:
    • name, an n-of-m count for batches, a percentage or bytes where known, and the L$ cost where it applies;
    • stacked, auto-hiding a few seconds after completion, never taking keyboard or mouse focus;
    • clicking a bar may open details, but it never steals focus on its own.
  • Results:
    • On completion, a non-modal toast that links to the new item (open it or show it in inventory).
    • On failure, a toast with the reason and a Retry action. Never a blocking alert.
  • Cancel:
    • For items not yet sent, a small x on a bar cancels them.
    • In-flight uploads that have already been charged must say so before cancelling.
  • Upload safety:
    • Keep uploads serial or bounded-concurrent, as they are today, and never retry blindly. Inventory safety rules apply: no server-side loss, no double charges, and an L$ check before each charged item.
    • Uploads must survive normal UI use, such as closing the upload floater or the bulk window after starting.
    • If the user logs out or quits mid-upload, ask before exiting and say how many are still pending.
  • The abuse-report "uploading" dialog (llfloaterreporter.cpp ~526, ~876) can use the same non-modal progress.

Done when

  • Starting any single, bulk or bulk-mesh upload leaves the user free to walk, chat and type, with no focus change and no centre-screen panel.
  • The top-right bars show progress, then completion or failure with a link or retry, and they disappear on their own.
  • Quitting with uploads pending asks first.
  • No upload is lost, duplicated or double-charged, including when the user closes the upload windows mid-batch. Test on an alt account.
## Goal Uploads should never interrupt the user. Today an upload puts a modal "Uploading..." panel in the centre of the screen that takes keyboard focus. It's `LLUploadDialog::modalUploadDialog`, called from `llviewerassetupload.cpp` (~977), with `LLUploadDialog::modalUploadFinished` in `llviewermenufile.cpp` (~1417), and that file's upload path is marked `bool blocking = true; // modal` (~162). Bulk uploads and the bulk mesh upload work the same way (`llfloaterbulkupload.cpp`, `llfloatermeshbulkupload.cpp`, `llmeshbulkupload.cpp`). The replacement: - **All uploads run in the background:** single images, sounds, animations and models, bulk upload, bulk mesh upload, and material and notecard/script-driven uploads (`llsoundnotecardupload.cpp`, `llmaterialeditor.cpp`). Normal play, movement, camera and chat keep working while they run, with no modal state and no focus grab. - **Progress shows as small bars in the top-right corner**, one per active upload or one per batch: - name, an n-of-m count for batches, a percentage or bytes where known, and the L$ cost where it applies; - stacked, auto-hiding a few seconds after completion, never taking keyboard or mouse focus; - clicking a bar may open details, but it never steals focus on its own. - **Results:** - On completion, a non-modal toast that links to the new item (open it or show it in inventory). - On failure, a toast with the reason and a Retry action. Never a blocking alert. - **Cancel:** - For items not yet sent, a small x on a bar cancels them. - In-flight uploads that have already been charged must say so before cancelling. - **Upload safety:** - Keep uploads serial or bounded-concurrent, as they are today, and never retry blindly. Inventory safety rules apply: no server-side loss, no double charges, and an L$ check before each charged item. - Uploads must survive normal UI use, such as closing the upload floater or the bulk window after starting. - If the user logs out or quits mid-upload, ask before exiting and say how many are still pending. - **The abuse-report "uploading" dialog** (`llfloaterreporter.cpp` ~526, ~876) can use the same non-modal progress. ## Done when - Starting any single, bulk or bulk-mesh upload leaves the user free to walk, chat and type, with no focus change and no centre-screen panel. - The top-right bars show progress, then completion or failure with a link or retry, and they disappear on their own. - Quitting with uploads pending asks first. - No upload is lost, duplicated or double-charged, including when the user closes the upload windows mid-batch. Test on an alt account.
sky_line added this to the Slipstream project 2026-11-04 08:48:30 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1443
No description provided.