From c985e2219663f6bf9159198aaf8eacd02e4ac674 Mon Sep 17 00:00:00 2001 From: Rob Wills Date: Wed, 1 Aug 2012 23:57:56 -0700 Subject: Press "F" to Follow Following of the flow list - ConsoleState now has a follow_focus property -- when True it will cause focus to follow added flows - ConsoleMaster implements toggle_follow_flows() -- when enabling follow, also jumps to most recent flow - StatusBar reports follow_focus state -- adds "following" to option list when true - Added "F" to FlowList keys -- implementation requests ConsoleMaster to toggle_follow_flows() --- libmproxy/console/__init__.py | 13 +++++++++++++ libmproxy/console/flowlist.py | 3 +++ 2 files changed, 16 insertions(+) (limited to 'libmproxy/console') diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index 482c762d..8ce91d73 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -175,6 +175,8 @@ class StatusBar(common.WWrap): opts.append("killextra") if self.master.server.config.no_upstream_cert: opts.append("no-upstream-cert") + if self.master.state.follow_focus: + opts.append("following") if opts: r.append("[%s]"%(":".join(opts))) @@ -252,6 +254,7 @@ class ConsoleState(flow.State): def __init__(self): flow.State.__init__(self) self.focus = None + self.follow_focus = None self.default_body_view = contentview.VIEW_AUTO self.view_flow_mode = common.VIEW_FLOW_REQUEST self.last_script = "" @@ -270,6 +273,8 @@ class ConsoleState(flow.State): f = flow.State.add_request(self, req) if self.focus is None: self.set_focus(0) + elif self.follow_focus: + self.set_focus(len(self.view) - 1) return f def add_response(self, resp): @@ -935,6 +940,14 @@ class ConsoleMaster(flow.FlowMaster): self.state.clear() self.sync_list_view() + def toggle_follow_flows(self): + # toggle flow follow + self.state.follow_focus = not self.state.follow_focus + # jump to most recent flow if follow is now on + if self.state.follow_focus: + self.state.set_focus(self.state.flow_count()) + self.sync_list_view() + def delete_flow(self, f): self.state.delete_flow(f) self.sync_list_view() diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 71214e5e..293b1eae 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -25,6 +25,7 @@ def _mkhelp(): ("d", "delete flow"), ("D", "duplicate flow"), ("e", "toggle eventlog"), + ("F", "toggle follow flow list"), ("l", "set limit filter pattern"), ("L", "load saved flows"), ("r", "replay request"), @@ -225,6 +226,8 @@ class FlowListBox(urwid.ListBox): self.master.state.last_saveload, self.master.load_flows_callback ) + elif key == "F": + self.master.toggle_follow_flows() elif key == "W": if self.master.stream: self.master.stop_stream() -- cgit v1.2.3