def on_nav(e=None, b=None, url=None, *a, **k): if not window.ie: e.Skip() #careful with name collision url = e.URL try: parsed = UrlQuery.parse(url) except Exception: traceback.print_exc() else: log.info('url: %r', url) log.info('in: %r', 'session' in parsed['query']) if 'session' in parsed['query']: #not sure how to clean this up right now. session = parsed['query'].get('session') log.info('parsed: %r', parsed) parsed_base = dict(parsed) parsed_base.pop('query') self.api.set_session(session) self.api.logged_in = True if not getattr(self, 'dead', False): self.dead = True self.finish_init(True, callback, register, on_success, on_fail, invisible, do_conn_fail) return
def on_nav(e = None, b = None, url=None, *a, **k): if not window.ie: e.Skip() #careful with name collision url = e.URL try: parsed = UrlQuery.parse(url) except Exception: traceback.print_exc() else: log.info('url: %r', url) log.info('in: %r', 'session' in parsed['query']) if 'session' in parsed['query']: #not sure how to clean this up right now. session = parsed['query'].get('session') log.info('parsed: %r', parsed) parsed_base = dict(parsed) parsed_base.pop('query') self.api.set_session(session) self.api.logged_in = True if not getattr(self, 'dead', False): self.dead = True self.finish_init(True, callback, register, on_success, on_fail, invisible, do_conn_fail) return
def on_call(self, json_obj, webview=None): params = json_obj.get('params') method = json_obj.get('method') id_ = json_obj.get('id') events = self.protocol.events try: call = getattr(self, 'on_call_' + method) call.__call__ except AttributeError: pass else: if call.func_code.co_argcount < 3: return call(params[0]) elif call.func_code.co_argcount < 4: return call(params[0], id_) else: return call(params[0], id_, webview) if method == 'viewChanged': feedName = params[0].get('feedName') events.on_view(feedName) elif method == 'following': following = params[0].get('following') events.following(following) elif method == 'state': state = params[0].get('state') if state is not None: events.state_changed(state) elif method == 'received_whole_update': events.received_whole_update() elif method == 'trends': trends = params[0].get('trends', None) if trends is not None: events.trends(trends) elif method == 'recentTimeline': tweets = params[0].get('tweets') events.recent_timeline(tweets) elif method == 'selfTweet': tweet = params[0].get('tweet') events.self_tweet(tweet) elif params: param = params[0] if param is not None and isinstance(param, dict): url = param.get('url') if url and url.startswith('digsby:'): url = UrlQuery.parse('http' + url[6:], utf8=True) # UrlQuery doesn't like digsby:// q = url['query'].get netloc = url['netloc'] if netloc == 'reply': id, screen_name, text = q('id'), q('screen_name'), q('text') if id and screen_name: self.protocol.on_reply(id, screen_name, text) elif netloc == 'retweet': id, screen_name, text = q('id'), q('screen_name'), q('text') if id and screen_name: self.protocol.on_retweet(id, screen_name, text) elif netloc == 'direct': screen_name = q('screen_name') if screen_name: self.protocol.on_direct(screen_name)
def initialize(self, username, password, userfeeds=None, accountopts=None): self.username = username self.password = password userfeeds = [] if userfeeds is None else userfeeds def when_load(): self.protocol._verify_databases() self.evaljs('window.resdir = %s' % simplejson.dumps((path(__file__).parent / 'res').url())) def success(token): opts = dict(username=self.username, password=self.password, feeds=userfeeds, accountopts=accountopts or {}) if token is not None: assert hasattr(token, 'key'), repr(token) opts.update(oauthTokenKey = token.key, oauthTokenSecret = token.secret, oauthConsumerKey = twitter_auth.CONSUMER_KEY, oauthConsumerSecret = twitter_auth.CONSUMER_SECRET) time_correction = twitter_auth.get_time_correction() if time_correction is not None: opts['accountopts'].update(timeCorrectionSecs=-time_correction) self.JSCall('initialize', **opts) api_server = getattr(self.protocol.account, 'api_server', None) if api_server is not None: return success(None) if self.oauth_token is not None: try: token = OAuthToken.from_string(self.oauth_token) except Exception: traceback.print_exc() else: log.info('using token stored in account') return success(token) def on_token(token): token_string = token.to_string() log.info('on_token received token from network: %r', token_string[:5]) self.protocol.account.update_info(oauth_token=token_string) success(token) def on_token_error(e): errcode = getattr(e, 'code', None) # if obtaining an token fails, it may be because our time is set incorrectly. # we can use the Date: header returned by Twitter's servers to adjust for # this. if errcode == 401: server_date = getattr(e, 'hdrs', {}).get('Date', None) retries_after_401 = getattr(self.protocol, 'retries_after_401', 0) if server_date and retries_after_401 < 1: self.protocol.retries_after_401 = retries_after_401 + 1 log.warning('on_token_error: server date is %r', server_date) server_date = parse_http_date(server_date) log.warning('on_token_Error: RETRYING WITH NEW SERVER DATE %r', server_date) twitter_auth.set_server_timestamp(server_date) return twitter_auth.get_oauth_token(self.username, self.password, success=on_token, error=on_token_error) state = 'autherror' if errcode == 401 else 'connfail' log.error('on_token_error: e.code is %r', errcode) log.error(' changing state to %r', state) self.protocol.events.state_changed(state) log.info('getting new oauth token from network') twitter_auth.get_oauth_token(self.username, self.password, success=on_token, error=on_token_error) self.when_load = when_load url = APP_PATH.url() from gui.browser import webkit webkit.update_origin_whitelist(url, 'https', 'twitter.com', True) webkit.update_origin_whitelist(url, 'http', 'twitter.com', True) api_server = getattr(self.protocol.account, 'api_server', None) if api_server is not None: api = UrlQuery.parse(api_server) webkit.update_origin_whitelist(url, api['scheme'], api['netloc'], True) self.bridge.LoadURL(url)
def urls_have_same_domain(a, b): try: return UrlQuery.parse(a).netloc == UrlQuery.parse(b).netloc except Exception: traceback.print_exc_once() return a == b
def on_call(self, json_obj, webview=None): params = json_obj.get('params') method = json_obj.get('method') id_ = json_obj.get('id') events = self.protocol.events try: call = getattr(self, 'on_call_' + method) call.__call__ except AttributeError: pass else: if call.func_code.co_argcount < 3: return call(params[0]) elif call.func_code.co_argcount < 4: return call(params[0], id_) else: return call(params[0], id_, webview) if method == 'viewChanged': feedName = params[0].get('feedName') events.on_view(feedName) elif method == 'following': following = params[0].get('following') events.following(following) elif method == 'state': state = params[0].get('state') if state is not None: events.state_changed(state) elif method == 'received_whole_update': events.received_whole_update() elif method == 'trends': trends = params[0].get('trends', None) if trends is not None: events.trends(trends) elif method == 'recentTimeline': tweets = params[0].get('tweets') events.recent_timeline(tweets) elif method == 'selfTweet': tweet = params[0].get('tweet') events.self_tweet(tweet) elif params: param = params[0] if param is not None and isinstance(param, dict): url = param.get('url') if url and url.startswith('digsby:'): url = UrlQuery.parse( 'http' + url[6:], utf8=True) # UrlQuery doesn't like digsby:// q = url['query'].get netloc = url['netloc'] if netloc == 'reply': id, screen_name, text = q('id'), q('screen_name'), q( 'text') if id and screen_name: self.protocol.on_reply(id, screen_name, text) elif netloc == 'retweet': id, screen_name, text = q('id'), q('screen_name'), q( 'text') if id and screen_name: self.protocol.on_retweet(id, screen_name, text) elif netloc == 'direct': screen_name = q('screen_name') if screen_name: self.protocol.on_direct(screen_name)
def initialize(self, username, password, userfeeds=None, accountopts=None): self.username = username self.password = password userfeeds = [] if userfeeds is None else userfeeds def when_load(): self.protocol._verify_databases() self.evaljs('window.resdir = %s' % simplejson.dumps( (path(__file__).parent / 'res').url())) def success(token): opts = dict(username=self.username, password=self.password, feeds=userfeeds, accountopts=accountopts or {}) if token is not None: assert hasattr(token, 'key'), repr(token) opts.update( oauthTokenKey=token.key, oauthTokenSecret=token.secret, oauthConsumerKey=twitter_auth.CONSUMER_KEY, oauthConsumerSecret=twitter_auth.CONSUMER_SECRET) time_correction = twitter_auth.get_time_correction() if time_correction is not None: opts['accountopts'].update( timeCorrectionSecs=-time_correction) self.JSCall('initialize', **opts) api_server = getattr(self.protocol.account, 'api_server', None) if api_server is not None: return success(None) if self.oauth_token is not None: try: token = OAuthToken.from_string(self.oauth_token) except Exception: traceback.print_exc() else: log.info('using token stored in account') return success(token) def on_token(token): token_string = token.to_string() log.info('on_token received token from network: %r', token_string[:5]) self.protocol.account.update_info(oauth_token=token_string) success(token) def on_token_error(e): errcode = getattr(e, 'code', None) # if obtaining an token fails, it may be because our time is set incorrectly. # we can use the Date: header returned by Twitter's servers to adjust for # this. if errcode == 401: server_date = getattr(e, 'hdrs', {}).get('Date', None) retries_after_401 = getattr(self.protocol, 'retries_after_401', 0) if server_date and retries_after_401 < 1: self.protocol.retries_after_401 = retries_after_401 + 1 log.warning('on_token_error: server date is %r', server_date) server_date = parse_http_date(server_date) log.warning( 'on_token_Error: RETRYING WITH NEW SERVER DATE %r', server_date) twitter_auth.set_server_timestamp(server_date) return twitter_auth.get_oauth_token( self.username, self.password, success=on_token, error=on_token_error) state = 'autherror' if errcode == 401 else 'connfail' log.error('on_token_error: e.code is %r', errcode) log.error(' changing state to %r', state) self.protocol.events.state_changed(state) log.info('getting new oauth token from network') twitter_auth.get_oauth_token(self.username, self.password, success=on_token, error=on_token_error) self.when_load = when_load url = APP_PATH.url() from gui.browser import webkit webkit.update_origin_whitelist(url, 'https', 'twitter.com', True) webkit.update_origin_whitelist(url, 'http', 'twitter.com', True) api_server = getattr(self.protocol.account, 'api_server', None) if api_server is not None: api = UrlQuery.parse(api_server) webkit.update_origin_whitelist(url, api['scheme'], api['netloc'], True) self.bridge.LoadURL(url)
def urls_have_same_domain(a, b): try: return UrlQuery.parse(a).netloc == UrlQuery.parse(b).netloc except Exception: traceback.print_exc_once() return a == b