From 94153c490b3ec2dc029a90d179b3cde335060294 Mon Sep 17 00:00:00 2001 From: "louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13" Date: Wed, 4 Aug 2010 23:54:02 +0000 Subject: fixes the sys.excepthook thread bug, and fix the traceback on joining a room with non-ascii chars --- src/common.py | 1 + src/gui.py | 4 +++- src/poezio.py | 32 +++++++++++++++++++++++++++----- src/user.py | 4 ++++ 4 files changed, 35 insertions(+), 6 deletions(-) (limited to 'src') 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 -- cgit v1.2.3