home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / plugins / provider_facebook / facebook_service_provider.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  8.2 KB  |  242 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import services.service_provider as SP
  5. from util.primitives.structures import oset
  6. from peak.util import addons
  7. import threading
  8. from facebook.fbconnectlogin import LoginCheck
  9. from facebook.facebookapi import DIGSBY_API_KEY, DIGSBY_ACHIEVEMENTS_API_KEY
  10. from facebook import facebookapi
  11. import logging
  12. log = logging.getLogger('facebook_sp')
  13.  
  14. class FacebookServiceProvider(SP.UsernameServiceProvider):
  15.     password = None
  16.     digsby_session_key = None
  17.     digsby_secret = None
  18.     ach_session_key = None
  19.     ach_secret = None
  20.     uid = None
  21.     
  22.     def update_info(self, info):
  23.         super(FacebookServiceProvider, self).update_info(info)
  24.         self.informed_ach = info.get('informed_ach', False)
  25.         if 'filters' in info:
  26.             self.filters = info.get('filters')
  27.         
  28.  
  29.     
  30.     def update_components(self, info):
  31.         info = dict(info)
  32.         info.pop('password')
  33.         super(FacebookServiceProvider, self).update_components(info)
  34.  
  35.     
  36.     def add_account_im(self, acct):
  37.         acct_options = acct.get_options()
  38.         if not acct.enabled:
  39.             if self.digsby_session_key:
  40.                 pass
  41.             if not (self.digsby_secret):
  42.                 pwd = getattr(acct, 'password', None)
  43.                 if pwd:
  44.                     
  45.                     try:
  46.                         pstr_to_list = pstr_to_list
  47.                         import facebook.fbacct
  48.                         (digsby_session_key, digsby_secret) = pstr_to_list(acct._decryptedpw())
  49.                     except ValueError:
  50.                         pass
  51.  
  52.                     self.digsby_session_key = digsby_session_key
  53.                     self.digsby_secret = digsby_secret
  54.                 
  55.             
  56.         if acct.enabled or not (self.uid):
  57.             uid = acct_options.pop('uid', None)
  58.             if uid is not None:
  59.                 self.uid = uid
  60.             
  61.         
  62.  
  63.     
  64.     def add_account_social(self, acct):
  65.         acct_options = acct.get_options()
  66.         self.informed_ach = acct_options.get('informed_ach', False)
  67.         if 'filters' in acct_options:
  68.             self.filters = acct_options.get('filters')
  69.         
  70.         login_info = [
  71.             ('', '')] * 3
  72.         stored_login_info = zip(acct.passwords, acct.secrets_list)
  73.         login_info[:len(stored_login_info)] = stored_login_info
  74.         (digsby_session_key, digsby_secret) = login_info[0]
  75.         (ach_session_key, ach_secret) = login_info[1]
  76.         if ach_session_key and ach_secret:
  77.             self.ach_session_key = ach_session_key
  78.             self.ach_secret = ach_secret
  79.         
  80.         if not acct.enabled:
  81.             if self.digsby_session_key:
  82.                 pass
  83.             if not (self.digsby_secret):
  84.                 if digsby_session_key and digsby_secret:
  85.                     self.digsby_session_key = digsby_session_key
  86.                     self.digsby_secret = digsby_secret
  87.                 
  88.             
  89.         if acct.enabled or not (self.uid):
  90.             uid = acct_options.pop('uid', None)
  91.             if uid is not None:
  92.                 self.uid = uid
  93.             
  94.         
  95.  
  96.     
  97.     def get_options(self, type):
  98.         opts = super(FacebookServiceProvider, self).get_options(type = type)
  99.         opts['informed_ach'] = self.informed_ach
  100.         if hasattr(self, 'filters'):
  101.             opts['filters'] = self.filters
  102.         
  103.         return opts
  104.  
  105.     
  106.     def rebuilt(self):
  107.         log.info('rebuilt with %r', self.accounts)
  108.         logins = [ FacebookLogin(a) for a in self.accounts.values() ]
  109.         log.debug('logins: %r', logins)
  110.         loginmanager = FacebookLoginManger(self)
  111.         FacebookLogin.lock.__enter__()
  112.         
  113.         try:
  114.             for login in logins:
  115.                 login.loginmanager = loginmanager
  116.                 loginmanager.logins.add(login)
  117.         finally:
  118.             pass
  119.  
  120.         loginmanager.go()
  121.  
  122.  
  123.  
  124. class FacebookLoginManger(object):
  125.     
  126.     def __init__(self, provider):
  127.         self.logins = oset()
  128.         self.provider = provider
  129.         self.active = False
  130.  
  131.     
  132.     def go(self):
  133.         print self.logins
  134.         if not getattr(self.provider, 'digsby_session_key', None):
  135.             pass
  136.         if not getattr(self.provider, 'digsby_secret', None):
  137.             pass
  138.         self.digsby = facebookapi.FacebookAPI(DIGSBY_API_KEY, '', '', name = 'digsby', uid = getattr(self.provider, 'uid', None))
  139.         if not getattr(self.provider, 'ach_session_key', None):
  140.             pass
  141.         if not getattr(self.provider, 'ach_secret', None):
  142.             pass
  143.         self.digsby_ach = facebookapi.FacebookAPI(DIGSBY_ACHIEVEMENTS_API_KEY, '', '', name = 'digsby_ach', uid = getattr(self.provider, 'uid', None))
  144.         FacebookLogin.lock.__enter__()
  145.         
  146.         try:
  147.             if not any((lambda .0: for login in .0:
  148. login.active)(self.logins)):
  149.                 return None
  150.             self.active = True
  151.             IServiceProviderGUIMetaData = IServiceProviderGUIMetaData
  152.             import gui.pref.pg_accounts
  153.             self.loginproto = LoginCheck(digsby_api = self.digsby, digsby_ach_api = self.digsby_ach, login_success = self.success, login_error = self.fail, do_ach = any((lambda .0: for login in .0:
  154. if login.acct.enabled:
  155. login.do_achcontinue)(self.logins)), username = self.provider.accounts.values()[0].username, acct = IServiceProviderGUIMetaData(self.provider), ask_ach = any((lambda .0: for login in .0:
  156. login.do_ach)(self.logins)))
  157.             self.loginproto.initiatiate_check(True)
  158.         finally:
  159.             pass
  160.  
  161.  
  162.     
  163.     def success(self, check_instance, did_login = False, *a, **k):
  164.         FacebookLogin.lock.__enter__()
  165.         
  166.         try:
  167.             self.provider.digsby_session_key = self.digsby.session_key
  168.             self.provider.digsby_secret = self.digsby.secret
  169.             self.provider.ach_session_key = self.digsby_ach.session_key
  170.             self.provider.ach_secret = self.digsby_ach.secret
  171.             self.provider.uid = self.digsby.uid
  172.             self.active = False
  173.             for login in self.logins:
  174.                 if login.active:
  175.                     login.active = False
  176.                     if not login.did_login:
  177.                         pass
  178.                     login.login_success(check_instance, did_login, *a, **k)
  179.                     login.did_login = False
  180.                     continue
  181.                 None if login.loginmanager is not self else FacebookLogin.lock
  182.                 if not login.did_login:
  183.                     pass
  184.                 login.did_login = did_login
  185.         finally:
  186.             pass
  187.  
  188.  
  189.     
  190.     def fail(self, *a, **k):
  191.         FacebookLogin.lock.__enter__()
  192.         
  193.         try:
  194.             self.active = False
  195.             for login in self.logins:
  196.                 if login.active:
  197.                     login.active = False
  198.                     login.login_error(*a, **k)
  199.                     continue
  200.                 None if login.loginmanager is not self else FacebookLogin.lock
  201.         finally:
  202.             pass
  203.  
  204.  
  205.  
  206.  
  207. class FacebookLogin(addons.AddOn):
  208.     lock = threading.RLock()
  209.     
  210.     def __init__(self, subject):
  211.         self.acct = subject
  212.         self.active = False
  213.         self.did_login = False
  214.         self.loginmanager = None
  215.         self.do_ach = getattr(subject, 'should_do_ach', (lambda : False))()
  216.  
  217.     
  218.     def do_check(self, login_success, login_error, do_ach = False):
  219.         self.lock.__enter__()
  220.         
  221.         try:
  222.             self.active = True
  223.             self.login_success = login_success
  224.             self.login_error = login_error
  225.             self.do_ach = do_ach
  226.             if self.loginmanager is not None and not (self.loginmanager.active):
  227.                 self.loginmanager.go()
  228.         finally:
  229.             pass
  230.  
  231.  
  232.     
  233.     def __enter__(self):
  234.         self.lock.acquire()
  235.         return self
  236.  
  237.     
  238.     def __exit__(self, exc_type, exc_value, traceback):
  239.         self.lock.release()
  240.  
  241.  
  242.