Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/extensions/web/twitter/account.py
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/web/twitter/account.py')
-rw-r--r--extensions/web/twitter/account.py84
1 files changed, 51 insertions, 33 deletions
diff --git a/extensions/web/twitter/account.py b/extensions/web/twitter/account.py
index a2e4bf0..934396d 100644
--- a/extensions/web/twitter/account.py
+++ b/extensions/web/twitter/account.py
@@ -35,6 +35,7 @@ from gi.repository import GObject
from sugar3.datastore import datastore
from sugar3.graphics.alert import NotifyAlert
from sugar3.graphics.icon import Icon
+from sugar3.graphics.menuitem import MenuItem
from jarabe.journal import journalwindow
from jarabe.web import account
@@ -51,7 +52,7 @@ COMMENT_IDS = 'twr_comment_ids'
COMMENT_LAST_ID = 'last_comment_id'
-class TwitterAccount(account.Account):
+class Account(account.Account):
CONSUMER_TOKEN_KEY = "/desktop/sugar/collaboration/twitter_consumer_token"
CONSUMER_SECRET_KEY = "/desktop/sugar/collaboration/twitter_consumer_secret"
@@ -62,37 +63,56 @@ class TwitterAccount(account.Account):
self._client = GConf.Client.get_default()
ctoken, csecret, atoken, asecret = self._access_tokens()
TwrAccount.set_secrets(ctoken, csecret, atoken, asecret)
- self._alert = None
+ self._shared_journal_entry = None
def get_description(self):
return ACCOUNT_NAME
- def is_configured(self):
- return None not in self._access_tokens()
+ def get_token_state(self):
+ if None in self._access_tokens():
+ return self.STATE_NONE
+ else:
+ # No expiration date
+ return self.STATE_VALID
+
+ def _access_tokens(self):
+ return (self._client.get_string(self.CONSUMER_TOKEN_KEY),
+ self._client.get_string(self.CONSUMER_SECRET_KEY),
+ self._client.get_string(self.ACCESS_TOKEN_KEY),
+ self._client.get_string(self.ACCESS_SECRET_KEY))
- def is_active(self):
- # No expiration date
- return None not in self._access_tokens()
+ def get_shared_journal_entry(self):
+ if self._shared_journal_entry is None:
+ self._shared_journal_entry = _SharedJournalEntry(self)
+ return self._shared_journal_entry
+
+class _SharedJournalEntry(account.SharedJournalEntry):
+ __gsignals__ = {
+ 'transfer-state-changed': (GObject.SignalFlags.RUN_FIRST, None,
+ ([str])),
+ }
+ def __init__(self, twaccount):
+ self._account = twaccount
+ self._alert = None
def get_share_menu(self, journal_entry_metadata):
- twr_share_menu = _TwitterShareMenu(journal_entry_metadata,
- self.is_active())
- self._connect_transfer_signals(twr_share_menu)
- return twr_share_menu
+ menu = _ShareMenu(
+ journal_entry_metadata,
+ self._account.get_token_state() == self._account.STATE_VALID)
+ self._connect_transfer_signals(menu)
+ return menu
def get_refresh_menu(self):
- twr_refresh_menu = _TwitterRefreshMenu(self.is_active())
- self._connect_transfer_signals(twr_refresh_menu)
- return twr_refresh_menu
+ menu = _RefreshMenu(
+ self._account.get_token_state() == self._account.STATE_VALID)
+ self._connect_transfer_signals(menu)
+ return menu
def _connect_transfer_signals(self, transfer_widget):
transfer_widget.connect('transfer-state-changed',
self._transfer_state_changed_cb)
def _transfer_state_changed_cb(self, widget, state_message):
- logging.debug('_transfer_state_changed_cb')
-
- # First, remove any existing alert
if self._alert is None:
self._alert = NotifyAlert()
self._alert.props.title = ACCOUNT_NAME
@@ -107,18 +127,11 @@ class TwitterAccount(account.Account):
journalwindow.get_journal_window().remove_alert(alert)
self._alert = None
- def _access_tokens(self):
- return (self._client.get_string(self.CONSUMER_TOKEN_KEY),
- self._client.get_string(self.CONSUMER_SECRET_KEY),
- self._client.get_string(self.ACCESS_TOKEN_KEY),
- self._client.get_string(self.ACCESS_SECRET_KEY))
-
-class _TwitterShareMenu(account.MenuItem):
- __gtype_name__ = 'JournalTwitterMenu'
+class _ShareMenu(MenuItem):
def __init__(self, metadata, is_active):
- account.MenuItem.__init__(self, ACCOUNT_NAME)
+ MenuItem.__init__(self, ACCOUNT_NAME)
if is_active:
icon_name = 'twitter-share'
@@ -183,9 +196,9 @@ class _TwitterShareMenu(account.MenuItem):
pixbuf.savev(image_path, 'png', [], [])
-class _TwitterRefreshMenu(account.MenuItem):
+class _RefreshMenu(MenuItem):
def __init__(self, is_active):
- account.MenuItem.__init__(self, ACCOUNT_NAME)
+ MenuItem.__init__(self, ACCOUNT_NAME)
self._is_active = is_active
self._metadata = None
@@ -217,11 +230,14 @@ class _TwitterRefreshMenu(account.MenuItem):
logging.debug('_twr_refresh_menu_clicked_cb')
if self._metadata is None:
- logging.debug('_twr_refresh_menu_clicked_cb called without metadata')
+ logging.debug(
+ '_twr_refresh_menu_clicked_cb called without metadata')
return
if 'twr_object_id' not in self._metadata:
- logging.debug('_twr_refresh_menu_clicked_cb called without twr_object_id in metadata')
+ logging.debug(
+ '_twr_refresh_menu_clicked_cb called without twr_object_id \
+in metadata')
return
self.emit('transfer-state-changed', _('Download started'))
@@ -234,7 +250,8 @@ class _TwitterRefreshMenu(account.MenuItem):
status_id = ds_object.metadata[COMMENT_LAST_ID]
timeline = TwrTimeline()
- timeline.connect('mentions-downloaded', self._twr_mentions_downloaded_cb)
+ timeline.connect('mentions-downloaded',
+ self._twr_mentions_downloaded_cb)
timeline.mentions_timeline(since_id=status_id)
def _twr_mentions_downloaded_cb(self, timeline, comments):
@@ -254,7 +271,8 @@ class _TwitterRefreshMenu(account.MenuItem):
new_comment = False
for comment in comments:
# XXX hope for a better API
- if comment['in_reply_to_status_id_str'] != self._metadata['twr_object_id']:
+ if comment['in_reply_to_status_id_str'] != \
+ self._metadata['twr_object_id']:
continue
if comment['id_str'] not in ds_comment_ids:
@@ -280,4 +298,4 @@ class _TwitterRefreshMenu(account.MenuItem):
logging.debug('_twr_comments_download_failed_cb: %s' % (failed_reason))
def get_account():
- return TwitterAccount()
+ return Account()