import time
+import datetime
import logging
import telepathy
class TextChannel(tp.ChannelTypeText):
+ OLDEST_MESSAGE_WINDOW = datetime.timedelta(days=1)
+
def __init__(self, connection, manager, props, contactHandle):
self.__manager = manager
self.__props = props
self.__callback
)
- self._filter_out_reported = gvoice.conversations.FilterOutReported()
-
# The only reason there should be anything in the conversation is if
# its new, so report it all
try:
# Can't filter out messages in a texting conversation that came in
# before the last one sent because that creates a race condition of two
# people sending at about the same time, which happens quite a bit
+ postUpdateLen = len(newConversations)
newConversations = gvoice.conversations.filter_out_self(newConversations)
- newConversations = self._filter_out_reported(newConversations)
+ newConversations = list(newConversations)
+ postSelfLen = len(newConversations)
+ if postSelfLen < postUpdateLen:
+ self._conn.log_to_user(__name__, "Dropped %s messages due to being from self" % (postUpdateLen - postSelfLen))
+ if not newConversations:
+ _moduleLogger.debug(
+ "New messages for %r are from yourself" % (self._contactKey, )
+ )
+ return
+
newConversations = gvoice.conversations.filter_out_read(newConversations)
newConversations = list(newConversations)
+ postReadLen = len(newConversations)
+ if postReadLen < postReportedLen:
+ self._conn.log_to_user(__name__, "Dropped %s messages due to already being read" % (postReportedLen - postReadLen))
if not newConversations:
_moduleLogger.debug(
"New messages for %r have already been read externally" % (self._contactKey, )
return
messages = [
- (newMessage, newConversation.time)
+ (newMessage, newConversation)
for newConversation in newConversations
for newMessage in newConversation.messages
if not gvoice.conversations.is_message_from_self(newMessage)
"How did this happen for %r?" % (self._contactKey, )
)
return
- for newMessage, convTime in messages:
+
+ now = datetime.datetime.now()
+ for newMessage, conv in messages:
+ if self.OLDEST_MESSAGE_WINDOW < (now - conv.time):
+ _moduleLogger.warning("Why are we reporting a message that is so old?")
+ _moduleLogger.warning("\t%r %r (%r) with %r messages" % (conv.number, conv.id, conv.time, len(conv.messages)))
formattedMessage = self._format_message(newMessage)
- self._report_new_message(formattedMessage, convTime)
+ self._report_new_message(formattedMessage, conv.time)
for conv in mergedConversations.conversations:
conv.isRead = True