Пример #1
0
 def _keyman_policy(self, web_view, decision, decision_type):
     logging.info("Checking policy")
     logging.debug("received policy decision request of type: {0}".format(
         decision_type.value_name))
     if decision_type == WebKit2.PolicyDecisionType.NAVIGATION_ACTION:
         nav_action = decision.get_navigation_action()
         request = nav_action.get_request()
         uri = request.get_uri()
         logging.debug("nav request is for uri %s", uri)
         parsed = urllib.parse.urlparse(uri)
         if parsed.path.startswith('/keyboards/install/'):
             qs = urllib.parse.parse_qs(parsed.query)
             package_id = parsed.path.split('/')[-1]
             downloadfile = os.path.join(get_download_folder(), package_id)
             download_url = KeymanComUrl + '/go/package/download/' + package_id + \
                 '?platform=linux&tier=' + __tier__
             if 'bcp47' in qs:
                 self.language = qs['bcp47'][0]
                 download_url += '&bcp47=' + qs['bcp47'][0]
             else:
                 self.language = None
             if self._process_kmp(download_url, downloadfile):
                 decision.ignore()
                 return True
     return False
Пример #2
0
 def keyman_policy(self, web_view, decision, decision_type):
     logging.info("Checking policy")
     logging.debug("received policy decision request of type: {0}".format(
         decision_type.value_name))
     if decision_type == WebKit2.PolicyDecisionType.NAVIGATION_ACTION:
         nav_action = decision.get_navigation_action()
         request = nav_action.get_request()
         uri = request.get_uri()
         logging.debug("nav request is for uri %s", uri)
         parsed = urllib.parse.urlparse(uri)
         if parsed.scheme == "keyman":
             logging.debug("using keyman scheme")
             if parsed.path == "download":
                 qs = urllib.parse.parse_qs(parsed.query)
                 downloadfile = os.path.join(get_download_folder(),
                                             qs['filename'][0])
                 if self.process_kmp(qs['url'][0], downloadfile):
                     decision.ignore()
                     return True
             elif parsed.path == "link":
                 qs = urllib.parse.parse_qs(parsed.query)
                 webbrowser.open(qs['url'][0])
                 decision.ignore()
                 return True
     return False
Пример #3
0
def download_and_install_package(url):
    """
    Handle the download and installation of the given package. This can either be a .kmp
    file that got downloaded previously, or a keyman:// URL which will be downloaded and
    installed.

    Args:
        url: a .kmp file, a keyman:// URL, or a file:// URL pointing to a .kmp file,
            possibly with a bcp47=<language> specified
    """
    parsedUrl = urlparse(url)
    bcp47 = _extract_bcp47(parsedUrl.query)

    if parsedUrl.scheme == 'keyman':
        logging.info("downloading " + url)
        if not url.startswith('keyman://download/keyboard/'):
            logging.error("Don't know what to do with URL " + url)
            return

        packageId = parsedUrl.path[len('/keyboard/'):]
        if not packageId:
            logging.error("Missing package id")
            return

        downloadFile = os.path.join(get_download_folder(), packageId)
        downloadUrl = KeymanComUrl + '/go/package/download/' + packageId + '?platform=linux&tier=' + __tier__
        packageFile = download_kmp_file(downloadUrl, downloadFile)
    elif parsedUrl.scheme == '' or parsedUrl.scheme == 'file':
        packageFile = parsedUrl.path
    else:
        logging.error("Invalid URL: " + url)
        return

    if not _install_package(packageFile, bcp47):
        logging.error("Can't find file " + url)
Пример #4
0
 def keyman_policy(self, web_view, decision, decision_type):
     logging.info("Checking policy")
     logging.debug("received policy decision request of type: {0}".format(decision_type.value_name))
     if decision_type == WebKit2.PolicyDecisionType.NAVIGATION_ACTION:
         nav_action = decision.get_navigation_action()
         request = nav_action.get_request()
         uri = request.get_uri()
         logging.debug("nav request is for uri %s", uri)
         parsed = urllib.parse.urlparse(uri)
         if parsed.scheme == "keyman":
             logging.debug("using keyman scheme")
             if parsed.path == "download":
                 qs = urllib.parse.parse_qs(parsed.query)
                 downloadfile = os.path.join(get_download_folder(), qs['filename'][0])
                 if self.process_kmp(qs['url'][0], downloadfile):
                     decision.ignore()
                     return True
             elif parsed.path == "link":
                 qs = urllib.parse.parse_qs(parsed.query)
                 webbrowser.open(qs['url'][0])
                 decision.ignore()
                 return True
     return False