From 207a9728c024ece842d0130c1e840227eafecd51 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 14 Aug 2009 11:47:05 -0600 Subject: [PATCH] IGN:Proper error messages when mimagemagick fails to load. Also workaround occasional IOError when sendingfiles to devices on linux --- src/calibre/devices/usbms/cli.py | 16 ++++++++++++++- src/calibre/utils/PythonMagickWand.py | 28 +++++++++++++-------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/calibre/devices/usbms/cli.py b/src/calibre/devices/usbms/cli.py index 33fd9e752d..67d457efe1 100644 --- a/src/calibre/devices/usbms/cli.py +++ b/src/calibre/devices/usbms/cli.py @@ -24,6 +24,12 @@ class File(object): self.name = os.path.basename(path) +def check_transfer(infile, dest): + infile.seek(0) + dest.seek(0) + return infile.read() == dest.read() + + class CLI(object): def get_file(self, path, outfile, end_session=True): @@ -45,7 +51,15 @@ class CLI(object): if not os.path.exists(d): os.makedirs(d) with open(path, 'wb') as dest: - shutil.copyfileobj(infile, dest) + try: + shutil.copyfileobj(infile, dest) + except IOError: + print 'WARNING: First attempt to send file to device failed' + infile.seek(0) + dest.seek(0) + dest.truncate() + shutil.copyfileobj(infile, dest) + #if not check_transfer(infile, dest): raise Exception('Transfer failed') if close: infile.close() diff --git a/src/calibre/utils/PythonMagickWand.py b/src/calibre/utils/PythonMagickWand.py index 3c83ab4680..637f11da87 100644 --- a/src/calibre/utils/PythonMagickWand.py +++ b/src/calibre/utils/PythonMagickWand.py @@ -62,7 +62,7 @@ and save it to a new file. >>> MagickWriteImage(wand,"out.png") #doctest: +ELLIPSIS - >>> + >>> """ @@ -82,14 +82,15 @@ else: _lib = util.find_library('MagickWand') if _lib is None: _lib = util.find_library('Wand') - + _magick = _magick_error = None try: _magick = ctypes.CDLL(_lib) except Exception, err: - _magick_erorr = str(err) + global _magick_error + _magick_error = str(err) -_initialized = False +_initialized = False def initialize(): global _initialized if not _initialized: @@ -97,22 +98,22 @@ def initialize(): _magick.MagickWandGenesis() else: raise RuntimeError('Failed to load ImageMagick: %s'%_magick_error) - + def finalize(): global _initialized if _initialized: _magick.MagickWandTerminus() _initialized = False - + class ImageMagick(object): - + def __enter__(self): initialize() - + def __exit__(self, *args): finalize() - - + + class MetricType(ctypes.c_int): pass UndefinedMetric = MetricType(0) AbsoluteErrorMetric = MetricType(1) @@ -489,7 +490,7 @@ SetEvaluateOperator = MagickEvaluateOperator(10) SubtractEvaluateOperator = MagickEvaluateOperator(11) XorEvaluateOperator = MagickEvaluateOperator(12) -class ExceptionType(ctypes.c_int): +class ExceptionType(ctypes.c_int): pass UndefinedException = ExceptionType(0) @@ -4360,9 +4361,8 @@ try: except AttributeError,e: pass else: - PixelSetColor = _magick.PixelSetColor - - + PixelSetColor = _magick.PixelSetColor + if __name__=='__main__': import doctest doctest.testmod()