diff --git a/copyparty/__main__.py b/copyparty/__main__.py index fd25c7b8..e69c8d14 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1550,6 +1550,7 @@ def add_ui(ap, retry): ap2.add_argument("--nsort", action="store_true", help="default-enable natural sort of filenames with leading numbers (volflag=nsort)") ap2.add_argument("--hsortn", metavar="N", type=int, default=2, help="number of sorting rules to include in media URLs by default (volflag=hsortn)") ap2.add_argument("--see-dots", action="store_true", help="default-enable seeing dotfiles; only takes effect if user has the necessary permissions") + ap2.add_argument("--qdel", metavar="LVL", type=int, default=2, help="number of confirmations to show when deleting files (2/1/0)") ap2.add_argument("--unlist", metavar="REGEX", type=u, default="", help="don't show files matching \033[33mREGEX\033[0m in file list. Purely cosmetic! Does not affect API calls, just the browser. Example: [\033[32m\\.(js|css)$\033[0m] (volflag=unlist)") ap2.add_argument("--favico", metavar="TXT", type=u, default="c 000 none" if retry else "🎉 000 none", help="\033[33mfavicon-text\033[0m [ \033[33mforeground\033[0m [ \033[33mbackground\033[0m ] ], set blank to disable") ap2.add_argument("--ext-th", metavar="E=VP", type=u, action="append", help="use thumbnail-image \033[33mVP\033[0m for file-extension \033[33mE\033[0m, example: [\033[32mexe=/.res/exe.png\033[0m] (volflag=ext_th)") diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py index a1d49bcf..c0f89b1d 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -2670,6 +2670,7 @@ class AuthSrv(object): "def_hcols": list(vf.get("mth") or []), "unlist0": vf.get("unlist") or "", "see_dots": self.args.see_dots, + "dqdel": self.args.qdel, "dgrid": "grid" in vf, "dgsel": "gsel" in vf, "dnsort": "nsort" in vf, diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 610182e0..d423a92a 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -226,6 +226,7 @@ var Ls = { "ct_csel": 'use CTRL and SHIFT for file selection in grid-view">sel', "ct_ihop": 'when the image viewer is closed, scroll down to the last viewed file">g⮯', "ct_dots": 'show hidden files (if server permits)">dotfiles', + "ct_qdel": 'when deleting files, only ask for confirmation once">qdel', "ct_dir1st": 'sort folders before files">📁 first', "ct_nsort": 'natural sort (for filenames with leading digits)">nsort', "ct_readme": 'show README.md in folder listings">📜 readme', @@ -850,6 +851,7 @@ var Ls = { "ct_csel": 'bruk tastene CTRL og SHIFT for markering av filer i ikonvisning">merk', "ct_ihop": 'bla ned til sist viste bilde når bildeviseren lukkes">g⮯', "ct_dots": 'vis skjulte filer (gitt at serveren tillater det)">.synlig', + "ct_qdel": 'sletteknappen spør bare én gang om bekreftelse">hurtig🗑️', "ct_dir1st": 'sorter slik at mapper kommer foran filer">📁 først', "ct_nsort": 'naturlig sortering (forstår tall i filnavn)">nsort', "ct_readme": 'vis README.md nedenfor filene">📜 readme', @@ -1474,6 +1476,7 @@ var Ls = { "ct_csel": '在网格视图中使用 CTRL 和 SHIFT 进行文件选择">CTRL', "ct_ihop": '当图像查看器关闭时,滚动到最后查看的文件">滚动', "ct_dots": '显示隐藏文件(如果服务器允许)">隐藏文件', + "ct_qdel": '删除文件时,只需确认一次">快删', //m "ct_dir1st": '在文件之前排序文件夹">📁 排序', "ct_nsort": '正确排序以数字开头的文件名">数字排序', //m "ct_readme": '在文件夹列表中显示 README.md">📜 readme', @@ -2090,6 +2093,7 @@ ebi('op_cfg').innerHTML = ( ' ' + L.danger + '\n' + L.fd_warn1.format(vps.length) + '', function () { + if (asks === 1) + return deleter(); modal.confirm(L.fd_warn2, deleter, null); }, null); }; @@ -5814,6 +5827,8 @@ var fileman = (function () { r.bus.onmessage(); }; + bcfg_bind(r, 'qdel', 'qdel', dqdel == 1); + bren.onclick = r.rename; bdel.onclick = r.delete; bcut.onclick = r.cut; diff --git a/tests/util.py b/tests/util.py index d6ac2f24..2b3d4b52 100644 --- a/tests/util.py +++ b/tests/util.py @@ -152,7 +152,7 @@ class Cfg(Namespace): ex = "ah_cli ah_gen css_browser dbpath hist ipu js_browser js_other mime mimes no_forget no_hash no_idx nonsus_urls og_tpl og_ua ua_nodoc ua_nozip" ka.update(**{k: None for k in ex.split()}) - ex = "hash_mt hsortn safe_dedup srch_time tail_fd tail_rate u2abort u2j u2sz" + ex = "hash_mt hsortn qdel safe_dedup srch_time tail_fd tail_rate u2abort u2j u2sz" ka.update(**{k: 1 for k in ex.split()}) ex = "au_vol dl_list mtab_age reg_cap s_thead s_tbody tail_tmax tail_who th_convt ups_who zip_who"