Fixes issues.

This commit is contained in:
Antoni Boucher 2015-08-12 17:24:01 -04:00
parent 77190554cc
commit 814841200a
3 changed files with 57 additions and 36 deletions

View File

@ -1,6 +1,7 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2014-2015 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
# Copyright 2015 Antoni Boucher (antoyo) <bouanto@zoho.com>
#
# This file is part of qutebrowser.
#
@ -20,14 +21,7 @@
# pylint complains when using .render() on jinja templates, so we make it shut
# up for this whole module.
# pylint: disable=no-member
# https://bitbucket.org/logilab/pylint/issue/490/
"""Handler functions for different qute:... pages.
Module attributes:
pyeval_output: The output of the last :pyeval command.
"""
"""Handler functions for file:... pages."""
import os
@ -55,7 +49,19 @@ def get_file_list(basedir, all_files, filterfunc):
return sorted(items, key=lambda v: v['name'].lower())
def dirbrowser(urlstring):
def is_root(directory):
"""Check if the directory is the root directory.
Args:
directory: The directory to check.
Return:
Whether the directory is a root directory or not.
"""
return os.path.dirname(directory) == directory
def dirbrowser_html(urlstring):
"""Get the directory browser web page.
Args:
@ -69,20 +75,30 @@ def dirbrowser(urlstring):
# pylint: disable=no-member
# https://bitbucket.org/logilab/pylint/issue/490/
folder = resource_filename('img/folder.svg')
file = resource_filename('img/file.svg')
folder_icon = resource_filename('img/folder.svg')
file_icon = resource_filename('img/file.svg')
if os.path.dirname(urlstring) == urlstring:
if is_root(urlstring):
parent = None
else:
parent = os.path.dirname(urlstring)
all_files = os.listdir(urlstring)
try:
all_files = os.listdir(urlstring)
except (PermissionError, OSError) as e:
html = jinja.env.get_template('error.html').render(
title="Error while reading directory",
url='file://%s' % urlstring,
error=str(e),
icon='')
return html.encode('UTF-8', errors='xmlcharrefreplace')
files = get_file_list(urlstring, all_files, os.path.isfile)
directories = get_file_list(urlstring, all_files, os.path.isdir)
html = template.render(title=title, url=urlstring, icon='',
parent=parent, files=files,
directories=directories, folder=folder,
file=file)
directories=directories, folder_icon=folder_icon,
file_icon=file_icon)
return html.encode('UTF-8', errors='xmlcharrefreplace')
@ -99,10 +115,10 @@ class FileSchemeHandler(schemehandler.SchemeHandler):
_outgoing_data: QIODevice * outgoingData
Return:
A QNetworkReply.
A QNetworkReply for directories, None for files.
"""
urlstring = request.url().toLocalFile()
if os.path.isdir(urlstring) and os.access(urlstring, os.R_OK):
data = dirbrowser(urlstring)
if os.path.isdir(urlstring):
data = dirbrowser_html(urlstring)
return networkreply.FixedDataNetworkReply(
request, data, 'text/html', self.parent())

View File

@ -297,6 +297,25 @@ class NetworkManager(QNetworkAccessManager):
download.destroyed.connect(self.on_adopted_download_destroyed)
download.do_retry.connect(self.adopt_download)
def setReferer(self, req, current_url):
"""Set the referer header."""
referer_header_conf = config.get('network', 'referer-header')
try:
if referer_header_conf == 'never':
# Note: using ''.encode('ascii') sends a header with no value,
# instead of no header at all
req.setRawHeader('Referer'.encode('ascii'), QByteArray())
elif (referer_header_conf == 'same-domain' and
not urlutils.same_domain(req.url(), current_url)):
req.setRawHeader('Referer'.encode('ascii'), QByteArray())
# If refer_header_conf is set to 'always', we leave the header
# alone as QtWebKit did set it.
except urlutils.InvalidUrlError:
# req.url() or current_url can be invalid - this happens on
# https://www.playstation.com/ for example.
pass
# WORKAROUND for:
# http://www.riverbankcomputing.com/pipermail/pyqt/2014-September/034806.html
#
@ -322,7 +341,7 @@ class NetworkManager(QNetworkAccessManager):
if scheme in self._scheme_handlers:
result = self._scheme_handlers[scheme].createRequest(
op, req, outgoing_data)
if result:
if result is not None:
return result
host_blocker = objreg.get('host-blocker')
@ -348,22 +367,8 @@ class NetworkManager(QNetworkAccessManager):
webview = objreg.get('webview', scope='tab', window=self._win_id,
tab=self._tab_id)
current_url = webview.url()
referer_header_conf = config.get('network', 'referer-header')
try:
if referer_header_conf == 'never':
# Note: using ''.encode('ascii') sends a header with no value,
# instead of no header at all
req.setRawHeader('Referer'.encode('ascii'), QByteArray())
elif (referer_header_conf == 'same-domain' and
not urlutils.same_domain(req.url(), current_url)):
req.setRawHeader('Referer'.encode('ascii'), QByteArray())
# If refer_header_conf is set to 'always', we leave the header
# alone as QtWebKit did set it.
except urlutils.InvalidUrlError:
# req.url() or current_url can be invalid - this happens on
# https://www.playstation.com/ for example.
pass
self.setReferer(req, current_url)
accept_language = config.get('network', 'accept-language')
if accept_language is not None:

View File

@ -32,11 +32,11 @@ ul > li {
}
ul > li {
background-image: url('{{folder}}');
background-image: url('{{folder_icon}}');
}
ul.files > li {
background-image: url('{{file}}');
background-image: url('{{file_icon}}');
}
{% endblock %}