From b4e0a3419393fdc5a474e9418ff169749d7824d0 Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 19 Jan 2024 21:41:56 +0000 Subject: [PATCH] ensure windows-safe filenames during batch rename also handle ctrl-click in the navpane float --- copyparty/web/browser.js | 33 ++++++++++++++++++++++++++++++++- copyparty/web/util.js | 19 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 3934ca1c..28cf5fa3 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -299,6 +299,8 @@ var Ls = { "frb_apply": "APPLY RENAME", "fr_adv": "batch / metadata / pattern renaming\">advanced", "fr_case": "case-sensitive regex\">case", + "fr_win": "windows-safe names; replace <>:"\\|?* with japanese fullwidth characters\">win", + "fr_slash": "replace / with a character that doesn't cause new folders to be created\">no /", "fr_pdel": "delete", "fr_pnew": "save as", "fr_pname": "provide a name for your new preset", @@ -308,6 +310,7 @@ var Ls = { "fr_tags": "tags for the selected files (read-only, just for reference):", "fr_busy": "renaming {0} items...\n\n{1}", "fr_efail": "rename failed:\n", + "fr_nchg": "{0} of the new names were altered due to win and/or ikke /\n\nOK to continue with these altered new names?", "fd_ok": "delete OK", "fd_err": "delete failed:\n", @@ -783,6 +786,8 @@ var Ls = { "frb_apply": "IVERKSETT", "fr_adv": "automasjon basert på metadata
og / eller mønster (regulære uttrykk)\">avansert", "fr_case": "versalfølsomme uttrykk\">Aa", + "fr_win": "bytt ut bokstavene <>:"\\|?* med$Ntilsvarende som windows ikke får panikk av\">win", + "fr_slash": "bytt ut bokstaven / slik at den ikke forårsaker at nye mapper opprettes\">ikke /", "fr_pdel": "slett", "fr_pnew": "lagre som", "fr_pname": "gi innstillingene dine et navn", @@ -792,6 +797,7 @@ var Ls = { "fr_tags": "metadata for de valgte filene (kun for referanse):", "fr_busy": "endrer navn på {0} filer...\n\n{1}", "fr_efail": "endring av navn feilet:\n", + "fr_nchg": "{0} av navnene ble justert pga. win og/eller ikke /\n\nvil du fortsette med de nye navnene som ble valgt?", "fd_ok": "sletting OK", "fd_err": "sletting feilet:\n", @@ -3645,6 +3651,8 @@ var fileman = (function () { '', '', '', @@ -3718,6 +3726,8 @@ var fileman = (function () { } bcfg_bind(r, 'adv', 'rn_adv', false, sadv); bcfg_bind(r, 'cs', 'rn_case', false); + bcfg_bind(r, 'win', 'rn_win', true); + bcfg_bind(r, 'slash', 'rn_slash', true); sadv(); function rn_ok(n, ok) { @@ -3835,6 +3845,24 @@ var fileman = (function () { function rn_apply(e) { ev(e); + if (r.win || r.slash) { + var changed = 0; + for (var a = 0; a < f.length; a++) { + var ov = f[a].inew.value, + nv = namesan(ov, r.win, r.slash); + + if (ov != nv) { + f[a].inew.value = nv; + changed++; + } + } + if (changed) + return modal.confirm(L.fr_nchg.format(changed), rn_apply_loop, null); + } + rn_apply_loop(); + } + + function rn_apply_loop() { while (f.length && (!f[0].ok || f[0].ofn == f[0].inew.value)) f.shift(); @@ -3855,7 +3883,7 @@ var fileman = (function () { } f.shift().inew.value = '( OK )'; - return rn_apply(); + return rn_apply_loop(); } var xhr = new XHR(); @@ -5922,6 +5950,9 @@ var treectl = (function () { } function bad_proxy(e) { + if (ctrl(e)) + return true; + ev(e); var dst = this.getAttribute('dst'), k = dst ? 'dst' : 'href', diff --git a/copyparty/web/util.js b/copyparty/web/util.js index d7fbc53b..ca7c0840 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -420,6 +420,25 @@ function unsmart(txt) { } +function namesan(txt, win, fslash) { + if (win) + txt = (txt. + replace(//g, ">"). + replace(/:/g, ":"). + replace(/"/g, """). + replace(/\\/g, "\"). + replace(/\|/g, "|"). + replace(/\?/g, "?"). + replace(/\*/g, "*")); + + if (fslash) + txt = txt.replace(/\//g, "/"); + + return txt; +} + + var crctab = (function () { var c, tab = []; for (var n = 0; n < 256; n++) {
regex