diff --git a/mitterlib/network/networkbase.py b/mitterlib/network/networkbase.py index 6a7aad7..d6b02a6 100644 --- a/mitterlib/network/networkbase.py +++ b/mitterlib/network/networkbase.py @@ -95,7 +95,7 @@ class NetworkInvalidResponseError(NetworkError): self.name = network_name def __str__(self): - return _('The server on %s return the information in an ' \ + return _('The server on %s returned the information in an ' \ 'unexpected way.') % (self.name) pass diff --git a/mitterlib/network/twitter.py b/mitterlib/network/twitter.py index b1aed6e..5421393 100644 --- a/mitterlib/network/twitter.py +++ b/mitterlib/network/twitter.py @@ -61,6 +61,7 @@ _log = logging.getLogger('mitterlib.network.Twitter') # ---------------------------------------------------------------------- _month_names = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] +_punctuation = string.punctuation.replace('_', '') def _unhtml(text): @@ -173,10 +174,10 @@ class TwitterNetworkData(NetworkData): self.message = _unhtml(data['text']) # regular expression for users - self.user_regexp = r'@[^ ' + string.punctuation + ']' + self.user_regexp = r'@[^ ' + _punctuation + ']+' # regular expression for hashtags - self.tag_regexp = r'#[^ ' + string.punctuation + ']' + self.tag_regexp = r'#[^ ' + _punctuation + ']+' return diff --git a/mitterlib/ui/helpers/gtk_messagegrid.py b/mitterlib/ui/helpers/gtk_messagegrid.py index 17edfb6..f128e3c 100644 --- a/mitterlib/ui/helpers/gtk_messagegrid.py +++ b/mitterlib/ui/helpers/gtk_messagegrid.py @@ -393,14 +393,29 @@ class MessageGrid(gtk.ScrolledWindow, gobject.GObject): """Update the grid with new messages.""" self._grid.freeze_notify() store = self._grid.get_model() + + # disconnect the store, so we are free to add rows without hogging the + # system. Also, save the current selection and grid position so it can + # be restore (selecting is lost when the model is connected and the + # view moves with the new elements.) + (model, iter) = self._grid.get_selection().get_selected() + self._grid.set_model(None) + for message in messages: message.read = False store.prepend([message]) - store.sort_column_changed() + + # reconnect the store and re-select the previously selected line + self._grid.set_model(store) + if iter: + self._grid.get_selection().select_iter(iter) + self._grid.thaw_notify() self._grid.queue_draw() - self.count += len(messages) + new_messages = len(messages) + _log.debug('%d new messages', new_messages) + self.count += new_messages return def clear_posts(self):