From c8a046685458e3ad77bbb4c3132bb572de28dc29 Mon Sep 17 00:00:00 2001 From: JesterDev <105895386+jstrdev@users.noreply.github.com> Date: Fri, 16 Oct 2026 19:11:15 +0200 Subject: [PATCH] Version 1.18.1 --- LEEME.txt | 4 + README_EN.txt | 2 + app.py | 5 +- bg.js | 15 +++- index.html | 233 +++++++++++++++++++++++++++++++++++++++++++++++--- manifest.json | 37 ++++++-- 6 files changed, 276 insertions(+), 20 deletions(-) diff --git a/LEEME.txt b/LEEME.txt index 56bc770..deb2600 100644 --- a/LEEME.txt +++ b/LEEME.txt @@ -168,6 +168,10 @@ de quien es la culpa cuando va lento. Tambien hay uno solo PC -> PS5 en Ajustes. +NOVEDADES 1.18.1 +- Al borrar algo grande se ve cuánto se ha liberado y el tiempo que lleva, y el + espacio libre del explorador se actualiza mientras tanto. + NOVEDADES 1.18 - Pestaña "Espacio": gráfico de quesitos y lista de todo lo que ocupa sitio en la consola, con el nombre de cada juego y su tamaño. Marca juegos repetidos diff --git a/README_EN.txt b/README_EN.txt index 99ce1f1..eb8cf5e 100644 --- a/README_EN.txt +++ b/README_EN.txt @@ -220,6 +220,8 @@ Settings and queue are stored in %USERPROFILE%\.ps5directo WHAT'S NEW ---------- +1.18.1 - When deleting something big you see how much has been freed and how + long it has taken, and the browser's free space updates meanwhile. 1.18 - "Space" tab: a pie chart and list of everything that takes up space on the console, by game name and size. It flags repeated games (for example a folder and its converted version), half-sent transfers and diff --git a/app.py b/app.py index 439d537..cabc7e7 100644 --- a/app.py +++ b/app.py @@ -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.18.0" +VERSION = "1.18.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" @@ -998,6 +998,9 @@ def fm_api(p, b): if p == "/api/space/cancel": SPACE_CANCEL.set() return {} + if p == "/api/fm/stat": + st = E.BFpilot(cfg_snapshot())._req("GET", "/api/fs/stat", {"path": fm_clean(b.get("path") or "/data")}, timeout=8) + return {"free": st.get("availableBytes"), "total": st.get("usableTotalBytes") or st.get("totalBytes")} if p == "/api/fm/list": return fm_list(b.get("path") or "/data") if p == "/api/fm/du": diff --git a/bg.js b/bg.js index 045c53b..66b6e7e 100644 --- a/bg.js +++ b/bg.js @@ -44,11 +44,24 @@ async function handle(item) { chrome.action.setBadgeText({ text: "off" }); return; } + // Como los gestores de descargas: pasamos las cookies de ese alojamiento (sesion, cuenta + // premium), el navegador y la pagina de origen, para que el servidor nos trate igual. + // Solo van a PS5 Directo en este PC (127.0.0.1), a ningun otro sitio. + const cookies = {}; + for (const u of [url, item.url]) { + try { + const host = new URL(u).host.toLowerCase(); + if (host in cookies) continue; + const list = await chrome.cookies.getAll({ url: u }); + cookies[host] = list.map(c => `${c.name}=${c.value}`).join("; "); + } catch (e) { /* sin permiso o enlace raro: sin cookies */ } + } try { const r = await fetch(`http://127.0.0.1:${app.port}/api/ext/capture`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ url, original: item.url, name }) + body: JSON.stringify({ url, original: item.url, name, cookies, + ua: navigator.userAgent, referrer: item.referrer || "" }) }); if (!r.ok) return; } catch (e) { return; } diff --git a/index.html b/index.html index 8aaf489..a36d814 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@ header .sub{color:var(--muted);font-size:13px} .pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);font-size:12.5px;color:var(--muted);white-space:nowrap} .dot{width:8px;height:8px;border-radius:50%;background:var(--muted)} .dot.ok{background:var(--ok)}.dot.err{background:var(--err)}.dot.warn{background:var(--warn)} -main{max-width:1060px;margin:0 auto;padding:22px 20px 60px;display:grid;gap:18px} +main{max-width:1060px;margin:0 auto;padding:22px 20px 60px;display:grid;grid-template-columns:minmax(0,1fr);gap:18px} .card{background:rgba(22,27,34,.86);backdrop-filter:blur(3px);border:1px solid var(--line);border-radius:var(--radius);padding:18px} .card h2{font-size:15px;margin:0 0 12px;font-weight:600} textarea,input,select{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:9px 11px;font:inherit} @@ -69,6 +69,8 @@ dialog .body{padding:4px 18px 18px;max-height:70vh;overflow:auto} .tabs button{background:transparent;border:1px solid transparent;border-radius:9px;padding:8px 14px;color:var(--muted);font-weight:600} .tabs button:hover{color:var(--text);border-color:var(--line)} .tabs button.on{color:var(--text);background:var(--panel2);border-color:var(--line)} +.tabs{overflow-x:auto;scrollbar-width:none}.tabs button{flex:none} +@media(max-width:600px){.tabs{padding:0 12px;gap:2px}.tabs button{padding:7px 9px;font-size:13.5px}} .pickrow{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px} /* --- explorador --- */ .fm-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap} @@ -76,6 +78,7 @@ dialog .body{padding:4px 18px 18px;max-height:70vh;overflow:auto} .store{min-width:220px;text-align:right;font-size:13px;color:var(--muted)} .store b{color:var(--text)} .store .bar{margin-top:6px;height:6px} +@media(max-width:600px){.store{min-width:0;flex:1 1 100%;text-align:left}#tabFiles .fmtable{display:block;overflow-x:auto}} .fm-bar{display:flex;gap:6px;align-items:center;margin-top:14px;flex-wrap:wrap} .fm-bar input,.fm-bar select{width:auto} .fm-bar #fmPath{flex:1;min-width:220px;font-family:Consolas,"Cascadia Mono",monospace;font-size:13px} @@ -102,6 +105,37 @@ dialog .body{padding:4px 18px 18px;max-height:70vh;overflow:auto} .rowact{display:flex;gap:4px;justify-content:flex-end;opacity:.5} tr:hover .rowact{opacity:1} .rowact button{padding:3px 8px;font-size:12px} +.news-v{margin:14px 0 6px;font-size:14px;color:var(--accent)} +.news-list{margin:0;padding-left:20px;line-height:1.5}.news-list li{margin:6px 0} +.sp-grid{display:grid;grid-template-columns:280px 1fr;gap:22px;align-items:center;margin-top:14px} +@media(max-width:760px){.sp-grid{grid-template-columns:1fr}.sp-donut{margin:0 auto}} +.sp-donut{position:relative;width:280px;height:280px} +.sp-donut svg{display:block} +.sp-donut path{cursor:pointer;transition:opacity .15s} +.sp-donut.hl path:not(.on){opacity:.35} +.sp-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;pointer-events:none;padding:0 70px} +.sp-center b{font-size:22px}.sp-center span{color:var(--muted);font-size:12.5px} +.sp-legend{display:flex;flex-direction:column;gap:5px;font-size:13.5px} +.sp-legend .row{display:flex;align-items:center;gap:9px;padding:4px 6px;border-radius:7px;cursor:pointer} +.sp-legend .row:hover,.sp-legend .row.on{background:rgba(255,255,255,.05)} +.sp-legend .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.sp-legend .sz{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums} +.sw{width:12px;height:12px;border-radius:3px;flex:none;display:inline-block} +.sw.free{background:transparent;border:1.5px dashed #5b6573} +.sp-note{font-size:12px;color:var(--muted);margin-top:2px} +.sp-note.dup,.sp-note.bad{color:var(--warn)} +.sp-pct{height:5px;background:var(--bg);border-radius:4px;overflow:hidden;margin-top:4px;max-width:180px} +.sp-pct>i{display:block;height:100%;border-radius:4px} +.sp-tip{position:fixed;z-index:50;pointer-events:none;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:12.5px;box-shadow:0 6px 20px rgba(0,0,0,.4);max-width:320px} +.sp-tools{display:flex;gap:8px;flex-wrap:wrap;align-items:center} +.sp-tools select{width:auto} +#spBody .mono{word-break:break-all} +.sp-grid>*{min-width:0} +#spListCard table{table-layout:fixed} +#spListCard th:nth-child(1){width:28px}#spListCard th:nth-child(3){width:90px}#spListCard th:nth-child(4){width:150px} +@media(max-width:600px){#spListCard th:nth-child(4){width:76px}#spListCard th:nth-child(3){width:72px}} +#spBody td{overflow-wrap:anywhere} +@media(max-width:600px){#spBody td:last-child button{display:block;width:100%;margin:3px 0}#spBody td:last-child{white-space:normal}} .acttable{width:100%;border-collapse:collapse;font-size:13.5px;margin-top:10px} .acttable th{color:var(--muted);font-weight:600;font-size:12px;text-align:left;padding:8px;border-bottom:1px solid var(--line)} .acttable td{padding:8px;border-bottom:1px solid rgba(42,50,61,.6);vertical-align:top} @@ -151,6 +185,7 @@ tr:hover .rowact{opacity:1} @@ -245,6 +280,24 @@ tr:hover .rowact{opacity:1} +
+
+

Espacio

+
+
+

Mira qué ocupa sitio en la consola, con nombres y tamaños, para decidir qué borrar. Avisa de juegos repetidos (por ejemplo la carpeta y su versión convertida), envíos a medias y restos. Necesita BFpilot.

+ +
+
+ +
+

Actividad

@@ -254,6 +307,12 @@ tr:hover .rowact{opacity:1}
+ +

Novedades

+
+
+
+

Test de velocidad

@@ -344,8 +403,8 @@ tr:hover .rowact{opacity:1}