diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d84b85..c79a24b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,22 @@ # Changelog -## Unreleased performance pass +## v0.4.3 Alpha 1 (2026-07-26) + +* Copy and Move now work like a file-manager clipboard: select items, stage the + action, navigate to a destination, then choose **Paste Here** +* Restored double-click folder opening while keeping single-click selection and + the explicit **Open** button +* Fixed the upload drop area consuming the file-list height in short or empty + folders +* Dragging files anywhere over the browser now reveals the upload state and + accepts the drop +* Fixed virtual scrolling to listen to the actual file-list scroller +* Reorganized file actions and disabled controls that do not apply to the + current selection +* The clipboard panel now explains the workflow, shows staged items and the + current destination, and includes quick destination shortcuts +* The three-column layout collapses earlier so the clipboard no longer gets + clipped on common laptop-sized browser windows * Large regular-file copies overlap sequential reads with one writer through two fixed 8 MiB, PS5-page-aligned slots; small files and initialization diff --git a/Makefile b/Makefile index 612f933..df111ca 100644 --- a/Makefile +++ b/Makefile @@ -24,8 +24,8 @@ PYTHON ?= python3 # Ship / daily use must stay 5905. WEB_PORT ?= 5905 -VERSION_TAG := bfpilot-v0.4.2-test -BUILD_VERSION ?= v0.4.2-test +VERSION_TAG := bfpilot-v0.4.3-alpha.1 +BUILD_VERSION ?= v0.4.3-alpha.1 LLVM_CONFIG ?= $(if $(wildcard $(PS5_PAYLOAD_SDK)/bin/prospero-llvm-config),$(PS5_PAYLOAD_SDK)/bin/prospero-llvm-config,$(CURDIR)/build-tools/llvm-config) LLVM_BINDIR ?= $(shell "$(LLVM_CONFIG)" --bindir 2>/dev/null || dirname "$$(command -v clang 2>/dev/null || command -v clang.exe 2>/dev/null || command -v llvm-strip 2>/dev/null || command -v llvm-strip.exe 2>/dev/null || echo clang)" 2>/dev/null || echo .) diff --git a/README.md b/README.md index 169b14b..5d9f2d3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ http://:5905/ Works from the PS5 browser or any PC/phone on the same network. -Version **v0.4.2-test**. This is a test build; the v0.4.1 baseline was tested +Version **v0.4.3-alpha.1**. This is an alpha build; the v0.4.1 baseline was tested on FW **11.60**. ## Payloads @@ -26,7 +26,7 @@ on FW **11.60**. ## Features **Browse & transfer** -- Dual panels: left = browse, right = Target for copy/move/extract +- File clipboard: select items, choose Copy or Move, open the destination, then choose Paste Here - Places: `/`, `/data`, `/data/homebrew`, `/user`, `/mnt`, USB/ext when plugged in, custom shortcuts - Upload files or a whole folder using the picker or drag-and-drop (recursive dropped folders need the browser's WebKit entry API) @@ -36,7 +36,8 @@ on FW **11.60**. - Free space check before copy/move when size is known - Same-device, no-symlink recursive traversal with a 64-level depth cap and immediate abort on fatal storage/vnode errors - ShadowMountPlus warning before writes to its common scan roots -- Folder size on click +- Single-click selects; double-click opens folders; the Open button works with controllers +- Folder size is calculated when a folder is selected **Selection** - Checkboxes + select all (works fine with a controller) diff --git a/assets/files.html b/assets/files.html index 9b323e2..9032057 100644 --- a/assets/files.html +++ b/assets/files.html @@ -268,7 +268,7 @@ .browser { min-height: 650px; display: grid; - grid-template-rows: auto auto auto minmax(0, 1fr); + grid-template-rows: auto auto auto auto minmax(0, 1fr); overflow: hidden; } @@ -331,9 +331,25 @@ flex: 0 0 auto; } + .action-group { + display: inline-flex; + flex-wrap: wrap; + align-items: center; + gap: 6px; + padding-right: 8px; + margin-right: 2px; + border-right: 1px solid var(--line); + } + + .action-group:last-of-type { + border-right: 0; + padding-right: 0; + } + .upload-drop { margin: 0 12px 12px; padding: 12px; + min-height: 44px; border: 1px dashed #465b70; border-radius: 8px; color: var(--muted); @@ -343,9 +359,16 @@ } .upload-drop.active { - border-color: var(--accent); - background: rgba(76, 201, 240, 0.08); - color: var(--text); + border-color: var(--deep-2); + background: rgba(52, 211, 153, 0.12); + color: var(--ink); + } + + .browser.drag-active .upload-drop { + border-color: var(--deep-2); + background: rgba(52, 211, 153, 0.12); + color: var(--ink); + box-shadow: inset 0 0 0 1px rgba(94, 224, 170, 0.2); } .count { @@ -473,6 +496,30 @@ font-size: 15px; } + .target-hint { + margin: -2px 0 0; + color: var(--muted); + font-size: 12px; + line-height: 1.4; + } + + .clipboard-status { + border: 1px solid var(--line); + border-radius: 8px; + background: #0c1219; + padding: 10px; + color: var(--muted); + font-size: 12px; + overflow-wrap: anywhere; + } + + .clipboard-status strong { + display: block; + margin-bottom: 3px; + color: var(--ink); + font-size: 13px; + } + .target-path { height: 36px; border: 1px solid var(--line); @@ -653,7 +700,7 @@ display: none; } - @media (max-width: 1080px) { + @media (max-width: 1300px) { .shell { grid-template-columns: 132px minmax(0, 1fr); } @@ -736,6 +783,14 @@ font-size: 12px; } + .action-group { + width: 100%; + padding: 0 0 6px; + margin: 0; + border-right: 0; + border-bottom: 1px solid var(--line); + } + .file-head, .file-row { grid-template-columns: 28px 40px minmax(0, 1fr) 78px; @@ -824,18 +879,22 @@
- - - - - - - - - - - - + + + + + + + + + + + + + + + + 0 selected
@@ -854,18 +913,24 @@ -