Compare commits

...
6 Commits
9 changed files with 376 additions and 97 deletions

No files matched your search

+47 -12
View File
@@ -1,6 +1,8 @@
# Publica una version: al subir una etiqueta vX.Y.Z crea la release de GitHub con dos .zip:
# - PS5Directo-X.Y.Z.zip la app (la que usa "Actualizar" dentro del programa)
# - PS5Directo-X.Y.Z-portable-windows.zip la app + Python incluido: descomprimir y abrir, sin instalar nada
# Publica una version: al subir una etiqueta vX.Y.Z (o con "Run workflow" en Actions) crea o rehace
# la release de GitHub con:
# - PS5Directo-X.Y.Z-Setup.exe el instalador: doble clic, «Instalar» y listo. Es la descarga normal.
# - PS5Directo-X.Y.Z-Windows.zip lo mismo sin instalar (con Python incluido). Tambien lo usa
# «Actualizar» dentro del programa, que solo copia los archivos.
name: Publicar version
on:
@@ -14,25 +16,26 @@ permissions:
jobs:
build:
runs-on: ubuntu-latest
outputs:
ver: ${{ steps.v.outputs.ver }}
steps:
- uses: actions/checkout@v4
- name: Version de app.py
id: v
run: echo "ver=$(grep -oP 'VERSION = "\K[^"]+' app.py)" >> "$GITHUB_OUTPUT"
run: echo "ver=$(grep -m1 -oP '^VERSION = "\K[^"]+' app.py)" >> "$GITHUB_OUTPUT"
- name: La etiqueta tiene que coincidir con la version
if: startsWith(github.ref, 'refs/tags/')
run: test "${GITHUB_REF_NAME#v}" = "${{ steps.v.outputs.ver }}"
- name: Paquete normal
- name: Archivos del programa
run: |
mkdir -p dist/PS5Directo
git archive HEAD | tar -x -C dist/PS5Directo
rm -rf dist/PS5Directo/.github
(cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}.zip" PS5Directo)
rm -rf dist/PS5Directo/.github dist/PS5Directo/installer
- name: Paquete portable (con Python para Windows)
- name: Python incluido
run: |
PY=3.12.10
curl -fsSL -o py.zip "https://www.python.org/ftp/python/$PY/python-$PY-embed-amd64.zip"
@@ -40,9 +43,41 @@ jobs:
unzip -q py.zip -d dist/PS5Directo/python
# que el Python incluido vea la carpeta del programa
for f in dist/PS5Directo/python/python*._pth; do printf '..\n' >> "$f"; done
(cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}-portable-windows.zip" PS5Directo)
- uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
- name: Zip para Windows
run: (cd dist && zip -qr "PS5Directo-${{ steps.v.outputs.ver }}-Windows.zip" PS5Directo)
- uses: actions/upload-artifact@v4
with:
files: dist/*.zip
name: dist
path: dist/
retention-days: 3
setup:
needs: build
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: dist
path: dist
- name: Instalador (Inno Setup)
shell: pwsh
run: |
$iscc = Join-Path ${env:ProgramFiles(x86)} 'Inno Setup 6\ISCC.exe'
if (-not (Test-Path $iscc)) { choco install innosetup -y --no-progress | Out-Null }
& $iscc /Q "/DMyVer=${{ needs.build.outputs.ver }}" installer\PS5Directo.iss
if ($LASTEXITCODE -ne 0) { exit 1 }
Get-ChildItem dist\*.exe, dist\*.zip | Format-Table Name, Length
# Con una etiqueta crea la release. Pulsando "Run workflow" en Actions añade (o rehace) los archivos
# de la release de la version que pone app.py, aunque ya exista.
- uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.build.outputs.ver }}
files: |
dist/PS5Directo-*-Setup.exe
dist/PS5Directo-*-Windows.zip
+29 -11
View File
@@ -10,8 +10,7 @@ Lo que necesitas antes:
Paso 1. Descarga
En la página de GitHub del programa, entra en "Releases" y descarga
PS5Directo-X.Y.Z-portable-windows.zip (trae todo, no hay que instalar
nada más). Descomprímelo en una carpeta, por ejemplo en Documentos.
PS5Directo-X.Y.Z-Windows.zip (trae todo, no hay que instalar nada más). Descomprímelo en una carpeta, por ejemplo en Documentos.
Paso 2. Ábrelo
Doble clic en "PS5 Directo.vbs". Se abre en su propia ventana y crea un
@@ -120,8 +119,7 @@ lo tiene y que sabes cargar payloads (.elf).
EN EL PC
- Windows 10 u 11.
- Python 3.9 o superior: https://www.python.org/downloads/
Al instalarlo marca "Add python.exe to PATH".
- Nada más: el instalador lo trae todo (también Python).
- 7-Zip (solo si usas "Descomprimir en el PC"): https://www.7-zip.org/
EN LA PS5 (se cargan como payloads, por ejemplo con Payload Manager:
@@ -155,9 +153,15 @@ BFpilot, sin PS5 Directo.
PRIMERA VEZ
-----------
Doble clic en "Crear accesos directos.bat". Crea:
- Un icono "PS5 Directo" en el escritorio.
Abre PS5Directo-X.Y.Z-Setup.exe y pulsa "Instalar". No pide permisos de
administrador. Crea:
- Un icono "PS5 Directo" en el escritorio y en el menú Inicio.
- "Enviar a > PS5 Directo" en el clic derecho de los archivos.
Si Windows dice "Windows protegió su PC": "Más información" > "Ejecutar
de todos modos" (el instalador no está firmado; es el aviso normal en
programas pequeños y gratuitos).
Con el .zip en vez del instalador: descomprímelo donde quieras y haz
doble clic en "Crear accesos directos.bat".
Desde entonces abre PS5 Directo con el icono del escritorio: sale en su
propia ventana, sin pestañas y sin ventana negra.
@@ -293,14 +297,28 @@ PAYLOADS, DIAGNÓSTICO, MÓVIL Y PROGRAMAR
suspende solo.
VERSIÓN PORTABLE
----------------
En cada versión hay dos descargas: PS5Directo-X.Y.Z.zip (necesita Python
instalado) y PS5Directo-X.Y.Z-portable-windows.zip, que trae Python dentro:
descomprimir y abrir, sin instalar nada.
QUÉ DESCARGAR
-------------
- PS5Directo-X.Y.Z-Setup.exe: el instalador. Es el que debes bajar. Lo
trae todo (también Python): ábrelo, pulsa "Instalar" y listo.
- PS5Directo-X.Y.Z-Windows.zip: lo mismo sin instalar, para quien
prefiera descomprimirlo en una carpeta. También lo usa "Actualizar".
Para quitarlo: Configuración de Windows > Aplicaciones > PS5 Directo >
Desinstalar. Tus ajustes se conservan por si vuelves a instalarlo.
NOVEDADES 1.20.4
- Icono propio en la barra de tareas: la ventana ya no se mete dentro del
icono de Edge o Chrome, y al anclarla se ancla PS5 Directo.
- Si ya está abierto y lo vuelves a abrir, trae al frente la ventana que
tenías en vez de abrir otra.
- Si lo anclaste antes de esta versión, desáncla el icono viejo y ancla
el nuevo (clic derecho en el icono de la barra > Anclar).
NOVEDADES 1.20.3
- Instalador para Windows (PS5Directo-1.20.3-Setup.exe): doble clic,
"Instalar" y listo, con todo incluido. Sigue habiendo .zip para quien
no quiera instalar.
- Biblioteca: «Comprobar» en cada aplicación, para cuando no abre o se
cierra al arrancar. Revisa la carpeta (ejecutable, param.json, permisos,
firmware, backports y el empaquetado LZ4), muestra los registros (.log) y
+23 -23
View File
@@ -1,23 +1,23 @@
' Abre PS5 Directo sin ventana negra (en su propia ventana de aplicacion).
' Puedes arrastrar archivos encima de este archivo o de su acceso directo.
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
sh.CurrentDirectory = dir
args = ""
For Each a In WScript.Arguments
args = args & " """ & a & """"
Next
py = ""
If fso.FileExists(dir & "\python\pythonw.exe") Then
py = """" & dir & "\python\pythonw.exe"""
ElseIf sh.Run("cmd /c where pyw >nul 2>nul", 0, True) = 0 Then
py = "pyw -3"
ElseIf sh.Run("cmd /c where pythonw >nul 2>nul", 0, True) = 0 Then
py = "pythonw"
End If
If py = "" Then
MsgBox "No encuentro Python. Descarga la version portable (trae Python) o instala Python 3 (marca 'Add to PATH').", 48, "PS5 Directo"
Else
sh.Run py & " """ & dir & "\app.py""" & args, 0, False
End If
' Abre PS5 Directo sin ventana negra (en su propia ventana de aplicacion).
' Puedes arrastrar archivos encima de este archivo o de su acceso directo.
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
sh.CurrentDirectory = dir
args = ""
For Each a In WScript.Arguments
args = args & " """ & a & """"
Next
py = ""
If fso.FileExists(dir & "\python\pythonw.exe") Then
py = """" & dir & "\python\pythonw.exe"""
ElseIf sh.Run("cmd /c where pyw >nul 2>nul", 0, True) = 0 Then
py = "pyw -3"
ElseIf sh.Run("cmd /c where pythonw >nul 2>nul", 0, True) = 0 Then
py = "pythonw"
End If
If py = "" Then
MsgBox "Faltan archivos de PS5 Directo (la carpeta python). Vuelve a instalarlo con PS5Directo-Setup.exe desde github.com/jstrdev/ps5directo/releases", 48, "PS5 Directo"
Else
sh.Run py & " """ & dir & "\app.py""" & args, 0, False
End If
+40 -39
View File
@@ -8,39 +8,30 @@ An all-in-one Windows tool for jailbroken PS5 consoles: it **downloads, converts
<sub>Demo with a sample homebrew app served from a NAS on the local network.</sub>
- ✅ Streams downloads straight to the console: nothing is saved on the PC
- ✅ Works from download links, ftp:// links (e.g. a NAS), torrents (magnet or .torrent) or files on your PC
- ✅ Joins split parts (.part1, .part2… / .001, .002…) and extracts RAR, 7z, ZIP and tar (.gz/.bz2/.xz)
- ✅ Extracts on the console (BFpilot) or on the PC (7-Zip, every file CRC-checked)
- ✅ Fixes the file permissions that stop BFpilot-extracted content from launching (CE-107750-0)
- ✅ Pause, resume and retry where it left off, even after a dropped connection
- ✅ Built-in console file browser (works over plain FTP, BFpilot optional): right-click menu, shortcuts, move/copy to…, extract archives on the console, drag & drop uploads, download to PC
- ✅ Notification bell: finished or failed transfers, disconnections and new versions
- ✅ Storage view: a pie chart of what fills the console, by app name and size, flagging duplicates and leftovers you can delete
- ✅ Send whole PC folders over several connections, skipping what's already there and resuming what got cut off
- ✅ Watches free space so the console never fills up
- ✅ Speed limit and built-in speed test
- ✅ Download-manager style downloads: several reused connections per file, auto-backoff when a host complains
- ✅ Optional browser extension: links arrive by themselves with your browser session (same speed and access as the browser)
- ✅ Drag and drop, or "Send to" from Explorer
- ✅ Welcome guide, one-click updates, English and Spanish
- ✅ **Library tab**: covers, versions and the firmware each app needs, flagging what won't launch on your console (backport-aware), duplicates and incomplete folders. Also shows what's installed (PS4 and PS5), your PC/NAS collection with what's missing on the console, and links to each title's public update list
- ✅ **Backup tab**: saved data, ShadowMountPlus/payload settings and the app database copied to the PC, manually or daily; restore saved data to the same console
- ✅ **Captures tab**: view the console's screenshots and videos and download them
- ✅ **Diagnosis** on failed transfers (cause, codes and fixes) and a one-click problem report (.zip, no passwords)
- ✅ **Format converter** with [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (optional): send it as is, or turn it on the PC into a plain folder, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` or `.fpkg`, with a "Which one?" guide by need. Archives with a normal version plus a backport are split automatically
- ✅ Shows your PS5 firmware at the top and tells you which formats and apps will work on it
- ✅ "Download again" from the queue or the history, without pasting the link
- ✅ Asks before sending something that's already on the console (send anyway, replace or cancel)
- ✅ Checks every part against its `.sfv` / `.md5` / `.sha1` while sending
- ✅ "Make room": suggests what to delete when space runs out
- ✅ Loads ftpsrv and BFpilot on the PS5 from the app (ELF loader, port 9021)
- ✅ "Why is it slow?" network diagnostics (Wi-Fi band and signal, 100 Mb/s cables, VPNs, ping)
- ✅ Open it from your phone with a QR code; schedule the queue and sleep or shut down the PC when it's done
### ⚡ One step instead of three tools
- ✅ **Download and send at once:** files go straight to the console while they download, nothing stored on your PC
- ✅ **Or convert on the fly** with [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (downloaded and updated automatically): folder, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` or `.fpkg`, with a "Which one?" guide by need
- ✅ **Any source:** download links, `ftp://` (e.g. a NAS), torrents (magnet or `.torrent`) or files and folders on your PC (drag and drop or "Send to")
- ✅ **Extracts and places:** joins split parts, extracts RAR, 7z, ZIP and tar on the console (BFpilot) or on the PC (7-Zip, CRC-checked), splits archives with a backport and places apps in `/data/homebrew` for ShadowMountPlus
- ✅ **Reliable:** pause, resume and retry where it left off, several connections per file, `.sfv`/`.md5` checks, free-space watch and permission fixes (CE-107750-0)
### 📚 Your console from your PC and phone
- ✅ **Library:** covers, versions and required firmware for everything on the console, including images and installed PS4/PS5 content; flags what won't launch on your firmware, duplicates and broken folders, and links to each title's public update list
- ✅ **On your PC:** point it at your PC/NAS folders, see what's missing on the console and send it with one click
- ✅ **Backup:** saved data, ShadowMountPlus/payload settings and the app database copied to the PC, manually or daily; restore saved data to the same console
- ✅ **Console files, Space and Captures:** file browser (copy, move, rename, upload, download), storage chart with "Make room", and the console's screenshots and videos
- ✅ **Phone and browser:** use it from your phone with a QR code, and send links from your browser with the optional extension
### 🩺 When something goes wrong
- ✅ **Diagnosis** on failed transfers: cause, error codes and how to fix it
- ✅ **Launch check:** if an app closes on launch, it checks the folder (executable, permissions, firmware, backports, LZ4 packing) and shows recent logs and captures
- ✅ **Problem report** in one click (.zip, no passwords) to share when asking for help
- ✅ **Warnings:** your PS5 firmware always visible, speed-drop alerts, "Why is it slow?" network check, and it loads ftpsrv/BFpilot from the app
- ✅ **Self-updating**, with a welcome window and a user guide, in English and Spanish
## Requirements
- **PC:** Windows 10/11. Get the `-portable-windows.zip` (Python included, nothing to install), or the plain `.zip` with [Python 3.9+](https://www.python.org/downloads/) installed (tick "Add python.exe to PATH"). For extracting on the PC, also install [7-Zip](https://www.7-zip.org/).
- **PC:** Windows 10/11. Nothing else to install: the download includes everything it needs. Optional: [7-Zip](https://www.7-zip.org/), only if you want to extract on the PC instead of on the console.
- **Jailbroken PS5:**
- An FTP server, for example [ftpsrv](https://github.com/ps5-payload-dev/ftpsrv) on port 2121.
- [BFpilot](https://github.com/ItsBlurf/BFpilot) on port 5905.
@@ -49,10 +40,13 @@ An all-in-one Windows tool for jailbroken PS5 consoles: it **downloads, converts
## Getting started
1. Download the `-portable-windows.zip` (or the plain `.zip` if you have Python) from the latest [release](../../releases) and extract it anywhere.
2. Run `Crear accesos directos.bat` ("create shortcuts"). It adds a desktop icon and a "Send to → PS5 Directo" entry.
3. Open **PS5 Directo** from the desktop. The language follows Windows; switch it with the **English / Español** button at the top.
4. Follow the welcome guide, enter your PS5's IP in Settings, then paste links or drop files.
1. Download **`PS5Directo-X.Y.Z-Setup.exe`** from the latest [release](../../releases), open it and click **Install**. No admin rights needed, nothing else to install.
2. Open **PS5 Directo** from the desktop or the Start menu. The language follows Windows; switch it with the **English / Español** button at the top.
3. Follow the welcome guide, enter your PS5's IP in Settings, then paste links or drop files.
> If Windows shows "Windows protected your PC", click **More info → Run anyway**. The installer isn't signed (signing costs money); it's the usual warning for small free programs.
>
> Rather not install? Download `PS5Directo-X.Y.Z-Windows.zip` instead, extract it anywhere and run `Crear accesos directos.bat`. Both update themselves the same way.
> **About BFpilot and permissions:** up to at least v0.4.4, BFpilot's archive extractor leaves files without the execute bit, so the PS5 refuses to launch them (CE-107750-0). This also happens when you extract from BFpilot's own web UI. PS5 Directo fixes it automatically after every extraction. For content you already have, use **Settings → Fix permissions**.
@@ -60,7 +54,7 @@ The full guide is in [README_EN.txt](README_EN.txt) (Spanish: [LEEME.txt](LEEME.
## Publishing a release
Bump `VERSION` in `app.py`, add the notes to `LEEME.txt` / `README_EN.txt`, then push a tag (`git tag v1.20.3 && git push --tags`). The GitHub Action builds both zips (plain and portable with Python) and creates the release.
Bump `VERSION` in `app.py`, add the notes to `LEEME.txt` / `README_EN.txt`, then push a tag (`git tag v1.20.3 && git push --tags`). The GitHub Action builds the installer `PS5Directo-X.Y.Z-Setup.exe` and `PS5Directo-X.Y.Z-Windows.zip` (both with Python included) and creates the release. The installer script is `installer/PS5Directo.iss` (Inno Setup).
## Disclaimer
@@ -79,12 +73,19 @@ Independent project, not affiliated with Sony or with the authors of the tools m
Herramienta todo en uno para Windows y PS5 con jailbreak: **descarga, convierte y envía** en un solo paso. Tal cual, los archivos van a la consola por FTP **mientras se descargan**, sin pasar por el disco del PC; o los **convierte sobre la marcha** (LZ4, `.exfat`, carpeta, `.ffpfsc`…) dentro del mismo trabajo, sin usar otro programa. Descomprime en la consola (BFpilot) o en el PC (7-Zip), coloca las aplicaciones en `/data/homebrew` para que ShadowMountPlus las muestre en el menú, y te deja ver la biblioteca de la consola con portadas y controlarlo todo desde el móvil.
**Novedades 1.20.3:** ventana de bienvenida, Biblioteca con lo instalado (PS4 y PS5) y con tu colección del PC/NAS, copias de seguridad de partidas y ajustes, capturas y vídeos, diagnóstico de errores con informe, torrents y avisos de actualización automáticos.
**Un programa en vez de tres:** descarga y envío a la vez sin ocupar el PC, o conversión sobre la marcha (carpeta, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs`, `.fpkg`) con [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge). Vale con enlaces, `ftp://`, torrents o archivos del PC; une partes, descomprime y lo deja colocado.
**Novedades 1.20:** pestaña Biblioteca con portadas y aviso de firmware, convertidor de formatos con [PS5 Dump Forge](https://github.com/quer3q/ps5-dump-forge) (carpeta, `.exfat`, LZ4, `.ffpfsc`, `.ffpkg`, `.ffpfs` y `.fpkg`), firmware de tu PS5 siempre a la vista, «Descargar de nuevo», pregunta si ya está en la consola, comprobación con `.sfv`/`.md5`, "Hacer sitio", cargar ftpsrv/BFpilot desde el programa, diagnóstico de red, acceso desde el móvil con QR y programar la cola.
**Tu consola desde el PC y el móvil:** Biblioteca con portadas, versión y firmware (también lo instalado de PS4 y PS5), vista «En tu PC» para enviar lo que falta, copias de seguridad de partidas y ajustes, explorador de archivos, espacio, capturas y modo móvil con QR.
**Requisitos:** Windows 10/11. Descarga el `-portable-windows.zip` (trae Python, no hay que instalar nada) o el `.zip` normal con [Python 3.9+](https://www.python.org/downloads/). Para descomprimir en el PC, [7-Zip](https://www.7-zip.org/). En la PS5: servidor FTP ([ftpsrv](https://github.com/ps5-payload-dev/ftpsrv)), [BFpilot](https://github.com/ItsBlurf/BFpilot) y [ShadowMountPlus](https://github.com/drakmor/ShadowMountPlus).
**Cuando algo falla:** diagnóstico de errores con causa y solución, «Comprobar» si algo se cierra al abrirlo, informe de fallo en un clic y avisos automáticos de versiones y de bajadas de velocidad.
**Uso:** descarga el `.zip` de la última [release](../../releases), ejecuta `Crear accesos directos.bat` y abre **PS5 Directo** desde el escritorio. La guía completa está en [LEEME.txt](LEEME.txt).
**Requisitos:** Windows 10/11, sin instalar nada más: la descarga lo trae todo. Opcional: [7-Zip](https://www.7-zip.org/), solo si quieres descomprimir en el PC en vez de en la consola. En la PS5: servidor FTP ([ftpsrv](https://github.com/ps5-payload-dev/ftpsrv)), [BFpilot](https://github.com/ItsBlurf/BFpilot) y [ShadowMountPlus](https://github.com/drakmor/ShadowMountPlus).
**Cómo instalarlo:**
1. Descarga **`PS5Directo-X.Y.Z-Setup.exe`** de la última [release](../../releases), ábrelo y pulsa **Instalar**. No pide permisos de administrador ni hay que instalar nada más.
2. Abre **PS5 Directo** desde el escritorio o el menú Inicio.
3. Sigue la ventana de bienvenida y pon la IP de tu PS5 en Ajustes.
Si Windows dice «Windows protegió su PC», pulsa **Más información → Ejecutar de todos modos** (el instalador no está firmado, que cuesta dinero; es el aviso normal en programas pequeños y gratuitos). ¿Prefieres no instalar? Descarga el `.zip`, descomprímelo y ejecuta `Crear accesos directos.bat`. La guía completa está en [LEEME.txt](LEEME.txt).
**Aviso:** proyecto independiente, sin relación con Sony ni con los autores de las herramientas citadas. No incluye contenido de terceros, claves ni archivos de Sony, ni enlaces a sitios de descargas. Úsalo solo con contenido que tengas derecho a usar (copias de seguridad propias y homebrew). No hace el jailbreak ni salta ninguna protección: solo copia archivos a una consola que ya has modificado tú. No se da ayuda para conseguir contenido sin licencia. Se ofrece tal cual, sin garantías, y lo que hagas con él es responsabilidad tuya.
+28 -9
View File
@@ -6,7 +6,7 @@ QUICK START (5 MINUTES)
You need: a PS5 that is already jailbroken (PS5 Directo doesn't do that)
and a Windows 10/11 PC on the same network.
1. Download PS5Directo-X.Y.Z-portable-windows.zip from the GitHub Releases
1. Download PS5Directo-X.Y.Z-Windows.zip from the GitHub Releases
page (nothing else to install) and extract it, e.g. into Documents.
2. Double-click "PS5 Directo.vbs". If Windows asks whether to open a file
downloaded from the internet, click "Open".
@@ -96,8 +96,7 @@ jailbroken and that you know how to load payloads (.elf).
ON THE PC
- Windows 10 or 11.
- Python 3.9 or newer: https://www.python.org/downloads/
When installing, tick "Add python.exe to PATH".
- Nothing else: the installer includes everything (Python too).
- 7-Zip (only for "Extract on the PC"): https://www.7-zip.org/
ON THE PS5 (loaded as payloads, for example with Payload Manager:
@@ -130,9 +129,15 @@ BFpilot's own web page, without PS5 Directo.
FIRST TIME
----------
Double-click "Crear accesos directos.bat" ("create shortcuts"). It adds:
- A "PS5 Directo" icon on the desktop.
Open PS5Directo-X.Y.Z-Setup.exe and click "Install". No admin rights
needed. It adds:
- A "PS5 Directo" icon on the desktop and in the Start menu.
- "Send to > PS5 Directo" in the right-click menu of your files.
If Windows says "Windows protected your PC": "More info" > "Run anyway"
(the installer isn't signed; it's the usual warning for small free
programs).
With the .zip instead of the installer: extract it anywhere and
double-click "Crear accesos directos.bat" ("create shortcuts").
From then on, open PS5 Directo from the desktop icon: it runs in its own
window, with no tabs and no black console window.
@@ -306,14 +311,28 @@ PAYLOADS, DIAGNOSTICS, PHONE AND SCHEDULE
- "Schedule" (queue): start at a set time and sleep or shut down the PC when
done. The PC doesn't go to sleep while transfers are running.
PORTABLE VERSION
WHAT TO DOWNLOAD
----------------
Each release has PS5Directo-X.Y.Z.zip (needs Python installed) and
PS5Directo-X.Y.Z-portable-windows.zip, which includes Python: extract and run.
- PS5Directo-X.Y.Z-Setup.exe: the installer. This is the one to get.
Everything included (Python too): open it, click "Install", done.
- PS5Directo-X.Y.Z-Windows.zip: the same without installing, if you'd
rather extract it to a folder. "Update" uses it too.
To remove it: Windows Settings > Apps > PS5 Directo > Uninstall. Your
settings are kept in case you install it again.
WHAT'S NEW
----------
1.20.3 - Library: "Check" on each app, for when it won't open or closes on
1.20.4 - Its own taskbar icon: the window no longer hides inside the Edge
or Chrome icon, and pinning it pins PS5 Directo.
- If it's already open and you open it again, it brings the existing
window to the front instead of opening another one.
- If you pinned it before this version, unpin the old icon and pin
the new one (right-click the taskbar icon > Pin).
1.20.3 - Windows installer (PS5Directo-1.20.3-Setup.exe): double-click,
"Install", done, everything included. The .zip is still there if
you'd rather not install.
- Library: "Check" on each app, for when it won't open or closes on
launch. It checks the folder (executable, param.json, permissions,
firmware, backports and LZ4 packing), shows logs (.log) and captures
from the last minutes, explains the error code shown on the TV and
+135 -3
View File
@@ -24,7 +24,7 @@ sys.path.insert(0, HERE)
import engine as E # noqa: E402
import features as F # noqa: E402
VERSION = "1.20.3"
VERSION = "1.20.4"
# Repositorio de GitHub donde se publican las versiones (usuario/nombre). Si lo rellenas,
# todas las copias buscan actualizaciones ahi sin tener que configurar nada.
DEFAULT_REPO = "jstrdev/ps5directo"
@@ -5634,7 +5634,10 @@ def github_latest(repo):
j = json.load(r)
url = None
zips = [a for a in j.get("assets") or [] if a.get("name", "").lower().endswith(".zip")]
zips.sort(key=lambda a: "portable" in a.get("name", "").lower())
# el mas ligero primero: "without-Python" (o el normal de antes); el que trae Python, el ultimo
zips.sort(key=lambda a: (0 if "without-python" in a.get("name", "").lower() else
2 if ("portable" in a.get("name", "").lower() or "-windows.zip" in a.get("name", "").lower())
else 1))
if zips:
url = zips[0].get("browser_download_url")
url = url or j.get("zipball_url")
@@ -6452,6 +6455,133 @@ def _find_app_browser():
return None
APP_USER_MODEL_ID = "PS5Directo.App"
_TITLE_RX = re.compile(r"^PS5 Directo( v[\d.]+)?$")
def _app_windows():
"""Ventanas de la interfaz (modo aplicacion de Edge/Chrome). En una pestaña normal del
navegador el titulo lleva " - Microsoft Edge" detras, asi que no se confunden."""
if os.name != "nt":
return []
import ctypes
from ctypes import wintypes
u32 = ctypes.windll.user32
found = []
proto = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM)
def cb(hwnd, _):
try:
if not u32.IsWindowVisible(hwnd):
return True
cls = ctypes.create_unicode_buffer(64)
u32.GetClassNameW(hwnd, cls, 64)
if cls.value != "Chrome_WidgetWin_1":
return True
buf = ctypes.create_unicode_buffer(256)
u32.GetWindowTextW(hwnd, buf, 256)
if _TITLE_RX.match(buf.value.strip()):
found.append(hwnd)
except Exception:
pass
return True
u32.EnumWindows(proto(cb), 0)
return found
def _set_window_identity(hwnd):
"""Le dice a Windows que esa ventana es "PS5 Directo" y no Edge: icono propio en la
barra de tareas, y al anclarla se ancla PS5 Directo (con su icono y su acceso)."""
import ctypes
import uuid
from ctypes import wintypes
class GUID(ctypes.Structure):
_fields_ = [("d1", ctypes.c_ulong), ("d2", ctypes.c_ushort), ("d3", ctypes.c_ushort),
("d4", ctypes.c_ubyte * 8)]
def guid(s):
b = uuid.UUID(s).bytes_le
g = GUID()
ctypes.memmove(ctypes.byref(g), b, 16)
return g
class PROPERTYKEY(ctypes.Structure):
_fields_ = [("fmtid", GUID), ("pid", ctypes.c_ulong)]
class PROPVARIANT(ctypes.Structure):
_fields_ = [("vt", ctypes.c_ushort), ("r1", ctypes.c_ushort), ("r2", ctypes.c_ushort),
("r3", ctypes.c_ushort), ("p", ctypes.c_void_p), ("p2", ctypes.c_void_p)]
fmt = "9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3" # PKEY_AppUserModel_*
vbs = os.path.join(HERE, "PS5 Directo.vbs")
wscript = os.path.join(os.environ.get("WINDIR", r"C:\Windows"), "System32", "wscript.exe")
props = []
if os.path.isfile(vbs):
props += [(2, '"%s" "%s"' % (wscript, vbs)), # RelaunchCommand
(3, os.path.join(HERE, "web", "ps5directo.ico")), # RelaunchIconResource
(4, "PS5 Directo")] # RelaunchDisplayName
props.append((5, APP_USER_MODEL_ID)) # ID (el ultimo)
shell32 = ctypes.windll.shell32
shell32.SHGetPropertyStoreForWindow.argtypes = [wintypes.HWND, ctypes.POINTER(GUID),
ctypes.POINTER(ctypes.c_void_p)]
store = ctypes.c_void_p()
iid = guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99") # IPropertyStore
if shell32.SHGetPropertyStoreForWindow(hwnd, ctypes.byref(iid), ctypes.byref(store)) != 0 or not store:
return False
vtbl = ctypes.cast(store, ctypes.POINTER(ctypes.POINTER(ctypes.c_void_p)))[0]
set_value = ctypes.WINFUNCTYPE(ctypes.c_long, ctypes.c_void_p, ctypes.POINTER(PROPERTYKEY),
ctypes.POINTER(PROPVARIANT))(vtbl[6])
commit = ctypes.WINFUNCTYPE(ctypes.c_long, ctypes.c_void_p)(vtbl[7])
release = ctypes.WINFUNCTYPE(ctypes.c_ulong, ctypes.c_void_p)(vtbl[2])
ok = True
try:
for pid, text in props:
key = PROPERTYKEY(guid(fmt), pid)
s = ctypes.create_unicode_buffer(text)
pv = PROPVARIANT()
pv.vt = 31 # VT_LPWSTR (SetValue hace su propia copia)
pv.p = ctypes.cast(s, ctypes.c_void_p).value
ok = set_value(store, ctypes.byref(key), ctypes.byref(pv)) == 0 and ok
commit(store)
finally:
release(store)
return ok
def taskbar_watch():
"""Pone la identidad de PS5 Directo a cada ventana nueva de la interfaz."""
done = set()
while True:
try:
for h in _app_windows():
if h not in done:
if _set_window_identity(h):
done.add(h)
except Exception as e:
print("Barra de tareas:", e)
return
time.sleep(2)
def focus_window():
"""Si la ventana ya esta abierta, la trae al frente (en vez de abrir otra). True si habia."""
try:
import ctypes
u32 = ctypes.windll.user32
wins = _app_windows()
if not wins:
return False
h = wins[0]
if u32.IsIconic(h):
u32.ShowWindow(h, 9) # SW_RESTORE
u32.SetForegroundWindow(h)
return True
except Exception:
return False
def open_window(url):
"""Abre la interfaz como ventana de aplicacion. Devuelve el proceso o None."""
exe = _find_app_browser()
@@ -6590,7 +6720,7 @@ def main():
if paths:
forward_to_running(ses, paths)
print("Anadido a la cola de PS5 Directo (ya estaba abierto)")
else:
elif "--browser" in sys.argv or not focus_window():
open_window(ses[0] + "/#t=" + ses[1]) # ya funcionaba: solo enseno la ventana
sys.exit(3)
load_state()
@@ -6622,6 +6752,8 @@ def main():
if "--no-browser" not in sys.argv:
threading.Timer(0.5, lambda: open_window(url)).start()
threading.Thread(target=watch_ui, daemon=True).start()
if os.name == "nt":
threading.Thread(target=taskbar_watch, daemon=True).start()
try:
srv.serve_forever()
except KeyboardInterrupt:
+74
View File
@@ -0,0 +1,74 @@
; Instalador de PS5 Directo (Inno Setup 6). Lo compila GitHub Actions en cada version:
; ISCC /DMyVer=X.Y.Z installer\PS5Directo.iss
; Espera la carpeta del programa ya montada (con Python incluido) en dist\PS5Directo
; y deja dist\PS5Directo-X.Y.Z-Setup.exe.
; Se instala para el usuario actual (sin pedir permisos de administrador), en
; %LOCALAPPDATA%\Programs\PS5 Directo, para que «Actualizar» pueda escribir en la carpeta.
#ifndef MyVer
#define MyVer "0.0.0"
#endif
#ifndef SrcDir
#define SrcDir "..\dist\PS5Directo"
#endif
[Setup]
AppId={{BD789BF5-0254-4A4C-92CB-332BB22CEE42}
AppName=PS5 Directo
AppVersion={#MyVer}
AppVerName=PS5 Directo {#MyVer}
AppPublisher=PS5 Directo
AppPublisherURL=https://github.com/jstrdev/ps5directo
AppSupportURL=https://github.com/jstrdev/ps5directo/issues
AppUpdatesURL=https://github.com/jstrdev/ps5directo/releases
DefaultDirName={localappdata}\Programs\PS5 Directo
DefaultGroupName=PS5 Directo
DisableProgramGroupPage=yes
DisableReadyPage=no
DisableDirPage=yes
UsePreviousAppDir=yes
PrivilegesRequired=lowest
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
MinVersion=10.0
OutputDir=..\dist
OutputBaseFilename=PS5Directo-{#MyVer}-Setup
SetupIconFile={#SrcDir}\web\ps5directo.ico
WizardSmallImageFile=small.bmp,small2x.bmp
UninstallDisplayIcon={app}\web\ps5directo.ico
UninstallDisplayName=PS5 Directo
Compression=lzma2/max
SolidCompression=yes
WizardStyle=modern
CloseApplications=yes
RestartApplications=no
ShowLanguageDialog=no
LanguageDetectionMethod=uilanguage
[Languages]
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "{#SrcDir}\*"; DestDir: "{app}"; Excludes: "Crear accesos directos.bat,__pycache__"; Flags: ignoreversion recursesubdirs createallsubdirs
[InstallDelete]
; restos de una version anterior que ya no se usan
Type: files; Name: "{app}\Crear accesos directos.bat"
[Icons]
Name: "{autoprograms}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
Name: "{autodesktop}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
Name: "{usersendto}\PS5 Directo"; Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; IconFilename: "{app}\web\ps5directo.ico"; Comment: "PS5 Directo"; AppUserModelID: "PS5Directo.App"
[Run]
Filename: "{sys}\wscript.exe"; Parameters: """{app}\PS5 Directo.vbs"""; WorkingDir: "{app}"; Description: "{cm:LaunchProgram,PS5 Directo}"; Flags: postinstall nowait skipifsilent
[UninstallRun]
; cierra PS5 Directo si sigue abierto, para poder borrar sus archivos
Filename: "{sys}\WindowsPowerShell\v1.0\powershell.exe"; Parameters: "-NoProfile -ExecutionPolicy Bypass -Command ""Get-Process python,pythonw -ErrorAction SilentlyContinue | Where-Object {{ $_.Path -like '{app}\*' } | Stop-Process -Force"""; Flags: runhidden; RunOnceId: "CerrarPS5Directo"
[UninstallDelete]
; tambien lo que añadio «Actualizar» despues de instalar. Los ajustes del usuario
; (carpeta .ps5directo) no se tocan.
Type: filesandordirs; Name: "{app}"
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB