def relpath_from_uri(child_uri, base_uri): child_uri = GLib.uri_unescape_string(child_uri) base_uri = GLib.uri_unescape_string(base_uri) if child_uri.startswith(base_uri): return child_uri.replace(base_uri + "/", "") else: return None
def load_uri(self, uri): """ Load uri @param uri as str """ self.__cancellable.cancel() self.__cancellable.reset() if uri == "about:blank": WebKit2.WebView.load_plain_text(self, "") self.__loaded_uri = uri return parsed = urlparse(uri) # We are not a ftp browser, fall back to env if parsed.scheme == "ftp": argv = [get_ftp_cmd(), uri, None] GLib.spawn_sync(None, argv, None, GLib.SpawnFlags.SEARCH_PATH, None) return elif parsed.scheme == "javascript": uri = GLib.uri_unescape_string(uri, None) self.run_javascript(uri.replace("javascript:", ""), None, None) return elif parsed.scheme not in [ "http", "https", "file", "populars", "accept" ]: uri = "http://" + uri # Reset bad tls certificate elif parsed.scheme != "accept": self.__bad_tls = None self.__insecure_content_detected = False self.__loaded_uri = uri WebKit2.WebView.load_uri(self, uri)
def load_uri(self, uri): """ Load uri @param uri as str """ self._error = None self.__related_uri = uri parsed = urlparse(uri) if uri == "about:blank": WebKit2.WebView.load_plain_text(self, "") # We are not a ftp browser, fall back to env elif parsed.scheme == "ftp": argv = [get_ftp_cmd(), uri, None] GLib.spawn_sync(None, argv, None, GLib.SpawnFlags.SEARCH_PATH, None) else: if uri.startswith("/"): uri = "file://" + uri elif parsed.scheme == "javascript": self.__js_load = True uri = GLib.uri_unescape_string(uri, None) self.run_javascript(uri.replace("javascript:", ""), None, None) elif parsed.scheme not in ["http", "https", "file", "populars", "accept"]: uri = "http://" + uri # Reset bad tls certificate if parsed.scheme != "accept": self.reset_bad_tls() self.__insecure_content_detected = False self.emit("uri-changed", uri) WebKit2.WebView.load_uri(self, uri)
def __on_load_startpage_content(self, uri, loaded, content): """ Extract uris from content @param uri as str @param loaded as bool @param content as bytes """ try: if not loaded: self.emit("uri-artwork-found", []) return found_uris = [] import re data = content.decode("utf-8") res = re.findall(r'.*oiu=([^&]*).*', data) for data in res: uri = GLib.uri_unescape_string(data, "") if uri in found_uris or uri is None: continue found_uris.append(uri) results = [(uri, "Startpage") for uri in found_uris] self.emit("uri-artwork-found", results) except Exception as e: self.emit("uri-artwork-found", []) Logger.error("ArtDownloader::__on_load_startpage_content(): %s" % e)
def get_dir(self): path = None uri = self._chooser_btn.get_uri() if uri is not None: path = GLib.uri_unescape_string(uri, None) if path is not None: return path[7:] else: return None
def __on_decide_destination(self, download, filename, wanted_filename): """ Modify destination if needed @param download as WebKit2.Download @param filename as str @param wanted_filename as str """ filename = filename.replace("/", "_") extension = filename.split(".")[-1] if wanted_filename: # FIXME We should find a way to pass good extension, # fallback to avi if extension == filename: extension = "avi" filename = wanted_filename + "." + extension directory_uri = App().settings.get_value('download-uri').get_string() if not directory_uri: directory = GLib.get_user_special_dir( GLib.UserDirectory.DIRECTORY_DOWNLOAD) directory_uri = GLib.filename_to_uri(directory, None) destination_uri = "%s/%s" % (directory_uri, GLib.uri_escape_string(filename, None, False)) not_ok = True i = 1 try: while not_ok: f = Gio.File.new_for_uri(destination_uri) if f.query_exists(): extension_less = filename.replace(".%s" % extension, "") new_filename = "%s_%s.%s" % (extension_less, i, extension) destination_uri = "%s/%s" % (directory_uri, GLib.uri_escape_string( new_filename, None, False)) else: not_ok = False i += 1 except: # Fallback to be sure destination_uri = "%s/@@%s" % (directory_uri, GLib.uri_escape_string( filename, None, False)) webkit_uri = GLib.uri_unescape_string(destination_uri, None) download.set_destination(webkit_uri) self.emit('download-start', str(download)) # Notify user about download window = App().active_window if window is not None: window.toolbar.end.show_download(download)
def get_dir(self): """ Return select directory path @return path as string """ path = None uri = self._chooser_btn.get_uri() if uri is not None: path = GLib.uri_unescape_string(uri, None) if path is not None: return path[7:] else: return None
def get_dir(self): """ Return select directory path @return path as string """ path = None uri = self.__chooser_btn.get_uri() if uri is not None: path = GLib.uri_unescape_string(uri, None) if path is not None: return path[7:] else: return None
def search_in_data(lines, found_uris=[]): if lines: line = lines.pop(0) # Do not call findall if nothing to find if line.find("oiu=") != -1: res = re.findall(r'.*oiu=([^&]*).*', line) for data in res: uri = GLib.uri_unescape_string(data, "") if uri in found_uris or uri is None: continue found_uris.append(uri) GLib.idle_add(search_in_data, lines, found_uris) else: results = [(uri, "Startpage") for uri in found_uris] emit_signal(self, "uri-artwork-found", results)
def load_uri(self, uri): """ Load uri @param uri as str """ if App().phishing.is_phishing(uri): self._show_phishing_error(uri) return self.discard_error() # If not an URI, start a search parsed = urlparse(uri) is_uri = parsed.scheme in [ "about", "http", "https", "file", "populars" ] if not is_uri and\ not uri.startswith("/") and\ App().search.is_search(uri): uri = App().search.get_search_uri(uri) parsed = urlparse(uri) if uri == "about:blank": WebKit2.WebView.load_plain_text(self, "") # We are not a ftp browser, fall back to env elif parsed.scheme == "ftp": argv = [get_ftp_cmd(), uri, None] GLib.spawn_sync(None, argv, None, GLib.SpawnFlags.SEARCH_PATH, None) else: if uri.startswith("/"): uri = "file://" + uri elif parsed.scheme == "javascript": # To bypass popup blocker self._last_click_time = time() uri = GLib.uri_unescape_string(uri, None) self.run_javascript(uri.replace("javascript:", ""), None, None) elif parsed.scheme not in [ "http", "https", "file", "populars", "accept" ]: uri = "http://" + uri # Reset bad tls certificate if parsed.scheme != "accept": self.reset_bad_tls() self.__insecure_content_detected = False self.stop_loading() self.update_settings_for_uri(uri) GLib.idle_add(WebKit2.WebView.load_uri, self, uri)
def get_media_title(self, media, escaped=False): title = media.get_title() if title: if escaped: return GLib.markup_escape_text(title) else: return title uri = media.get_url() if uri is None: return _("Untitled") uri_file = Gio.File.new_for_path(uri) basename = uri_file.get_basename() title = GLib.uri_unescape_string(basename, "") if escaped: return GLib.markup_escape_text(title) return title
def get_media_title(self, media, escaped=False): title = media.get_title() if title: if escaped: return GLib.markup_escape_text(title) else: return title uri = media.get_url() if uri is None: return _("Untitled") uri_file = Gio.File.new_for_path(uri) basename = uri_file.get_basename() title = GLib.uri_unescape_string(basename, '') if escaped: return GLib.markup_escape_text(title) return title
def __on_get_youtube_id_duckduck(self, uri, status, content, track, cancellable, methods): """ Get youtube id or run another method if not found @param uri as str @param status as bool @param content as bytes @param track as Track @param cancellable as Gio.Cancellable @param methods as [function] """ try: from bs4 import BeautifulSoup youtube_id = None html = content.decode("utf-8") soup = BeautifulSoup(html, "html.parser") ytems = [] for link in soup.findAll("a"): href = GLib.uri_unescape_string(link.get("href"), None) title = link.get_text() if href is None or title is None or\ href.find("youtube.com/watch?v") == -1: continue youtube_id = href.split("watch?v=")[1] ytems.append((youtube_id, title)) dic = {} best = self.__BAD_SCORE for (yid, title) in ytems: score = get_page_score(title, track.name, track.artists[0], track.album.name) if score == -1 or score == best: continue elif score < best: best = score dic[score] = yid # Return url from first dic item if best != self.__BAD_SCORE: youtube_id = dic[best] except Exception as e: print("$ sudo pip3 install beautifulsoup4") Logger.warning("YouTubeHelper::__get_youtube_id_duckduck(): %s", e) self.__emit_uri_loaded(youtube_id, track, cancellable, methods)
def get_dir(self): path = GLib.uri_unescape_string(self._chooser_btn.get_uri(), None) if path: return path[7:] else: return None