mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Move cookies from web_control to StoreDownload
This commit is contained in:
parent
bcc406ee05
commit
77966b5071
@ -4,7 +4,9 @@ __license__ = 'GPL 3'
|
||||
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from PyQt4.Qt import QWebView, QWebPage, QNetworkCookieJar, QNetworkRequest
|
||||
from cookielib import Cookie, CookieJar
|
||||
|
||||
from PyQt4.Qt import QWebView, QWebPage, QNetworkCookieJar, QNetworkRequest, QString
|
||||
|
||||
class NPWebView(QWebView):
|
||||
|
||||
@ -35,7 +37,7 @@ class NPWebView(QWebView):
|
||||
return
|
||||
|
||||
url = unicode(request.url().toString())
|
||||
self.gui.download_from_store(url)
|
||||
self.gui.download_from_store(url, self.get_cookies())
|
||||
|
||||
def ignore_ssl_errors(self, reply, errors):
|
||||
reply.ignoreSslErrors(errors)
|
||||
@ -45,6 +47,53 @@ class NPWebView(QWebView):
|
||||
print 'error'
|
||||
print reply.error()
|
||||
#print reply.attribute(QNetworkRequest.HttpStatusCodeAttribute).toInt()
|
||||
|
||||
def get_cookies(self):
|
||||
cj = CookieJar()
|
||||
|
||||
for c in self.page().networkAccessManager().cookieJar().allCookies():
|
||||
version = 0
|
||||
name = unicode(QString(c.name()))
|
||||
value = unicode(QString(c.value()))
|
||||
port = None
|
||||
port_specified = False
|
||||
domain = unicode(c.domain())
|
||||
if domain:
|
||||
domain_specified = True
|
||||
if domain.startswith('.'):
|
||||
domain_initial_dot = True
|
||||
else:
|
||||
domain_initial_dot = False
|
||||
else:
|
||||
domain = None
|
||||
domain_specified = False
|
||||
path = unicode(c.path())
|
||||
if path:
|
||||
path_specified = True
|
||||
else:
|
||||
path = None
|
||||
path_specified = False
|
||||
secure = c.isSecure()
|
||||
expires = c.expirationDate().toMSecsSinceEpoch() / 1000
|
||||
discard = c.isSessionCookie()
|
||||
comment = None
|
||||
comment_url = None
|
||||
rest = None
|
||||
|
||||
cookie = Cookie(version, name, value,
|
||||
port, port_specified,
|
||||
domain, domain_specified, domain_initial_dot,
|
||||
path, path_specified,
|
||||
secure,
|
||||
expires,
|
||||
discard,
|
||||
comment,
|
||||
comment_url,
|
||||
rest)
|
||||
|
||||
cj.set_cookie(cookie)
|
||||
|
||||
return cj
|
||||
|
||||
|
||||
class NPWebPage(QWebPage):
|
||||
|
@ -8,6 +8,7 @@ import cStringIO
|
||||
import os
|
||||
import shutil
|
||||
import time
|
||||
from cookielib import CookieJar
|
||||
from contextlib import closing
|
||||
from threading import Thread
|
||||
from Queue import Queue
|
||||
@ -20,11 +21,12 @@ from calibre.utils.ipc.job import BaseJob
|
||||
|
||||
class StoreDownloadJob(BaseJob):
|
||||
|
||||
def __init__(self, callback, description, job_manager, db, url='', save_as_loc='', add_to_lib=True):
|
||||
def __init__(self, callback, description, job_manager, db, cookie_jar, url='', save_as_loc='', add_to_lib=True):
|
||||
BaseJob.__init__(self, description)
|
||||
self.exception = None
|
||||
self.job_manager = job_manager
|
||||
self.db = db
|
||||
self.cookie_jar = cookie_jar
|
||||
self.args = (url, save_as_loc, add_to_lib)
|
||||
self.tmp_file_name = ''
|
||||
self.callback = callback
|
||||
@ -123,6 +125,7 @@ class StoreDownloader(Thread):
|
||||
return
|
||||
|
||||
br = browser()
|
||||
br.set_cookiejar(job.cookie_jar)
|
||||
|
||||
basename = br.open(url).geturl().split('/')[-1]
|
||||
ext = os.path.splitext(basename)[1][1:].lower()
|
||||
@ -155,9 +158,9 @@ class StoreDownloader(Thread):
|
||||
|
||||
shutil.copy(job.tmp_fie_name, save_loc)
|
||||
|
||||
def download_from_store(self, callback, db, url='', save_as_loc='', add_to_lib=True):
|
||||
def download_from_store(self, callback, db, cookie_jar, url='', save_as_loc='', add_to_lib=True):
|
||||
description = _('Downloading %s') % url
|
||||
job = StoreDownloadJob(callback, description, self.job_manager, db, url, save_as_loc, add_to_lib)
|
||||
job = StoreDownloadJob(callback, description, self.job_manager, db, cookie_jar, url, save_as_loc, add_to_lib)
|
||||
self.job_manager.add_job(job)
|
||||
self.jobs.put(job)
|
||||
|
||||
@ -167,10 +170,10 @@ class StoreDownloadMixin(object):
|
||||
def __init__(self):
|
||||
self.store_downloader = StoreDownloader(self.job_manager)
|
||||
|
||||
def download_from_store(self, url='', save_as_loc='', add_to_lib=True):
|
||||
def download_from_store(self, url='', cookie_jar=CookieJar(), save_as_loc='', add_to_lib=True):
|
||||
if not self.store_downloader.is_alive():
|
||||
self.store_downloader.start()
|
||||
self.store_downloader.download_from_store(Dispatcher(self.downloaded_from_store), self.library_view.model().db, url, save_as_loc, add_to_lib)
|
||||
self.store_downloader.download_from_store(Dispatcher(self.downloaded_from_store), self.library_view.model().db, cookie_jar, url, save_as_loc, add_to_lib)
|
||||
self.status_bar.show_message(_('Downloading') + ' ' + url, 3000)
|
||||
|
||||
def downloaded_from_store(self, job):
|
||||
|
Loading…
x
Reference in New Issue
Block a user