Compare commits

..
2 Commits
Author SHA1 Message Date
JesterDev 088c46f548 Version 1.19.1 2026-10-24 18:25:06 +02:00
JesterDev b65a3b34dd Delete index.html 2026-10-24 18:21:55 +02:00
5 changed files with 55 additions and 5 deletions

No files matched your search

+12 -2
View File
@@ -1,5 +1,5 @@
PS5 DIRECTO 1.19
================
PS5 DIRECTO 1.19.1
==================
(English: see README_EN.txt)
Pega los enlaces (o arrastra archivos de tu PC) y la herramienta hace todo sola:
@@ -175,6 +175,16 @@ de quien es la culpa cuando va lento. Tambien hay uno solo PC -> PS5 en
Ajustes.
NOVEDADES 1.19.1
- Arreglado: la cola dejaba de actualizarse sola (desde la 1.18.3), así que
"Quitar" parecía no hacer nada y luego decía "no existe".
- El explorador vuelve a listar la carpeta abierta cuando termina una subida
a esa carpeta.
- Arreglado "Descargar al PC" con juegos: ftpsrv descifraba al vuelo los
eboot.bin/.prx/.sprx y la descarga salía incompleta. Ahora se transfieren
tal cual están (también mejora comparar tamaños al reanudar carpetas).
Gracias a RichyMX por encontrarlo y proponer el arreglo.
NOVEDADES 1.19
- Explorador de archivos renovado: menú de clic derecho, atajos de teclado,
ruta por tramos, unidades y accesos a la izquierda, "Mover a…" / "Copiar
+8 -1
View File
@@ -1,4 +1,4 @@
PS5 DIRECTO 1.19 — USER GUIDE (English)
PS5 DIRECTO 1.19.1 — USER GUIDE (English)
=========================================
Paste links (or drag files from your PC) and the tool does the rest:
@@ -227,6 +227,13 @@ Settings and queue are stored in %USERPROFILE%\.ps5directo
WHAT'S NEW
----------
1.19.1 - Fixed: the queue stopped updating by itself (since 1.18.3), so
"Remove" seemed to do nothing and then said "no existe". The file
browser now relists the open folder when an upload to it finishes.
Fixed "Download to PC" for games: ftpsrv decrypted eboot.bin/.prx/
.sprx on the fly, so downloads came out incomplete. Files are now
transferred exactly as stored (this also makes size comparisons
when resuming folders correct). Thanks to RichyMX for finding it.
1.19 - Renewed file browser: right-click menu, keyboard shortcuts,
clickable path, drives and places on the left, "Move to…" / "Copy
to…" with recent destinations, a choice when pasting over existing
+1 -1
View File
@@ -22,7 +22,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
import engine as E # noqa: E402
VERSION = "1.19.0"
VERSION = "1.19.1"
# 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"
+16
View File
@@ -967,6 +967,21 @@ def clean_host(text):
return t.strip(".").strip("[]"), port
def raw_mode(f):
"""ftpsrv (ps5-payload-dev) descifra al vuelo los SELF (eboot.bin, .prx, .sprx): al bajarlos
llega el ELF de dentro, con otro tamano, y los listados tambien dan ese tamano. Su comando
SELF lo activa/desactiva en cada conexion: lo dejamos apagado para ver los archivos tal
cual estan. Los servidores que no lo conocen responden con error y no pasa nada.
(Gracias a RichyMX por encontrarlo.)"""
try:
r = f.sendcmd("SELF")
if "enabled" in r.lower():
r = f.sendcmd("SELF")
return "disabled" in r.lower()
except ftplib.all_errors:
return False
class Ftp:
def __init__(self, cfg):
self.host = clean_host(cfg["ps5_ip"])[0]
@@ -987,6 +1002,7 @@ class Ftp:
f.login(self.user, self.pw)
f.set_pasv(True)
f.voidcmd("TYPE I")
raw_mode(f)
try:
f.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
except Exception:
+18 -1
View File
@@ -739,7 +739,24 @@ let refreshFails=0, refreshing=false;
async function refresh(){
if(refreshing) return; refreshing=true;
try{const s=await api('/api/state');refreshFails=0;state=s;paintBell(s.unread||0);if(s.version){$('ver').textContent='v'+s.version;document.title='PS5 Directo v'+s.version}if(s.inbox>0)takeInbox();if(!$('dest').dataset.touched)$('dest').value=s.settings.dest||'/data/homebrew';if(!$('where').dataset.touched)$('where').value=s.settings.extract_where==='pc'?'pc':'ps5';render()}
catch(e){ if(++refreshFails<5) return; $('jobs').innerHTML=`<div class="empty">No conecto con el programa. Cierra esta ventana y abre PS5 Directo otra vez. (${esc(e.message)})</div>`}
catch(e){ if(++refreshFails>=5) $('jobs').innerHTML=`<div class="empty">No conecto con el programa. Cierra esta ventana y abre PS5 Directo otra vez. (${esc(e.message)})</div>`}
finally{ refreshing=false }
fmAfterUploads();
}
// Cuando termina una subida a la carpeta que tienes abierta en el explorador, se vuelve a listar sola
const fmDoneSeen=new Set(); let fmDoneInit=false;
function fmAfterUploads(){
if(!state||!state.jobs) return;
let hit=false;
for(const j of state.jobs){
if(j.status!=='hecho'||fmDoneSeen.has(j.id)) continue;
fmDoneSeen.add(j.id);
if(!fmDoneInit) continue;
const d=(j.dest||'').replace(/\/+$/,'');
if(typeof fm!=='undefined'&&fm.loaded&&(d===fm.path||(j.result||[]).some(r=>parentOf(r)===fm.path))) hit=true;
}
fmDoneInit=true;
if(hit&&curTab==='Files'&&!fm.busy) fmGo(fm.path,true);
}
$('dest').addEventListener('input',()=>$('dest').dataset.touched='1');
$('where').addEventListener('change',()=>$('where').dataset.touched='1');