From 4c89d09ec5a2c37290e3ee67708efb9a2311c81e Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Fri, 20 Dec 2019 18:59:35 +0100 Subject: ui: reduce iteration nesting when removing old tunnels Signed-off-by: Simon Rozman --- ui/listview.go | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'ui') diff --git a/ui/listview.go b/ui/listview.go index e9ecb2f8..60679579 100644 --- a/ui/listview.go +++ b/ui/listview.go @@ -225,21 +225,14 @@ func (tv *ListView) Load(asyncUI bool) { for _, tunnel := range tunnels { newTunnels[tunnel] = true } - for _, tunnel := range tv.model.tunnels { + for i := len(tv.model.tunnels); i > 0; { + i-- + tunnel := tv.model.tunnels[i] oldTunnels[tunnel] = true - } - - for tunnel := range oldTunnels { if !newTunnels[tunnel] { - for i, t := range tv.model.tunnels { - // TODO: this is inefficient. Use a map here instead. - if t.Name == tunnel.Name { - tv.model.tunnels = append(tv.model.tunnels[:i], tv.model.tunnels[i+1:]...) - tv.model.PublishRowsRemoved(i, i) // TODO: Do we have to call that everytime or can we pass a range? - delete(tv.model.lastObservedState, t) - break - } - } + tv.model.tunnels = append(tv.model.tunnels[:i], tv.model.tunnels[i+1:]...) + tv.model.PublishRowsRemoved(i, i) // TODO: Do we have to call that everytime or can we pass a range? + delete(tv.model.lastObservedState, tunnel) } } didAdd := false -- cgit v1.2.3-59-g8ed1b