fixes the sys.excepthook thread bug, and fix the traceback on joining a room with non-ascii chars

parent 567491ba
......@@ -45,6 +45,7 @@ import sys
import select
import errno
import time
import traceback
import xmpp
......
......@@ -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
......
......@@ -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()
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment