aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2015-03-21 12:37:00 +1300
committerAldo Cortesi <aldo@nullcube.com>2015-03-21 12:37:00 +1300
commit381a56306777900153939b1b46f20e63322944c2 (patch)
tree95b32bccebcfdcda3fc5c0b95d75c8c0c7211b34 /libmproxy
parent8725d50d03cf21b37a78c1d2fa03ade055c8a821 (diff)
downloadmitmproxy-381a56306777900153939b1b46f20e63322944c2.tar.gz
mitmproxy-381a56306777900153939b1b46f20e63322944c2.tar.bz2
mitmproxy-381a56306777900153939b1b46f20e63322944c2.zip
Status bar message expiry based on signals and Urwid main loop
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/console/__init__.py8
-rw-r--r--libmproxy/console/grideditor.py2
-rw-r--r--libmproxy/console/signals.py1
-rw-r--r--libmproxy/console/statusbar.py21
4 files changed, 23 insertions, 9 deletions
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index b5c59ecf..aae7a9c4 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -212,6 +212,12 @@ class ConsoleMaster(flow.FlowMaster):
if options.app:
self.start_app(self.options.app_host, self.options.app_port)
+ signals.call_in.connect(self.sig_call_in)
+
+ def sig_call_in(self, sender, seconds, callback, args=()):
+ def cb(*_):
+ return callback(*args)
+ self.loop.set_alarm_in(seconds, cb)
def start_stream_to_path(self, path, mode="wb"):
path = os.path.expanduser(path)
@@ -576,7 +582,7 @@ class ConsoleMaster(flow.FlowMaster):
self.prompt_done()
msg = p(txt, *args)
if msg:
- signals.status_message.send(message=msg, expire=1000)
+ signals.status_message.send(message=msg, expire=1)
def prompt_cancel(self):
self.prompt_done()
diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py
index 2d2754b1..0b563c52 100644
--- a/libmproxy/console/grideditor.py
+++ b/libmproxy/console/grideditor.py
@@ -132,7 +132,7 @@ class GridWalker(urwid.ListWalker):
errors = self.lst[self.focus][1]
emsg = self.editor.is_error(self.focus_col, val)
if emsg:
- signals.status_message.send(message = emsg, expire = 1000)
+ signals.status_message.send(message = emsg, expire = 1)
errors.add(self.focus_col)
else:
errors.discard(self.focus_col)
diff --git a/libmproxy/console/signals.py b/libmproxy/console/signals.py
index a844ef8f..7b0ec937 100644
--- a/libmproxy/console/signals.py
+++ b/libmproxy/console/signals.py
@@ -2,3 +2,4 @@
import blinker
status_message = blinker.Signal()
+call_in = blinker.Signal()
diff --git a/libmproxy/console/statusbar.py b/libmproxy/console/statusbar.py
index 7ad78f03..a29767e4 100644
--- a/libmproxy/console/statusbar.py
+++ b/libmproxy/console/statusbar.py
@@ -1,4 +1,3 @@
-
import time
import urwid
@@ -7,11 +6,14 @@ from . import pathedit, signals
from .. import utils
-
class ActionBar(urwid.WidgetWrap):
def __init__(self):
- urwid.WidgetWrap.__init__(self, urwid.Text(""))
- signals.status_message.connect(self.message)
+ urwid.WidgetWrap.__init__(self, None)
+ self.clear()
+ signals.status_message.connect(self.sig_message)
+
+ def clear(self):
+ self._w = urwid.Text("")
def selectable(self):
return True
@@ -22,9 +24,14 @@ class ActionBar(urwid.WidgetWrap):
def prompt(self, prompt, text = ""):
self._w = urwid.Edit(prompt, text or "")
- def message(self, sender, message, expire=None):
- self.expire = expire
- self._w = urwid.Text(message)
+ def sig_message(self, sender, message, expire=None):
+ w = urwid.Text(message)
+ self._w = w
+ if expire:
+ def cb(*args):
+ if w == self._w:
+ self.clear()
+ signals.call_in.send(seconds=expire, callback=cb)
class StatusBar(urwid.WidgetWrap):