import webbrowser
import datetime
import urlparse
+import base64
import gobject
import gtk
return token
-def start_session(credentialsDialog):
+def get_credentials(credentialsDialog):
# @todo Figure out storage of credentials
username, password = credentialsDialog.request_credentials()
token = get_token(username, rtmilk.RtMilkManager.API_KEY, rtmilk.RtMilkManager.SECRET)
- return rtmilk.RtMilkManager(username, password, token)
+ return username, password, token
class GtkRtMilk(object):
self._onClearId = None
self._onPasteId = None
- self._credentials = gtk_toolbox.LoginWindow(widgetTree)
+ self._credentialsDialog = gtk_toolbox.LoginWindow(widgetTree)
+ self._credentials = "", "", ""
self._manager = None
@staticmethod
def name():
return "Remember The Milk"
- def enable(self):
+ def load_settings(self, config):
+ """
+ @note Thread Agnostic
+ """
+ username = config.get(self.name(), "username")
+ password = None
+ blobbedToken = config.get(self.name(), "bin_blob")
+ token = base64.b64decode(blobbedToken)
+ self._credentials = username, password, token
+
+ def save_settings(self, config):
+ """
+ @note Thread Agnostic
+ """
+ config.add_section(self.name())
+ config.set(self.name(), "username", self._credentials[0])
+ blobbedToken = base64.b64encode(self._credentials[2])
+ config.set(self.name(), "bin_blob", blobbedToken)
+
+ def login(self):
"""
@note UI Thread
"""
- self._manager = start_session(self._credentials)
+ if self._manager is not None:
+ return
+
+ credentials = self._credentials
+ while True:
+ try:
+ self._manager = rtmilk.RtMilkManager(*credentials)
+ self._credentials = credentials
+ return # Login succeeded
+ except rtmapi.AuthStateMachine.NoData:
+ # Login failed, grab new credentials
+ credentials = get_credentials(self._credentialsDialog)
+
+ def logout(self):
+ """
+ @note Thread Agnostic
+ """
+ self._credentials = "", "", ""
+ self._manager = None
+ def enable(self):
+ """
+ @note UI Thread
+ """
self._projectsList.clear()
self._populate_projects()