Skip to content

Commit ad23b25

Browse files
committed
add --localtime for ui; closes #312
1 parent d0d2f20 commit ad23b25

File tree

11 files changed

+53
-10
lines changed

11 files changed

+53
-10
lines changed

copyparty/__main__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,7 @@ def add_ui(ap, retry):
15481548
ap2 = ap.add_argument_group('ui options')
15491549
ap2.add_argument("--grid", action="store_true", help="show grid/thumbnails by default (volflag=grid)")
15501550
ap2.add_argument("--gsel", action="store_true", help="select files in grid by ctrl-click (volflag=gsel)")
1551+
ap2.add_argument("--localtime", action="store_true", help="default to local timezone instead of UTC")
15511552
ap2.add_argument("--lang", metavar="LANG", type=u, default="eng", help="language; one of the following: \033[32meng nor chi\033[0m")
15521553
ap2.add_argument("--theme", metavar="NUM", type=int, default=0, help="default theme to use (0..7)")
15531554
ap2.add_argument("--themes", metavar="NUM", type=int, default=8, help="number of themes installed")

copyparty/authsrv.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2775,6 +2775,7 @@ def _reload(self, verbosity: int = 9) -> None:
27752775
"dth3x": vf["th3x"],
27762776
"dvol": self.args.au_vol,
27772777
"idxh": int(self.args.ih),
2778+
"dutc": not self.args.localtime,
27782779
"themes": self.args.themes,
27792780
"turbolvl": self.args.turbo,
27802781
"nosubtle": self.args.nosubtle,

copyparty/svchub.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,8 @@ def _process_config(self) -> bool:
10261026
except:
10271027
raise Exception("invalid --mv-retry [%s]" % (self.args.mv_retry,))
10281028

1029+
al.js_utc = "false" if al.localtime else "true"
1030+
10291031
al.tcolor = al.tcolor.lstrip("#")
10301032
if len(al.tcolor) == 3: # fc5 => ffcc55
10311033
al.tcolor = "".join([x * 2 for x in al.tcolor])

