2 @todo Remove blocking operations from UI thread
16 def get_token(username, apiKey, secret):
18 rtm = rtm_api.RTMapi(username, apiKey, secret, token)
20 authURL = rtm.getAuthURL()
21 webbrowser.open(authURL)
22 mb = gtk_toolbox.MessageBox2("You need to authorize DoneIt with\nRemember The Milk.\nClick OK after you authorize.")
25 token = rtm.getToken()
29 def get_credentials(credentialsDialog):
30 # @todo Pass in parent window
31 username, password = credentialsDialog.request_credentials()
32 token = get_token(username, rtm_backend.RtmBackend.API_KEY, rtm_backend.RtmBackend.SECRET)
33 return username, password, token
36 class RtmView(common_view.CommonView):
38 def __init__(self, widgetTree, errorDisplay):
39 super(RtmView, self).__init__(widgetTree, errorDisplay)
40 self._credentials = "", "", ""
41 self._credentialsDialog = gtk_toolbox.LoginWindow(widgetTree)
45 return "Remember The Milk"
47 def load_settings(self, config):
52 config.get(self.name(), "bin_blob_%i" % i)
53 for i in xrange(len(self._credentials))
56 base64.b64decode(blob)
59 self._credentials = tuple(creds)
61 def save_settings(self, config):
65 config.add_section(self.name())
66 for i, value in enumerate(self._credentials):
67 blob = base64.b64encode(value)
68 config.set(self.name(), "bin_blob_%i" % i, blob)
74 if self._manager is not None:
77 credentials = self._credentials
80 self._manager = rtm_backend.RtmBackend(*credentials)
81 self._manager = cache_backend.LazyCacheBackend(self._manager)
82 self._credentials = credentials
83 return # Login succeeded
84 except rtm_api.AuthStateMachine.NoData:
85 # Login failed, grab new credentials
86 credentials = get_credentials(self._credentialsDialog)
92 self._credentials = "", "", ""