18 Commits
Author SHA1 Message Date
Manos c21d73f41d Resolved merge conflict - keeping v2.0.0 ZIP 2026-01-18 03:34:02 +02:00
Manos 5ce9d470bc v2.0.0 - Added Download Files, File Search, Favorites/Bookmarks, Multi-PS5 Support 2026-01-18 03:33:33 +02:00
manos555555 0eb159bf88 Delete PS5Upload-Windows-x64-v1.0.zip 2026-01-14 01:37:31 +02:00
manos555555 4ff160232f Delete PS5Upload-Windows-x64-v1.1-BugFix.zip 2026-01-14 01:37:21 +02:00
manos555555 a5e40ce245 Delete PS5Upload-Windows-x64-v1.2-Complete.zip 2026-01-14 01:37:13 +02:00
manos555555 bb7d90411c Delete PS5Upload-Windows-x64-v1.3.0-Stable.zip 2026-01-14 01:37:06 +02:00
manos555555 00013aae76 Delete GITHUB_UPLOAD_INSTRUCTIONS.md 2026-01-14 01:36:42 +02:00
manos555555 6d8d802962 Delete create_v1.1_release.ps1 2026-01-14 01:36:32 +02:00
manos555555 f3a1d5e436 Delete create_github_release.ps1 2026-01-14 01:36:22 +02:00
manos555555 bad3029e32 Delete create_release.bat 2026-01-14 01:36:13 +02:00
manos555555 a51fffef83 Delete create_v1.2_release.ps1 2026-01-14 01:35:43 +02:00
manos555555 f89eaf4e31 Delete upload_to_github.py 2026-01-14 01:35:22 +02:00
Manos f34fdf8e63 v1.4.1 - UI Fix: Increase Dialog Size for Better Visibility
🔧 Fix:
- Increased dialog height from 250 to 320 pixels
- Increased dialog width from 500 to 550 pixels
- All buttons (Replace, Skip, Replace All, Skip All) now fully visible

📝 Files Changed:
- client/DuplicateFileDialog.xaml: Updated Height and Width properties
2026-01-13 01:43:01 +02:00
Manos 8479221915 v1.4.0 - Feature: Duplicate File Detection with Replace/Skip Dialog
🎯 New Feature:
- Added duplicate file detection before upload
- Shows dialog when file already exists on PS5
- Options: Replace / Skip / Replace All / Skip All

📋 How It Works:
1. Before upload, checks all files against existing PS5 files
2. Groups files by directory to minimize ListDir calls
3. Shows dialog for each duplicate with file sizes
4. User can choose action per file or apply to all

🎨 UI:
- New DuplicateFileDialog.xaml with modern dark theme
- Shows local and remote file sizes
- 4 action buttons with clear labels

💡 Benefits:
- No need to manually delete folders before re-upload
- Skip already uploaded files automatically
- Replace only changed files
- Saves time on failed upload retries

📝 Files Changed:
- client/MainWindow.xaml.cs: Added FilterDuplicateFilesAsync method
- client/DuplicateFileDialog.xaml: New dialog UI
- client/DuplicateFileDialog.xaml.cs: Dialog logic with FileAction enum

🔧 Technical:
- Uses existing ListDir protocol to check file existence
- Efficient: Groups files by directory to minimize network calls
- Maintains user choice (Replace All / Skip All) across files
2026-01-13 01:41:19 +02:00
Manos e3bfa54994 v1.3.1 - Hotfix: Unlimited Socket Timeout for Large Files
🔧 Critical Fix:
- Changed socket timeout from 5 minutes to UNLIMITED (0)
- Supports files of ANY size (50GB+)
- Keepalive protection prevents zombie connections

📊 Why This Fix:
- 5 minute timeout was insufficient for large files with 6 parallel connections
- Example: 15GB file @ 30 MB/s = 8.3 minutes (exceeded 5 min timeout)
- With unlimited timeout + keepalive, files of any size will upload successfully

🛡️ Safety:
- Aggressive keepalive (10s idle, 5s probe, 3 retries) detects dead connections in ~25s
- No risk of zombie connections or resource leaks
- Dead connections are automatically closed by keepalive

📝 Files Changed:
- payload/main.c: Changed tv.tv_sec from 300 to 0
- payload/ps5_upload_server.elf: Recompiled with unlimited timeout
2026-01-13 01:33:29 +02:00
Manos 68d586de97 v1.3.0 - Stable Release: Complete Stability Overhaul
🎯 Major Achievement
- Fixed all 15 critical bugs causing connection drops, UI freezes, and upload failures
- Tested: 42,801+ files uploaded with ZERO errors and full gigabit speeds

🔧 Payload Fixes (7 bugs):
1. Per-file mutex implementation for concurrent uploads
2. Memory/mutex cleanup on disconnect
3. fflush() race condition fix (moved inside mutex)
4. File creation race condition fix (added mutex lock)
5. Global scan counter issues (moved to global scope)
6. Directory counting bug (count dirs + files)
7. Socket timeout for large files (5 min timeout + aggressive keepalive) ⭐ CRITICAL

