Fix download issues. clean download code. add checks for aborting in more places.

This commit is contained in:
John Schember 2011-03-06 11:19:09 -05:00
parent 273ddfa280
commit c508275f3d

View File

@ -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)