From 4ac43ebb8b207776f8ce409f24f4121eaed091f3 Mon Sep 17 00:00:00 2001 From: Manos Date: Tue, 20 Jan 2026 03:54:44 +0200 Subject: [PATCH] v3.1.0: Parallel chunked uploads (104 MB/s), real-time speed/ETA, storage display fixes --- client/MainWindow.xaml | 2 +- client/MainWindow.xaml.cs | 208 ++++++++++++++++++++++++++++------ client/Protocol.cs | 6 +- payload/main.c | 29 +++-- payload/ps5_upload_server.elf | Bin 129072 -> 153504 bytes 5 files changed, 200 insertions(+), 45 deletions(-) diff --git a/client/MainWindow.xaml b/client/MainWindow.xaml index 6603d6a..d0670fb 100644 --- a/client/MainWindow.xaml +++ b/client/MainWindow.xaml @@ -493,7 +493,7 @@ Margin="10" Padding="10"> - @@ -157,13 +155,30 @@ namespace PS5Upload if (storageList.Length == 0) return; - // Get /data storage (main PS5 storage) - var dataStorage = storageList.FirstOrDefault(s => s.Path == "/data"); - if (dataStorage == null) + // Try to find the best storage to display + // Priority: /data (main PS5 storage), then any available + StorageInfo? targetStorage = null; + + // First try /data + targetStorage = storageList.FirstOrDefault(s => s.Path == "/data"); + + // If /data not found, try other common paths + if (targetStorage == null || targetStorage.TotalBytes == 0) + { + targetStorage = storageList.FirstOrDefault(s => s.Path.StartsWith("/user") && s.TotalBytes > 0); + } + + // If still not found, use the first one with valid data + if (targetStorage == null || targetStorage.TotalBytes == 0) + { + targetStorage = storageList.FirstOrDefault(s => s.TotalBytes > 0); + } + + if (targetStorage == null) return; - long totalBytes = dataStorage.TotalBytes; - long freeBytes = dataStorage.FreeBytes; + long totalBytes = targetStorage.TotalBytes; + long freeBytes = targetStorage.FreeBytes; long usedBytes = totalBytes - freeBytes; // Update UI @@ -399,6 +414,7 @@ namespace PS5Upload if (_protocol.IsConnected) { Log("šŸ”Œ Disconnecting from PS5..."); + _storageUpdateTimer.Stop(); // Stop storage updates _protocol.Disconnect(); Dispatcher.Invoke(() => @@ -434,8 +450,9 @@ namespace PS5Upload UploadButton.IsEnabled = true; }); - // Update storage info once on connect (no auto-reload) + // Update storage info on connect and start real-time updates await UpdateStorageInfoAsync(); + _storageUpdateTimer.Start(); await LoadPS5DirectoryAsync(_currentPS5Path); } @@ -789,6 +806,7 @@ namespace PS5Upload var fileChunksCompleted = new Dictionary(); // Track completed chunks per file var completedFiles = new HashSet(); // Track which files are fully complete var failedFiles = new Dictionary(); // Track retry count per file + var permanentlyFailedFiles = new List(); // Track files that exceeded max retries const int MAX_RETRIES = 3; // Maximum retry attempts per file UploadFileNameText.Text = $"Parallel upload: {MaxParallelUploads} connections"; @@ -921,6 +939,7 @@ namespace PS5Upload else { Log($"āŒ Max retries exceeded, skipping: {Path.GetFileName(failedFilePath)}"); + permanentlyFailedFiles.Add(failedFilePath); } } @@ -1047,7 +1066,30 @@ namespace PS5Upload Log("āœ… Directory refreshed - uploaded files should now be visible"); // Show success message AFTER refresh so user sees updated file list immediately - MessageBox.Show($"Upload completed!\n\n{_totalFilesToUpload} files uploaded\nTotal: {FormatFileSize(_totalBytesUploaded)}", "Success", MessageBoxButton.OK, MessageBoxImage.Information); + // Include failed files information if any + int successfulFiles = _totalFilesToUpload - permanentlyFailedFiles.Count; + string message = $"Upload completed!\n\nāœ… Successful: {successfulFiles} files\nTotal: {FormatFileSize(_totalBytesUploaded)}"; + + if (permanentlyFailedFiles.Count > 0) + { + message += $"\n\nāŒ Failed: {permanentlyFailedFiles.Count} files"; + message += "\n\nFailed files:"; + foreach (var failedFile in permanentlyFailedFiles.Take(10)) + { + message += $"\n• {Path.GetFileName(failedFile)}"; + } + if (permanentlyFailedFiles.Count > 10) + { + message += $"\n... and {permanentlyFailedFiles.Count - 10} more"; + } + message += "\n\nYou can retry these files by uploading them again."; + + MessageBox.Show(message, "Upload Completed with Errors", MessageBoxButton.OK, MessageBoxImage.Warning); + } + else + { + MessageBox.Show(message, "Upload Completed", MessageBoxButton.OK, MessageBoxImage.Information); + } } else { @@ -1201,55 +1243,151 @@ namespace PS5Upload Log($"ā¬†ļø Uploading (chunked): {fileName} ({FormatFileSize(fileInfo.Length)})"); long totalChunks = (fileInfo.Length + CHUNK_SIZE - 1) / CHUNK_SIZE; + + // OPTIMIZATION: Upload chunks in parallel for maximum speed + // Use up to 4 parallel connections for chunked uploads + const int MAX_PARALLEL_CHUNKS = 4; + var chunkTasks = new List>(); + var semaphore = new SemaphoreSlim(MAX_PARALLEL_CHUNKS); bool allChunksSuccess = true; + // Track progress per chunk to calculate total progress correctly + var chunkProgress = new Dictionary(); // chunkIndex -> bytes uploaded + var progressLock = new object(); + + // CRITICAL: First chunk (offset=0) must create the file before other chunks can write + // Signal when first chunk has started and file is created + var firstChunkStarted = new TaskCompletionSource(); + for (long chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) { long offset = chunkIndex * CHUNK_SIZE; long size = Math.Min(CHUNK_SIZE, fileInfo.Length - offset); + long currentChunkIndex = chunkIndex; // Capture for closure + + lock (progressLock) + { + chunkProgress[currentChunkIndex] = 0; + } Log($"šŸ“¦ Uploading chunk {chunkIndex + 1}/{totalChunks}: {fileName} @ {FormatFileSize(offset)}"); - // Progress reporting for chunked upload - var progress = new Progress(p => + // Capture offset and size for closure - loop variables may change before task executes + long chunkOffset = offset; + long chunkSize = size; + + // Create task immediately - semaphore wait happens inside the task + var chunkTask = Task.Run(async () => { - double filePercent = fileInfo.Length > 0 ? (double)(offset + p.BytesSent) / fileInfo.Length * 100 : 0; - - lock (_progressLock) + // CRITICAL: Non-first chunks must wait for first chunk to create the file + // Otherwise they will fail trying to open a non-existent file + if (currentChunkIndex > 0) { - _currentFileName = fileName; - _currentFileBytes = offset + p.BytesSent; - _currentFileTotalBytes = fileInfo.Length; + await firstChunkStarted.Task; + // Small delay to ensure file is fully created and pre-allocated + await Task.Delay(100, cancellationToken); } - Dispatcher.InvokeAsync(() => - { - UploadProgressBar.Value = filePercent; - UploadProgressText.Text = $"{FormatFileSize(offset + p.BytesSent)} / {FormatFileSize(fileInfo.Length)} ({filePercent:F1}%)"; - }); + // Wait for semaphore slot + await semaphore.WaitAsync(cancellationToken); - // Log progress periodically (every 16MB for better visibility) - if (p.BytesSent % (16 * 1024 * 1024) < 8 * 1024 * 1024 || p.BytesSent == p.TotalBytes) + try { - Log($"šŸ“Š Chunk {chunkIndex + 1}/{totalChunks}: {FormatFileSize(p.BytesSent)}/{FormatFileSize(size)} @ {FormatFileSize((long)p.SpeedBytesPerSecond)}/s"); + // Create new connection for this chunk + var chunkConnection = new PS5Protocol(); + if (!await chunkConnection.ConnectAsync(_ps5IpAddress, 9113)) + { + if (currentChunkIndex == 0) firstChunkStarted.TrySetResult(false); + return (false, currentChunkIndex, chunkSize); + } + + // Signal that first chunk has connected and will create the file + if (currentChunkIndex == 0) + { + firstChunkStarted.TrySetResult(true); + } + + // Progress reporting for this chunk - aggregate all chunks' progress + // p.BytesSent is relative to THIS chunk (0 to chunk_size) + // We need to track actual bytes uploaded for this chunk only + var progress = new Progress(p => + { + lock (progressLock) + { + // Store only the bytes uploaded for THIS chunk (not offset+bytes) + long previousBytes = chunkProgress.ContainsKey(currentChunkIndex) ? chunkProgress[currentChunkIndex] : 0; + chunkProgress[currentChunkIndex] = p.BytesSent; + long bytesIncrease = p.BytesSent - previousBytes; + + // Calculate total progress from all chunks + long totalUploaded = 0; + foreach (var kvp in chunkProgress) + { + totalUploaded += kvp.Value; + } + + double filePercent = fileInfo.Length > 0 ? (double)totalUploaded / fileInfo.Length * 100 : 0; + + lock (_progressLock) + { + _currentFileName = fileName; + _currentFileBytes = totalUploaded; + _currentFileTotalBytes = fileInfo.Length; + + // Update total bytes in real-time for accurate speed display + // Add the bytes increase from this progress update + _totalBytesUploaded += bytesIncrease; + } + + // Calculate real-time speed and ETA + var elapsed = DateTime.Now - _uploadStartTime; + double speed = elapsed.TotalSeconds > 0 ? _totalBytesUploaded / elapsed.TotalSeconds : 0; + long remaining = _totalBytesToUpload - _totalBytesUploaded; + TimeSpan eta = speed > 0 ? TimeSpan.FromSeconds(remaining / speed) : TimeSpan.Zero; + + Dispatcher.InvokeAsync(() => + { + UploadProgressBar.Value = Math.Min(100, filePercent); // Cap at 100% + UploadProgressText.Text = $"{FormatFileSize(totalUploaded)} / {FormatFileSize(fileInfo.Length)} ({filePercent:F1}%)"; + + // Update speed and ETA in real-time + UploadSpeedText.Text = $"Speed: {FormatFileSize((long)speed)}/s | {_activeTaskCount} active"; + UploadETAText.Text = $"ETA: {eta:hh\\:mm\\:ss} | Elapsed: {elapsed:hh\\:mm\\:ss}"; + }); + } + }); + + bool success = await chunkConnection.UploadFileAsync(localPath, remotePath, progress, cancellationToken, chunkOffset, chunkSize); + + chunkConnection.Disconnect(); + + return (success, currentChunkIndex, chunkSize); } - }); - - bool success = await connection.UploadFileAsync(localPath, remotePath, progress, cancellationToken, offset, size); + finally + { + semaphore.Release(); + } + }, cancellationToken); + chunkTasks.Add(chunkTask); + } + + // Wait for all chunks to complete + var results = await Task.WhenAll(chunkTasks); + + // Check results + // Note: _totalBytesUploaded is already updated in real-time during progress callbacks + foreach (var (success, chunkIndex, size) in results.OrderBy(r => r.chunkIndex)) + { if (success) { Log($"āœ… Chunk {chunkIndex + 1}/{totalChunks} complete: {fileName}"); - lock (_progressLock) - { - _totalBytesUploaded += size; - } + // Bytes already counted in real-time progress callback } else { Log($"āŒ Chunk {chunkIndex + 1}/{totalChunks} failed: {fileName}"); allChunksSuccess = false; - break; } } diff --git a/client/Protocol.cs b/client/Protocol.cs index 4da63e0..7f8924b 100644 --- a/client/Protocol.cs +++ b/client/Protocol.cs @@ -444,8 +444,10 @@ namespace PS5Upload progress?.Report(new UploadProgress { - BytesSent = chunkOffset + totalSent, - TotalBytes = fileInfo.Length, + // For chunked uploads, report only bytes sent in THIS chunk + // The caller will aggregate multiple chunks if needed + BytesSent = totalSent, + TotalBytes = uploadSize, // Size of this chunk, not total file SpeedBytesPerSecond = currentSpeed, AverageSpeedBytesPerSecond = avgSpeed, ElapsedTime = elapsed, diff --git a/payload/main.c b/payload/main.c index 3f47e46..41bd3de 100644 --- a/payload/main.c +++ b/payload/main.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -450,11 +451,24 @@ void handle_ping(client_session_t *session) { // Handle LIST_STORAGE void handle_list_storage(client_session_t *session) { - const char *mounts[] = {"/data", "/mnt/usb0", "/mnt/usb1", "/system", "/system_ex"}; + // Include more paths to find PS5 main user storage + const char *mounts[] = { + "/user", // Main user storage (games, apps) + "/user/home", // User home directory + "/hostapp", // Host app storage + "/data", // Data partition (etaHEN uses this) + "/mnt/usb0", // USB storage + "/mnt/usb1", // USB storage + "/system", // System partition + "/system_ex", // Extended system partition + "/preinst", // Pre-installed content + "/preinst2" // Pre-installed content 2 + }; + const int num_mounts = 10; int mount_count = 0; // Count available mounts - for (int i = 0; i < 5; i++) { + for (int i = 0; i < num_mounts; i++) { struct stat st; if (stat(mounts[i], &st) == 0) { mount_count++; @@ -473,12 +487,13 @@ void handle_list_storage(client_session_t *session) { memcpy(ptr, &mount_count, 4); ptr += 4; - for (int i = 0; i < 5; i++) { - struct statvfs vfs; - if (statvfs(mounts[i], &vfs) == 0) { + for (int i = 0; i < num_mounts; i++) { + struct statfs fs; + if (statfs(mounts[i], &fs) == 0) { uint16_t path_len = strlen(mounts[i]); - uint64_t total = (uint64_t)vfs.f_blocks * vfs.f_frsize; - uint64_t free = (uint64_t)vfs.f_bfree * vfs.f_frsize; + // Use f_bavail (available to non-root) like ps5upload does + uint64_t total = (uint64_t)fs.f_blocks * fs.f_bsize; + uint64_t free = (uint64_t)fs.f_bavail * fs.f_bsize; memcpy(ptr, &path_len, 2); ptr += 2; diff --git a/payload/ps5_upload_server.elf b/payload/ps5_upload_server.elf index 64aea50607e7efbf21c711584013e6579883a42d..ea2360d85a7cdb22dc4c513e108d07feb7e85486 100644 GIT binary patch literal 153504 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 b%sFR~b&M%7woR3=3DoBm*OW`(J4yO~nCuc9