Example #1
0
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
Example #2
0
 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)
Example #3
0
 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)
Example #5
0
 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
Example #6
0
 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
Example #7
0
    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)
Example #8
0
 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
Example #9
0
 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
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
    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
Example #13
0
    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
Example #14
0
 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)
Example #15
0
	def get_dir(self):
		path =  GLib.uri_unescape_string(self._chooser_btn.get_uri(), None)
		if path:
			return path[7:]
		else:
			return None
Example #16
0
 def get_dir(self):
     path = GLib.uri_unescape_string(self._chooser_btn.get_uri(), None)
     if path:
         return path[7:]
     else:
         return None