home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / plugins / provider_facebook / facebook_service_provider.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  7.9 KB  |  236 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 add_account_im(self, acct):
  31.         acct_options = acct.get_options()
  32.         if not acct.enabled:
  33.             if self.digsby_session_key:
  34.                 pass
  35.             if not (self.digsby_secret):
  36.                 pwd = getattr(acct, 'password', None)
  37.                 if pwd:
  38.                     
  39.                     try:
  40.                         pstr_to_list = pstr_to_list
  41.                         import facebook.fbacct
  42.                         (digsby_session_key, digsby_secret) = pstr_to_list(acct._decryptedpw())
  43.                     except ValueError:
  44.                         pass
  45.  
  46.                     self.digsby_session_key = digsby_session_key
  47.                     self.digsby_secret = digsby_secret
  48.                 
  49.             
  50.         if acct.enabled or not (self.uid):
  51.             uid = acct_options.pop('uid', None)
  52.             if uid is not None:
  53.                 self.uid = uid
  54.             
  55.         
  56.  
  57.     
  58.     def add_account_social(self, acct):
  59.         acct_options = acct.get_options()
  60.         self.informed_ach = acct_options.get('informed_ach', False)
  61.         if 'filters' in acct_options:
  62.             self.filters = acct_options.get('filters')
  63.         
  64.         login_info = [
  65.             ('', '')] * 3
  66.         stored_login_info = zip(acct.passwords, acct.secrets_list)
  67.         login_info[:len(stored_login_info)] = stored_login_info
  68.         (digsby_session_key, digsby_secret) = login_info[0]
  69.         (ach_session_key, ach_secret) = login_info[1]
  70.         if ach_session_key and ach_secret:
  71.             self.ach_session_key = ach_session_key
  72.             self.ach_secret = ach_secret
  73.         
  74.         if not acct.enabled:
  75.             if self.digsby_session_key:
  76.                 pass
  77.             if not (self.digsby_secret):
  78.                 if digsby_session_key and digsby_secret:
  79.                     self.digsby_session_key = digsby_session_key
  80.                     self.digsby_secret = digsby_secret
  81.                 
  82.             
  83.         if acct.enabled or not (self.uid):
  84.             uid = acct_options.pop('uid', None)
  85.             if uid is not None:
  86.                 self.uid = uid
  87.             
  88.         
  89.  
  90.     
  91.     def get_options(self, type):
  92.         opts = super(FacebookServiceProvider, self).get_options(type = type)
  93.         opts['informed_ach'] = self.informed_ach
  94.         if hasattr(self, 'filters'):
  95.             opts['filters'] = self.filters
  96.         
  97.         return opts
  98.  
  99.     
  100.     def rebuilt(self):
  101.         log.info('rebuilt with %r', self.accounts)
  102.         logins = [ FacebookLogin(a) for a in self.accounts.values() ]
  103.         log.debug('logins: %r', logins)
  104.         loginmanager = FacebookLoginManger(self)
  105.         FacebookLogin.lock.__enter__()
  106.         
  107.         try:
  108.             for login in logins:
  109.                 login.loginmanager = loginmanager
  110.                 loginmanager.logins.add(login)
  111.         finally:
  112.             pass
  113.  
  114.         loginmanager.go()
  115.  
  116.  
  117.  
  118. class FacebookLoginManger(object):
  119.     
  120.     def __init__(self, provider):
  121.         self.logins = oset()
  122.         self.provider = provider
  123.         self.active = False
  124.  
  125.     
  126.     def go(self):
  127.         print self.logins
  128.         if not getattr(self.provider, 'digsby_session_key', None):
  129.             pass
  130.         if not getattr(self.provider, 'digsby_secret', None):
  131.             pass
  132.         self.digsby = facebookapi.FacebookAPI(DIGSBY_API_KEY, '', '', name = 'digsby', uid = getattr(self.provider, 'uid', None))
  133.         if not getattr(self.provider, 'ach_session_key', None):
  134.             pass
  135.         if not getattr(self.provider, 'ach_secret', None):
  136.             pass
  137.         self.digsby_ach = facebookapi.FacebookAPI(DIGSBY_ACHIEVEMENTS_API_KEY, '', '', name = 'digsby_ach', uid = getattr(self.provider, 'uid', None))
  138.         FacebookLogin.lock.__enter__()
  139.         
  140.         try:
  141.             if not any((lambda .0: for login in .0:
  142. login.active)(self.logins)):
  143.                 return None
  144.             self.active = True
  145.             IServiceProviderGUIMetaData = IServiceProviderGUIMetaData
  146.             import gui.pref.pg_accounts
  147.             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:
  148. if login.acct.enabled:
  149. 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:
  150. login.do_ach)(self.logins)))
  151.             self.loginproto.initiatiate_check(True)
  152.         finally:
  153.             pass
  154.  
  155.  
  156.     
  157.     def success(self, check_instance, did_login = False, *a, **k):
  158.         FacebookLogin.lock.__enter__()
  159.         
  160.         try:
  161.             self.provider.digsby_session_key = self.digsby.session_key
  162.             self.provider.digsby_secret = self.digsby.secret
  163.             self.provider.ach_session_key = self.digsby_ach.session_key
  164.             self.provider.ach_secret = self.digsby_ach.secret
  165.             self.provider.uid = self.digsby.uid
  166.             self.active = False
  167.             for login in self.logins:
  168.                 if login.active:
  169.                     login.active = False
  170.                     if not login.did_login:
  171.                         pass
  172.                     login.login_success(check_instance, did_login, *a, **k)
  173.                     login.did_login = False
  174.                     continue
  175.                 None if login.loginmanager is not self else FacebookLogin.lock
  176.                 if not login.did_login:
  177.                     pass
  178.                 login.did_login = did_login
  179.         finally:
  180.             pass
  181.  
  182.  
  183.     
  184.     def fail(self, *a, **k):
  185.         FacebookLogin.lock.__enter__()
  186.         
  187.         try:
  188.             self.active = False
  189.             for login in self.logins:
  190.                 if login.active:
  191.                     login.active = False
  192.                     login.login_error(*a, **k)
  193.                     continue
  194.                 None if login.loginmanager is not self else FacebookLogin.lock
  195.         finally:
  196.             pass
  197.  
  198.  
  199.  
  200.  
  201. class FacebookLogin(addons.AddOn):
  202.     lock = threading.RLock()
  203.     
  204.     def __init__(self, subject):
  205.         self.acct = subject
  206.         self.active = False
  207.         self.did_login = False
  208.         self.loginmanager = None
  209.         self.do_ach = getattr(subject, 'should_do_ach', (lambda : False))()
  210.  
  211.     
  212.     def do_check(self, login_success, login_error, do_ach = False):
  213.         self.lock.__enter__()
  214.         
  215.         try:
  216.             self.active = True
  217.             self.login_success = login_success
  218.             self.login_error = login_error
  219.             self.do_ach = do_ach
  220.             if self.loginmanager is not None and not (self.loginmanager.active):
  221.                 self.loginmanager.go()
  222.         finally:
  223.             pass
  224.  
  225.  
  226.     
  227.     def __enter__(self):
  228.         self.lock.acquire()
  229.         return self
  230.  
  231.     
  232.     def __exit__(self, exc_type, exc_value, traceback):
  233.         self.lock.release()
  234.  
  235.  
  236.