mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Handle Ctrl-C when using jsbrowser a little better
This commit is contained in:
parent
c75b5d37d5
commit
24dff489a9
@ -9,10 +9,11 @@ __docformat__ = 'restructuredtext en'
|
|||||||
|
|
||||||
import os, pprint, time
|
import os, pprint, time
|
||||||
from cookielib import Cookie
|
from cookielib import Cookie
|
||||||
|
from threading import current_thread
|
||||||
|
|
||||||
from PyQt4.Qt import (QObject, QNetworkAccessManager, QNetworkDiskCache,
|
from PyQt4.Qt import (QObject, QNetworkAccessManager, QNetworkDiskCache,
|
||||||
QNetworkProxy, QNetworkProxyFactory, QEventLoop, QUrl,
|
QNetworkProxy, QNetworkProxyFactory, QEventLoop, QUrl, pyqtSignal,
|
||||||
QDialog, QVBoxLayout, QSize, QNetworkCookieJar)
|
QDialog, QVBoxLayout, QSize, QNetworkCookieJar, Qt)
|
||||||
from PyQt4.QtWebKit import QWebPage, QWebSettings, QWebView, QWebElement
|
from PyQt4.QtWebKit import QWebPage, QWebSettings, QWebView, QWebElement
|
||||||
|
|
||||||
from calibre import USER_AGENT, prints, get_proxies, get_proxy_info
|
from calibre import USER_AGENT, prints, get_proxies, get_proxy_info
|
||||||
@ -128,6 +129,7 @@ class NetworkAccessManager(QNetworkAccessManager): # {{{
|
|||||||
x.upper() for x in ('Head', 'Get', 'Put', 'Post', 'Delete',
|
x.upper() for x in ('Head', 'Get', 'Put', 'Post', 'Delete',
|
||||||
'Custom')
|
'Custom')
|
||||||
}
|
}
|
||||||
|
report_reply_signal = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self, log, use_disk_cache=True, parent=None):
|
def __init__(self, log, use_disk_cache=True, parent=None):
|
||||||
QNetworkAccessManager.__init__(self, parent)
|
QNetworkAccessManager.__init__(self, parent)
|
||||||
@ -143,6 +145,8 @@ class NetworkAccessManager(QNetworkAccessManager): # {{{
|
|||||||
self.finished.connect(self.on_finished)
|
self.finished.connect(self.on_finished)
|
||||||
self.cookie_jar = QNetworkCookieJar()
|
self.cookie_jar = QNetworkCookieJar()
|
||||||
self.setCookieJar(self.cookie_jar)
|
self.setCookieJar(self.cookie_jar)
|
||||||
|
self.main_thread = current_thread()
|
||||||
|
self.report_reply_signal.connect(self.report_reply, type=Qt.QueuedConnection)
|
||||||
|
|
||||||
def on_ssl_errors(self, reply, errors):
|
def on_ssl_errors(self, reply, errors):
|
||||||
reply.ignoreSslErrors()
|
reply.ignoreSslErrors()
|
||||||
@ -172,6 +176,17 @@ class NetworkAccessManager(QNetworkAccessManager): # {{{
|
|||||||
data)
|
data)
|
||||||
|
|
||||||
def on_finished(self, reply):
|
def on_finished(self, reply):
|
||||||
|
if current_thread() is not self.main_thread:
|
||||||
|
# This method was called in a thread created by Qt. The python
|
||||||
|
# interpreter may not be in a safe state, so dont do anything
|
||||||
|
# more. This signal is queued which means the reply wont be
|
||||||
|
# reported unless someone spins the event loop. So far, I have only
|
||||||
|
# seen this happen when doing Ctrl+C in the console.
|
||||||
|
self.report_reply_signal.emit(reply)
|
||||||
|
else:
|
||||||
|
self.report_reply(reply)
|
||||||
|
|
||||||
|
def report_reply(self, reply):
|
||||||
reply_url = unicode(reply.url().toString())
|
reply_url = unicode(reply.url().toString())
|
||||||
self.reply_count += 1
|
self.reply_count += 1
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user