aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c_exec.go11
-rw-r--r--c_hardflip.go5
-rw-r--r--c_init.go4
-rw-r--r--i_events.go39
-rw-r--r--i_ui.go153
5 files changed, 113 insertions, 99 deletions
diff --git a/c_exec.go b/c_exec.go
index 494f485..cd7a11c 100644
--- a/c_exec.go
+++ b/c_exec.go
@@ -128,11 +128,10 @@ func c_format_rdp(host *HostNode) []string {
return cmd_fmt
}
-func c_format_cmd(id uint64, lhost *HostList) {
- host := lhost.head
+func c_format_cmd(dir_id, host_id uint64, ldirs *DirsList) {
var cmd_fmt []string
+ host := ldirs.sel(dir_id).lhost.sel(host_id)
- host = lhost.sel(id)
if host == nil {
c_die("host id not found", nil)
}
@@ -146,9 +145,9 @@ func c_format_cmd(id uint64, lhost *HostList) {
c_exec_cmd(cmd_fmt)
}
-func c_exec(id uint64, lhost *HostList) {
- if lhost.head == nil {
+func c_exec(dir_id, host_id uint64, ldirs *DirsList) {
+ if ldirs.head == nil {
return
}
- c_format_cmd(id, lhost)
+ c_format_cmd(dir_id, host_id, ldirs)
}
diff --git a/c_hardflip.go b/c_hardflip.go
index f7585b4..f0c663f 100644
--- a/c_hardflip.go
+++ b/c_hardflip.go
@@ -57,11 +57,12 @@ type HardData struct {
func main() {
data_dir := c_get_data_dir()
- ldirs := c_load_data_dir(data_dir)
+ opts := HardOpts{true, true, false}
+ ldirs := c_load_data_dir(data_dir, opts)
data := HardData{
ldirs,
HardUI{},
- HardOpts{true, true, false},
+ opts,
data_dir,
}
// dir := data.ldirs.head
diff --git a/c_init.go b/c_init.go
index 65e7144..d16999c 100644
--- a/c_init.go
+++ b/c_init.go
@@ -94,11 +94,11 @@ func c_recurse_data_dir(dir, root string, opts HardOpts, ldirs *DirsList,
}
}
-func c_load_data_dir(dir string) *DirsList {
+func c_load_data_dir(dir string, opts HardOpts) *DirsList {
ldirs := DirsList{}
var id uint64
id = 0
- c_recurse_data_dir("", data.opts, dir + "/", &ldirs, &id, "", nil, 1)
+ c_recurse_data_dir("", dir + "/", opts, &ldirs, &id, "", nil, 1)
return &ldirs
}
diff --git a/i_events.go b/i_events.go
index 5c5a45c..6e3bdc5 100644
--- a/i_events.go
+++ b/i_events.go
@@ -53,25 +53,24 @@ import (
)
func i_reload_data(data *HardData) {
- data.lhost, _ = c_load_data_dir(data.data_dir)
- l := data.lhost
- data.ui.sel_max = l.count()
+ data.ldirs = c_load_data_dir(data.data_dir, data.opts)
+ data.ui.sel_max, data.ui.count_dirs, data.ui.count_hosts = i_get_sel_max(data.ldirs)
}
func i_delete_host(data *HardData) {
- ui := &data.ui
- host := data.lhost.sel(data.ui.sel)
- file_path := data.data_dir + "/" + host.Folder + host.Filename
-
- if err := os.Remove(file_path); err != nil {
- c_die("can't remove " + file_path, err)
- }
- data.lhost.del(data.ui.sel)
- data.lhost.reset_id()
- ui.sel_max = data.lhost.count()
- if ui.sel >= ui.sel_max {
- ui.sel = ui.sel_max - 1
- }
+// ui := &data.ui
+// host := data.lhost.sel(data.ui.sel)
+// file_path := data.data_dir + "/" + host.Folder + host.Filename
+//
+// if err := os.Remove(file_path); err != nil {
+// c_die("can't remove " + file_path, err)
+// }
+// data.lhost.del(data.ui.sel)
+// data.lhost.reset_id()
+// ui.sel_max = data.lhost.count()
+// if ui.sel >= ui.sel_max {
+// ui.sel = ui.sel_max - 1
+// }
}
// screen events such as keypresses
@@ -103,12 +102,14 @@ func i_events(data *HardData) {
ui.sel = 0
} else if event.Rune() == 'G' {
ui.sel = ui.sel_max - 1
- } else if event.Rune() == 'D' && data.lhost.head != nil {
+ } else if event.Rune() == 'D' &&
+ data.ldirs.head != nil &&
+ ui.sel_max != 0 {
ui.mode = DELETE_MODE
} else if event.Key() == tcell.KeyEnter {
ui.s.Fini()
- c_exec(ui.sel, data.lhost)
- if data.opts.loop == false {
+ c_exec(ui.sel, ui.sel, data.ldirs)
+ if data.opts.Loop == false {
os.Exit(0)
}
if ui.s, err = tcell.NewScreen(); err != nil {
diff --git a/i_ui.go b/i_ui.go
index ec38cf6..89bb123 100644
--- a/i_ui.go
+++ b/i_ui.go
@@ -60,6 +60,8 @@ type HardUI struct {
mode uint8
sel uint64
sel_max uint64
+ count_dirs uint64
+ count_hosts uint64
def_style tcell.Style
title_style tcell.Style
dim [2]int
@@ -151,80 +153,86 @@ func i_draw_zhosts_box(ui HardUI) {
}
func i_draw_delete_box(ui HardUI, host *HostNode) {
- text := "Really delete this host?"
- file := host.Folder + host.Filename
- max_len := len(text)
-
- if max_len < len(file) {
- max_len = len(file)
- }
- left, right :=
- (ui.dim[W] / 2) - (max_len / 2) - 5,
- (ui.dim[W] / 2) + (max_len / 2) + 5
- if left < ui.dim[W] / 8 {
- left = ui.dim[W] / 8
- }
- if right > ui.dim[W] - ui.dim[W] / 8 - 1 {
- right = ui.dim[W] - ui.dim[W] / 8 - 1
- }
- top, bot :=
- (ui.dim[H] / 2) - 4,
- (ui.dim[H] / 2) + 3
- i_draw_box(ui.s, left, top, right, bot, "", true)
- left = (ui.dim[W] / 2) - (len(text) / 2)
- if left < (ui.dim[W] / 8) + 1 {
- left = (ui.dim[W] / 8) + 1
- }
- top = ui.dim[H] / 2 - 2
- i_draw_text(ui.s,
- left, top, right, top,
- ui.def_style, text)
- left = (ui.dim[W] / 2) - (len(file) / 2)
- if left < (ui.dim[W] / 8) + 1 {
- left = (ui.dim[W] / 8) + 1
- }
- top += 1
- i_draw_text(ui.s,
- left, top, right, top,
- ui.def_style.Bold(true), file)
- left = right - 11
- if left < (ui.dim[W] / 8) + 1 {
- left = (ui.dim[W] / 8) + 1
- }
- top = ui.dim[H] / 2 + 1
- i_draw_text(ui.s,
- left, top, right, top,
- ui.def_style.Bold(true).Underline(true), "y")
- i_draw_text(ui.s,
- left + 1, top, right, top,
- ui.def_style, "es | ")
- i_draw_text(ui.s,
- left + 6, top, right, top,
- ui.def_style.Bold(true).Underline(true), "n")
- i_draw_text(ui.s,
- left + 7, top, right, top,
- ui.def_style, "o")
+ // text := "Really delete this host?"
+ // file := host.Folder + host.Filename
+ // max_len := len(text)
+ //
+ // if max_len < len(file) {
+ // max_len = len(file)
+ // }
+ // left, right :=
+ // (ui.dim[W] / 2) - (max_len / 2) - 5,
+ // (ui.dim[W] / 2) + (max_len / 2) + 5
+ // if left < ui.dim[W] / 8 {
+ // left = ui.dim[W] / 8
+ // }
+ // if right > ui.dim[W] - ui.dim[W] / 8 - 1 {
+ // right = ui.dim[W] - ui.dim[W] / 8 - 1
+ // }
+ // top, bot :=
+ // (ui.dim[H] / 2) - 4,
+ // (ui.dim[H] / 2) + 3
+ // i_draw_box(ui.s, left, top, right, bot, "", true)
+ // left = (ui.dim[W] / 2) - (len(text) / 2)
+ // if left < (ui.dim[W] / 8) + 1 {
+ // left = (ui.dim[W] / 8) + 1
+ // }
+ // top = ui.dim[H] / 2 - 2
+ // i_draw_text(ui.s,
+ // left, top, right, top,
+ // ui.def_style, text)
+ // left = (ui.dim[W] / 2) - (len(file) / 2)
+ // if left < (ui.dim[W] / 8) + 1 {
+ // left = (ui.dim[W] / 8) + 1
+ // }
+ // top += 1
+ // i_draw_text(ui.s,
+ // left, top, right, top,
+ // ui.def_style.Bold(true), file)
+ // left = right - 11
+ // if left < (ui.dim[W] / 8) + 1 {
+ // left = (ui.dim[W] / 8) + 1
+ // }
+ // top = ui.dim[H] / 2 + 1
+ // i_draw_text(ui.s,
+ // left, top, right, top,
+ // ui.def_style.Bold(true).Underline(true), "y")
+ // i_draw_text(ui.s,
+ // left + 1, top, right, top,
+ // ui.def_style, "es | ")
+ // i_draw_text(ui.s,
+ // left + 6, top, right, top,
+ // ui.def_style.Bold(true).Underline(true), "n")
+ // i_draw_text(ui.s,
+ // left + 7, top, right, top,
+ // ui.def_style, "o")
}
func i_host_panel(ui HardUI, opts HardOpts, ldirs *DirsList) {
i_draw_box(ui.s, 0, 0,
ui.dim[W] / 3, ui.dim[H] - 2,
" Hosts ", false)
- host := lhost.head
- icons := [2]string{"  ", "  "}
- for i := 0; i < ui.list_start && host.next != nil; i++ {
- host = host.next
+ // host := lhost.head
+ dirs := ldirs.head
+ // prot_icons := [2]string{"  ", "  "}
+ dirs_icons := [2]string{"  ", "  "}
+ for i := 0; i < ui.list_start && dirs.next != nil; i++ {
+ dirs = dirs.next
}
- for line := 1; line < ui.dim[H] - 2 && host != nil; line++ {
+ for line := 1; line < ui.dim[H] - 2 && dirs != nil; line++ {
style := ui.def_style
- if ui.sel == host.ID {
+ if ui.sel == dirs.ID {
style = ui.def_style.Reverse(true)
}
text := ""
- if opts.icon == true {
- text = icons[host.Type]
+ if opts.Icon == true {
+ var fold_var uint8
+ if dirs.Folded == true {
+ fold_var = 1
+ }
+ text = dirs_icons[fold_var]
}
- text += host.Folder + host.Name
+ text += dirs.Name
spaces := ""
for i := 0; i < (ui.dim[W] / 3) - len(text) + 1; i++ {
spaces += " "
@@ -233,7 +241,7 @@ func i_host_panel(ui HardUI, opts HardOpts, ldirs *DirsList) {
i_draw_text(ui.s,
1, line, ui.dim[W] / 3, line,
style, text)
- host = host.next
+ dirs = dirs.next
}
if ui.sel_max == 0 {
i_draw_text(ui.s,
@@ -300,7 +308,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
ui.def_style, strconv.Itoa(int(host.Port)))
curr_line += 1
// RDP shit
- if host.Type == 1 {
+ if host.Protocol == 1 {
if len(host.Domain) > 0 {
i_draw_text(ui.s,
(ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line,
@@ -329,7 +337,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
ui.def_style, "***")
curr_line += 1
}
- if host.Type == 0 && len(host.Priv) > 0 {
+ if host.Protocol == 0 && len(host.Priv) > 0 {
i_draw_text(ui.s,
(ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line,
ui.title_style, "Privkey: ")
@@ -340,7 +348,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
}
curr_line += 1
// jump
- if host.Type == 0 && len(host.Jump) > 0 {
+ if host.Protocol == 0 && len(host.Jump) > 0 {
i_draw_text(ui.s,
(ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line,
ui.title_style, "Jump settings: ")
@@ -375,7 +383,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
ui.def_style, "***")
curr_line += 1
}
- if host.Type == 0 && len(host.JumpPriv) > 0 {
+ if host.Protocol == 0 && len(host.JumpPriv) > 0 {
i_draw_text(ui.s,
(ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line,
ui.title_style, "Privkey: ")
@@ -387,7 +395,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
curr_line += 1
}
// RDP shit
- if host.Type == 1 {
+ if host.Protocol == 1 {
qual := [3]string{"Low", "Medium", "High"}
i_draw_text(ui.s,
(ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line,
@@ -426,12 +434,17 @@ func i_info_panel(ui HardUI, lhost *HostList) {
}
}
+func i_get_sel_max(ldirs *DirsList) (uint64, uint64, uint64) {
+ count_dirs, count_hosts := ldirs.count()
+
+ return count_dirs + count_hosts, count_dirs, count_hosts
+}
+
func i_ui(data *HardData) {
var err error
ui := &data.ui
ui.s, err = tcell.NewScreen()
- count_dirs, count_hosts := data.ldirs.count()
- ui.sel_max = count_dirs + count_hosts
+ ui.sel_max, ui.count_dirs, ui.count_hosts = i_get_sel_max(data.ldirs)
if err != nil {
c_die("view", err)