v4.2.1 - Bugfix: UI scrolling, file counting, frozen progress display

This commit is contained in:
Manos committed 2026-02-08 14:40:54 +02:00
1 parent 0123a55f52
commit fe741b8e9f
4 files changed
+43 -15

No files matched your search

+22
View File
@@ -1,5 +1,27 @@
# Changelog - PS5 Upload Suite
## Version 4.2.1 - Bugfix Release (February 8, 2026)
### 🐛 Bug Fixes
#### UI Scrolling Fix
- **Fixed connection panel eating screen space** - Added `MaxHeight` constraint (250px) and `ScrollViewer` to the connection/payload settings panel
- **Fixed header overflow** - Added `MaxHeight="120"` to header row
- **Fixed content area too small** - Added `MinHeight="200"` to main content area
- When the Auto-send Payload Expander was open, it consumed half the screen leaving no room for file lists
#### File Counting Fix
- **Fixed chunked files never counting as completed** - `fileChunkCounts` was set to the actual number of chunks (e.g., 4 for a 2GB file), but `UploadFileParallelAsync` handles all chunks internally as a single Task. The main loop only saw 1 task completion per file, so chunked files never reached their completion threshold
- Now correctly sets `fileChunkCounts = 1` per file since each file = 1 task
#### Progress Display Fix
- **Fixed progress appearing frozen during heavy uploads** - All UI updates used `DispatcherPriority.Background` (lowest priority), which got starved when 24 parallel connections flooded the dispatcher queue
- Upgraded `UpdateUploadStats` to `DispatcherPriority.Normal`
- Upgraded per-file progress bars to `DispatcherPriority.Render`
- Progress now updates smoothly even at 95%+ network saturation
---
## Version 4.2.0 - Game Mounter Integration (February 7, 2026)
### 🎮 Game Mounter Integration
+8 -3
View File
@@ -2,14 +2,19 @@
**By Manos**
**Version 4.2.0 - Game Mounter Integration**
**Version 4.2.1 - Bugfix Release**
Custom high-speed file transfer system for PS5 with etaHEN. Achieves **104+ MB/s** upload speeds for large files using parallel chunked uploads!
⭐ **NEW in v4.2.0:**
⭐ **NEW in v4.2.1 (Bugfix):**
- 🖥️ **Fixed UI scrolling** - Connection panel no longer eats half the screen
- 🔢 **Fixed file counting** - Chunked files now count correctly as completed
- 📊 **Fixed frozen progress** - Progress updates no longer freeze during heavy uploads
⭐ **v4.2.0 Features:**
- 🎮 **Mount Games Button** - Mount uploaded games directly from the client
- 🔍 **Multi-Path Scanning** - Scans internal storage, USB drives (0-3), and M.2 SSD
- � **Duplicate Detection** - Skips already-mounted games automatically
- 🔄 **Duplicate Detection** - Skips already-mounted games automatically
- 📊 **Mount Summary** - Detailed results with PS5 notifications
- 🧹 **Auto-Cleanup** - Removes mount entries for deleted games
+6 -3
View File
@@ -66,10 +66,10 @@
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MaxHeight="120"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*" MinHeight="200"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
@@ -119,7 +119,9 @@
BorderThickness="1"
CornerRadius="4"
Padding="15"
Margin="0,0,0,15">
Margin="0,0,0,15"
MaxHeight="250">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@@ -323,6 +325,7 @@
</Expander>
</Grid>
</Grid>
</ScrollViewer>
</Border>
<!-- Storage Info Panel -->
+7 -9
View File
@@ -408,7 +408,7 @@ namespace PS5Upload
private void UpdateUploadStats(int completedFiles, int activeTaskCount)
{
// CRITICAL FIX: Use InvokeAsync instead of Invoke to prevent UI freezing
// When uploading thousands of small files, Invoke blocks the UI thread
// Use Normal priority (not Background) so updates aren't starved during heavy uploads
Dispatcher.InvokeAsync(() =>
{
// Update files remaining counter
@@ -491,7 +491,7 @@ namespace PS5Upload
{
UploadFileNameText.Text = $"Uploading {activeTaskCount} files in parallel...";
}
}, System.Windows.Threading.DispatcherPriority.Background);
}, System.Windows.Threading.DispatcherPriority.Normal);
}
private void Log(string message)
@@ -1158,11 +1158,9 @@ namespace PS5Upload
taskIsLargeFile[task] = isLargeFile;
taskIsHugeFile[task] = isHugeFile;
long chunkSizeForFile = fileSize >= HugeFileThresholdBytes ? HugeFileChunkSizeBytes : DefaultChunkSizeBytes;
int chunkCount = fileSize > ChunkThresholdBytes
? (int)((fileSize + chunkSizeForFile - 1) / chunkSizeForFile)
: 1;
fileChunkCounts[localPath] = chunkCount;
// Each file is ONE task (UploadFileParallelAsync handles chunks internally)
// So chunkCount must always be 1 for the completion counter to work
fileChunkCounts[localPath] = 1;
fileChunksCompleted[localPath] = 0;
}
@@ -1625,7 +1623,7 @@ namespace PS5Upload
{
UploadProgressBar.Value = filePercent;
UploadProgressText.Text = $"{FormatFileSize(aggregateBytes)} / {FormatFileSize(fileInfo.Length)} ({filePercent:F1}%)";
}, System.Windows.Threading.DispatcherPriority.Background);
}, System.Windows.Threading.DispatcherPriority.Render);
if (aggregateBytes == fileInfo.Length || aggregateBytes - previousLoggedBytes >= ChunkLogIntervalBytes)
{
@@ -1686,7 +1684,7 @@ namespace PS5Upload
{
UploadProgressBar.Value = filePercent;
UploadProgressText.Text = $"{FormatFileSize(p.BytesSent)} / {FormatFileSize(fileInfo.Length)} ({filePercent:F1}%)";
}, System.Windows.Threading.DispatcherPriority.Background);
}, System.Windows.Threading.DispatcherPriority.Render);
if (p.BytesSent == p.TotalBytes || p.BytesSent - previousLoggedBytes >= SmallFileLogIntervalBytes)
{