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>'
|
__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):
|
||||||
|
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user