import tp
import util.coroutines as coroutines
-import gtk_toolbox
+import util.misc as misc_utils
_moduleLogger = logging.getLogger("channel.text")
class TextChannel(tp.ChannelTypeText):
- """
- Look into implementing ChannelInterfaceMessages for rich text formatting
- """
+
+ NULL_TIMESTAMP = datetime.datetime(1, 1, 1)
def __init__(self, connection, manager, props, contactHandle):
self.__manager = manager
tp.ChannelTypeText.__init__(self, connection, manager, props)
self.__nextRecievedId = 0
- self.__lastMessageTimestamp = datetime.datetime(1, 1, 1)
+ self.__lastMessageTimestamp = self.NULL_TIMESTAMP
self.__otherHandle = contactHandle
else:
self._report_conversation(mergedConversations)
- @gtk_toolbox.log_exception(_moduleLogger)
+ @misc_utils.log_exception(_moduleLogger)
def Send(self, messageType, text):
if messageType != telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL:
raise telepathy.errors.NotImplemented("Unhandled message type: %r" % messageType)
+ if self.__lastMessageTimestamp == self.NULL_TIMESTAMP:
+ # Hack: GV marks messages as read when they are replied to. If GV
+ # marks them as read than we ignore them. So reduce the window for
+ # them being marked as read. Oh and Conversations already handles
+ # it if the message was already part of a thread, so we can limit
+ # this to if we are trying to start a thread. You might say a
+ # voicemail could be what is being replied to and that doesn't mean
+ # anything. Oh well.
+ try:
+ self._conn.session.texts.update(force=True)
+ except Exception:
+ _moduleLogger.exception(
+ "Update failed when proactively checking for texts"
+ )
+
_moduleLogger.info("Sending message to %r" % (self.__otherHandle, ))
self._conn.session.backend.send_sms(self.__otherHandle.phoneNumber, text)
self._conn.session.textsStateMachine.reset_timers()
self.Sent(int(time.time()), messageType, text)
- @gtk_toolbox.log_exception(_moduleLogger)
+ @misc_utils.log_exception(_moduleLogger)
def Close(self):
self.close()
contactKey = self.__otherHandle.phoneNumber
return contactKey
- @gtk_toolbox.log_exception(_moduleLogger)
+ @misc_utils.log_exception(_moduleLogger)
def _on_conversations_updated(self, conv, conversationIds):
if self._contactKey not in conversationIds:
return
for newMessage in messages:
formattedMessage = self._format_message(newMessage)
self._report_new_message(formattedMessage)
+ for conv in newConversations:
+ conv.isRead = True
def _filter_out_reported(self, conversations):
return (