diff --git a/bale/interfaces/sshdl.py b/bale/interfaces/sshdl.py index 63f4451..bda9b5c 100644 --- a/bale/interfaces/sshdl.py +++ b/bale/interfaces/sshdl.py @@ -226,9 +226,7 @@ class SshFileFind(SshFileBrowse): with el.DBody(height="fit", width="[90vw]"): with el.WColumn().classes("col"): filesystems = await self._zfs.filesystems - self._filesystem = el.DSelect( - list(filesystems.data.keys()), label="filesystem", with_input=True, on_change=self._update_grid - ) + self._filesystem = el.DSelect(list(filesystems.data.keys()), label="filesystem", with_input=True, on_change=self._update_grid) self._pattern = el.DInput("Pattern", on_change=self._update_grid) self._grid = ui.aggrid( { @@ -237,12 +235,14 @@ class SshFileFind(SshFileBrowse): {"field": "name", "headerName": "Name", "flex": 1, "sort": "desc", "resizable": True}, {"field": "location", "headerName": "Location", "flex": 1, "resizable": True}, { - "field": "modified_datetime", "headerName": "Modified", + "field": "modified_timestamp", + "filter": "agTextColumnFilter", "maxWidth": 200, - ":comparator": """(valueA, valueB, nodeA, nodeB, isInverted) => { - return (nodeA.data.modified_timestamp > nodeB.data.modified_timestamp) ? -1 : 1; - }""", + ":cellRenderer": """(data) => { + var date = new Date(data.value * 1000).toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short', hour12: false});; + return date; + }""", }, { "field": "size", diff --git a/bale/interfaces/zfs.py b/bale/interfaces/zfs.py index 851ae69..4c50aeb 100644 --- a/bale/interfaces/zfs.py +++ b/bale/interfaces/zfs.py @@ -180,8 +180,10 @@ class Zfs: if matches is not None: md = matches.groupdict() md["path"] = f"{md['location']}/{md['name']}" - md["size"] = format_bytes(int(md["bytes"])) + md["bytes"] = int(md["bytes"]) + md["size"] = format_bytes(md["bytes"]) md["modified_datetime"] = datetime.fromtimestamp(float(md["modified_timestamp"])).strftime("%Y/%m/%d %H:%M:%S") + md["modified_timestamp"] = float(md["modified_timestamp"]) files.append(md) result.data = files return result @@ -219,9 +221,11 @@ class Zfs: matches = re.match("^(?P[^@]+)@(?P[^\t]+)\t(?P[^\t]+)\t(?P[^\t]+)\t(?P[^\n]+)", line) if matches is not None: md = matches.groupdict() - md["creation_date"] = datetime.fromtimestamp(int(md["creation"])).strftime("%Y/%m/%d") - md["creation_time"] = datetime.fromtimestamp(int(md["creation"])).strftime("%H:%M") - md["used"] = format_bytes(int(md["used_bytes"])) + md["used_bytes"] = int(md["used_bytes"]) + md["creation"] = int(md["creation"]) + md["creation_date"] = datetime.fromtimestamp(md["creation"]).strftime("%Y/%m/%d") + md["creation_time"] = datetime.fromtimestamp(md["creation"]).strftime("%H:%M") + md["used"] = format_bytes(md["used_bytes"]) snapshot = f"{md['filesystem']}@{md['name']}" snapshots[snapshot] = md self._last_data[query] = snapshots diff --git a/bale/tabs/history.py b/bale/tabs/history.py index bce98f3..5395982 100644 --- a/bale/tabs/history.py +++ b/bale/tabs/history.py @@ -47,8 +47,16 @@ class History(Tab): "filter": "agTextColumnFilter", "flex": 1, }, - {"headerName": "Date", "field": "date", "filter": "agDateColumnFilter", "maxWidth": 100}, - {"headerName": "Time", "field": "time", "maxWidth": 100}, + { + "headerName": "Timestamp", + "field": "timestamp", + "filter": "agTextColumnFilter", + "maxWidth": 200, + ":cellRenderer": """(data) => { + var date = new Date(data.value * 1000).toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short', hour12: false});; + return date; + }""", + }, { "headerName": "Status", "field": "status", diff --git a/bale/tabs/manage.py b/bale/tabs/manage.py index ed62957..56b62ae 100644 --- a/bale/tabs/manage.py +++ b/bale/tabs/manage.py @@ -75,11 +75,19 @@ class Manage(Tab): "field": "used", "maxWidth": 100, ":comparator": """(valueA, valueB, nodeA, nodeB, isInverted) => { - return (nodeA.data.used_bytes > nodeB.data.used_bytes) ? -1 : 1; - }""", + return (nodeA.data.used_bytes > nodeB.data.used_bytes) ? -1 : 1; + }""", + }, + { + "headerName": "Created", + "field": "creation", + "filter": "agTextColumnFilter", + "maxWidth": 200, + ":cellRenderer": """(data) => { + var date = new Date(data.value * 1000).toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short', hour12: false});; + return date; + }""", }, - {"headerName": "Creation Date", "field": "creation_date", "filter": "agDateColumnFilter", "maxWidth": 150}, - {"headerName": "Creation Time", "field": "creation_time", "maxWidth": 150}, {"headerName": "Holds", "field": "userrefs", "filter": "agNumberColumnFilter", "maxWidth": 100}, ], "rowData": [],