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
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
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)
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