home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / plugins / digsby_browsersettings / settings.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  17.9 KB  |  463 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import logging
  5. import ConfigParser as CF
  6. import json
  7. import stdpaths
  8. import path
  9. import common
  10. import util
  11. import peak.util.addons as addons
  12. import gui.native.win.process as processes
  13. from contextlib import closing
  14. log = logging.getLogger('browsersettings')
  15. HOMEPAGE_URL = 'http://search.digsby.com'
  16. DIGSBY_SEARCH_URL = 'http://searchbox.digsby.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t'
  17. DIGSBY_SEARCH_UUID_IE = '{3326ab56-742e-5603-906f-290517220122}'
  18.  
  19. class BrowserSettingsEditor(object):
  20.     process_name = None
  21.     
  22.     def is_installed(self):
  23.         return False
  24.  
  25.     
  26.     def can_edit(self):
  27.         return not self.is_running()
  28.  
  29.     
  30.     def is_running(self):
  31.         return self.process_name in processes.process_list()
  32.  
  33.     
  34.     def set_homepage(self):
  35.         return False
  36.  
  37.     
  38.     def set_search(self):
  39.         return False
  40.  
  41.     
  42.     def __repr__(self):
  43.         return '<%s>' % (type(self).__name__,)
  44.  
  45.  
  46.  
  47. class InternetExplorer(BrowserSettingsEditor):
  48.     process_name = 'iexplore.exe'
  49.     
  50.     def can_edit(self):
  51.         return True
  52.  
  53.     
  54.     def is_installed(self):
  55.         return True
  56.  
  57.     
  58.     def set_homepage(self):
  59.         log.info('setting homepage for %r', self.process_name)
  60.         import _winreg
  61.         util.traceguard.__enter__()
  62.         
  63.         try:
  64.             k = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Internet Explorer\\Main\\', 0, _winreg.KEY_SET_VALUE)
  65.             _winreg.SetValueEx(k, 'Start Page', None, _winreg.REG_SZ, 'http://search.digsby.com')
  66.             k.Close()
  67.         finally:
  68.             pass
  69.  
  70.         return True
  71.  
  72.     
  73.     def set_search(self):
  74.         log.info('setting search for %r', self.process_name)
  75.         import _winreg
  76.         util.traceguard.__enter__()
  77.         
  78.         try:
  79.             k = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Internet Explorer\\SearchScopes\\', 0, _winreg.KEY_ALL_ACCESS)
  80.             _winreg.SetValueEx(k, 'DefaultScope', None, _winreg.REG_SZ, DIGSBY_SEARCH_UUID_IE)
  81.             k2 = _winreg.CreateKey(k, DIGSBY_SEARCH_UUID_IE)
  82.             _winreg.SetValueEx(k2, 'DisplayName', None, _winreg.REG_SZ, 'Google Powered Digsby Search')
  83.             _winreg.SetValueEx(k2, 'URL', None, _winreg.REG_SZ, DIGSBY_SEARCH_URL.encode('xml'))
  84.             k3 = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Internet Explorer\\Main', 0, _winreg.KEY_ALL_ACCESS)
  85.             k4 = _winreg.CreateKey(k3, 'Main')
  86.             _winreg.SetValueEx(k4, 'Use Search Asst', None, _winreg.REG_SZ, 'no')
  87.             _winreg.SetValueEx(k4, 'Search Page', None, _winreg.REG_SZ, 'http://searchbox.digsby.com/')
  88.             _winreg.SetValueEx(k4, 'Search Bar', None, _winreg.REG_SZ, 'http://searchbox.digsby.com/ie')
  89.             k.Close()
  90.             k2.Close()
  91.             k3.Close()
  92.             k4.Close()
  93.         finally:
  94.             pass
  95.  
  96.         util.traceguard.__enter__()
  97.         
  98.         try:
  99.             l = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Internet Explorer\\Main', 0, _winreg.KEY_ALL_ACCESS)
  100.             _winreg.SetValueEx(l, 'Search Page', None, _winreg.REG_SZ, 'http://searchbox.digsby.com/')
  101.             l2 = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Internet Explorer\\Search', 0, _winreg.KEY_ALL_ACCESS)
  102.             _winreg.SetValueEx(l2, 'SearchAssistant', None, _winreg.REG_SZ, 'http://searchbox.digsby.com/ie')
  103.             l.Close()
  104.             l2.Close()
  105.         finally:
  106.             pass
  107.  
  108.         return True
  109.  
  110.  
  111.  
  112. class Chrome(BrowserSettingsEditor):
  113.     process_name = 'chrome.exe'
  114.     keyword = 'digsby-searchbox'
  115.     
  116.     def profile_dir(self):
  117.         return stdpaths.userlocalconfig / 'Google' / 'Chrome' / 'User Data' / 'Default'
  118.  
  119.     profile_dir = property(profile_dir)
  120.     
  121.     def is_installed(self):
  122.         return self.profile_dir.isdir()
  123.  
  124.     
  125.     def write_prefs(self, new_prefs):
  126.         self.update_json_file('Preferences', new_prefs)
  127.  
  128.     
  129.     def update_json_file(self, fname, new_dict):
  130.         fpath = self.profile_dir / fname
  131.         
  132.         try:
  133.             f = _[1]
  134.             info = json.loads(f.read())
  135.         finally:
  136.             pass
  137.  
  138.         info.update(new_dict)
  139.         
  140.         try:
  141.             f = _[2]
  142.             f.write(json.dumps(info))
  143.         finally:
  144.             pass
  145.  
  146.  
  147.     
  148.     def set_homepage(self):
  149.         log.info('setting homepage for %r', self.process_name)
  150.         self.write_prefs({
  151.             'homepage': HOMEPAGE_URL,
  152.             'homepage_is_newtabpage': False })
  153.         return True
  154.  
  155.     
  156.     def set_search(self):
  157.         log.info('setting search for %r', self.process_name)
  158.         db_fpath = self.profile_dir / 'Web Data'
  159.         import sqlite3 as sqlite
  160.         
  161.         try:
  162.             c = _[1]
  163.             id = None
  164.             
  165.             try:
  166.                 r = _[2]
  167.                 log.info('chrome checking existing row')
  168.                 for row in r:
  169.                     (id,) = row
  170.             finally:
  171.                 pass
  172.  
  173.             search_provider_info = dict(short_name = 'Digsby Powered Google', url = 'http://searchbox.digsby.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t', suggest_url = '{google:baseSuggestURL}search?client=chrome&hl={language}&q={searchTerms}', favicon_url = 'http://www.google.com/favicon.ico', keyword = self.keyword, input_encodings = 'UTF-8', id = id, show_in_default_list = 1, safe_for_autoreplace = 0, originating_url = '')
  174.             search_provider_info['search_url'] = search_provider_info['url']
  175.             search_provider_info['encodings'] = search_provider_info['input_encodings']
  176.             search_provider_info['icon_url'] = search_provider_info['favicon_url']
  177.             
  178.             try:
  179.                 r = _[5]
  180.                 log.info('chrome updating row')
  181.             finally:
  182.                 pass
  183.  
  184.             c.commit()
  185.         finally:
  186.             pass
  187.  
  188.         
  189.         try:
  190.             c = _[6]
  191.             
  192.             try:
  193.                 r = _[7]
  194.                 log.info('chrome updating meta table')
  195.             finally:
  196.                 pass
  197.  
  198.             c.commit()
  199.         finally:
  200.             pass
  201.  
  202.         search_provider_info.update(enabled = True)
  203.         self.write_prefs({
  204.             'default_search_provider': search_provider_info })
  205.         return True
  206.  
  207.  
  208.  
  209. class Firefox(BrowserSettingsEditor):
  210.     process_name = 'firefox.exe'
  211.     default_profile = None
  212.     SEARCH_PLUGIN_TXT = '<?xml version="1.0" encoding="UTF-8"?>\n<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"\n    xmlns:moz="http://www.mozilla.org/2006/browser/search/">\n    <ShortName>Google Powered Digsby Search</ShortName>\n    <Description>Google Powered Digsby Search</Description>\n    <InputEncoding>UTF-8</InputEncoding>\n    <moz:UpdateUrl>http://digsby.com/digsbysearch.xml</moz:UpdateUrl>\n    <moz:UpdateInterval>7</moz:UpdateInterval>\n    <Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaRJREFUeNpiVIg5JRURw0A0YAHio943kYV%2B%2Ff33%2BdvvX7%2F%2FMjEx8nKycrGzwKXOiPKzICvdeezLhCV3jp15%2Bfv%2FX0YGhv8MDDxMX2qKTIw0RK10eYD6QYqATvoPBkt3f5K0W9Ew4fjTFz%2F%2Bw8Dm3W8UPeZxqFa%2BevsFyD0twgfVsOfkRxHrtfV9u5BVQ8Crd98%2FffkGYQM1QJ20%2FfSPv79eNxQGYfpSVJADmcvEAHbr7oOX2dj%2FERNKIA2%2F%2F%2Fz%2FxfCDhYVoDUDw5P6vf9%2B5iY0HVmZGQWm%2BN3fff%2Fn2k4eLHS739x%2FDiRs%2Ff%2F%2F5x8HO%2FOHzN3djfqgNjIwMgc6qzLx%2Fpy47j2zY%2Feff06tXhOUucgxeun33AUZGpHh4%2Bvo7t8EyIJqz%2FhpasD59%2B5dNrqdnznZIsEL9ICXCsWuBCwvTv%2FymS5PWPP32ExEALz%2F%2BB5r848cPCJcRaMP9xaYQzofPPzfuvrnj0Jst%2B5%2F8%2Bc4sLPeDkYlRgJc93VPE18NIXkYUmJYQSQMZ%2FP3379uPH7%2F%2F%2FEETBzqJ0WqLGvFpe2LCC4AAAwAyjg7ENzDDWAAAAABJRU5ErkJggg%3D%3D</Image>\n    <Url type="text/html" method="GET" template="http://searchbox.digsby.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t" />\n    <Url type="application/x-suggestions+json" method="GET" template="http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}" />\n    <moz:SearchForm>http://searchbox.digsby.com</moz:SearchForm>\n</OpenSearchDescription>'
  213.     SEARCH_PREF_LINES = [
  214.         'user_pref("browser.search.defaultenginename", "Google Powered Digsby Search");',
  215.         'user_pref("keyword.URL", "http://searchbox.digsby.com/search?sourceid=navclient&gfns=1&q=");']
  216.     HOMEPAGE_PREF_LINES = [
  217.         'user_pref("browser.startup.homepage", "%s");' % HOMEPAGE_URL]
  218.     
  219.     def app_dir(self):
  220.         return stdpaths.userconfig / 'Mozilla' / 'Firefox'
  221.  
  222.     app_dir = property(app_dir)
  223.     
  224.     def profile_dir(self):
  225.         if self.default_profile is None:
  226.             self.find_default_profile()
  227.         
  228.         return self.app_dir / self.default_profile
  229.  
  230.     profile_dir = property(profile_dir)
  231.     
  232.     def find_default_profile(self):
  233.         cf = CF.ConfigParser()
  234.         if not cf.read(self.app_dir / 'profiles.ini'):
  235.             return None
  236.         for section in cf.sections():
  237.             if section == 'General':
  238.                 continue
  239.             
  240.             if cf.get(section, 'name') == 'default':
  241.                 self.default_profile = path.path(cf.get(section, 'path'))
  242.                 break
  243.                 continue
  244.         
  245.  
  246.     
  247.     def is_installed(self):
  248.         return self.app_dir.isdir()
  249.  
  250.     
  251.     def set_search(self):
  252.         log.info('setting search for %r', self.process_name)
  253.         searchplugins = self.profile_dir / 'searchplugins'
  254.         if searchplugins.isdir():
  255.             
  256.             try:
  257.                 f = _[1]
  258.                 f.write(self.SEARCH_PLUGIN_TXT)
  259.             finally:
  260.                 pass
  261.  
  262.             return self.write_prefs(self.SEARCH_PREF_LINES)
  263.  
  264.     
  265.     def set_homepage(self):
  266.         log.info('setting homepage for %r', self.process_name)
  267.         return self.write_prefs(self.HOMEPAGE_PREF_LINES)
  268.  
  269.     
  270.     def write_prefs(self, pref_lines):
  271.         profileprefs = self.profile_dir / 'prefs.js'
  272.         if not profileprefs.isfile():
  273.             return False
  274.         util.traceguard.__enter__()
  275.         
  276.         try:
  277.             
  278.             try:
  279.                 f = _[1]
  280.                 f.writelines(pref_lines)
  281.                 return True
  282.             finally:
  283.                 pass
  284.  
  285.         finally:
  286.             pass
  287.  
  288.  
  289.  
  290.  
  291. class BrowserSettingsAddon(addons.AddOn):
  292.     _setup = False
  293.     interval = 300
  294.     known_browsers = [
  295.         InternetExplorer,
  296.         Chrome,
  297.         Firefox]
  298.     
  299.     def setup(self, *a):
  300.         if self._setup:
  301.             return None
  302.         self._setup = True
  303.         self.timer = util.Timer(0, self.check)
  304.         self.timer.start()
  305.         all_browsers = [ B() for B in self.known_browsers ]
  306.         self.browsers = _[2]
  307.         log.info('detected browsers: %r', self.browsers)
  308.  
  309.     
  310.     def check(self):
  311.         wrote_task_info = self.check_installer_files()
  312.         tasks_remaining = self.check_browser_tasks()
  313.         if tasks_remaining:
  314.             self.timer = util.Timer(self.interval, self.check)
  315.             self.timer.start()
  316.             log.debug('rescheduling browser settings task for %r', self.interval)
  317.         else:
  318.             log.debug('all browser settings tasks complete. not rescheduling')
  319.  
  320.     
  321.     def check_installer_files(self):
  322.         search = _get_search_filepath()
  323.         homepage = _get_homepage_filepath()
  324.         dosearch = search.isfile()
  325.         dohomepage = homepage.isfile()
  326.         if dosearch or dohomepage:
  327.             log.info('new tasks discovered: dosearch = %r, dohomepage = %r', dosearch, dohomepage)
  328.             my_browser_names = [ b.process_name for b in self.browsers ]
  329.             []([], self.write_browser_task_info if dosearch else [] if dohomepage else [])
  330.             if dosearch:
  331.                 
  332.                 try:
  333.                     search.remove()
  334.                 except Exception:
  335.                     pass
  336.  
  337.                 log.debug('removed dosearch flag')
  338.             
  339.             if dohomepage:
  340.                 
  341.                 try:
  342.                     homepage.remove()
  343.                 except Exception:
  344.                     pass
  345.  
  346.                 log.debug('removed dohomepage flag')
  347.             
  348.             return True
  349.         return False
  350.  
  351.     
  352.     def write_browser_task_info(self, need_search, need_homepage):
  353.         taskinfo_filepath = _get_taskinfo_filepath()
  354.         if not need_search and not need_homepage:
  355.             if taskinfo_filepath.isfile():
  356.                 taskinfo_filepath.remove()
  357.                 log.info('clearing browser task info data (nothing left to do)')
  358.             
  359.             return False
  360.         info = {
  361.             'search': need_search,
  362.             'homepage': need_homepage }
  363.         
  364.         try:
  365.             f = _[1]
  366.             f.write(json.dumps(info))
  367.         finally:
  368.             pass
  369.  
  370.         log.info('wrote browser task info: %r', info)
  371.  
  372.     
  373.     def read_browser_task_info(self):
  374.         taskinfo_path = _get_taskinfo_filepath()
  375.         if not taskinfo_path.isfile():
  376.             return None
  377.         
  378.         try:
  379.             f = _[1]
  380.             info = json.loads(f.read())
  381.         finally:
  382.             pass
  383.  
  384.         return info
  385.  
  386.     
  387.     def check_browser_tasks(self):
  388.         info = self.read_browser_task_info()
  389.         log.info('browser settings task info loaded: %r', info)
  390.         if info is None:
  391.             return False
  392.         need_search = info.get('search', [])
  393.         need_homepage = info.get('homepage', [])
  394.         for browser in self.browsers:
  395.             if browser.process_name in need_search:
  396.                 if browser.can_edit() and browser.set_search():
  397.                     need_search.remove(browser.process_name)
  398.                 
  399.             
  400.             if browser.process_name in need_homepage:
  401.                 if browser.can_edit() and browser.set_homepage():
  402.                     need_homepage.remove(browser.process_name)
  403.                 
  404.             browser.set_homepage()
  405.         
  406.         browser_names = [ b.process_name for b in self.browsers ]
  407.         for browser in need_search[:]:
  408.             if browser not in browser_names:
  409.                 need_search.remove(browser)
  410.                 continue
  411.             []
  412.         
  413.         for browser in need_homepage[:]:
  414.             if browser not in browser_names:
  415.                 need_homepage.remove(browser)
  416.                 continue
  417.             []
  418.         
  419.         self.write_browser_task_info(need_search, need_homepage)
  420.         if not need_search:
  421.             pass
  422.         return bool(need_homepage)
  423.  
  424.  
  425.  
  426. def _get_taskinfo_filepath():
  427.     return stdpaths.userdata / 'taskinfo.json'
  428.  
  429.  
  430. def _get_search_filepath():
  431.     return stdpaths.userdata / 'dosearch'
  432.  
  433.  
  434. def _get_homepage_filepath():
  435.     return stdpaths.userdata / 'dohomepage'
  436.  
  437.  
  438. def set_homepage():
  439.     pass
  440.  
  441.  
  442. def set_search():
  443.     
  444.     try:
  445.         f = _[1]
  446.         f.write('yes')
  447.     finally:
  448.         pass
  449.  
  450.     BrowserSettingsAddon(common.profile()).check()
  451.  
  452.  
  453. def set_homepage():
  454.     
  455.     try:
  456.         f = _[1]
  457.         f.write('yes')
  458.     finally:
  459.         pass
  460.  
  461.     BrowserSettingsAddon(common.profile()).check()
  462.  
  463.