Change image/jpg Content-Type to image/jpeg.
This makes QtWebKit display images with a (nonstandard) image/jpg content-type, e.g. http://m.c.lnkd.licdn.com/mpr/mpr/p/2/005/07b/08a/018245a.jpg (instead of downloading them).
This commit is contained in:
parent
7be3976890
commit
bad9031914
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
"""Our own QNetworkAccessManager."""
|
"""Our own QNetworkAccessManager."""
|
||||||
|
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSlot, PYQT_VERSION, QCoreApplication
|
from PyQt5.QtCore import pyqtSlot, PYQT_VERSION, QCoreApplication
|
||||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply
|
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply
|
||||||
|
|
||||||
@ -35,6 +37,7 @@ import qutebrowser.utils.log as log
|
|||||||
from qutebrowser.network.qutescheme import QuteSchemeHandler
|
from qutebrowser.network.qutescheme import QuteSchemeHandler
|
||||||
from qutebrowser.network.schemehandler import ErrorNetworkReply
|
from qutebrowser.network.schemehandler import ErrorNetworkReply
|
||||||
from qutebrowser.utils.usertypes import PromptMode
|
from qutebrowser.utils.usertypes import PromptMode
|
||||||
|
from qutebrowser.utils.http import change_content_type
|
||||||
|
|
||||||
|
|
||||||
class NetworkManager(QNetworkAccessManager):
|
class NetworkManager(QNetworkAccessManager):
|
||||||
@ -137,27 +140,32 @@ class NetworkManager(QNetworkAccessManager):
|
|||||||
elif scheme in self._scheme_handlers:
|
elif scheme in self._scheme_handlers:
|
||||||
return self._scheme_handlers[scheme].createRequest(
|
return self._scheme_handlers[scheme].createRequest(
|
||||||
op, req, outgoing_data)
|
op, req, outgoing_data)
|
||||||
|
if config.get('network', 'do-not-track'):
|
||||||
|
dnt = '1'.encode('ascii')
|
||||||
else:
|
else:
|
||||||
if config.get('network', 'do-not-track'):
|
dnt = '0'.encode('ascii')
|
||||||
dnt = '1'.encode('ascii')
|
req.setRawHeader('DNT'.encode('ascii'), dnt)
|
||||||
else:
|
req.setRawHeader('X-Do-Not-Track'.encode('ascii'), dnt)
|
||||||
dnt = '0'.encode('ascii')
|
accept_language = config.get('network', 'accept-language')
|
||||||
req.setRawHeader('DNT'.encode('ascii'), dnt)
|
if accept_language is not None:
|
||||||
req.setRawHeader('X-Do-Not-Track'.encode('ascii'), dnt)
|
req.setRawHeader('Accept-Language'.encode('ascii'),
|
||||||
accept_language = config.get('network', 'accept-language')
|
accept_language.encode('ascii'))
|
||||||
if accept_language is not None:
|
if PYQT_VERSION < 0x050301:
|
||||||
req.setRawHeader('Accept-Language'.encode('ascii'),
|
# If we don't disable our message handler, we get a freeze if a
|
||||||
accept_language.encode('ascii'))
|
# warning is printed due to a PyQt bug, e.g. when clicking a
|
||||||
if PYQT_VERSION < 0x050301:
|
# currency on http://ch.mouser.com/localsites/
|
||||||
# If we don't disable our message handler, we get a freeze if a
|
#
|
||||||
# warning is printed due to a PyQt bug, e.g. when clicking a
|
# See http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034420.html
|
||||||
# currency on http://ch.mouser.com/localsites/
|
with log.disable_qt_msghandler():
|
||||||
#
|
|
||||||
# See http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034420.html
|
|
||||||
with log.disable_qt_msghandler():
|
|
||||||
reply = super().createRequest(op, req, outgoing_data)
|
|
||||||
else:
|
|
||||||
reply = super().createRequest(op, req, outgoing_data)
|
reply = super().createRequest(op, req, outgoing_data)
|
||||||
self._requests.append(reply)
|
else:
|
||||||
reply.destroyed.connect(lambda obj: self._requests.remove(obj))
|
reply = super().createRequest(op, req, outgoing_data)
|
||||||
|
self._requests.append(reply)
|
||||||
|
reply.destroyed.connect(lambda obj: self._requests.remove(obj))
|
||||||
|
# Some servers (e.g. the LinkedIn CDN) send a non-standard image/jpg
|
||||||
|
# header for jpg images. We change this to image/jpeg (defined in RFC
|
||||||
|
# 1341 section 7.5: https://tools.ietf.org/html/rfc1341) so QtWebKit
|
||||||
|
# displays this instead of downloading it.
|
||||||
|
reply.metaDataChanged.connect(partial(change_content_type, reply,
|
||||||
|
{'image/jpg': 'image/jpeg'}))
|
||||||
return reply
|
return reply
|
||||||
|
@ -103,7 +103,7 @@ def change_content_type(reply, mapping):
|
|||||||
try:
|
try:
|
||||||
content_type = mapping[content_type]
|
content_type = mapping[content_type]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
return
|
||||||
if rest is not None:
|
if rest is not None:
|
||||||
header = ';'.join((content_type, rest))
|
header = ';'.join((content_type, rest))
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user