4 from PyQt4 import QtCore
7 _moduleLogger = logging.getLogger(__name__)
10 class Draft(QtCore.QObject):
12 sendingMessage = QtCore.pyqtSignal()
13 sentMessage = QtCore.pyqtSignal()
14 calling = QtCore.pyqtSignal()
15 called = QtCore.pyqtSignal()
16 cancelling = QtCore.pyqtSignal()
17 cancelled = QtCore.pyqtSignal()
18 error = QtCore.pyqtSignal(str)
20 recipientsChanged = QtCore.pyqtSignal()
26 assert 0 < len(self._contacts)
27 self.sendingMessage.emit()
28 self.error.emit("Not Implemented")
32 assert 0 < len(self._contacts)
34 self.error.emit("Not Implemented")
38 self.cancelling.emit()
39 self.error.emit("Not Implemented")
41 def add_contact(self, contact):
42 assert contact not in self._contacts
43 self._contacts.append(contact)
44 self.recipientsChanged.emit()
46 def remove_contact(self, contact):
47 assert contact not in self._contacts
48 self._contacts.remove(contact)
49 self.recipientsChanged.emit()
51 def get_contacts(self, contact):
56 self.recipientsChanged.emit()
59 class Session(QtCore.QObject):
61 stateChange = QtCore.pyqtSignal(str)
62 loggedOut = QtCore.pyqtSignal()
63 loggedIn = QtCore.pyqtSignal()
64 callbackNumberChanged = QtCore.pyqtSignal(str)
66 contactsUpdated = QtCore.pyqtSignal()
67 messagesUpdated = QtCore.pyqtSignal()
68 historyUpdated = QtCore.pyqtSignal()
69 dndStateChange = QtCore.pyqtSignal(bool)
71 error = QtCore.pyqtSignal(str)
73 LOGGEDOUT_STATE = "logged out"
74 LOGGINGIN_STATE = "logging in"
75 LOGGEDIN_STATE = "logged in"
80 def __init__(self, cachePath = None):
81 QtCore.QObject.__init__(self)
82 self._loggedInTime = self._LOGGEDOUT_TIME
84 self._cachePath = cachePath
96 self._LOGGEDOUT_TIME: self.LOGGEDOUT_STATE,
97 self._LOGGINGIN_TIME: self.LOGGINGIN_STATE,
98 }.get(self._loggedInTime, default=self.LOGGEDIN_STATE)
104 def login(self, username, password):
105 assert self.state == self.LOGGEDOUT_STATE
106 if self._cachePath is not None:
107 cookiePath = os.path.join(self._cachePath, "%s.cookies" % username)
111 self.error.emit("Not Implemented")
113 # if the username is the same, do nothing
114 # else clear the in-memory caches and attempt to load from file-caches
115 # If caches went from empty to something, fire signals
118 assert self.state != self.LOGGEDOUT_STATE
119 self.error.emit("Not Implemented")
122 assert self.state == self.LOGGEDOUT_STATE
125 self.contactsUpdated.emit()
127 self.messagesUpdated.emit()
129 self.historyUpdated.emit()
131 self.dndStateChange.emit(self._dnd)
133 def update_contacts(self):
134 self._perform_op_while_loggedin(self._update_contacts)
136 def get_contacts(self):
137 return self._contacts
139 def update_messages(self):
140 self._perform_op_while_loggedin(self._update_messages)
142 def get_messages(self):
143 return self._messages
145 def update_history(self):
146 self._perform_op_while_loggedin(self._update_history)
148 def get_history(self):
151 def update_dnd(self):
152 self._perform_op_while_loggedin(self._update_dnd)
154 def set_dnd(self, dnd):
155 assert self.state == self.LOGGEDIN_STATE
156 self.error.emit("Not Implemented")
161 def get_callback_numbers(self):
164 def get_callback_number(self):
167 def set_callback_number(self):
168 assert self.state == self.LOGGEDIN_STATE
169 self.error.emit("Not Implemented")
171 def _update_contacts(self):
172 self.error.emit("Not Implemented")
174 def _update_messages(self):
175 self.error.emit("Not Implemented")
177 def _update_history(self):
178 self.error.emit("Not Implemented")
180 def _update_dnd(self):
181 self.error.emit("Not Implemented")
183 def _perform_op_while_loggedin(self, op):
184 if self.state == self.LOGGEDIN_STATE:
187 self._push_login_op(op)
189 def _push_login_op(self, op):
190 assert self.state != self.LOGGEDIN_STATE
191 if op in self._loginOps:
192 _moduleLogger.info("Skipping queueing duplicate op: %r" % op)
194 self._loginOps.append(op)