Move cookies from web_control to StoreDownload

This commit is contained in:
John Schember 2011-02-25 22:00:08 -05:00
parent bcc406ee05
commit 77966b5071
2 changed files with 59 additions and 7 deletions

View File

@ -4,7 +4,9 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __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): class NPWebView(QWebView):
@ -35,7 +37,7 @@ class NPWebView(QWebView):
return return
url = unicode(request.url().toString()) 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): def ignore_ssl_errors(self, reply, errors):
reply.ignoreSslErrors(errors) reply.ignoreSslErrors(errors)
@ -45,6 +47,53 @@ class NPWebView(QWebView):
print 'error' print 'error'
print reply.error() print reply.error()
#print reply.attribute(QNetworkRequest.HttpStatusCodeAttribute).toInt() #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): class NPWebPage(QWebPage):

View File

@ -8,6 +8,7 @@ import cStringIO
import os import os
import shutil import shutil
import time import time
from cookielib import CookieJar
from contextlib import closing from contextlib import closing
from threading import Thread from threading import Thread
from Queue import Queue from Queue import Queue
@ -20,11 +21,12 @@ from calibre.utils.ipc.job import BaseJob
class StoreDownloadJob(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) BaseJob.__init__(self, description)
self.exception = None self.exception = None
self.job_manager = job_manager self.job_manager = job_manager
self.db = db self.db = db
self.cookie_jar = cookie_jar
self.args = (url, save_as_loc, add_to_lib) self.args = (url, save_as_loc, add_to_lib)
self.tmp_file_name = '' self.tmp_file_name = ''
self.callback = callback self.callback = callback
@ -123,6 +125,7 @@ class StoreDownloader(Thread):
return return
br = browser() br = browser()
br.set_cookiejar(job.cookie_jar)
basename = br.open(url).geturl().split('/')[-1] basename = br.open(url).geturl().split('/')[-1]
ext = os.path.splitext(basename)[1][1:].lower() ext = os.path.splitext(basename)[1][1:].lower()
@ -155,9 +158,9 @@ class StoreDownloader(Thread):
shutil.copy(job.tmp_fie_name, save_loc) 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 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.job_manager.add_job(job)
self.jobs.put(job) self.jobs.put(job)
@ -167,10 +170,10 @@ class StoreDownloadMixin(object):
def __init__(self): def __init__(self):
self.store_downloader = StoreDownloader(self.job_manager) 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(): if not self.store_downloader.is_alive():
self.store_downloader.start() 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) self.status_bar.show_message(_('Downloading') + ' ' + url, 3000)
def downloaded_from_store(self, job): def downloaded_from_store(self, job):