def add_contact(self, contactId, title, description, numbersWithDescriptions):
if self._busyReason is not None:
raise RuntimeError("Please wait for %r" % self._busyReason)
- if contactId in self._contacts:
- _moduleLogger.info("Adding duplicate contact %r" % contactId)
- # @todo Remove this evil hack to re-popup the dialog
- self.recipientsChanged.emit()
- return
+ # Allow overwriting of contacts so that the message can be updated and the SMS dialog popped back up
contactDetails = _DraftContact(title, description, numbersWithDescriptions)
self._contacts[contactId] = contactDetails
self.recipientsChanged.emit()
contactsUpdated = QtCore.pyqtSignal()
messagesUpdated = QtCore.pyqtSignal()
+ newMessages = QtCore.pyqtSignal()
historyUpdated = QtCore.pyqtSignal()
dndStateChange = QtCore.pyqtSignal(bool)
self._contacts = {}
self._contactUpdateTime = datetime.datetime(1971, 1, 1)
self._messages = []
+ self._cleanMessages = []
self._messageUpdateTime = datetime.datetime(1971, 1, 1)
self._history = []
self._historyUpdateTime = datetime.datetime(1971, 1, 1)
self._loggedInTime = self._LOGGEDOUT_TIME
self.error.emit("Error logging in")
except Exception, e:
+ _moduleLogger.exception("Booh")
self._loggedInTime = self._LOGGEDOUT_TIME
_moduleLogger.exception("Reporting error to user")
self.error.emit(str(e))
self._contacts = {}
self._messages = []
+ self._cleanMessages = []
self._history = []
self._dnd = False
self._callback = ""
try:
with open(cachePath, "rb") as f:
dumpedData = pickle.load(f)
- except (pickle.PickleError, IOError, EOFError, ValueError):
+ except (pickle.PickleError, IOError, EOFError, ValueError, ImportError):
_moduleLogger.exception("Pickle fun loading")
return False
except:
self._contacts = contacts
self._contactUpdateTime = contactUpdateTime
self._messages = messages
+ self._alert_on_messages(self._messages)
self._messageUpdateTime = messageUpdateTime
self._history = history
self._historyUpdateTime = historyUpdateTime
return
self._messageUpdateTime = datetime.datetime.now()
self.messagesUpdated.emit()
+ self._alert_on_messages(self._messages)
def _update_history(self):
try:
_moduleLogger.info("Skipping queueing duplicate op: %r" % asyncOp)
return
self._loginOps.append(asyncOp)
+
+ def _alert_on_messages(self, messages):
+ cleanNewMessages = list(self._clean_messages(messages))
+ if self._cleanMessages:
+ if self._cleanMessages != cleanNewMessages:
+ self.newMessages.emit()
+ self._cleanMessages = cleanNewMessages
+
+ def _clean_messages(self, messages):
+ for message in messages:
+ cleaned = dict(
+ kv
+ for kv in message.iteritems()
+ if kv[0] not in
+ [
+ "relTime",
+ "time",
+ "isArchived",
+ "isRead",
+ "isSpam",
+ "isTrash",
+ ]
+ )
+
+ # Don't let outbound messages cause alerts, especially if the package has only outbound
+ cleaned["messageParts"] = [
+ tuple(part[0:-1]) for part in cleaned["messageParts"] if part[0] != "Me:"
+ ]
+ if not cleaned["messageParts"]:
+ continue
+
+ yield cleaned