From 7fef0ecdf5618d06e78ee8f833525d7784234df8 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 2 Apr 2012 09:30:38 +1200 Subject: Make "T" pretty view over-ride persistent when switching between flows. We do this by adding a flow settings mechanism to ConsoleState. This is pretty rough at the moment and should become more sophisticated as needed. --- libmproxy/console/__init__.py | 11 ++++++++++- libmproxy/console/flowview.py | 38 +++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 16 deletions(-) (limited to 'libmproxy/console') diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index fe81dc26..ee295755 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -14,7 +14,7 @@ # along with this program. If not, see . import mailcap, mimetypes, tempfile, os, subprocess, glob, time, shlex -import os.path, sys +import os.path, sys, weakref import urwid from .. import controller, utils, flow import flowlist, flowview, help, common, grideditor, palettes, contentview @@ -235,6 +235,15 @@ class ConsoleState(flow.State): self.view_flow_mode = common.VIEW_FLOW_REQUEST self.last_script = "" self.last_saveload = "" + self.flowsettings = weakref.WeakKeyDictionary() + + def add_flow_setting(self, flow, key, value): + d = self.flowsettings.setdefault(flow, {}) + d[key] = value + + def get_flow_setting(self, flow, key, default=None): + d = self.flowsettings.get(flow, {}) + return d.get(key, default) def add_request(self, req): f = flow.State.add_request(self, req) diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index da89f763..bbf3a89a 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -123,7 +123,6 @@ class FlowView(common.WWrap): ] def __init__(self, master, state, flow): self.master, self.state, self.flow = master, state, flow - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_AUTO if self.state.view_flow_mode == common.VIEW_FLOW_RESPONSE: self.view_response() else: @@ -205,7 +204,11 @@ class FlowView(common.WWrap): body = self._conn_text( self.flow.request, self.state.view_body_mode, - self.view_body_pretty_type + self.state.get_flow_setting( + self.flow, + (common.VIEW_FLOW_REQUEST, "prettyview"), + contentview.VIEW_CONTENT_PRETTY_TYPE_AUTO + ) ) self.w = self.wrap_body(common.VIEW_FLOW_REQUEST, body) self.master.statusbar.redraw() @@ -216,7 +219,11 @@ class FlowView(common.WWrap): body = self._conn_text( self.flow.response, self.state.view_body_mode, - self.view_body_pretty_type + self.state.get_flow_setting( + self.flow, + (common.VIEW_FLOW_RESPONSE, "prettyview"), + contentview.VIEW_CONTENT_PRETTY_TYPE_AUTO + ) ) else: body = urwid.ListBox( @@ -371,18 +378,19 @@ class FlowView(common.WWrap): return self._view_nextprev_flow("prev", flow) def change_pretty_type(self, t): - if t == "a": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_AUTO - elif t == "i": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_IMAGE - elif t == "j": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_JAVASCRIPT - elif t == "s": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_JSON - elif t == "u": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_URLENCODED - elif t == "x": - self.view_body_pretty_type = contentview.VIEW_CONTENT_PRETTY_TYPE_XML + d = { + "a": contentview.VIEW_CONTENT_PRETTY_TYPE_AUTO, + "i": contentview.VIEW_CONTENT_PRETTY_TYPE_IMAGE, + "j": contentview.VIEW_CONTENT_PRETTY_TYPE_JAVASCRIPT, + "s": contentview.VIEW_CONTENT_PRETTY_TYPE_JSON, + "u": contentview.VIEW_CONTENT_PRETTY_TYPE_URLENCODED, + "x": contentview.VIEW_CONTENT_PRETTY_TYPE_XML, + } + self.state.add_flow_setting( + self.flow, + (self.state.view_flow_mode, "prettyview"), + d.get(t) + ) self.master.refresh_flow(self.flow) def keypress(self, size, key): -- cgit v1.2.3