summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouiz@4325f9fc-e183-4c21-96ce-0ab188b42d13 <louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13>2010-08-04 23:54:02 +0000
committerlouiz@4325f9fc-e183-4c21-96ce-0ab188b42d13 <louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13>2010-08-04 23:54:02 +0000
commit94153c490b3ec2dc029a90d179b3cde335060294 (patch)
treedba7ea26831c5d7f30d806dffa65366c8f36642a
parent567491ba439b5ae1b1f82f3796287d80e2ef653d (diff)
downloadpoezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.gz
poezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.bz2
poezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.xz
poezio-94153c490b3ec2dc029a90d179b3cde335060294.zip
fixes the sys.excepthook thread bug, and fix the traceback on joining a room with non-ascii chars
-rw-r--r--src/common.py1
-rw-r--r--src/gui.py4
-rw-r--r--src/poezio.py32
-rw-r--r--src/user.py4
4 files changed, 35 insertions, 6 deletions
diff --git a/src/common.py b/src/common.py
index c0bb97e7..bd79b788 100644
--- a/src/common.py
+++ b/src/common.py
@@ -45,6 +45,7 @@ import sys
import select
import errno
import time
+import traceback
import xmpp
diff --git a/src/gui.py b/src/gui.py
index f5116c4f..8a9400e2 100644
--- a/src/gui.py
+++ b/src/gui.py
@@ -141,6 +141,7 @@ class Gui(object):
"""
main loop waiting for the user to press a key
"""
+ self.refresh_window()
while True:
doupdate()
char=read_char(stdscr)
@@ -163,7 +164,7 @@ class Gui(object):
returns the room that has this name
"""
for room in self.rooms:
- if room.name == name:
+ if room.name.decode('utf-8') == name:
return room
return None
@@ -449,6 +450,7 @@ class Gui(object):
from_room = stanza.getFrom().getStripped()
room = self.get_room_by_name(from_room)
if not room:
+ # common.debug(':(:(:(:(\n')
return
else:
msg = None
diff --git a/src/poezio.py b/src/poezio.py
index a73924d8..83eba23c 100644
--- a/src/poezio.py
+++ b/src/poezio.py
@@ -21,9 +21,28 @@
Starting point of poezio. Launches both the Connection and Gui
"""
+import threading
import sys
-import traceback
-import curses
+
+def installThreadExcepthook():
+ """
+ Workaround for sys.excepthook thread bug
+ See http://bugs.python.org/issue1230540
+ Python, you made me sad :(
+ """
+ init_old = threading.Thread.__init__
+ def init(self, *args, **kwargs):
+ init_old(self, *args, **kwargs)
+ run_old = self.run
+ def run_with_except_hook(*args, **kw):
+ try:
+ run_old(*args, **kw)
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ except:
+ sys.excepthook(*sys.exc_info())
+ self.run = run_with_except_hook
+ threading.Thread.__init__ = init
class MyStdErr(object):
def __init__(self, fd):
@@ -52,11 +71,14 @@ def exception_handler(type_, value, trace):
curses.endwin()
curses.echo()
traceback.print_exception(type_, value, trace, None, sys.stderr)
- sys.exit(2)
+ import os # used to quit the program even from a thread
+ os.abort()
sys.excepthook = exception_handler
-import common
+import sys
+import curses
+import signal
from connection import Connection
from multiuserchat import MultiUserChat
@@ -64,7 +86,6 @@ from config import config
from gui import Gui
from curses import initscr
-import signal
signal.signal(signal.SIGINT, signal.SIG_IGN) # ignore ctrl-c
def main():
@@ -80,4 +101,5 @@ def main():
gui.main_loop(stdscr)
if __name__ == '__main__':
+ installThreadExcepthook()
main()
diff --git a/src/user.py b/src/user.py
index ce43aefa..ae369de0 100644
--- a/src/user.py
+++ b/src/user.py
@@ -19,6 +19,7 @@
from random import randrange
from config import config
from datetime import timedelta, datetime
+import curses
class User(object):
"""
@@ -29,6 +30,9 @@ class User(object):
self.update(affiliation, show, status, role)
self.change_nick(nick)
self.color = randrange(2, 10) # assign a random color
+ # if randrange(1) == 0:
+ # self.color = 16
+ # self.color |= curses.A_BOLD
def update(self, affiliation, show, status, role):
self.affiliation = affiliation