Improving support for a worker thread and moving more code over to it
[theonering] / src / gvoice / session.py
index 5fb5a95..8151c05 100644 (file)
@@ -150,25 +150,27 @@ class Session(object):
                self._masterStateMachine.close()
 
        def login(self, username, password, on_success, on_error):
-               self._username = username
-               self._password = password
                self._asyncPool.start()
-               self._asyncPool.add_task(
-                       self._backend.login,
-                       (self._username, self._password),
-                       {},
-                       self.__on_login_success(on_success),
-                       on_error
-               )
 
-       def __on_login_success(self, user_success):
+               le = gobject_utils.AsyncLinearExecution(self._asyncPool, self._login)
+               le.start(username, password, on_success, on_error)
 
-               @misc_utils.log_exception(_moduleLogger)
-               def _actual_success(*args, **kwds):
-                       self._masterStateMachine.start()
-                       user_success(*args, **kwds)
+       @misc_utils.log_exception(_moduleLogger)
+       def _login(self, username, password, on_success, on_error):
+               self._username = username
+               self._password = password
+               try:
+                       isLoggedIn = yield (
+                               self._backend.login,
+                               (self._username, self._password),
+                               {},
+                       )
+               except Exception, e:
+                       on_error(e)
+                       return
 
-               return _actual_success
+               self._masterStateMachine.start()
+               on_success(isLoggedIn)
 
        def logout(self):
                self._asyncPool.stop()