copyparty/web/browser.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ var Ls = {
230230
"ct_qdel": 'when deleting files, only ask for confirmation once">qdel',
231231
"ct_dir1st": 'sort folders before files">📁 first',
232232
"ct_nsort": 'natural sort (for filenames with leading digits)">nsort',
233+
"ct_utc": 'show all datetimes in UTC">UTC',
233234
"ct_readme": 'show README.md in folder listings">📜 readme',
234235
"ct_idxh": 'show index.html instead of folder listing">htm',
235236
"ct_sbars": 'show scrollbars">⟊',
@@ -857,6 +858,7 @@ var Ls = {
857858
"ct_qdel": 'sletteknappen spør bare én gang om bekreftelse">hurtig🗑️',
858859
"ct_dir1st": 'sorter slik at mapper kommer foran filer">📁 først',
859860
"ct_nsort": 'naturlig sortering (forstår tall i filnavn)">nsort',
861+
"ct_utc": 'bruk UTC for alle klokkeslett">UTC',
860862
"ct_readme": 'vis README.md nedenfor filene">📜 readme',
861863
"ct_idxh": 'vis index.html istedenfor fil-liste">htm',
862864
"ct_sbars": 'vis rullgardiner / skrollefelt">⟊',
@@ -1483,6 +1485,7 @@ var Ls = {
14831485
"ct_qdel": '删除文件时,只需确认一次">快删', //m
14841486
"ct_dir1st": '在文件之前排序文件夹">📁 排序',
14851487
"ct_nsort": '正确排序以数字开头的文件名">数字排序', //m
1488+
"ct_utc": '所有时间请使用UTC">UTC', //m
14861489
"ct_readme": '在文件夹列表中显示 README.md">📜 readme',
14871490
"ct_idxh": '显示 index.html 代替文件夹列表">htm',
14881491
"ct_sbars": '显示滚动条">⟊',
@@ -2109,6 +2112,7 @@ var Ls = {
21092112
"ct_qdel": 'Nur einmal fragen, wenn mehrere Dateien gelöscht werden">qdel',
21102113
"ct_dir1st": 'Ordner vor Dateien sortieren">📁 zuerst',
21112114
"ct_nsort": 'Natürliche Sortierung (für Dateinamen mit führenden Ziffern)">nsort',
2115+
"ct_utc": 'Verwenden Sie UTC für alle Zeitangaben">UTC', //m
21122116
"ct_readme": 'README.md in Dateiliste anzeigen">📜 readme',
21132117
"ct_idxh": 'index.html anstelle von Dateiliste anzeigen">htm',
21142118
"ct_sbars": 'Scrollbars zeigen">⟊',
@@ -3362,6 +3366,7 @@ var Ls = {
33623366
"ct_qdel": 'спрашивать подтверждение только один раз перед удалением файлов">быстр. удал.',
33633367
"ct_dir1st": 'разместить папки над файлами">📁 сверху',
33643368
"ct_nsort": 'сортировка по числам$N(например, файл с >code<2>/code< в начале названия идёт перед >code<11>/code<)">нат. сорт.',
3369+
"ct_utc": 'используйте UTC для всех временных меток">UTC', //m
33653370
"ct_readme": 'показывать содержимое README.md в описании папки">📜 ридми',
33663371
"ct_idxh": 'показывать страницу index.html в текущей папке вместо интерфейса">htm',
33673372
"ct_sbars": 'показывать полосы прокрутки">⟊',
@@ -3987,6 +3992,7 @@ var Ls = {
39873992
"ct_qdel": 'al eliminar archivos, pedir confirmación solo una vez">elim. rápida',
39883993
"ct_dir1st": 'ordenar carpetas antes que archivos">📁 primero',
39893994
"ct_nsort": 'orden natural (para nombres de archivo con dígitos iniciales)">ord. natural',
3995+
"ct_utc": 'use UTC para todas las horas">UTC', //m
39903996
"ct_readme": 'mostrar README.md en los listados de carpetas">📜 léeme',
39913997
"ct_idxh": 'mostrar index.html en lugar del listado de carpetas">htm',
39923998
"ct_sbars": 'mostrar barra lateral">⟊',
@@ -4613,6 +4619,7 @@ var Ls = {
46134619
"ct_qdel": 'при видаленні файлів, запитати підтвердження лише один раз">швидке видалення',
46144620
"ct_dir1st": 'сортувати папки перед файлами">спочатку 📁',
46154621
"ct_nsort": 'природне сортування (для імен файлів з початковими цифрами)">природне сортування',
4622+
"ct_utc": 'використовуйте UTC для всіх часових позначень">UTC', //m
46164623
"ct_readme": 'показати README.md у списках папок">📜 readme',
46174624
"ct_idxh": 'показати index.html замість списку папки">htm',
46184625
"ct_sbars": 'показати смуги прокрутки">⟊',
@@ -5232,6 +5239,7 @@ ebi('op_cfg').innerHTML = (
52325239
' <a id="qdel" class="tgl btn" href="#" tt="' + L.ct_qdel + '</a>\n' +
52335240
' <a id="dir1st" class="tgl btn" href="#" tt="' + L.ct_dir1st + '</a>\n' +
52345241
' <a id="nsort" class="tgl btn" href="#" tt="' + L.ct_nsort + '</a>\n' +
5242+
' <a id="utctid" class="tgl btn" href="#" tt="' + L.ct_utc + '</a>\n' +
52355243
' <a id="ireadme" class="tgl btn" href="#" tt="' + L.ct_readme + '</a>\n' +
52365244
' <a id="idxh" class="tgl btn" href="#" tt="' + L.ct_idxh + '</a>\n' +
52375245
' <a id="sbars" class="tgl btn" href="#" tt="' + L.ct_sbars + '</a>\n' +
@@ -10607,7 +10615,7 @@ var search_ui = (function () {
1060710615
nodes.push(esc('' + v));
1060810616
}
1060910617

10610-
nodes = nodes.concat([ext, unix2iso(ts)]);
10618+
nodes = nodes.concat([ext, unix2ui(ts)]);
1061110619
html.push(nodes.join('</td><td>'));
1061210620
html.push('</td></tr>');
1061310621
}
@@ -10819,6 +10827,10 @@ var treectl = (function () {
1081910827
xhr.open('GET', SR + '/?setck=dots=' + (v ? 'y' : ''), true);
1082010828
xhr.send();
1082110829
});
10830+
bcfg_bind(r, 'utctid', 'utctid', dutc, function (v) {
10831+
window.unix2ui = v ? unix2iso : unix2iso_localtime;
10832+
resort();
10833+
});
1082210834
bcfg_bind(r, 'nsort', 'nsort', dnsort, resort);
1082310835
bcfg_bind(r, 'dir1st', 'dir1st', true, resort);
1082410836
setwrap(bcfg_bind(r, 'wtree', 'wraptree', true, setwrap));
@@ -11514,14 +11526,14 @@ var treectl = (function () {
1151411526
if (k == ".dur")
1151511527
sv = v ? s2ms(v) : "";
1151611528
else if (k == ".up_at")
11517-
sv = v ? unix2iso(v) : "";
11529+
sv = v ? unix2ui(v) : "";
1151811530
else {
1151911531
ln.push(esc('' + v));
1152011532
continue;
1152111533
}
1152211534
ln[ln.length - 1] += '</td><td sortv="' + v + '">' + sv;
1152311535
}
11524-
ln = ln.concat([tn.ext, unix2iso(tn.ts)]).join('</td><td>');
11536+
ln = ln.concat([tn.ext, unix2ui(tn.ts)]).join('</td><td>');
1152511537
html.push(ln + '</td></tr>');
1152611538
}
1152711539
html.push('</tbody>');
@@ -13184,7 +13196,7 @@ var unpost = (function () {
1318413196
var done = res[a].pd === undefined;
1318513197
html.push(
1318613198
'<tr><td><a me="' + me + '" class="n' + a + '" href="#">' + (done ? L.un_del : L.un_abrt) + '</a></td>' +
13187-
'<td>' + unix2iso(res[a].at) + '</td>' +
13199+
'<td>' + unix2ui(res[a].at) + '</td>' +
1318813200
'<td>' + ('' + res[a].sz).replace(/\B(?=(\d{3})+(?!\d))/g, " ") + '</td>' +
1318913201
(done ? '<td>100%</td>' : '<td>' + res[a].pd + '%</td>') +
1319013202
'<td>' + linksplit(res[a].vp).join('<span> / </span>') + '</td></tr>');

copyparty/web/rups.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
var SR="{{ r }}",
3535
lang="{{ lang }}",
36+
dutc={{ this.args.js_utc }},
3637
dfavico="{{ favico }}";
3738

3839
var STG = window.localStorage;

copyparty/web/rups.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function render() {
1010
fn = esc(uricom_dec(vsp[1])),
1111
at = f.at,
1212
td = now - f.at,
13-
ts = !at ? '(?)' : unix2iso(at),
13+
ts = !at ? '(?)' : unix2ui(at),
1414
sa = !at ? '(?)' : td > 60 ? shumantime(td) : (td + 's'),
1515
sz = ('' + f.sz).replace(/\B(?=(\d{3})+(?!\d))/g, " ");
1616

copyparty/web/shares.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
var SR="{{ r }}",
6767
shr="{{ shr }}",
6868
lang="{{ lang }}",
69+
dutc={{ this.args.js_utc }},
6970
dfavico="{{ favico }}";
7071

7172
var STG = window.localStorage;

copyparty/web/shares.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function showqr(href) {
6666
for (var b = 7; b < 9; b++) {
6767
var v = buf[ibuf++];
6868
tr[a].cells[b].innerHTML =
69-
v ? unix2iso(v).replace(' ', ',&nbsp;') : 'never';
69+
v ? unix2ui(v).replace(' ', ',&nbsp;') : 'never';
7070
}
7171

7272
for (var a = 0; a < tr.length; a++)

copyparty/web/up2k.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2511,8 +2511,8 @@ function up2k_init(subtle) {
25112511
var msg = [];
25122512
for (var a = 0, aa = Math.min(20, response.hits.length); a < aa; a++) {
25132513
var hit = response.hits[a],
2514-
tr = unix2iso(hit.ts),
2515-
tu = unix2iso(t.lmod),
2514+
tr = unix2ui(hit.ts),
2515+
tu = unix2ui(t.lmod),
25162516
diff = parseInt(t.lmod) - parseInt(hit.ts),
25172517
cdiff = (Math.abs(diff) <= 2) ? '3c0' : 'f0b',
25182518
sdiff = '<span style="color:#' + cdiff + '">diff ' + diff;
@@ -3187,7 +3187,7 @@ function up2k_init(subtle) {
31873187
return;
31883188

31893189
try {
3190-
ebi('lifew').innerHTML = unix2iso((st.lifetime || lifetime) +
3190+
ebi('lifew').innerHTML = unix2ui((st.lifetime || lifetime) +
31913191
Date.now() / 1000 - new Date().getTimezoneOffset() * 60
31923192
).replace(' ', ', ').slice(0, -3);
31933193
}

copyparty/web/util.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,11 +907,29 @@ function noq_href(el) {
907907
}
908908

909909

910+
function pad2(v) {
911+
return ('0' + v).slice(-2);
912+
}
913+
914+
910915
function unix2iso(ts) {
911916
return new Date(ts * 1000).toISOString().replace("T", " ").slice(0, -5);
912917
}
913918

914919

920+
function unix2iso_localtime(ts) {
921+
var o = new Date(ts * 1000),
922+
p = pad2;
923+
return "{0}-{1}-{2} {3}:{4}:{5}".format(
924+
o.getFullYear(),
925+
p(o.getMonth() + 1),
926+
p(o.getDate()),
927+
p(o.getHours()),
928+
p(o.getMinutes()),
929+
p(o.getSeconds()));
930+
}
931+
932+
915933
function s2ms(s) {
916934
s = Math.floor(s);
917935
var m = Math.floor(s / 60);
@@ -1203,6 +1221,13 @@ function scfg_bind(obj, oname, cname, defval, cb) {
12031221
}
12041222

12051223

1224+
window.unix2ui = (function () {
1225+
var v = sread('utctid');
1226+
v = v ? (v === '0') : (window.dutc === false);
1227+
return v ? unix2iso_localtime : unix2iso;
1228+
})();
1229+
1230+
12061231
function hist_push(url) {
12071232
console.log("h-push " + url);
12081233
try {

0 commit comments

Comments
 (0)