From b7bd3a6b6b62a799b143a49c16c2a39c03888f36 Mon Sep 17 00:00:00 2001 From: joshuaboud Date: Fri, 21 May 2021 15:54:25 -0300 Subject: [PATCH] create custom ls python script --- navigator/navigator.html | 2 ++ navigator/navigator.js | 30 ++++++++++++++++-------------- navigator/scripts/ls-no-fail.py | 22 ++++++++++++++++++++++ navigator/scripts/ls-no-fail.sh | 8 -------- 4 files changed, 40 insertions(+), 22 deletions(-) create mode 100755 navigator/scripts/ls-no-fail.py delete mode 100755 navigator/scripts/ls-no-fail.sh diff --git a/navigator/navigator.html b/navigator/navigator.html index 9ba86c9..89de2e8 100644 --- a/navigator/navigator.html +++ b/navigator/navigator.html @@ -31,6 +31,8 @@
+ +
diff --git a/navigator/navigator.js b/navigator/navigator.js index 7cd3f15..7d472b5 100644 --- a/navigator/navigator.js +++ b/navigator/navigator.js @@ -58,14 +58,12 @@ class NavDir extends NavEntry { } async get_children(nav_window_ref) { var children = []; - var data = await cockpit.spawn(["/usr/share/cockpit/navigator/scripts/ls-no-fail.sh", this.path_str()], {err:"ignore"}); - var entries = data.split("\n"); - entries = entries.splice(1, entries.length - 2); + var data = await cockpit.spawn(["/usr/share/cockpit/navigator/scripts/ls-no-fail.py", this.path_str()], {err:"ignore"}); + var entries = JSON.parse(data); entries.forEach(entry => { - var entry_array = entry.split(/\s+/); - var filename = entry_array[entry_array.length - 1]; + var filename = entry["filename"]; var path = (this.path.length >= 1 && this.path[0]) ? [... this.path, filename] : [filename]; - if(entry[0] == 'd') + if(entry["isdir"]) children.push(new NavDir(path, nav_window_ref)); else children.push(new NavFile(path)); @@ -109,19 +107,23 @@ class NavWindow { window.alert(new_dir.path_str() + " is inaccessible."); }); } + up() { + console.log("up"); + if(this.path_stack.length > 1) + this.path_stack.pop(); + this.refresh(); + } } let nav_window = new NavWindow(); +function set_up_buttons() { + document.getElementById("nav-up-dir-btn").addEventListener("click", nav_window.up.bind(nav_window)); +} + async function main() { - nav_window.refresh(); + await nav_window.refresh(); + set_up_buttons(); } main(); - -// setTimeout(function(){ -// while(files.length){ -// var file = files.pop(); -// file.destroy(); -// } -// }, 5000); \ No newline at end of file diff --git a/navigator/scripts/ls-no-fail.py b/navigator/scripts/ls-no-fail.py new file mode 100755 index 0000000..2672a1c --- /dev/null +++ b/navigator/scripts/ls-no-fail.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +import os +import json +import sys + +def main(): + if(len(sys.argv) < 2): + sys.exit(1) + try: + nodes = os.listdir(sys.argv[1]) + except: + print("No such file or directory") + sys.exit(1) + response = [] + for node in nodes: + response.append({"filename": node, "isdir": os.path.isdir(sys.argv[1] + "/" + node)}) + print(json.dumps(response, indent=4)) + + +if __name__ == "__main__": + main() diff --git a/navigator/scripts/ls-no-fail.sh b/navigator/scripts/ls-no-fail.sh deleted file mode 100755 index a550037..0000000 --- a/navigator/scripts/ls-no-fail.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -ls -lL "$1" - -if [[ "$?" != "2" ]]; then - exit 0 -fi -exit 1 \ No newline at end of file