Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/extensions/web/facebook/account.py
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/web/facebook/account.py')
-rw-r--r--extensions/web/facebook/account.py85
1 files changed, 55 insertions, 30 deletions
diff --git a/extensions/web/facebook/account.py b/extensions/web/facebook/account.py
index f105fdb..a97e565 100644
--- a/extensions/web/facebook/account.py
+++ b/extensions/web/facebook/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
@@ -47,7 +48,8 @@ ACCOUNT_NAME = _('Facebook')
COMMENTS = 'comments'
COMMENT_IDS = 'fb_comment_ids'
-class FacebookAccount(account.Account):
+
+class Account(account.Account):
ACCESS_TOKEN_KEY = "/desktop/sugar/collaboration/facebook_access_token"
ACCESS_TOKEN_KEY_EXPIRATION_DATE = \
@@ -56,29 +58,51 @@ class FacebookAccount(account.Account):
def __init__(self):
self._client = GConf.Client.get_default()
facebook.FbAccount.set_access_token(self._access_token())
- self._alert = None
+ self._shared_journal_entry = None
def get_description(self):
return ACCOUNT_NAME
- def is_configured(self):
- return self._access_token() is not None
-
- def is_active(self):
+ def get_token_state(self):
+ if self._access_token() is None:
+ return self.STATE_NONE
expiration_date = \
self._client.get_int(self.ACCESS_TOKEN_KEY_EXPIRATION_DATE)
- return expiration_date != 0 and expiration_date > time.time()
+ if expiration_date != 0 and expiration_date > time.time():
+ return self.STATE_VALID
+ else:
+ return self.STATE_EXPIRED
+
+ def _access_token(self):
+ return self._client.get_string(self.ACCESS_TOKEN_KEY)
+
+ 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, fbaccount):
+ self._account = fbaccount
+ self._alert = None
def get_share_menu(self, journal_entry_metadata):
- fb_share_menu = _FacebookShareMenu(journal_entry_metadata,
- self.is_active())
- self._connect_transfer_signals(fb_share_menu)
- return fb_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):
- fb_refresh_menu = _FacebookRefreshMenu(self.is_active())
- self._connect_transfer_signals(fb_refresh_menu)
- return fb_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',
@@ -89,7 +113,6 @@ class FacebookAccount(account.Account):
# First, remove any existing alert
if self._alert is None:
- logging.debug('creating new alert')
self._alert = NotifyAlert()
self._alert.props.title = ACCOUNT_NAME
self._alert.connect('response', self._alert_response_cb)
@@ -103,15 +126,15 @@ class FacebookAccount(account.Account):
journalwindow.get_journal_window().remove_alert(alert)
self._alert = None
- def _access_token(self):
- return self._client.get_string(self.ACCESS_TOKEN_KEY)
-
-class _FacebookShareMenu(account.MenuItem):
- __gtype_name__ = 'JournalFacebookMenu'
+class _ShareMenu(MenuItem):
+ __gsignals__ = {
+ 'transfer-state-changed': (GObject.SignalFlags.RUN_FIRST, None,
+ ([str])),
+ }
def __init__(self, metadata, is_active):
- account.MenuItem.__init__(self, ACCOUNT_NAME)
+ MenuItem.__init__(self, ACCOUNT_NAME)
if is_active:
icon_name = 'facebook-share'
@@ -143,8 +166,6 @@ class _FacebookShareMenu(account.MenuItem):
photo.connect('photo-create-failed',
self._photo_create_failed_cb,
tmp_file)
- photo.connect('transfer-state-changed',
- self._transfer_state_changed_cb)
GObject.idle_add(photo.create, tmp_file)
@@ -163,8 +184,8 @@ class _FacebookShareMenu(account.MenuItem):
ds_object.metadata['fb_object_id'] = fb_object_id
datastore.write(ds_object, update_mtime=False)
except Exception as ex:
- logging.debug("_photo_created_cb failed to write to datastore: " % \
- str(ex))
+ logging.debug("_photo_created_cb failed to write to datastore: " %
+ str(ex))
def _photo_create_failed_cb(self, fb_photo, failed_reason, tmp_file):
logging.debug("_photo_create_failed_cb")
@@ -195,9 +216,15 @@ class _FacebookShareMenu(account.MenuItem):
pixbuf.savev(image_path, 'png', [], [])
-class _FacebookRefreshMenu(account.MenuItem):
+class _RefreshMenu(MenuItem):
+ __gsignals__ = {
+ 'transfer-state-changed': (GObject.SignalFlags.RUN_FIRST, None,
+ ([str])),
+ 'comments-changed': (GObject.SignalFlags.RUN_FIRST, None, ([str]))
+ }
+
def __init__(self, is_active):
- account.MenuItem.__init__(self, ACCOUNT_NAME)
+ MenuItem.__init__(self, ACCOUNT_NAME)
self._is_active = is_active
self._metadata = None
@@ -242,8 +269,6 @@ class _FacebookRefreshMenu(account.MenuItem):
self._fb_comments_downloaded_cb)
fb_photo.connect('comments-download-failed',
self._fb_comments_download_failed_cb)
- fb_photo.connect('transfer-state-changed',
- self._transfer_state_changed_cb)
GObject.idle_add(fb_photo.refresh_comments)
def _fb_comments_downloaded_cb(self, fb_photo, comments):
@@ -278,4 +303,4 @@ class _FacebookRefreshMenu(account.MenuItem):
logging.debug('_fb_comments_download_failed_cb: %s' % (failed_reason))
def get_account():
- return FacebookAccount()
+ return Account()