mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix download issues. clean download code. add checks for aborting in more places.
This commit is contained in:
parent
273ddfa280
commit
c508275f3d
@ -92,18 +92,25 @@ class StoreDownloader(Thread):
|
|||||||
failed, exc = False, None
|
failed, exc = False, None
|
||||||
job.start_work()
|
job.start_work()
|
||||||
if job.kill_on_start:
|
if job.kill_on_start:
|
||||||
job.log_write('Aborted\n')
|
self._abort_job(job)
|
||||||
job.failed = failed
|
|
||||||
job.killed = True
|
|
||||||
job.job_done()
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
job.percent = .1
|
|
||||||
self._download(job)
|
self._download(job)
|
||||||
job.percent = .7
|
if not self._run:
|
||||||
self._add(job)
|
self._abort_job(job)
|
||||||
|
return
|
||||||
|
|
||||||
job.percent = .8
|
job.percent = .8
|
||||||
|
self._add(job)
|
||||||
|
if not self._run:
|
||||||
|
self._abort_job(job)
|
||||||
|
return
|
||||||
|
|
||||||
|
job.percent = .9
|
||||||
|
if not self._run:
|
||||||
|
self._abort_job(job)
|
||||||
|
return
|
||||||
self._save_as(job)
|
self._save_as(job)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
if not self._run:
|
if not self._run:
|
||||||
@ -125,7 +132,13 @@ class StoreDownloader(Thread):
|
|||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
def _abort_job(self, job):
|
||||||
|
job.log_write('Aborted\n')
|
||||||
|
job.failed = False
|
||||||
|
job.killed = True
|
||||||
|
job.job_done()
|
||||||
|
|
||||||
def _download(self, job):
|
def _download(self, job):
|
||||||
url, save_loc, add_to_lib, tags = job.args
|
url, save_loc, add_to_lib, tags = job.args
|
||||||
if not url:
|
if not url:
|
||||||
@ -137,23 +150,20 @@ class StoreDownloader(Thread):
|
|||||||
br = browser()
|
br = browser()
|
||||||
br.set_cookiejar(job.cookie_jar)
|
br.set_cookiejar(job.cookie_jar)
|
||||||
|
|
||||||
basename = br.open(url).geturl().split('/')[-1]
|
with closing(br.open(url)) as r:
|
||||||
tf = PersistentTemporaryFile(suffix=basename)
|
basename = r.geturl().split('/')[-1]
|
||||||
with closing(br.open(url)) as f:
|
tf = PersistentTemporaryFile(suffix=basename)
|
||||||
tf.write(f.read())
|
tf.write(r.read())
|
||||||
tf.close()
|
job.tmp_file_name = tf.name
|
||||||
job.tmp_file_name = tf.name
|
|
||||||
|
|
||||||
def _add(self, job):
|
def _add(self, job):
|
||||||
url, save_loc, add_to_lib, tags = job.args
|
url, save_loc, add_to_lib, tags = job.args
|
||||||
if not add_to_lib and job.tmp_file_name:
|
if not add_to_lib or not job.tmp_file_name:
|
||||||
return
|
return
|
||||||
ext = os.path.splitext(job.tmp_file_name)[1][1:].lower()
|
ext = os.path.splitext(job.tmp_file_name)[1][1:].lower()
|
||||||
if ext not in BOOK_EXTENSIONS:
|
if ext not in BOOK_EXTENSIONS:
|
||||||
raise Exception(_('Not a support ebook format.'))
|
raise Exception(_('Not a support ebook format.'))
|
||||||
|
|
||||||
ext = os.path.splitext(job.tmp_file_name)[1][1:]
|
|
||||||
|
|
||||||
from calibre.ebooks.metadata.meta import get_metadata
|
from calibre.ebooks.metadata.meta import get_metadata
|
||||||
with open(job.tmp_file_name) as f:
|
with open(job.tmp_file_name) as f:
|
||||||
mi = get_metadata(f, ext)
|
mi = get_metadata(f, ext)
|
||||||
@ -164,7 +174,7 @@ class StoreDownloader(Thread):
|
|||||||
|
|
||||||
def _save_as(self, job):
|
def _save_as(self, job):
|
||||||
url, save_loc, add_to_lib, tags = job.args
|
url, save_loc, add_to_lib, tags = job.args
|
||||||
if not save_loc and job.tmp_file_name:
|
if not save_loc or not job.tmp_file_name:
|
||||||
return
|
return
|
||||||
|
|
||||||
shutil.copy(job.tmp_file_name, save_loc)
|
shutil.copy(job.tmp_file_name, save_loc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user