mirror of
https://github.com/manos555555/PS5-Suite.git
synced 2026-10-06 14:00:26 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe741b8e9f | ||
|
|
0123a55f52 | ||
|
|
eb6003c8d4 |
No files matched your search
@@ -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
|
||||
@@ -36,13 +58,30 @@
|
||||
- **MainWindow.xaml.cs** - Click handler with progress display and auto-registration
|
||||
- **Auto Registration** - If new games detected, automatically runs `game_mounter.elf` via shell for home screen registration
|
||||
|
||||
### ⚡ Client Improvements
|
||||
- **Real-Time Speed Display** - New sliding window algorithm (10 samples over 5 seconds) for accurate real-time upload speed
|
||||
- **Smoother ETA** - Blended speed calculation (60% real-time + 40% average) with better time formatting (hours/minutes/seconds)
|
||||
- **Speed Display** - Shows both real-time and average speed: `Speed: 95 MB/s (avg 88 MB/s)`
|
||||
- **Duplicate File Dialog** - New `DuplicateFileDialog` for handling file conflicts during upload
|
||||
- **Move Dialog Refactor** - Replaced inline move dialog code with reusable `ShowPathPickerDialogAsync()`
|
||||
- **FormatFileSize Refactor** - Moved to static `FileUtils.FormatFileSize()` class for code reuse
|
||||
- **ETA Smoothing** - Reduced `ETASmoothingFactor` from 0.3 to 0.15 for less jumpy ETA display
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
#### Payload Fixes
|
||||
- **Fixed IOVEC_ENTRY(NULL) crash** - `strlen(NULL)` with `-O3` optimization caused segfault in `remount_system_ex()`
|
||||
- **Fixed libSceAppInstUtil startup crash** - Library cannot be loaded in etaHEN payload context (crashes dynamic linker). Switched to standalone `game_mounter.elf` for registration
|
||||
- **Fixed dlopen crash** - `dlopen("libSceAppInstUtil.sprx")` crashes payload thread. Removed dynamic loading approach
|
||||
- **Removed system() calls** - `system("rm -rf ...")` replaced with safe recursive `rmdir_recursive()` to prevent payload hangs
|
||||
- **Fixed compile warnings** - Removed unused `#include <dlfcn.h>`, re-enabled `auto_unmount_deleted_games()`
|
||||
|
||||
#### Client Fixes
|
||||
- **Fixed Shell Terminal hardcoded IP** - Shell was connecting to hardcoded `192.168.0.160` instead of the configured PS5 IP address
|
||||
- **Fixed ETA jumping** - ETA no longer jumps erratically during uploads due to improved smoothing
|
||||
- **Fixed speed dropping to 0** - Sliding window prevents speed display from showing 0 during brief pauses
|
||||
- **Fixed files remaining counter** - Simplified calculation with `Math.Max(0, ...)` to prevent negative values
|
||||
|
||||
### 📝 Technical Notes
|
||||
- `libSceAppInstUtil.sprx` is **not available** in etaHEN payload context (both static linking and dlopen crash)
|
||||
- Game registration (`sceAppInstUtilAppInstallTitleDir`) is handled by the standalone `game_mounter.elf` which runs as a separate ELF with its own library dependencies
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -36,9 +41,10 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
- Self-contained executable (no .NET installation required)
|
||||
- Modern dark theme UI
|
||||
- Drag & drop file/folder upload
|
||||
- Real-time upload progress with speed tracking
|
||||
- Transfer History with success/failed tracking
|
||||
- Privacy-focused (no storage monitoring)
|
||||
- Real-time upload progress with sliding window speed tracking
|
||||
- Transfer History with success/failed tracking and retry
|
||||
- PS5 storage display (free/used/total)
|
||||
- Game mounting with one-click Mount Games button
|
||||
|
||||
### 3. 📱 Android Mobile Client
|
||||
- **File:** `PS5UploadMobile.apk`
|
||||
@@ -77,38 +83,45 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
|
||||
## 🎨 Features
|
||||
|
||||
### PS5 Server
|
||||
✅ **High-Speed Protocol** - Custom binary protocol
|
||||
✅ **4MB Buffers** - Maximum throughput
|
||||
✅ **Direct Disk I/O** - No temp files
|
||||
✅ **Multi-threaded** - Handle multiple clients
|
||||
✅ **Robust Error Handling** - Graceful failures
|
||||
### PS5 Server Payload
|
||||
✅ **High-Speed Protocol** - Custom binary protocol for maximum speed
|
||||
✅ **8MB Buffer** - Large buffer for high throughput
|
||||
✅ **16MB Socket Buffers** - Maximum network throughput
|
||||
✅ **Direct Disk I/O** - No temp files, direct write syscalls
|
||||
✅ **Multi-threaded** - Handle multiple clients simultaneously
|
||||
✅ **Per-File Mutex** - Safe parallel uploads without corruption
|
||||
✅ **5-Minute Socket Timeout** - No connection drops on large files
|
||||
✅ **Game Mounting** - nullfs mount, DRM patching, metadata copy
|
||||
✅ **Shell Commands** - Built-in shell with ls, cd, cat, mkdir, rm, etc.
|
||||
✅ **Filesystem Indexing** - In-memory index for instant search
|
||||
|
||||
### Windows Client
|
||||
✅ **Modern UI** - Dark theme, maximized window for better visibility
|
||||
✅ **Modern UI** - Dark theme, maximized window
|
||||
✅ **Drag & Drop** - Files and folders
|
||||
✅ **Browse PS5** - Navigate filesystem
|
||||
✅ **Real-time Progress** - Speed & percentage tracking
|
||||
✅ **Optimized Upload** - 8 parallel connections for 88-110 MB/s aggregate speed
|
||||
✅ **Browse PS5** - Navigate filesystem with favorites
|
||||
✅ **Real-time Speed** - Sliding window algorithm for accurate speed display
|
||||
✅ **Parallel Uploads** - 4 parallel chunked connections for 104+ MB/s
|
||||
✅ **Transfer History** - Track all uploads/downloads with success/failed status
|
||||
✅ **Auto-Clear History** - Optional auto-clear on startup
|
||||
✅ **Retry Failed Transfers** - Right-click to retry failed uploads
|
||||
✅ **Duplicate File Dialog** - Handle file conflicts during upload
|
||||
✅ **Folder Upload** - Recursive directory upload
|
||||
✅ **Download Files** - Download from PS5 to PC
|
||||
✅ **🔍 Smart Search** - Full filesystem indexing with instant search (NEW v3.3)
|
||||
✅ **💾 Storage Display** - Real-time PS5 storage info (free/used/total)
|
||||
✅ **🔍 Smart Search** - Full filesystem indexing with instant search
|
||||
- Wildcard support: `*.pkg`, `*loader*`, `game*.bin`
|
||||
- Size filters: `size:>1GB`, `size:<100MB`
|
||||
- Case-insensitive matching
|
||||
- Search both filename and full path
|
||||
- Double-click to navigate to folder
|
||||
✅ **💻 Shell Terminal** - Execute commands directly on PS5 (NEW v3.3)
|
||||
✅ **💻 Shell Terminal** - Execute commands directly on PS5
|
||||
- Run system commands remotely
|
||||
- Real-time output display
|
||||
- Command history
|
||||
- Working directory support
|
||||
✅ **Favorites/Bookmarks** - Quick navigation to saved paths
|
||||
✅ **Multi-PS5 Support** - Save and switch between multiple PS5 profiles
|
||||
✅ **🎮 Mount Games** - Mount uploaded games directly from the client (NEW v4.2)
|
||||
- Scans all game paths: internal, USB drives, M.2 SSD
|
||||
✅ **⭐ Favorites/Bookmarks** - Quick navigation to saved paths
|
||||
✅ **👥 Multi-PS5 Profiles** - Save and switch between multiple PS5 consoles
|
||||
✅ **🎮 Mount Games** - Mount uploaded games directly from the client
|
||||
- Scans all game paths: internal, USB drives (0-3), M.2 SSD
|
||||
- Duplicate detection across storage locations
|
||||
- Auto-cleanup of deleted game mounts
|
||||
- PS5 notifications with mount progress
|
||||
@@ -194,10 +207,20 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
- **sce_sys Copy** - Copies game metadata to `/user/app/` and `/user/appmeta/`
|
||||
- **mount.lnk Tracking** - Creates mount link files for persistent mount state
|
||||
|
||||
### ⚡ Client Improvements
|
||||
- **Real-Time Speed Display** - Sliding window algorithm for accurate real-time upload speed
|
||||
- **Smoother ETA** - Blended speed calculation (60% real-time + 40% average) with better formatting
|
||||
- **Duplicate File Dialog** - New dialog for handling file conflicts during upload
|
||||
- **Move Dialog Refactor** - Reusable `ShowPathPickerDialogAsync()` replaces inline code
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
- **Fixed IOVEC_ENTRY(NULL) crash** - `strlen(NULL)` with `-O3` optimization caused payload crash
|
||||
- **Fixed libSceAppInstUtil crash** - Library not available in etaHEN payload context, switched to standalone registration
|
||||
- **Removed system() calls** - Replaced `system("rm -rf ...")` with safe recursive delete to prevent hangs
|
||||
- **Fixed Shell Terminal hardcoded IP** - Shell was connecting to hardcoded IP instead of configured PS5 address
|
||||
- **Fixed ETA jumping** - ETA no longer jumps erratically during uploads
|
||||
- **Fixed speed dropping to 0** - Sliding window prevents speed display from showing 0 during pauses
|
||||
- **Fixed files remaining counter** - Prevented negative values in remaining files display
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user