def setup(self, src, type=None): '''Setup the extractor with archive <src> and destination dir <dst>. Return a threading.Condition related to the is_ready() method, or None if the format of <src> isn't supported. ''' self._src = src self._files = [] self._extracted = set() self._archive = archive_tools.get_recursive_archive_handler( src, type=type, prefix='mcomix.extractor.') if self._archive is None: msg = _('Non-supported archive format: %s') % os.path.basename(src) log.warning(msg) raise ArchiveException(msg) self._dst = self._archive.destdir self._contents_listed = False self._extract_started = False self._condition = threading.Condition() self._threadpool.apply_async(self._list_contents, callback=self._list_contents_cb, error_callback=self._list_contents_errcb) self._setupped = True return self._condition
def setup(self, src, dst, type=None): """Setup the extractor with archive <src> and destination dir <dst>. Return a threading.Condition related to the is_ready() method, or None if the format of <src> isn't supported. """ self._src = src self._dst = dst self._files = [] self._extracted = set() self._archive = archive_tools.get_recursive_archive_handler(src, dst, type=type) if self._archive is None: msg = _('Non-supported archive format: %s') % os.path.basename(src) log.warning(msg) raise ArchiveException(msg) self._contents_listed = False self._extract_started = False self._condition = threading.Condition() self._list_thread = WorkerThread(self._list_contents, name='list') self._list_thread.append_order(self._archive) self._setupped = True return self._condition
def _create_thumbnail_pixbuf(self, filepath): """ Creates a thumbnail pixbuf from <filepath>, and returns it as a tuple along with a file metadata dictionary: (pixbuf, tEXt_data) """ if self.archive_support: mime = archive_tools.archive_mime_type(filepath) else: mime = None if mime is not None: cleanup = [] try: tmpdir = tempfile.mkdtemp(prefix=u'mcomix_archive_thumb.') cleanup.append(lambda: shutil.rmtree(tmpdir, True)) archive = archive_tools.get_recursive_archive_handler( filepath, tmpdir, type=mime) if archive is None: return None, None cleanup.append(archive.close) files = archive.list_contents() wanted = self._guess_cover(files) if wanted is None: return None, None archive.extract(wanted, tmpdir) image_path = os.path.join(tmpdir, wanted) if not os.path.isfile(image_path): return None, None pixbuf = image_tools.load_pixbuf_size(image_path, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(image_path) # Use the archive's mTime instead of the extracted file's mtime tEXt_data['tEXt::Thumb::MTime'] = str( long(os.stat(filepath).st_mtime)) else: tEXt_data = None return pixbuf, tEXt_data finally: for fn in reversed(cleanup): fn() elif image_tools.is_image_file(filepath): pixbuf = image_tools.load_pixbuf_size(filepath, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(filepath) else: tEXt_data = None return pixbuf, tEXt_data else: return None, None
def _create_thumbnail_pixbuf(self, filepath): """ Creates a thumbnail pixbuf from <filepath>, and returns it as a tuple along with a file metadata dictionary: (pixbuf, tEXt_data) """ if self.archive_support: mime = archive_tools.archive_mime_type(filepath) else: mime = None if mime is not None: cleanup = [] try: tmpdir = tempfile.mkdtemp(prefix=u'mcomix_archive_thumb.') cleanup.append(lambda: shutil.rmtree(tmpdir, True)) archive = archive_tools.get_recursive_archive_handler(filepath, tmpdir, type=mime) if archive is None: return None, None cleanup.append(archive.close) files = archive.list_contents() wanted = self._guess_cover(files) if wanted is None: return None, None archive.extract(wanted, tmpdir) image_path = os.path.join(tmpdir, wanted) if not os.path.isfile(image_path): return None, None pixbuf = image_tools.load_pixbuf_size(image_path, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(image_path) # Use the archive's mTime instead of the extracted file's mtime tEXt_data['tEXt::Thumb::MTime'] = str(long(os.stat(filepath).st_mtime)) else: tEXt_data = None return pixbuf, tEXt_data finally: for fn in reversed(cleanup): fn() elif image_tools.is_image_file(filepath): pixbuf = image_tools.load_pixbuf_size(filepath, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(filepath) else: tEXt_data = None return pixbuf, tEXt_data else: return None, None
def _create_thumbnail_pixbuf(self, filepath): ''' Creates a thumbnail pixbuf from <filepath>, and returns it as a tuple along with a file metadata dictionary: (pixbuf, tEXt_data) ''' if self.archive_support: mime = archive_tools.archive_mime_type(filepath) else: mime = None if mime is not None: if not archive_tools.is_archive_file(filepath): return None, None with archive_tools.get_recursive_archive_handler( filepath, type=mime, prefix='mcomix_archive_thumb.') as archive: if archive is None: return None, None if archive.is_encrypted: image_path = tools.pkg_path('images', 'encrypted-book.png') else: files = archive.list_contents(decrypt=False) wanted = self._guess_cover(files) if wanted is None: return None, None image_path = archive.extract(wanted) if not os.path.isfile(image_path): return None, None pixbuf = image_tools.load_pixbuf_size(image_path, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(image_path) # Use the archive's mTime instead of the extracted file's mtime tEXt_data['tEXt::Thumb::MTime'] = str( os.stat(filepath).st_mtime) else: tEXt_data = None return pixbuf, tEXt_data elif image_tools.is_image_file(filepath, check_mimetype=True): pixbuf = image_tools.load_pixbuf_size(filepath, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(filepath) else: tEXt_data = None return pixbuf, tEXt_data else: return None, None
def _create_thumbnail_pixbuf(self, filepath): """ Creates a thumbnail pixbuf from <filepath>, and returns it as a tuple along with a file metadata dictionary: (pixbuf, tEXt_data) """ if self.archive_support: mime = archive_tools.archive_mime_type(filepath) else: mime = None if mime is not None: with tempfile.TemporaryDirectory( prefix='mcomix_archive_thumb.') as tmpdir: archive = archive_tools.get_recursive_archive_handler( filepath, tmpdir, type=mime) if archive is None: return None, None files = archive.list_contents() wanted = self._guess_cover(files) if wanted is None: return None, None archive.extract(wanted, tmpdir) image_path = os.path.join(tmpdir, wanted) if not os.path.isfile(image_path): return None, None pixbuf = image_tools.load_pixbuf_size(image_path, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(image_path) # Use the archive's mTime instead of the extracted file's mtime tEXt_data['tEXt::Thumb::MTime'] = str( os.stat(filepath).st_mtime) else: tEXt_data = None return pixbuf, tEXt_data elif image_tools.is_image_file(filepath): pixbuf = image_tools.load_pixbuf_size(filepath, self.width, self.height) if self.store_on_disk: tEXt_data = self._get_text_data(filepath) else: tEXt_data = None return pixbuf, tEXt_data else: return None, None
def setup(self, src, dst, type=None): """Setup the extractor with archive <src> and destination dir <dst>. Return a threading.Condition related to the is_ready() method, or None if the format of <src> isn't supported. """ self._src = src self._dst = dst self._type = type or archive_tools.archive_mime_type(src) self._files = [] self._extracted = set() self._archive = archive_tools.get_recursive_archive_handler(src, dst, type=self._type) if self._archive is None: msg = _('Non-supported archive format: %s') % os.path.basename(src) log.warning(msg) raise ArchiveException(msg) self._contents_listed = False self._extract_started = False self._condition = threading.Condition() self._list_thread = WorkerThread(self._list_contents, name='list') self._list_thread.append_order(self._archive) self._setupped = True return self._condition