🔧 Client Fixes (8 bugs):
1. ConnectAsync timeout memory leak
2. ConnectAsync exception memory leak
3. Disconnect memory leak
4. Upload deadlock during chunked uploads
5. Chunking disabled for stability (PS5 can't handle concurrent writes) ⭐ CRITICAL
6. UI freeze during uploads (Dispatcher.Invoke → InvokeAsync)
7. Log flooding causing UI freeze (throttling + size limit)
8. Optimal parallel connection strategy (6 parallel single-connection uploads)

📊 Performance Results:
- ✅ 42,801 files uploaded successfully
- ✅ Zero errors - 100% success rate
- ✅ 60-150 MB/s sustained throughput
- ✅ Peak: 190 MB/s per connection
- ✅ Fully responsive UI throughout upload
- ✅ No memory leaks - stable operation

📝 Files Changed:
- payload/main.c: 7 critical fixes
- payload/ps5_upload_server.elf: Recompiled with all fixes
- client/Protocol.cs: 3 memory leak fixes
- client/MainWindow.xaml.cs: 5 stability fixes
- CHANGELOG.md: Complete documentation of all fixes
- README.md: Updated with v1.3.0 performance results
2026-01-13 01:20:20 +02:00
Manos 297edb18af v1.2 - Complete bug fix release: async folder deletion + connection timeout fixes 2026-01-12 22:55:20 +02:00
Manos ced7fd1232 Initial commit: PS5 Upload Suite - High-Speed File Transfer 2026-01-12 17:26:03 +02:00
7140 changed files with 5885 additions and 1064908 deletions

No files matched your search

+54 -13
View File
@@ -1,19 +1,60 @@
# Build outputs
bin/
obj/
*.exe
*.dll
*.pdb
*.apk
*.aab
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio
# Visual Studio cache/options
.vs/
*.user
*.suo
*.user
*.userosscache
*.sln.docstates
# Rider
.idea/
# Build results
*.dll
*.exe
*.pdb
*.cache
# Logs
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# Files built by Visual Studio
*.pidb
*.svclog
*.scc
# Caches
*.swp
*~
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Temporary files
*.tmp
*.log
*.bak
*.old
# PowerShell script
convert_to_ico.ps1
-250
View File
@@ -1,255 +1,5 @@
# Changelog - PS5 Upload Suite
## Version 4.0.0 - Retry Feature & Stability Improvements (January 27, 2026)
### ✨ New Features
#### 🔄 Retry Failed Transfers
- **Right-click context menu** on failed transfers
- **Retry Upload** - Re-queue failed files for upload
- **Remove from List** - Clear individual failed items
- **Persistent paths** - Failed transfers store local and remote paths
- **Smart retry** - Validates file existence before retry
#### 🗑️ Clear All Button Fix
- **Transfer History Clear All** now works correctly
- **Confirmation dialog** before clearing history
- **Clears both** completed and failed transfers
### 🔧 Performance & Stability
#### Connection Stability
- **Reverted 16MB buffer** - Caused connection drops with 16 parallel connections
- **Stable 8MB buffer** - Proven reliable for high-speed transfers
- **TCP NoDelay** - Already enabled for optimal performance
- **16MB socket buffers** - Maintained for maximum throughput
#### Upload Performance
- **Large files (>100MB)**: 30-36 MB/s per file
- **Small files (<100MB)**: 8-12 MB/s per file
- **4 parallel large files** - Prevents PS5 memory exhaustion
- **16 total connections** - Optimal for mixed workloads
### 🐛 Bug Fixes
- Fixed Clear All button not clearing transfer history
- Fixed connection drops when using oversized buffers
- Added proper event handlers for failed transfer context menu
- Improved error handling for retry operations
### 📝 Code Quality
- Added comprehensive inline documentation
- Improved code organization and readability
- Better error messages for failed operations
- Enhanced UI feedback for user actions
---
## Version 3.3.0 - Smart Search & Enhanced Mobile (January 26, 2026)
### 🔍 Smart Search Feature
- **Full Filesystem Indexing** - Index entire PS5 filesystem (200,000+ files)
- **Instant Search** - Lightning-fast search with wildcards (`*.pkg`, `*loader*`)
- **Size Filters** - Search by file size (`size:>1GB`, `size:<100MB`)
- **Case-Insensitive** - Matches both filename and full path
- **Navigate from Search** - Double-click results to jump to folder (Desktop) / Tap to navigate (Mobile)
- **Index Status** - Real-time indexing progress with file/directory counts
- **Smart Indexing** - Skips problematic directories (`/dev`, `/proc`, `/sys`)
### 📱 Mobile App v1.2
- **🔍 Search Tab** - Full Smart Search functionality on Android
- **Navigate to Location** - Tap search results to navigate to folder
- **Copy Path** - Copy file paths to clipboard from search results
- **Connection Manager** - Singleton pattern for reliable IP/port management
- **Improved Navigation** - Fixed MainPage reference for seamless navigation
### 🖥️ Desktop Client Updates
- **Search Tab** - New dedicated tab for Smart Search
- **💻 Shell Terminal** - Execute commands directly on PS5
- Run system commands remotely
- Real-time output display
- Command history
- Working directory support
- **Equal Panel Layout** - Local Files, PS5 Files, and Right panel now equal width
- **Improved UI** - Index Status and buttons positioned above search box
- **Debounced Search** - Smooth typing experience with 300ms debounce
### 🔧 Payload Updates
- **Indexing Commands** - `CMD_INDEX_START` (0x40), `CMD_INDEX_STATUS` (0x41), `CMD_SEARCH_INDEX` (0x42)
- **In-Memory Index** - Linked list structure for fast search
- **Wildcard Matching** - Support for `*` and `?` wildcards
- **Thread-Safe** - Mutex-protected index operations
- **Root Path Support** - Can index from `/` (entire filesystem)
### 🐛 Bug Fixes
- Fixed indexing hangs when scanning root directory
- Fixed search protocol compatibility between mobile and desktop
- Fixed navigation stack issues in mobile app
- Fixed nullable reference warnings in mobile code
- Added proper error handling for index operations
---
## Version 3.2.1 - Privacy & Bug Fixes (January 24, 2026)
### 🔒 Privacy Improvements
- **Removed disk space display** - No longer shows PS5 storage capacity (Free/Used/Total)
- **Fixed storage query bug** - Resolved syntax errors in statvfs code that could cause crashes
- **Privacy-focused** - Application no longer queries or displays sensitive storage information
### 🐛 Bug Fixes
- Fixed potential crash from malformed storage query code
- Removed unused protocol busy flag that caused compiler warnings
- Cleaned up all storage-related UI elements and backend code
---
## Version 3.2.0 - Mobile Improvements & Bug Fixes (January 24, 2026)
### 🎯 Improvements
#### 💾 Accurate Storage Display
- **Storage now matches PS5 UI** - Shows ~848 GB instead of raw 872 GB
- **Accounts for reserved space** - Same calculation as PS5 system
- Uses proper calculation: `(total_blocks - reserved) * block_size`
#### 📱 Mobile App Improvements
- **Multi-select mode** - Toggle button (☑️/✅) to select multiple files/folders
- **Folder browser** - Visual folder picker for Copy/Move destinations with recursive navigation
- **Sorted file list** - Folders always displayed at top, then files (alphabetically)
- **Exit confirmation** - Prompt dialog when pressing back button
- **Delete folders** - Now supports folder deletion (not just files)
- **Batch operations** - Delete/download multiple items at once
#### 3. 🐛 Bug Fixes
- **Fixed empty folder deletion** - No more "Unexpected response" error when deleting empty directories
- **Fixed Copy/Move crash** - No longer crashes when selecting destination folder (saved file info before browsing)
- **Fixed multi-select count** - Correct item count in delete confirmation dialog
- **Fixed folder navigation** - Can enter folders after actions complete (auto-exit multi-select mode)
---
## Version 3.1.0 - Parallel Chunked Uploads (January 2026)
### 🚀 Performance Improvements
#### 1. ⚡ Parallel Chunked Uploads (104 MB/s!)
- **Large files (>100MB)** are now split into 500MB chunks
- **4 parallel connections** upload chunks simultaneously
- **Result:** ~104 MB/s upload speed (2x faster than before!)
- **Fixed race condition:** First chunk creates file before others start
- **Fixed closure bug:** Correct offset/size capture for parallel tasks
#### 2. 📊 Real-time Progress Display
- **Speed display** now updates in real-time during chunked uploads
- **ETA display** shows accurate time remaining
- **Progress bar** correctly shows 0-100% for chunked files
- No more speed dropping to 0 during large file uploads
#### 3. 💾 Storage Display Improvements
- **Changed label** to "Data Storage (/data)" for clarity
- **Uses statfs with f_bavail** for more accurate available space
- **Real-time updates** every 5 seconds when connected
---
## Version 3.0.0 - Mobile Client & Path Fixes (January 2026)
### 🐛 Critical Bug Fixes
#### 1. 🔧 Path Normalization Fix
- **Fixed:** Double-slash paths (`//mnt/ext1/...`) that caused directory creation to fail
- **Affected:** All file operations (upload, download, delete, rename, copy, move)
- **Solution:** Added `NormalizePath()` function in both client and server
- **Result:** 100% reliable directory creation and file uploads
#### 2. 📱 Android Mobile Client
- **NEW:** Full-featured Android app for PS5 file management
- **Multi-PS5 Profiles** - Save and switch between multiple PS5 consoles
- Upload files from phone to PS5
- Download files from PS5 with Share option
- Browse PS5 filesystem
- Create new folders
- Rename files/folders
- Copy files/folders
- Move files/folders
- Delete files
- Favorites for quick navigation
- Debug Log with Copy to clipboard
- Transfer History tracking
#### 3. 🛠️ Server Improvements
- Path normalization in all handler functions
- More robust error handling
- Improved stability for parallel uploads
---
## Version 2.1.0 - Performance & History (January 2026)
### 🚀 Performance Optimizations
#### 1. ⚡ Massive Upload Speed Boost (88-110 MB/s)
- **Server-side:** Replaced `fwrite()` with direct `write()` syscalls
- **Client-side:** 8 parallel large file uploads (optimal for PS5 disk)
- **Result:** 80-110 MB/s aggregate upload speed on Gigabit Ethernet
- **Peak bursts:** Up to 2.05 GB/s when hitting disk cache
- **Per-file:** 11-14 MB/s sustained per connection
#### 2. 📊 Transfer History
- Complete history of all uploads and downloads
- Success/Failed status tracking with error messages
- Speed statistics (average, min, max)
- Export to CSV/JSON for analysis
- Persistent storage across sessions
#### 3. 🔄 Auto-Clear History on Startup
- Optional checkbox to clear history automatically
- Useful for keeping UI clean between sessions
- Setting saved in `ps5_upload_settings.json`
#### 4. 🖥️ Maximized Window UI
- Application opens in full-screen mode by default
- Better visibility for large file transfers
- Can be resized/restored as needed
### Technical Improvements
- ✅ **16MB socket buffers** (up from 4MB) for maximum throughput
- ✅ **Per-file mutex locking** - Parallel writes without race conditions
- ✅ **File pre-allocation** - Reduces disk fragmentation for large files
- ✅ **Direct syscalls** - Bypasses stdio buffering overhead
---
## Version 2.0.0 - Download & Multi-PS5 (January 2026)
### 🎉 4 Major New Features
#### 1. 📥 Download Files (PS5 → PC)
- Right-click any file → "⬇️ Download to PC"
- Save file dialog for destination selection
- Real-time progress tracking with speed display
- Optimized with sendfile for maximum speed
#### 2. 🔍 File Search
- Search box in PS5 Files panel
- Real-time filtering as you type
- Case-insensitive search
- Quick "Clear" button to reset
#### 3. ⭐ Favorites/Bookmarks
- Save frequently used PS5 paths
- Quick dropdown navigation
- Add/Remove favorite paths
- Persistent storage in JSON
#### 4. 🎮 Multi-PS5 Support
- Save multiple PS5 profiles (IP + name)
- Quick switch between different PS5 consoles
- Dropdown profile selector
- Persistent profile storage
---
## Version 1.3.0 - Stable Release (January 13, 2026)
### 🎯 Major Achievement
+99
View File
@@ -0,0 +1,99 @@
# PS5 Upload Suite v2.0.0 - Feature-Rich Release
## 🎉 What's New - 4 Major Features Added!
### 1. 📥 Download Files (PS5 → PC)
- Right-click any file → "⬇️ Download to PC"
- Save file dialog for destination
- Real-time progress with speed tracking
- Optimized with sendfile for maximum speed
### 2. 🔍 File Search
- Search box in PS5 Files panel
- Real-time filtering as you type
- Case-insensitive search
- Quick "Clear" button
### 3. ⭐ Favorites/Bookmarks
- Save frequently used PS5 paths
- Quick dropdown navigation
- Add/Remove favorite paths
- Persistent JSON storage
### 4. 🎮 Multi-PS5 Support
- Save multiple PS5 profiles (IP + name)
- Quick switch between consoles
- Dropdown profile selector
- Persistent profile storage
---
## 📦 Installation
### Server (PS5)
1. Copy `ps5_upload_server.elf` to `/data/etaHEN/payloads/`
2. Load with elfldr
3. Server starts on port 9113
### Client (Windows)
1. Download `PS5Upload.exe`
2. Run on Windows 10/11
3. Enter PS5 IP and connect
---
## 🚀 Performance
- **Upload Speed:** 100-120 MB/s (Gigabit Ethernet)
- **Download Speed:** Same high-speed protocol
- **Stability:** Zero connection drops (from v1.3.0)
- **Tested:** 42,801+ files uploaded successfully
---
## 🔧 Technical Details
### New Protocol Command
- `CMD_DOWNLOAD_FILE` (0x13) - Download files from PS5
### Server Changes
- Added sendfile-based download handler
- Fixed LIST_DIR to return actual file sizes
- Zero-copy file transfer
### Client Changes
- 4 new UI panels (Search, Favorites, Profiles, Download)
- JSON-based persistence (ps5_profiles.json, ps5_favorites.json)
- Custom dark theme for all ComboBox dropdowns
- ~500+ lines of new code
---
## ⬆️ Upgrading from v1.3.0
1. Replace server: Copy new `ps5_upload_server.elf` to PS5
2. Replace client: Download new `PS5Upload.exe`
3. Your settings will be preserved
**New files created:**
- `ps5_profiles.json` - Saved PS5 profiles
- `ps5_favorites.json` - Saved favorite paths
---
## 📋 Files in This Release
- `ps5_upload_server.elf` (129 KB) - PS5 server payload
- `PS5Upload.exe` (8.2 MB) - Windows client (self-contained)
---
## 🙏 Credits
**By Manos**
Special thanks to the PS5 homebrew community!
---
**Enjoy the new features!** 🚀
+83
View File
@@ -0,0 +1,83 @@
# PS5 Upload Protocol Specification
## Overview
Custom binary protocol for high-speed file transfers between PC and PS5.
Port: 9113
## Message Format
All messages follow this structure:
```
[Command (1 byte)][Data Length (4 bytes)][Data (variable)]
```
## Commands
### Client → Server
| Command | Value | Description | Data Format |
|---------|-------|-------------|-------------|
| PING | 0x01 | Test connection | None |
| LIST_STORAGE | 0x02 | Get storage info | None |
| LIST_DIR | 0x03 | List directory | Path (null-terminated string) |
| CREATE_DIR | 0x04 | Create directory | Path (null-terminated string) |
| DELETE_FILE | 0x05 | Delete file | Path (null-terminated string) |
| DELETE_DIR | 0x06 | Delete directory | Path (null-terminated string) |
| START_UPLOAD | 0x10 | Start file upload | Path (null-terminated) + File size (8 bytes) |
| UPLOAD_CHUNK | 0x11 | Upload file chunk | Chunk data (raw bytes) |
| END_UPLOAD | 0x12 | Finish upload | None |
| SHUTDOWN | 0xFF | Shutdown server | None |
### Server → Client
| Response | Value | Description | Data Format |
|----------|-------|-------------|-------------|
| OK | 0x01 | Success | Optional message |
| ERROR | 0x02 | Error occurred | Error message (null-terminated) |
| DATA | 0x03 | Response data | Variable format |
| READY | 0x04 | Ready for next chunk | None |
| PROGRESS | 0x05 | Upload progress | Bytes written (8 bytes) |
## Data Formats
### LIST_STORAGE Response
```
[Drive count (4 bytes)]
For each drive:
[Path length (2 bytes)][Path][Total space (8 bytes)][Free space (8 bytes)]
```
### LIST_DIR Response
```
[Entry count (4 bytes)]
For each entry:
[Type (1 byte: 0=file, 1=dir)][Name length (2 bytes)][Name][Size (8 bytes)][Timestamp (8 bytes)]
```
## Flow Examples
### Upload File
```
Client: START_UPLOAD "/data/test.bin" size=1048576
Server: READY
Client: UPLOAD_CHUNK [4MB data]
Server: PROGRESS bytes=4194304
Client: UPLOAD_CHUNK [remaining data]
Server: PROGRESS bytes=1048576
Client: END_UPLOAD
Server: OK
```
### List Directory
```
Client: LIST_DIR "/data"
Server: DATA [directory listing]
```
## Performance Optimizations
- 4MB socket buffers
- SO_NOSIGPIPE enabled
- TCP_NODELAY for low latency
- Direct disk writes (no temp files)
- Streaming chunks (no full file buffering)
Binary file not shown.
+100 -184
View File
@@ -2,50 +2,41 @@
**By Manos**
**Version 4.0.0 - Retry Feature & Stability Improvements**
**Version 2.0.0 - Feature-Rich Release**
Custom high-speed file transfer system for PS5 with etaHEN. Achieves **104+ MB/s** upload speeds for large files using parallel chunked uploads!
Custom high-speed file transfer system for PS5 with etaHEN. Achieves **100+ MB/s** transfer speeds using a custom binary protocol.
⭐ **NEW in v4.0.0:**
- � **Retry Failed Transfers** - Right-click context menu to retry failed uploads
- �️ **Clear All Fix** - Transfer history clear all button now works
- ⚡ **Optimized Performance** - 30-36 MB/s for large files, 8-12 MB/s for small files
- � **Improved Stability** - Fixed connection drops and buffer issues
- 📝 **Better Error Handling** - Enhanced feedback for failed operations
⭐ **NEW in v2.0.0:** 4 Major Features Added - Download Files, File Search, Favorites/Bookmarks, Multi-PS5 Support!
📱 **Android Mobile Client available!**
![Transfer History & Multi-PS5 Support](screenshots/screenshot3.png)
![Mobile App](screenshots/mobile_screenshot.jpg)
![PS5 Upload Client](screenshots/screenshot1.png)
![Upload in Progress](screenshots/screenshot2.png)
---
## 📦 Downloads
Download the latest release from the [Releases](https://github.com/manos555555/PS5-Upload-Suite/releases) page:
## 📦 What's Included
### 1. PS5 Server Payload
- **File:** `ps5_upload_server.elf`
- **File:** `payload/ps5_upload_server.elf`
- **Port:** 9113
- High-speed custom binary protocol
- 16MB socket buffers for maximum throughput
- Multi-threaded client handling
- **Protocol:** Custom binary (optimized for speed)
- **Features:**
- 4MB socket buffers
- SO_NOSIGPIPE enabled
- TCP_NODELAY for low latency
- Direct disk writes (no temp files)
- Multi-threaded client handling
### 2. Windows GUI Client
- **File:** `PS5Upload.exe`
- 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)
### 3. 📱 Android Mobile Client
- **File:** `PS5UploadMobile.apk`
- Upload/download files from your phone
- Multi-PS5 Profiles support
- Browse PS5 filesystem
- Favorites for quick navigation
- **File:** `client/bin/Release/net6.0-windows/win-x64/publish/PS5Upload.exe`
- **Framework:** .NET 6.0 WPF
- **Features:**
- Modern dark theme UI
- Drag & drop file/folder upload
- Browse PS5 filesystem
- Real-time upload progress
- Speed indicator (MB/s)
- Storage space display
- Recursive folder upload
---
@@ -53,13 +44,17 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
### Step 1: Load PS5 Payload
1. Download `ps5_upload_server.elf` from the [Releases](https://github.com/manos555555/PS5-Upload-Suite/releases) page
1. Copy `payload/ps5_upload_server.elf` to your PS5:
```
/data/etaHEN/payloads/ps5_upload_server.elf
```
2. Copy it to your PS5: `/data/etaHEN/payloads/ps5_upload_server.elf`
2. Load the payload with elfldr
3. Load the payload with elfldr
4. You should see notification: `PS5 Upload Server: 192.168.0.XXX:9113 - By Manos`
3. You should see notification:
```
PS5 Upload Server: 192.168.0.XXX:9113 - By Manos
```
### Step 2: Run Windows Client
@@ -85,54 +80,86 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
✅ **Robust Error Handling** - Graceful failures
### Windows Client
✅ **Modern UI** - Dark theme, maximized window for better visibility
✅ **Modern UI** - Dark theme, clean design
✅ **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
✅ **Transfer History** - Track all uploads/downloads with success/failed status
✅ **Auto-Clear History** - Optional auto-clear on startup
✅ **Real-time Progress** - Speed & percentage
✅ **Folder Upload** - Recursive directory upload
✅ **Download Files** - Download from PS5 to PC
✅ **🔍 Smart Search** - Full filesystem indexing with instant search (NEW v3.3)
- 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)
- 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
✅ **Storage Info** - Free space display
✅ **Download Files** - Download from PS5 to PC (NEW v2.0)
✅ **File Search** - Real-time filtering of PS5 files (NEW v2.0)
✅ **Favorites/Bookmarks** - Quick navigation to saved paths (NEW v2.0)
✅ **Multi-PS5 Support** - Save and switch between multiple PS5 profiles (NEW v2.0)
---
## 📊 Performance
### v3.1.0 Optimized Results:
- ✅ **104+ MB/s** upload speed for large files (parallel chunked uploads)
- ✅ **4 parallel chunk connections** for maximum throughput
- ✅ **500MB chunks** - optimal size for PS5 disk performance
- ✅ **Real-time progress** - Speed/ETA updates during upload
- ✅ **Zero chunk failures** - Fixed race conditions
### v1.3.0 Tested Results:
- ✅ **42,801 files** uploaded successfully
- ✅ **Zero errors** - 100% success rate
- ✅ **60-150 MB/s** sustained throughput
- ✅ **Peak:** 190 MB/s per connection
- ✅ **Fully responsive UI** throughout upload
- ✅ **No memory leaks** - stable operation
### Previous Results (v1.3.0):
- ✅ **42,801 files** uploaded successfully
- ✅ **60-150 MB/s** sustained throughput
| Network | Expected Speed |
|---------|----------------|
| **Gigabit Ethernet** | 100-120 MB/s |
| **WiFi 6 (5GHz)** | 60-80 MB/s |
| **WiFi 5 (5GHz)** | 40-60 MB/s |
| Network | Expected Upload Speed | Expected Download Speed |
|---------|----------------------|------------------------|
| **Gigabit Ethernet** | 88-110 MB/s (aggregate) | 100-120 MB/s |
| **WiFi 6 (5GHz)** | 32-70 MB/s (aggregate) | 60-80 MB/s |
| **WiFi 5 (5GHz)** | 20-50 MB/s (aggregate) | 40-60 MB/s |
**Note:** Speeds depend on network quality and PS5 disk performance.
**Note:** Upload speeds depend on network quality and PS5 disk write performance. WiFi has ~40-60% overhead compared to Ethernet.
---
## 🔧 Building from Source
### PS5 Payload
Requirements:
- PS5 SDK (prospero-clang)
- WSL or Linux
```bash
cd payload
bash compile.sh
```
### Windows Client
Requirements:
- .NET 6.0 SDK or later
- Windows 10/11
```cmd
cd client
build.bat
```
Or manually:
```cmd
dotnet publish -c Release -r win-x64 --self-contained true
```
---
## 📋 Protocol Specification
See [PROTOCOL.md](PROTOCOL.md) for detailed protocol documentation.
### Commands
- `PING` - Test connection
- `LIST_STORAGE` - Get storage info
- `LIST_DIR` - List directory contents
- `CREATE_DIR` - Create directory
- `DELETE_FILE` - Delete file
- `DELETE_DIR` - Delete directory
- `START_UPLOAD` - Begin file upload
- `UPLOAD_CHUNK` - Upload file chunk
- `END_UPLOAD` - Finish upload
- `DOWNLOAD_FILE` - Download file from PS5 (NEW v2.0)
- `SHUTDOWN` - Shutdown server
---
@@ -164,117 +191,6 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
---
## 📝 What's New in v3.2.0
### 🎯 Improvements:
#### 1. 💾 Accurate Storage Display
- **Storage now matches PS5 UI** - Shows ~848 GB instead of raw 872 GB
- **Accounts for reserved space** - Same calculation as PS5 system
#### 2. 📱 Mobile App Improvements
- **Multi-select mode** - Toggle button to select multiple files/folders
- **Folder browser** - Visual folder picker for Copy/Move destinations
- **Sorted file list** - Folders always displayed at top
- **Exit confirmation** - Prompt when pressing back button
- **Delete folders** - Now supports folder deletion (not just files)
- **Batch operations** - Delete/download multiple items at once
#### 3. 🐛 Bug Fixes
- **Fixed empty folder deletion** - No more "Unexpected response" error
- **Fixed Copy/Move crash** - No longer crashes when selecting destination
- **Fixed multi-select count** - Correct item count in delete confirmation
- **Fixed folder navigation** - Can enter folders after actions complete
---
## 📝 What's New in v3.1.0
### 🚀 Performance Improvements:
#### 1. ⚡ Parallel Chunked Uploads (104 MB/s!)
- **Large files (>100MB)** are now split into 500MB chunks
- **4 parallel connections** upload chunks simultaneously
- **Result:** ~104 MB/s upload speed (2x faster than before!)
- **Fixed race condition:** First chunk creates file before others start
- **Fixed closure bug:** Correct offset/size capture for parallel tasks
#### 2. 📊 Real-time Progress Display
- **Speed display** now updates in real-time during chunked uploads
- **ETA display** shows accurate time remaining
- **Progress bar** correctly shows 0-100% for chunked files
- No more speed dropping to 0 during large file uploads
#### 3. 💾 Storage Display Improvements
- **Changed label** to "Data Storage (/data)" for clarity
- **Uses statfs with f_bavail** for more accurate available space
- **Real-time updates** every 5 seconds when connected
---
## 📝 What's New in v3.0.0
### 🐛 Critical Bug Fixes:
#### 1. 🔧 Path Normalization Fix
- **Fixed:** Double-slash paths (`//mnt/ext1/...`) that caused directory creation to fail
- **Affected:** All file operations (upload, download, delete, rename, copy, move)
- **Solution:** Added `NormalizePath()` function in both client and server
- **Result:** 100% reliable directory creation and file uploads
#### 2. 📱 Android Mobile Client
- **NEW:** Full-featured Android app for PS5 file management
- **Multi-PS5 Profiles** - Save and switch between multiple PS5 consoles
- Upload files from phone to PS5
- Download files from PS5 with Share option
- Browse PS5 filesystem
- Favorites for quick navigation
- Debug Log with Copy to clipboard
- Transfer History tracking
#### 3. 🛠️ Server Improvements
- Path normalization in all handler functions
- More robust error handling
- Improved stability for parallel uploads
---
## 📝 What's New in v2.1.0
### 🚀 Performance Optimizations:
#### 1. ⚡ Massive Upload Speed Boost (88-110 MB/s)
- **Server-side:** Replaced `fwrite()` with direct `write()` syscalls
- **Client-side:** 8 parallel large file uploads (optimal for PS5 disk)
- **Result:** 80-110 MB/s aggregate upload speed on Gigabit Ethernet
- **Peak bursts:** Up to 2.05 GB/s when hitting disk cache
- **Per-file:** 11-14 MB/s sustained per connection
#### 2. 📊 Transfer History
- Complete history of all uploads and downloads
- Success/Failed status tracking with error messages
- Speed statistics (average, min, max)
- Export to CSV/JSON for analysis
- Persistent storage across sessions
#### 3. 🔄 Auto-Clear History on Startup
- Optional checkbox to clear history automatically
- Useful for keeping UI clean between sessions
- Setting saved in `ps5_upload_settings.json`
#### 4. 🖥️ Maximized Window UI
- Application opens in full-screen mode by default
- Better visibility for large file transfers
- Can be resized/restored as needed
### Technical Improvements:
- ✅ **16MB socket buffers** (up from 4MB) for maximum throughput
- ✅ **Per-file mutex locking** - Parallel writes without race conditions
- ✅ **File pre-allocation** - Reduces disk fragmentation for large files
- ✅ **Direct syscalls** - Bypasses stdio buffering overhead
---
## 📝 What's New in v2.0.0
### 🎉 4 Major New Features:
@@ -313,7 +229,7 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
## 📝 License
This software is provided as-is for personal use.
MIT License - Free to use and modify
---
+166
View File
@@ -0,0 +1,166 @@
# 🎉 PS5 Upload Suite v2.0.0 - Feature-Rich Release
## 🚀 What's New
This is a **major feature release** adding 4 powerful new capabilities to the PS5 Upload Suite!
---
## ✨ New Features
### 1. 📥 Download Files (PS5 → PC)
Finally! You can now download files from your PS5 back to your PC.
**How to use:**
- Right-click any file in PS5 Files panel
- Select "⬇️ Download to PC"
- Choose where to save the file
- Watch the progress with real-time speed tracking
**Technical Details:**
- Uses sendfile optimization for maximum speed
- Zero-copy transfer on PS5 side
- Same high-speed protocol as uploads
- Full progress tracking
---
### 2. 🔍 File Search
Quickly find files in large directories without scrolling.
**How to use:**
- Type in the Search box below Current Path
- Files are filtered in real-time as you type
- Case-insensitive search
- Click "✖ Clear" to reset
**Perfect for:**
- Finding specific game saves
- Locating config files
- Searching through large mod folders
---
### 3. ⭐ Favorites/Bookmarks
Save your frequently used PS5 paths for instant navigation.
**How to use:**
- Navigate to any path (e.g., `/data/games`)
- Click "⭐ Add" to save it
- Use the Favorites dropdown to quickly jump to saved paths
- Click "🗑️ Remove" to delete a favorite
**Saved paths persist between sessions!**
---
### 4. 🎮 Multi-PS5 Support
Manage multiple PS5 consoles with ease.
**How to use:**
- Enter a PS5 IP address
- Click "💾 Save Profile" and give it a name (e.g., "Living Room PS5")
- Use the Profile dropdown to quickly switch between PS5s
- Click "🗑️ Delete Profile" to remove saved profiles
**Perfect for:**
- Users with multiple PS5 consoles
- Testing on different systems
- Switching between home and friend's PS5
---
## 🔧 Technical Improvements
### Server-Side (payload)
- Added `CMD_DOWNLOAD_FILE` (0x13) command
- Implemented sendfile-based download handler
- Fixed `LIST_DIR` to return actual file sizes (not 0)
- Zero-copy file transfer for downloads
### Client-Side
- Added `DownloadFileAsync()` method to Protocol
- Implemented search filtering with `ObservableCollection`
- Added JSON-based profile and favorites persistence
- Custom ComboBox templates for dark theme consistency
- Improved UI responsiveness
---
## 📊 Statistics
**Lines of Code Added:** ~500+ lines
**New Protocol Commands:** 1 (DOWNLOAD_FILE)
**New UI Elements:** 3 panels (Search, Favorites, Profiles)
**Persistent Storage Files:** 2 (ps5_profiles.json, ps5_favorites.json)
---
## 🎨 UI Improvements
- All ComboBox dropdowns now have proper dark theme
- All buttons show full text without cutoff
- Consistent styling across all new features
- Responsive layout that adapts to content
---
## 📦 Files Included
### Server
- `payload/ps5_upload_server.elf` - Updated with download support
### Client
- `client/bin/Release/net6.0-windows/win-x64/PS5Upload.exe` - Full v2.0 client
---
## ⬆️ Upgrading from v1.3.0
1. **Replace server payload:**
- Copy new `ps5_upload_server.elf` to `/data/etaHEN/payloads/`
- Reload with elfldr
2. **Replace client:**
- Close old PS5Upload.exe
- Replace with new version
- Your settings will be preserved
**Note:** v2.0 creates two new files:
- `ps5_profiles.json` - Saved PS5 profiles
- `ps5_favorites.json` - Saved favorite paths
---
## 🐛 Known Issues
None reported yet! This is a stable release built on top of the rock-solid v1.3.0 foundation.
---
## 🔮 Future Features (Not in v2.0)
Still on the roadmap:
- Disk Space Warning before upload
- Duplicate File Detection
- File Verification (SHA256)
- Resume Interrupted Uploads
- Queue Management (reorder, pause)
- Transfer History
- Scheduled Uploads
---
## 🙏 Thanks
Special thanks to the PS5 homebrew community for testing and feedback!
---
**Enjoy the new features!** 🚀
**- Manos**
+8
View File
@@ -0,0 +1,8 @@
<Application x:Class="PS5Upload.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
+61
View File
@@ -0,0 +1,61 @@
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
namespace PS5Upload
{
public partial class App : Application
{
private static readonly string LogFilePath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
$"ps5upload_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log");
private static readonly object _logLock = new object();
public App()
{
// Global exception handlers
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
LogToFile("=== Application Started ===");
}
private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
LogToFile($"DISPATCHER EXCEPTION: {e.Exception}");
e.Handled = true; // Prevent crash, but log it
MessageBox.Show($"Error: {e.Exception.Message}\n\nCheck log file: {LogFilePath}",
"PS5 Upload Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var ex = e.ExceptionObject as Exception;
LogToFile($"UNHANDLED EXCEPTION: {ex}");
}
private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
{
LogToFile($"TASK EXCEPTION: {e.Exception}");
e.SetObserved(); // Prevent crash
}
public static void LogToFile(string message)
{
try
{
lock (_logLock)
{
string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
File.AppendAllText(LogFilePath, $"[{timestamp}] {message}\n");
}
}
catch { /* Ignore logging errors */ }
}
}
}
+79
View File
@@ -0,0 +1,79 @@
<Window x:Class="PS5Upload.DuplicateFileDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="File Already Exists"
Height="320"
Width="550"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize"
Background="#1E1E1E">
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="#2D2D30"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="#3F3F46"/>
<Setter Property="Padding" Value="15,8"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Cursor" Value="Hand"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#3E3E42"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Icon and Message -->
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,15">
<TextBlock Text="⚠️" FontSize="32" Margin="0,0,15,0"/>
<TextBlock x:Name="MessageTextBlock"
Text="This file already exists on PS5:"
Foreground="White"
FontSize="14"
VerticalAlignment="Center"/>
</StackPanel>
<!-- File Name -->
<TextBlock Grid.Row="1"
x:Name="FileNameTextBlock"
Foreground="#4EC9B0"
FontSize="13"
FontWeight="Bold"
Margin="0,0,0,10"
TextWrapping="Wrap"/>
<!-- File Info -->
<StackPanel Grid.Row="2" Margin="0,0,0,20">
<TextBlock x:Name="LocalSizeTextBlock"
Foreground="#9CDCFE"
FontSize="12"
Margin="0,0,0,5"/>
<TextBlock x:Name="RemoteSizeTextBlock"
Foreground="#9CDCFE"
FontSize="12"/>
</StackPanel>
<!-- Buttons -->
<StackPanel Grid.Row="4" Orientation="Vertical">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,10">
<Button Content="Replace" Width="120" Click="Replace_Click"/>
<Button Content="Skip" Width="120" Click="Skip_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Replace All" Width="120" Click="ReplaceAll_Click"/>
<Button Content="Skip All" Width="120" Click="SkipAll_Click"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>
+67
View File
@@ -0,0 +1,67 @@
using System.Windows;
namespace PS5Upload
{
public partial class DuplicateFileDialog : Window
{
public enum FileAction
{
Replace,
Skip,
ReplaceAll,
SkipAll
}
public FileAction UserAction { get; private set; }
public DuplicateFileDialog(string fileName, long localSize, long remoteSize)
{
InitializeComponent();
FileNameTextBlock.Text = fileName;
LocalSizeTextBlock.Text = $"Local file: {FormatFileSize(localSize)}";
RemoteSizeTextBlock.Text = $"Remote file: {FormatFileSize(remoteSize)}";
}
private void Replace_Click(object sender, RoutedEventArgs e)
{
UserAction = FileAction.Replace;
DialogResult = true;
Close();
}
private void Skip_Click(object sender, RoutedEventArgs e)
{
UserAction = FileAction.Skip;
DialogResult = true;
Close();
}
private void ReplaceAll_Click(object sender, RoutedEventArgs e)
{
UserAction = FileAction.ReplaceAll;
DialogResult = true;
Close();
}
private void SkipAll_Click(object sender, RoutedEventArgs e)
{
UserAction = FileAction.SkipAll;
DialogResult = true;
Close();
}
private string FormatFileSize(long bytes)
{
string[] sizes = { "B", "KB", "MB", "GB", "TB" };
double len = bytes;
int order = 0;
while (len >= 1024 && order < sizes.Length - 1)
{
order++;
len = len / 1024;
}
return $"{len:0.##} {sizes[order]}";
}
}
}
+753
View File
@@ -0,0 +1,753 @@
<Window x:Class="PS5Upload.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PS5 Upload - High-Speed File Transfer" Height="600" Width="1200"
WindowStartupLocation="CenterScreen"
Background="#1E1E1E"
Icon="ps5_logo.png">
<Window.Resources>
<!-- Override system colors for ComboBox dropdown -->
<SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="#2D2D30"/>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowColorKey}" Color="#2D2D30"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#2D2D30"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlColorKey}" Color="#2D2D30"/>
<Style TargetType="Button">
<Setter Property="Background" Value="#007ACC"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="15,8"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#1C97EA"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="#3E3E42"/>
<Setter Property="Foreground" Value="#666666"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="TextBox">
<Setter Property="Background" Value="#2D2D30"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="#3E3E42"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="8"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<Style TargetType="ListBox">
<Setter Property="Background" Value="#2D2D30"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="#3E3E42"/>
<Setter Property="BorderThickness" Value="1"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="White"/>
</Style>
</Window.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Header -->
<StackPanel Grid.Row="0" Margin="0,0,0,20" Orientation="Horizontal" HorizontalAlignment="Center">
<Image Source="ps5_logo.png"
Width="80"
Height="80"
Margin="0,0,15,0"
VerticalAlignment="Center"/>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="PS5 Upload - High-Speed File Transfer"
FontSize="24"
FontWeight="Bold"
Foreground="#007ACC"/>
<TextBlock Text="By Manos"
FontSize="12"
Foreground="#999999"
Margin="0,5,0,0"/>
</StackPanel>
</StackPanel>
<!-- Connection Panel -->
<Border Grid.Row="1"
Background="#252526"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4"
Padding="15"
Margin="0,0,0,15">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- PS5 Profile Selection -->
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock Text="PS5 Profile:"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<ComboBox x:Name="PS5ProfileComboBox"
Width="200"
VerticalAlignment="Center"
SelectionChanged="PS5ProfileComboBox_SelectionChanged"
Background="#2D2D30"
Foreground="White"
BorderBrush="#3E3E42">
<ComboBox.Template>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton"
Grid.Column="2"
Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"
Background="#2D2D30"
BorderBrush="#3E3E42"
BorderThickness="1"/>
<ContentPresenter Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="5,3,23,3"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<Popup Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border Name="DropDownBorder"
Background="#2D2D30"
BorderThickness="1"
BorderBrush="#3E3E42"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>
</ScrollViewer>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
</ComboBox.Template>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="#2D2D30"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Padding" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border Name="Border"
Background="#2D2D30"
Padding="5">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="#007ACC"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="#007ACC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
<Button Content="💾 Save Profile"
Click="SaveProfileButton_Click"
Width="140"
Margin="10,0,0,0"
Background="#28A745"/>
<Button Content="🗑️ Delete Profile"
Click="DeleteProfileButton_Click"
Width="150"
Margin="5,0,0,0"
Background="#DC3545"/>
</StackPanel>
<!-- IP Address and Connect -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="PS5 IP Address:"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<TextBox Grid.Column="1"
x:Name="IpAddressTextBox"
Text="192.168.0.160"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<Button Grid.Column="2"
x:Name="ConnectButton"
Content="Connect"
Click="ConnectButton_Click"
Width="100"/>
</Grid>
</Grid>
</Border>
<!-- Main Content -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="300"/>
</Grid.ColumnDefinitions>
<!-- Local Files -->
<Border Grid.Column="0"
Background="#252526"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#2D2D30"
Padding="10"
BorderBrush="#3E3E42"
BorderThickness="0,0,0,1">
<TextBlock Text="📁 Local Files"
FontSize="16"
FontWeight="SemiBold"/>
</Border>
<ListBox Grid.Row="1"
x:Name="LocalFilesListBox"
BorderThickness="0"
AllowDrop="True"
Drop="LocalFilesListBox_Drop"
DragEnter="LocalFilesListBox_DragEnter"
MouseRightButtonUp="LocalFilesListBox_RightClick">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="{Binding Icon}"
FontSize="16"
Margin="0,0,10,0"/>
<TextBlock Text="{Binding Name}"
VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="🗑️ Remove" Click="RemoveLocalFile_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
<StackPanel Grid.Row="2"
Orientation="Horizontal"
Margin="10"
HorizontalAlignment="Center">
<Button Content="Browse Files"
Click="BrowseFilesButton_Click"
Margin="0,0,5,0"/>
<Button Content="Browse Folder"
Click="BrowseFolderButton_Click"
Margin="0,0,5,0"/>
<Button Content="Clear All"
Click="ClearLocalFiles_Click"
Background="#DC3545"/>
</StackPanel>
</Grid>
</Border>
<!-- PS5 Files -->
<Border Grid.Column="2"
Background="#252526"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#2D2D30"
Padding="10"
BorderBrush="#3E3E42"
BorderThickness="0,0,0,1">
<TextBlock Text="🎮 PS5 Files"
FontSize="16"
FontWeight="SemiBold"/>
</Border>
<StackPanel Grid.Row="1"
Margin="10"
Background="#2D2D30">
<StackPanel Orientation="Horizontal" Margin="0,0,0,5">
<TextBlock Text="Current Path:"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<TextBox x:Name="CurrentPathTextBox"
Text="/data"
Width="200"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<Button Content="Go"
Click="GoButton_Click"
Width="60"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,5">
<TextBlock Text="⭐ Favorites:"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<ComboBox x:Name="FavoritesComboBox"
Width="200"
VerticalAlignment="Center"
SelectionChanged="FavoritesComboBox_SelectionChanged"
Background="#2D2D30"
Foreground="White"
BorderBrush="#3E3E42">
<ComboBox.Template>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton"
Grid.Column="2"
Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"
Background="#2D2D30"
BorderBrush="#3E3E42"
BorderThickness="1"/>
<ContentPresenter Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="5,3,23,3"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<Popup Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border Name="DropDownBorder"
Background="#2D2D30"
BorderThickness="1"
BorderBrush="#3E3E42"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>
</ScrollViewer>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
</ComboBox.Template>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="#2D2D30"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Padding" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border Name="Border"
Background="#2D2D30"
Padding="5">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="#007ACC"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="#007ACC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
<Button Content="⭐ Add"
Click="AddFavoriteButton_Click"
Width="90"
Margin="10,0,0,0"
Background="#28A745"/>
<Button Content="🗑️ Remove"
Click="RemoveFavoriteButton_Click"
Width="110"
Margin="5,0,0,0"
Background="#DC3545"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="🔍 Search:"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<TextBox x:Name="SearchTextBox"
Width="250"
VerticalAlignment="Center"
TextChanged="SearchTextBox_TextChanged"
Background="#1E1E1E"
Foreground="White"
BorderBrush="#3E3E42"/>
<Button Content="✖ Clear"
Click="ClearSearchButton_Click"
Width="100"
Margin="5,0,0,0"
Background="#3E3E42"/>
</StackPanel>
</StackPanel>
<ListBox Grid.Row="2"
x:Name="PS5FilesListBox"
BorderThickness="0"
SelectionMode="Extended"
MouseDoubleClick="PS5FilesListBox_MouseDoubleClick">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="⬇️ Download to PC" Click="DownloadMenuItem_Click"/>
<Separator/>
<MenuItem Header="📝 Rename" Click="RenameMenuItem_Click"/>
<MenuItem Header="📋 Copy" Click="CopyMenuItem_Click"/>
<MenuItem Header="✂️ Move" Click="MoveMenuItem_Click"/>
<Separator/>
<MenuItem Header="🗑️ Delete" Click="DeleteMenuItem_Click"/>
<MenuItem Header="🗑️ Delete Selected" Click="DeleteSelectedMenuItem_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="{Binding Icon}"
FontSize="16"
Margin="0,0,10,0"/>
<StackPanel>
<TextBlock Text="{Binding Name}"
FontWeight="SemiBold"/>
<TextBlock Text="{Binding SizeText}"
FontSize="11"
Foreground="#999999"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="3"
Background="#2D2D30"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4"
Margin="10"
Padding="10">
<StackPanel>
<TextBlock Text="💾 PS5 Storage"
FontSize="12"
FontWeight="Bold"
Foreground="#007ACC"
HorizontalAlignment="Center"
Margin="0,0,0,8"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0"
Text="Free:"
FontSize="11"
Foreground="#999999"
Margin="0,0,8,4"/>
<TextBlock Grid.Row="0" Grid.Column="1"
x:Name="StorageFreeText"
Text="--"
FontSize="11"
Foreground="#4EC9B0"
FontWeight="Bold"
HorizontalAlignment="Right"
Margin="0,0,0,4"/>
<TextBlock Grid.Row="1" Grid.Column="0"
Text="Used:"
FontSize="11"
Foreground="#999999"
Margin="0,0,8,4"/>
<TextBlock Grid.Row="1" Grid.Column="1"
x:Name="StorageUsedText"
Text="--"
FontSize="11"
Foreground="#CE9178"
FontWeight="Bold"
HorizontalAlignment="Right"
Margin="0,0,0,4"/>
<TextBlock Grid.Row="2" Grid.Column="0"
Text="Total:"
FontSize="11"
Foreground="#999999"
Margin="0,0,8,4"/>
<TextBlock Grid.Row="2" Grid.Column="1"
x:Name="StorageTotalText"
Text="--"
FontSize="11"
Foreground="White"
FontWeight="Bold"
HorizontalAlignment="Right"
Margin="0,0,0,4"/>
<!-- Progress Bar -->
<ProgressBar Grid.Row="3" Grid.ColumnSpan="2"
x:Name="StorageProgressBar"
Height="6"
Margin="0,6,0,0"
Minimum="0"
Maximum="100"
Value="0"
Foreground="#CE9178"
Background="#3E3E42"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- Log Panel -->
<Border Grid.Column="4"
Background="#252526"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#2D2D30"
Padding="10"
BorderBrush="#3E3E42"
BorderThickness="0,0,0,1">
<TextBlock Text="📋 Debug Log"
FontSize="16"
FontWeight="SemiBold"/>
</Border>
<TextBox Grid.Row="1"
x:Name="LogTextBox"
Text=""
FontFamily="Consolas"
FontSize="11"
Foreground="#CCCCCC"
Background="#1E1E1E"
BorderThickness="0"
Padding="10"
TextWrapping="Wrap"
IsReadOnly="True"
IsReadOnlyCaretVisible="False"
Focusable="False"
Cursor="Arrow"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"/>
<StackPanel Grid.Row="2"
Orientation="Horizontal"
Margin="10"
HorizontalAlignment="Center">
<Button Content="📋 Copy Log"
Click="CopyLogButton_Click"
Margin="0,0,10,0"
Background="#28A745"/>
<Button Content="Clear Log"
Click="ClearLogButton_Click"
Background="#3E3E42"/>
</StackPanel>
</Grid>
</Border>
</Grid>
<!-- Upload Progress -->
<Border Grid.Row="3"
Background="#252526"
BorderBrush="#3E3E42"
BorderThickness="1"
CornerRadius="4"
Padding="15"
Margin="0,15,0,0"
x:Name="ProgressPanel"
Visibility="Collapsed">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Files Remaining Counter -->
<TextBlock Grid.Row="0"
x:Name="FilesRemainingText"
Text="Files: 0 / 0 (0 remaining)"
FontSize="13"
FontWeight="SemiBold"
Foreground="#FFC107"
Margin="0,0,0,8"/>
<!-- Total Folder Progress -->
<TextBlock Grid.Row="1"
x:Name="TotalProgressText"
Text="Total: 0 / 0 files"
FontSize="14"
FontWeight="SemiBold"
Foreground="#28A745"
Margin="0,0,0,5"/>
<ProgressBar Grid.Row="2"
x:Name="TotalProgressBar"
Height="20"
Minimum="0"
Maximum="100"
Value="0"
Foreground="#17A2B8"
Background="#2D2D30"
BorderBrush="#3E3E42"
Margin="0,0,0,10"/>
<!-- Current File -->
<TextBlock Grid.Row="3"
x:Name="UploadFileNameText"
Text="Uploading: filename.bin"
FontSize="13"
Margin="0,0,0,5"/>
<ProgressBar Grid.Row="4"
x:Name="UploadProgressBar"
Height="20"
Minimum="0"
Maximum="100"
Value="0"
Foreground="#28A745"
Background="#2D2D30"
BorderBrush="#3E3E42"/>
<!-- Speed and Progress -->
<Grid Grid.Row="5" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
x:Name="UploadSpeedText"
Text="Speed: 0 MB/s | Avg: 0 MB/s"
FontSize="12"
Foreground="#999999"/>
<TextBlock Grid.Column="1"
x:Name="UploadProgressText"
Text="0 / 0 MB (0%)"
FontSize="12"
Foreground="#999999"/>
</Grid>
<!-- ETA -->
<TextBlock Grid.Row="6"
x:Name="UploadETAText"
Text="ETA: Calculating..."
FontSize="12"
Foreground="#999999"
Margin="0,5,0,0"/>
</Grid>
</Border>
<!-- Upload Buttons -->
<Grid Grid.Row="4" Margin="0,15,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
x:Name="UploadButton"
Content="⬆️ Upload to PS5"
Click="UploadButton_Click"
Height="45"
FontSize="16"
FontWeight="SemiBold"
IsEnabled="False"/>
<Button Grid.Column="2"
x:Name="CancelButton"
Content="❌ Cancel"
Click="CancelButton_Click"
Height="45"
FontSize="16"
FontWeight="SemiBold"
Background="#DC3545"
IsEnabled="False"/>
</Grid>
</Grid>
</Window>
File diff suppressed because it is too large. Load diff
+29
View File
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
<AssemblyName>PS5Upload</AssemblyName>
<RootNamespace>PS5Upload</RootNamespace>
<Version>1.0.0</Version>
<Authors>Manos</Authors>
<Description>High-Speed File Upload Tool for PS5</Description>
<Copyright>Copyright © 2026 Manos</Copyright>
<Nullable>enable</Nullable>
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
<ApplicationIcon>ps5_logo_fixed.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Resource Include="ps5_logo.png" />
<None Include="ps5_logo.ico">
<Link>ps5_logo.ico</Link>
</None>
</ItemGroup>
</Project>
+633
View File
@@ -0,0 +1,633 @@
using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PS5Upload
{
// Protocol commands
public enum Command : byte
{
Ping = 0x01,
ListStorage = 0x02,
ListDir = 0x03,
CreateDir = 0x04,
DeleteFile = 0x05,
DeleteDir = 0x06,
Rename = 0x07,
CopyFile = 0x08,
MoveFile = 0x09,
StartUpload = 0x10,
UploadChunk = 0x11,
EndUpload = 0x12,
DownloadFile = 0x13,
Shutdown = 0xFF
}
// Protocol responses
public enum Response : byte
{
Ok = 0x01,
Error = 0x02,
Data = 0x03,
Ready = 0x04,
Progress = 0x05
}
public class PS5Protocol : IDisposable
{
private TcpClient? _client;
private NetworkStream? _stream;
private const int BufferSize = 4 * 1024 * 1024; // 4MB chunks - MUST match payload BUFFER_SIZE
public bool IsConnected => _client?.Connected ?? false;
public async Task<bool> ConnectAsync(string ipAddress, int port = 9113)
{
try
{
_client = new TcpClient();
_client.ReceiveBufferSize = 64 * 1024 * 1024; // 64MB for maximum TCP throughput
_client.SendBufferSize = 64 * 1024 * 1024; // 64MB for maximum TCP throughput
_client.NoDelay = true;
_client.LingerState = new System.Net.Sockets.LingerOption(false, 0);
// BUG FIX #1: Add 5 second timeout for connection to fail fast on wrong IP
var connectTask = _client.ConnectAsync(ipAddress, port);
var timeoutTask = Task.Delay(5000); // 5 second timeout
var completedTask = await Task.WhenAny(connectTask, timeoutTask);
if (completedTask == timeoutTask)
{
// Timeout occurred
_client?.Close();
_client?.Dispose();
_client = null;
return false;
}
// Check if connection actually succeeded
if (!_client.Connected)
{
return false;
}
_stream = _client.GetStream();
return true;
}
catch
{
_client?.Close();
_client?.Dispose();
_client = null;
return false;
}
}
public void Disconnect()
{
_stream?.Dispose();
_client?.Dispose();
_stream = null;
_client = null;
}
private async Task SendCommandAsync(Command cmd, byte[]? data = null)
{
if (_stream == null) throw new InvalidOperationException("Not connected");
byte[] header = new byte[5];
header[0] = (byte)cmd;
uint dataLen = data != null ? (uint)data.Length : 0;
BitConverter.GetBytes(dataLen).CopyTo(header, 1);
await _stream.WriteAsync(header, 0, 5);
if (data != null && data.Length > 0)
{
await _stream.WriteAsync(data, 0, data.Length);
}
}
private async Task<(Response response, byte[] data)> ReceiveResponseAsync()
{
if (_stream == null) throw new InvalidOperationException("Not connected");
byte[] header = new byte[5];
await ReadExactAsync(header, 5);
Response response = (Response)header[0];
uint dataLen = BitConverter.ToUInt32(header, 1);
byte[] data = new byte[dataLen];
if (dataLen > 0)
{
await ReadExactAsync(data, (int)dataLen);
}
return (response, data);
}
private async Task ReadExactAsync(byte[] buffer, int count, int timeoutMs = 120000)
{
if (_stream == null) throw new InvalidOperationException("Not connected");
int offset = 0;
using var cts = new CancellationTokenSource(timeoutMs);
try
{
while (offset < count)
{
int read = await _stream.ReadAsync(buffer, offset, count - offset, cts.Token);
if (read == 0)
{
// Give PS5 a moment to recover before declaring connection dead
await Task.Delay(100);
read = await _stream.ReadAsync(buffer, offset, count - offset, cts.Token);
if (read == 0) throw new IOException("Connection closed");
}
offset += read;
}
}
catch (OperationCanceledException)
{
throw new TimeoutException("Read timeout");
}
}
public async Task<bool> PingAsync()
{
await SendCommandAsync(Command.Ping);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public async Task<StorageInfo[]> ListStorageAsync()
{
await SendCommandAsync(Command.ListStorage);
var (response, data) = await ReceiveResponseAsync();
if (response != Response.Data) return Array.Empty<StorageInfo>();
using var ms = new MemoryStream(data);
using var br = new BinaryReader(ms);
int count = br.ReadInt32();
var result = new StorageInfo[count];
for (int i = 0; i < count; i++)
{
ushort pathLen = br.ReadUInt16();
string path = Encoding.UTF8.GetString(br.ReadBytes(pathLen));
long total = br.ReadInt64();
long free = br.ReadInt64();
result[i] = new StorageInfo { Path = path, TotalBytes = total, FreeBytes = free };
}
return result;
}
public async Task<FileEntry[]> ListDirAsync(string path)
{
byte[] pathBytes = Encoding.UTF8.GetBytes(path + "\0");
await SendCommandAsync(Command.ListDir, pathBytes);
var (response, data) = await ReceiveResponseAsync();
if (response != Response.Data) return Array.Empty<FileEntry>();
using var ms = new MemoryStream(data);
using var br = new BinaryReader(ms);
int count = br.ReadInt32();
// Handle empty directory
if (count <= 0) return Array.Empty<FileEntry>();
var result = new FileEntry[count];
for (int i = 0; i < count; i++)
{
byte type = br.ReadByte();
ushort nameLen = br.ReadUInt16();
string name = Encoding.UTF8.GetString(br.ReadBytes(nameLen));
long size = br.ReadInt64();
long timestamp = br.ReadInt64();
// Clamp timestamp to valid DateTimeOffset range
DateTime dt;
try
{
if (timestamp < -62135596800 || timestamp > 253402300799)
{
dt = DateTime.Now; // Use current time for invalid timestamps
}
else
{
dt = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
}
}
catch
{
dt = DateTime.Now;
}
result[i] = new FileEntry
{
Name = name,
IsDirectory = type == 1,
Size = size,
Timestamp = dt
};
}
return result;
}
public async Task<bool> CreateDirAsync(string path)
{
byte[] pathBytes = Encoding.UTF8.GetBytes(path + "\0");
await SendCommandAsync(Command.CreateDir, pathBytes);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public async Task<bool> DeleteFileAsync(string path)
{
byte[] pathBytes = Encoding.UTF8.GetBytes(path + "\0");
await SendCommandAsync(Command.DeleteFile, pathBytes);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public event Action<string>? OnProgressMessage;
public async Task<bool> DeleteDirAsync(string path)
{
byte[] pathBytes = Encoding.UTF8.GetBytes(path + "\0");
await SendCommandAsync(Command.DeleteDir, pathBytes);
// Receive initial OK response
var (response, _) = await ReceiveResponseAsync();
if (response != Response.Ok)
{
return false;
}
// Now listen for progress messages synchronously
// Keep reading until we get the final OK/ERROR response
bool deletionComplete = false;
try
{
while (!deletionComplete)
{
var (progressResponse, progressData) = await ReceiveResponseAsync();
if (progressResponse == Response.Progress)
{
string message = Encoding.UTF8.GetString(progressData).TrimEnd('\0');
OnProgressMessage?.Invoke(message);
}
else if (progressResponse == Response.Ok)
{
// Final OK response received - deletion complete
OnProgressMessage?.Invoke("🔚 Received final OK - deletion complete");
deletionComplete = true;
}
else if (progressResponse == Response.Error)
{
// Error response received
OnProgressMessage?.Invoke("❌ Received error response");
deletionComplete = true;
}
else
{
// Unexpected response - log it
OnProgressMessage?.Invoke($"⚠️ Unexpected response: {progressResponse}");
deletionComplete = true;
}
}
}
catch (Exception ex)
{
// Connection closed - log it
OnProgressMessage?.Invoke($"⚠️ Connection closed: {ex.Message}");
}
// Give server a moment to fully close the deletion thread
// CRITICAL: Increased delay to prevent race condition with next delete
await Task.Delay(500);
return true;
}
public async Task<bool> RenameAsync(string oldPath, string newPath)
{
byte[] oldBytes = Encoding.UTF8.GetBytes(oldPath + "\0");
byte[] newBytes = Encoding.UTF8.GetBytes(newPath + "\0");
byte[] data = new byte[oldBytes.Length + newBytes.Length];
Array.Copy(oldBytes, 0, data, 0, oldBytes.Length);
Array.Copy(newBytes, 0, data, oldBytes.Length, newBytes.Length);
await SendCommandAsync(Command.Rename, data);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public async Task<bool> CopyFileAsync(string srcPath, string dstPath)
{
byte[] srcBytes = Encoding.UTF8.GetBytes(srcPath + "\0");
byte[] dstBytes = Encoding.UTF8.GetBytes(dstPath + "\0");
byte[] data = new byte[srcBytes.Length + dstBytes.Length];
Array.Copy(srcBytes, 0, data, 0, srcBytes.Length);
Array.Copy(dstBytes, 0, data, srcBytes.Length, dstBytes.Length);
await SendCommandAsync(Command.CopyFile, data);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public async Task<bool> MoveFileAsync(string srcPath, string dstPath)
{
byte[] srcBytes = Encoding.UTF8.GetBytes(srcPath + "\0");
byte[] dstBytes = Encoding.UTF8.GetBytes(dstPath + "\0");
byte[] data = new byte[srcBytes.Length + dstBytes.Length];
Array.Copy(srcBytes, 0, data, 0, srcBytes.Length);
Array.Copy(dstBytes, 0, data, srcBytes.Length, dstBytes.Length);
await SendCommandAsync(Command.MoveFile, data);
var (response, _) = await ReceiveResponseAsync();
return response == Response.Ok;
}
public async Task<bool> UploadFileAsync(string localPath, string remotePath, IProgress<UploadProgress>? progress = null, CancellationToken cancellationToken = default, long chunkOffset = 0, long chunkSize = 0)
{
FileInfo fileInfo = new FileInfo(localPath);
if (!fileInfo.Exists) return false;
// Determine actual upload size
long uploadSize = chunkSize > 0 ? chunkSize : fileInfo.Length;
// Send START_UPLOAD with optional chunk offset
byte[] pathBytes = Encoding.UTF8.GetBytes(remotePath);
byte[] startData = new byte[pathBytes.Length + 1 + 8 + 8]; // path + null + size + offset
Array.Copy(pathBytes, 0, startData, 0, pathBytes.Length);
BitConverter.GetBytes(fileInfo.Length).CopyTo(startData, pathBytes.Length + 1);
BitConverter.GetBytes(chunkOffset).CopyTo(startData, pathBytes.Length + 9);
await SendCommandAsync(Command.StartUpload, startData);
var (response, _) = await ReceiveResponseAsync();
if (response != Response.Ready) return false;
// Upload chunks - simple async approach
long totalSent = 0;
var startTime = DateTime.Now;
double avgSpeed = 0;
byte[] sendBuffer = new byte[5 + BufferSize];
sendBuffer[0] = (byte)Command.UploadChunk;
using (FileStream fs = new FileStream(localPath, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, FileOptions.SequentialScan))
{
// Seek to chunk offset if specified
if (chunkOffset > 0)
{
fs.Seek(chunkOffset, SeekOrigin.Begin);
}
int chunksSent = 0;
int bytesRead;
long bytesRemaining = uploadSize;
while (bytesRemaining > 0 && (bytesRead = await fs.ReadAsync(sendBuffer, 5, (int)Math.Min(BufferSize, bytesRemaining), cancellationToken)) > 0)
{
if (cancellationToken.IsCancellationRequested) return false;
BitConverter.GetBytes((uint)bytesRead).CopyTo(sendBuffer, 1);
if (_stream == null) return false;
// FIX: Add timeout to WriteAsync to prevent hanging if PS5 becomes unresponsive
// 30 second timeout per chunk write - should be more than enough for 4MB
using var writeTimeout = new CancellationTokenSource(TimeSpan.FromSeconds(30));
using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, writeTimeout.Token);
try
{
await _stream.WriteAsync(sendBuffer, 0, 5 + bytesRead, linkedCts.Token);
}
catch (OperationCanceledException) when (writeTimeout.IsCancellationRequested)
{
// Write timeout - PS5 is unresponsive
return false;
}
totalSent += bytesRead;
bytesRemaining -= bytesRead;
chunksSent++;
if (chunksSent % 5 == 0 || bytesRemaining == 0)
{
var elapsed = DateTime.Now - startTime;
double currentSpeed = elapsed.TotalSeconds > 0 ? totalSent / elapsed.TotalSeconds : 0;
avgSpeed = currentSpeed;
TimeSpan eta = currentSpeed > 0
? TimeSpan.FromSeconds(bytesRemaining / currentSpeed)
: TimeSpan.Zero;
progress?.Report(new UploadProgress
{
BytesSent = chunkOffset + totalSent,
TotalBytes = fileInfo.Length,
SpeedBytesPerSecond = currentSpeed,
AverageSpeedBytesPerSecond = avgSpeed,
ElapsedTime = elapsed,
EstimatedTimeRemaining = eta,
CurrentFileName = fileInfo.Name
});
}
}
}
// Send END_UPLOAD and wait for response
// CRITICAL: Must wait for response to avoid protocol desync on chunked uploads
try
{
await SendCommandAsync(Command.EndUpload);
var (endResponse, _) = await ReceiveResponseAsync();
return endResponse == Response.Ok;
}
catch
{
return false; // Connection issue means upload failed
}
}
public async Task<bool> DownloadFileAsync(string remotePath, string localPath, IProgress<UploadProgress>? progress = null, CancellationToken cancellationToken = default)
{
try
{
// Send download command
byte[] pathBytes = Encoding.UTF8.GetBytes(remotePath);
await SendCommandAsync(Command.DownloadFile, pathBytes);
// Receive response header (5 bytes: 1 response + 4 data_len)
byte[] header = new byte[5];
await ReadExactAsync(header, 5);
Response response = (Response)header[0];
uint dataLen = BitConverter.ToUInt32(header, 1);
// Check if error response
if (response == Response.Error)
{
if (dataLen > 0)
{
byte[] errorMsg = new byte[dataLen];
await ReadExactAsync(errorMsg, (int)dataLen);
}
return false;
}
// Expecting RESP_DATA with 8-byte file size
if (response != Response.Data || dataLen != 8)
{
return false;
}
// Read file size (8 bytes)
byte[] sizeBytes = new byte[8];
await ReadExactAsync(sizeBytes, 8);
long fileSize = BitConverter.ToInt64(sizeBytes, 0);
// Now read raw file data directly from socket
using var fs = new FileStream(localPath, FileMode.Create, FileAccess.Write, FileShare.None, BufferSize);
byte[] buffer = new byte[BufferSize];
long totalReceived = 0;
var startTime = DateTime.Now;
while (totalReceived < fileSize)
{
if (cancellationToken.IsCancellationRequested) return false;
int toRead = (int)Math.Min(BufferSize, fileSize - totalReceived);
int received = await _stream!.ReadAsync(buffer, 0, toRead, cancellationToken);
if (received == 0) break;
await fs.WriteAsync(buffer, 0, received, cancellationToken);
totalReceived += received;
// Report progress every 5MB or at completion
if (totalReceived % (5 * 1024 * 1024) < BufferSize || totalReceived == fileSize)
{
var elapsed = DateTime.Now - startTime;
double speed = elapsed.TotalSeconds > 0 ? totalReceived / elapsed.TotalSeconds : 0;
progress?.Report(new UploadProgress
{
BytesSent = totalReceived,
TotalBytes = fileSize,
SpeedBytesPerSecond = speed,
AverageSpeedBytesPerSecond = speed,
ElapsedTime = elapsed,
EstimatedTimeRemaining = speed > 0 ? TimeSpan.FromSeconds((fileSize - totalReceived) / speed) : TimeSpan.Zero,
CurrentFileName = Path.GetFileName(localPath)
});
}
}
return totalReceived == fileSize;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Download error: {ex.Message}");
return false;
}
}
public void Dispose()
{
Disconnect();
}
}
public class StorageInfo
{
public string Path { get; set; } = "";
public long TotalBytes { get; set; }
public long FreeBytes { get; set; }
}
public class FileEntry
{
public string Name { get; set; } = "";
public bool IsDirectory { get; set; }
public long Size { get; set; }
public DateTime Timestamp { get; set; }
}
public class UploadProgress
{
public long BytesSent { get; set; }
public long TotalBytes { get; set; }
public double SpeedBytesPerSecond { get; set; }
public double AverageSpeedBytesPerSecond { get; set; }
public TimeSpan ElapsedTime { get; set; }
public TimeSpan EstimatedTimeRemaining { get; set; }
public string CurrentFileName { get; set; } = "";
// For folder progress
public int CurrentFileIndex { get; set; }
public int TotalFiles { get; set; }
public long TotalFolderBytes { get; set; }
public long TotalFolderBytesSent { get; set; }
}
// High-speed parallel uploader using multiple connections
public class ParallelUploader : IDisposable
{
private readonly string _ipAddress;
private readonly int _port;
private readonly int _connectionCount;
private const int ChunkSize = 4 * 1024 * 1024; // 4MB chunks per connection
public ParallelUploader(string ipAddress, int port = 9113, int connectionCount = 4)
{
_ipAddress = ipAddress;
_port = port;
_connectionCount = connectionCount;
}
public async Task<bool> UploadFileAsync(string localPath, string remotePath, IProgress<UploadProgress>? progress = null, CancellationToken cancellationToken = default)
{
FileInfo fileInfo = new FileInfo(localPath);
if (!fileInfo.Exists) return false;
// For small files, use single connection
if (fileInfo.Length < ChunkSize * 2)
{
using var protocol = new PS5Protocol();
if (!await protocol.ConnectAsync(_ipAddress, _port)) return false;
return await protocol.UploadFileAsync(localPath, remotePath, progress, cancellationToken);
}
// For large files, use parallel connections
// This requires server support for chunked/parallel uploads
// For now, fall back to single connection
using var proto = new PS5Protocol();
if (!await proto.ConnectAsync(_ipAddress, _port)) return false;
return await proto.UploadFileAsync(localPath, remotePath, progress, cancellationToken);
}
public void Dispose() { }
}
}
+29
View File
@@ -0,0 +1,29 @@
@echo off
echo ================================================
echo PS5 Upload Client - Building
echo By Manos
echo ================================================
echo.
echo [+] Building Windows GUI Client...
dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
if exist "bin\Release\net6.0-windows\win-x64\publish\PS5Upload.exe" (
echo.
echo ================================================
echo [+] SUCCESS! Built PS5Upload.exe
echo ================================================
echo.
echo Location: bin\Release\net6.0-windows\win-x64\publish\PS5Upload.exe
echo.
echo Copy PS5Upload.exe to any location and run it!
) else (
echo.
echo ================================================
echo [-] BUILD FAILED
echo ================================================
echo.
echo Make sure .NET 6.0 SDK is installed:
echo https://dotnet.microsoft.com/download/dotnet/6.0
exit /b 1
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

File renamed without changes.
+1282
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"C:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\client\\PS5Upload.csproj": {}
},
"projects": {
"C:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "C:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "C:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,88 +0,0 @@
{
"format": 1,
"restore": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {}
},
"projects": {
"c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"projectName": "PS5Upload",
"projectPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\PS5Upload.csproj",
"packagesPath": "C:\\Users\\HACKMAN\\.nuget\\packages\\",
"outputPath": "c:\\Users\\HACKMAN\\Desktop\\ps5 test\\my_projects\\ps5_upload_suite\\test\\client\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\HACKMAN\\AppData\\Roaming\\NuGet\\NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Crossgen2.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.NETCore.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
},
{
"name": "Microsoft.WindowsDesktop.App.Runtime.win-x64",
"version": "[6.0.36, 6.0.36]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.428\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"win-x64": {
"#import": []
}
}
}
}
}
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\HACKMAN\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.3.4</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\HACKMAN\.nuget\packages\" />
</ItemGroup>
</Project>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
@@ -1,4 +0,0 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
@@ -1,70 +0,0 @@
#pragma checksum "..\..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "CB33FCD6F2FED852F18B020492FB44EEB8795BC8"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms.Integration;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
namespace PS5Upload {
/// <summary>
/// App
/// </summary>
public partial class App : System.Windows.Application {
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
public void InitializeComponent() {
#line 4 "..\..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
}
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
public static void Main() {
PS5Upload.App app = new PS5Upload.App();
app.InitializeComponent();
app.Run();
}
}
}
@@ -1,154 +0,0 @@
#pragma checksum "..\..\..\..\DuplicateFileDialog.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "D145AE12375520DEB12FE79F2E403EAFD5425EB8"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms.Integration;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
namespace PS5Upload {
/// <summary>
/// DuplicateFileDialog
/// </summary>
public partial class DuplicateFileDialog : System.Windows.Window, System.Windows.Markup.IComponentConnector {
#line 40 "..\..\..\..\DuplicateFileDialog.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock MessageTextBlock;
#line default
#line hidden
#line 49 "..\..\..\..\DuplicateFileDialog.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock FileNameTextBlock;
#line default
#line hidden
#line 58 "..\..\..\..\DuplicateFileDialog.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock LocalSizeTextBlock;
#line default
#line hidden
#line 62 "..\..\..\..\DuplicateFileDialog.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock RemoteSizeTextBlock;
#line default
#line hidden
private bool _contentLoaded;
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/PS5Upload;component/duplicatefiledialog.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\DuplicateFileDialog.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
switch (connectionId)
{
case 1:
this.MessageTextBlock = ((System.Windows.Controls.TextBlock)(target));
return;
case 2:
this.FileNameTextBlock = ((System.Windows.Controls.TextBlock)(target));
return;
case 3:
this.LocalSizeTextBlock = ((System.Windows.Controls.TextBlock)(target));
return;
case 4:
this.RemoteSizeTextBlock = ((System.Windows.Controls.TextBlock)(target));
return;
case 5:
#line 70 "..\..\..\..\DuplicateFileDialog.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Replace_Click);
#line default
#line hidden
return;
case 6:
#line 71 "..\..\..\..\DuplicateFileDialog.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Skip_Click);
#line default
#line hidden
return;
case 7:
#line 74 "..\..\..\..\DuplicateFileDialog.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ReplaceAll_Click);
#line default
#line hidden
return;
case 8:
#line 75 "..\..\..\..\DuplicateFileDialog.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.SkipAll_Click);
#line default
#line hidden
return;
}
this._contentLoaded = true;
}
}
}
@@ -1,752 +0,0 @@
#pragma checksum "..\..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "7C721CE99122126DA5F19F2654419A7F727DE54D"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using PS5Upload;
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms.Integration;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
namespace PS5Upload {
/// <summary>
/// MainWindow
/// </summary>
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
#line 118 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ComboBox PS5ProfileComboBox;
#line default
#line hidden
#line 219 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox IpAddressTextBox;
#line default
#line hidden
#line 225 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button ConnectButton;
#line default
#line hidden
#line 267 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ListBox LocalFilesListBox;
#line default
#line hidden
#line 339 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox CurrentPathTextBox;
#line default
#line hidden
#line 352 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ComboBox FavoritesComboBox;
#line default
#line hidden
#line 442 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox SearchTextBox;
#line default
#line hidden
#line 458 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ListBox PS5FilesListBox;
#line default
#line hidden
#line 546 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox LogTextBox;
#line default
#line hidden
#line 597 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ListBox CompletedTransfersListBox;
#line default
#line hidden
#line 666 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ListBox FailedTransfersListBox;
#line default
#line hidden
#line 759 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.CheckBox AutoClearHistoryCheckBox;
#line default
#line hidden
#line 783 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ItemsControl ShellOutputItems;
#line default
#line hidden
#line 799 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox ShellInputBox;
#line default
#line hidden
#line 848 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock IndexStatusText;
#line default
#line hidden
#line 855 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button StartIndexButton;
#line default
#line hidden
#line 862 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button RefreshStatusButton;
#line default
#line hidden
#line 879 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBox SearchQueryBox;
#line default
#line hidden
#line 909 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button ClearSearchResultsButton;
#line default
#line hidden
#line 920 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.DataGrid SearchResultsGrid;
#line default
#line hidden
#line 993 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border ProgressPanel;
#line default
#line hidden
#line 1008 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock FilesRemainingText;
#line default
#line hidden
#line 1017 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock TotalProgressText;
#line default
#line hidden
#line 1025 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ProgressBar TotalProgressBar;
#line default
#line hidden
#line 1037 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock UploadFileNameText;
#line default
#line hidden
#line 1043 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.ProgressBar UploadProgressBar;
#line default
#line hidden
#line 1060 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock UploadSpeedText;
#line default
#line hidden
#line 1066 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock UploadProgressText;
#line default
#line hidden
#line 1074 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.TextBlock UploadETAText;
#line default
#line hidden
#line 1091 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button UploadButton;
#line default
#line hidden
#line 1100 "..\..\..\..\MainWindow.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Button CancelButton;
#line default
#line hidden
private bool _contentLoaded;
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/PS5Upload;component/mainwindow.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\MainWindow.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.36.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
switch (connectionId)
{
case 1:
this.PS5ProfileComboBox = ((System.Windows.Controls.ComboBox)(target));
#line 121 "..\..\..\..\MainWindow.xaml"
this.PS5ProfileComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.PS5ProfileComboBox_SelectionChanged);
#line default
#line hidden
return;
case 2:
#line 194 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.SaveProfileButton_Click);
#line default
#line hidden
return;
case 3:
#line 199 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.DeleteProfileButton_Click);
#line default
#line hidden
return;
case 4:
this.IpAddressTextBox = ((System.Windows.Controls.TextBox)(target));
return;
case 5:
this.ConnectButton = ((System.Windows.Controls.Button)(target));
#line 227 "..\..\..\..\MainWindow.xaml"
this.ConnectButton.Click += new System.Windows.RoutedEventHandler(this.ConnectButton_Click);
#line default
#line hidden
return;
case 6:
this.LocalFilesListBox = ((System.Windows.Controls.ListBox)(target));
#line 270 "..\..\..\..\MainWindow.xaml"
this.LocalFilesListBox.Drop += new System.Windows.DragEventHandler(this.LocalFilesListBox_Drop);
#line default
#line hidden
#line 271 "..\..\..\..\MainWindow.xaml"
this.LocalFilesListBox.DragEnter += new System.Windows.DragEventHandler(this.LocalFilesListBox_DragEnter);
#line default
#line hidden
#line 272 "..\..\..\..\MainWindow.xaml"
this.LocalFilesListBox.MouseRightButtonUp += new System.Windows.Input.MouseButtonEventHandler(this.LocalFilesListBox_RightClick);
#line default
#line hidden
return;
case 7:
#line 286 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.RemoveLocalFile_Click);
#line default
#line hidden
return;
case 8:
#line 296 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.BrowseFilesButton_Click);
#line default
#line hidden
return;
case 9:
#line 299 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.BrowseFolderButton_Click);
#line default
#line hidden
return;
case 10:
#line 302 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ClearLocalFiles_Click);
#line default
#line hidden
return;
case 11:
this.CurrentPathTextBox = ((System.Windows.Controls.TextBox)(target));
return;
case 12:
#line 345 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.GoButton_Click);
#line default
#line hidden
return;
case 13:
this.FavoritesComboBox = ((System.Windows.Controls.ComboBox)(target));
#line 355 "..\..\..\..\MainWindow.xaml"
this.FavoritesComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.FavoritesComboBox_SelectionChanged);
#line default
#line hidden
return;
case 14:
#line 428 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.AddFavoriteButton_Click);
#line default
#line hidden
return;
case 15:
#line 433 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.RemoveFavoriteButton_Click);
#line default
#line hidden
return;
case 16:
this.SearchTextBox = ((System.Windows.Controls.TextBox)(target));
#line 445 "..\..\..\..\MainWindow.xaml"
this.SearchTextBox.TextChanged += new System.Windows.Controls.TextChangedEventHandler(this.SearchTextBox_TextChanged);
#line default
#line hidden
return;
case 17:
#line 450 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ClearSearchButton_Click);
#line default
#line hidden
return;
case 18:
this.PS5FilesListBox = ((System.Windows.Controls.ListBox)(target));
#line 461 "..\..\..\..\MainWindow.xaml"
this.PS5FilesListBox.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(this.PS5FilesListBox_MouseDoubleClick);
#line default
#line hidden
return;
case 19:
#line 464 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.NewFolderMenuItem_Click);
#line default
#line hidden
return;
case 20:
#line 466 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.DownloadMenuItem_Click);
#line default
#line hidden
return;
case 21:
#line 468 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.RenameMenuItem_Click);
#line default
#line hidden
return;
case 22:
#line 469 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.CopyMenuItem_Click);
#line default
#line hidden
return;
case 23:
#line 470 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.MoveMenuItem_Click);
#line default
#line hidden
return;
case 24:
#line 472 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.DeleteMenuItem_Click);
#line default
#line hidden
return;
case 25:
#line 473 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.DeleteSelectedMenuItem_Click);
#line default
#line hidden
return;
case 26:
this.LogTextBox = ((System.Windows.Controls.TextBox)(target));
return;
case 27:
#line 567 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.CopyLogButton_Click);
#line default
#line hidden
return;
case 28:
#line 571 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ClearLogButton_Click);
#line default
#line hidden
return;
case 29:
this.CompletedTransfersListBox = ((System.Windows.Controls.ListBox)(target));
return;
case 30:
this.FailedTransfersListBox = ((System.Windows.Controls.ListBox)(target));
#line 673 "..\..\..\..\MainWindow.xaml"
this.FailedTransfersListBox.MouseRightButtonUp += new System.Windows.Input.MouseButtonEventHandler(this.FailedTransfersListBox_RightClick);
#line default
#line hidden
return;
case 31:
#line 735 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.RetryFailedTransfers_Click);
#line default
#line hidden
return;
case 32:
#line 736 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.RemoveFailedTransfers_Click);
#line default
#line hidden
return;
case 33:
#line 752 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ExportHistoryButton_Click);
#line default
#line hidden
return;
case 34:
#line 756 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ClearHistoryButton_Click);
#line default
#line hidden
return;
case 35:
this.AutoClearHistoryCheckBox = ((System.Windows.Controls.CheckBox)(target));
#line 763 "..\..\..\..\MainWindow.xaml"
this.AutoClearHistoryCheckBox.Checked += new System.Windows.RoutedEventHandler(this.AutoClearHistoryCheckBox_Changed);
#line default
#line hidden
#line 764 "..\..\..\..\MainWindow.xaml"
this.AutoClearHistoryCheckBox.Unchecked += new System.Windows.RoutedEventHandler(this.AutoClearHistoryCheckBox_Changed);
#line default
#line hidden
return;
case 36:
this.ShellOutputItems = ((System.Windows.Controls.ItemsControl)(target));
return;
case 37:
this.ShellInputBox = ((System.Windows.Controls.TextBox)(target));
#line 807 "..\..\..\..\MainWindow.xaml"
this.ShellInputBox.KeyDown += new System.Windows.Input.KeyEventHandler(this.ShellInputBox_KeyDown);
#line default
#line hidden
return;
case 38:
#line 816 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ShellClearButton_Click);
#line default
#line hidden
return;
case 39:
#line 821 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ShellSaveLogButton_Click);
#line default
#line hidden
return;
case 40:
this.IndexStatusText = ((System.Windows.Controls.TextBlock)(target));
return;
case 41:
this.StartIndexButton = ((System.Windows.Controls.Button)(target));
#line 857 "..\..\..\..\MainWindow.xaml"
this.StartIndexButton.Click += new System.Windows.RoutedEventHandler(this.StartIndexButton_Click);
#line default
#line hidden
return;
case 42:
this.RefreshStatusButton = ((System.Windows.Controls.Button)(target));
#line 864 "..\..\..\..\MainWindow.xaml"
this.RefreshStatusButton.Click += new System.Windows.RoutedEventHandler(this.RefreshStatusButton_Click);
#line default
#line hidden
return;
case 43:
this.SearchQueryBox = ((System.Windows.Controls.TextBox)(target));
return;
case 44:
this.ClearSearchResultsButton = ((System.Windows.Controls.Button)(target));
#line 911 "..\..\..\..\MainWindow.xaml"
this.ClearSearchResultsButton.Click += new System.Windows.RoutedEventHandler(this.ClearSearchResultsButton_Click);
#line default
#line hidden
return;
case 45:
this.SearchResultsGrid = ((System.Windows.Controls.DataGrid)(target));
#line 936 "..\..\..\..\MainWindow.xaml"
this.SearchResultsGrid.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(this.SearchResultsGrid_MouseDoubleClick);
#line default
#line hidden
return;
case 46:
#line 956 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.SearchDownloadMenuItem_Click);
#line default
#line hidden
return;
case 47:
#line 957 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.SearchCopyPathMenuItem_Click);
#line default
#line hidden
return;
case 48:
#line 958 "..\..\..\..\MainWindow.xaml"
((System.Windows.Controls.MenuItem)(target)).Click += new System.Windows.RoutedEventHandler(this.SearchDeleteMenuItem_Click);
#line default
#line hidden
return;
case 49:
this.ProgressPanel = ((System.Windows.Controls.Border)(target));
return;
case 50:
this.FilesRemainingText = ((System.Windows.Controls.TextBlock)(target));
return;
case 51:
this.TotalProgressText = ((System.Windows.Controls.TextBlock)(target));
return;
case 52:
this.TotalProgressBar = ((System.Windows.Controls.ProgressBar)(target));
return;
case 53:
this.UploadFileNameText = ((System.Windows.Controls.TextBlock)(target));
return;
case 54:
this.UploadProgressBar = ((System.Windows.Controls.ProgressBar)(target));
return;
case 55:
this.UploadSpeedText = ((System.Windows.Controls.TextBlock)(target));
return;
case 56:
this.UploadProgressText = ((System.Windows.Controls.TextBlock)(target));
return;
case 57:
this.UploadETAText = ((System.Windows.Controls.TextBlock)(target));
return;
case 58:
this.UploadButton = ((System.Windows.Controls.Button)(target));
#line 1093 "..\..\..\..\MainWindow.xaml"
this.UploadButton.Click += new System.Windows.RoutedEventHandler(this.UploadButton_Click);
#line default
#line hidden
return;
case 59:
this.CancelButton = ((System.Windows.Controls.Button)(target));
#line 1102 "..\..\..\..\MainWindow.xaml"
this.CancelButton.Click += new System.Windows.RoutedEventHandler(this.CancelButton_Click);
#line default
#line hidden
return;
}
this._contentLoaded = true;
}
}
}
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = C:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\
@@ -1 +0,0 @@
9e15bc3b8f5dec1406ced88d2597b753d2297718
File diff suppressed because it is too large. Load diff
@@ -1 +0,0 @@
b81da7083821062a1db968b689d19a5671f4ec65
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = C:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Manos")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2026 Manos")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("High-Speed File Upload Tool for PS5")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyTitleAttribute("PS5Upload")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +0,0 @@
6d41212c32fea75f9ea12b2d7d7562562dbca13e
@@ -1,19 +0,0 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net6.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer =
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = PS5Upload
build_property.ProjectDir = c:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\test\client\
@@ -1,20 +0,0 @@
PS5Upload
winexe
C#
.cs
C:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\obj\Release\net6.0-windows\win-x64\
PS5Upload
none
false
TRACE;RELEASE;NET;NET6_0;NETCOREAPP
C:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\App.xaml
2318866541
9-1063357075
203155564505
DuplicateFileDialog.xaml;MainWindow.xaml;
False
@@ -1,4 +0,0 @@
C:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\obj\Release\net6.0-windows\win-x64\GeneratedInternalTypeHelper.g.cs
FC:\Users\HACKMAN\Desktop\ps5 test\my_projects\ps5_upload_suite\client\MainWindow.xaml;;
Loaded 100 of 7140 files, more files were not shown because too many files have changed in this diff. Show more