def _sanity_check(self, on_card, files): from calibre.devices.utils import sanity_check sanity_check(on_card, files, self.card_prefix(), self.free_space()) def get_dest_dir(prefix, candidates): if isinstance(candidates, string_or_bytes): candidates = [candidates] if not candidates: candidates = [''] candidates = [ ((os.path.join(prefix, *(x.split('/')))) if x else prefix) for x in candidates ] existing = [x for x in candidates if os.path.exists(x)] if not existing: existing = candidates return existing[0] if on_card == 'carda': candidates = self.get_carda_ebook_dir(for_upload=True) path = get_dest_dir(self._card_a_prefix, candidates) elif on_card == 'cardb': candidates = self.get_cardb_ebook_dir(for_upload=True) path = get_dest_dir(self._card_b_prefix, candidates) else: candidates = self.get_main_ebook_dir(for_upload=True) path = get_dest_dir(self._main_prefix, candidates) return path
def _sanity_check(self, on_card, files): from calibre.devices.utils import sanity_check sanity_check(on_card, files, self.card_prefix(), self.free_space()) def get_dest_dir(prefix, candidates): if isinstance(candidates, basestring): candidates = [candidates] if not candidates: candidates = [''] candidates = [ ((os.path.join(prefix, *(x.split('/')))) if x else prefix) for x in candidates] existing = [x for x in candidates if os.path.exists(x)] if not existing: existing = candidates return existing[0] if on_card == 'carda': candidates = self.get_carda_ebook_dir(for_upload=True) path = get_dest_dir(self._card_a_prefix, candidates) elif on_card == 'cardb': candidates = self.get_cardb_ebook_dir(for_upload=True) path = get_dest_dir(self._card_b_prefix, candidates) else: candidates = self.get_main_ebook_dir(for_upload=True) path = get_dest_dir(self._main_prefix, candidates) return path
def upload_books(self, files, names, on_card=None, end_session=True, metadata=None): debug('upload_books() called') from calibre.devices.utils import sanity_check sanity_check(on_card, files, self.card_prefix(), self.free_space()) prefix = self.prefix_for_location(on_card) sid = { 'carda': self._carda_id, 'cardb': self._cardb_id }.get(on_card, self._main_id) bl_idx = {'carda': 1, 'cardb': 2}.get(on_card, 0) storage = self.filesystem_cache.storage(sid) ans = [] self.report_progress(0, _('Transferring books to device...')) i, total = 0, len(files) routing = {fmt: dest for fmt, dest in self.get_pref('rules')} for infile, fname, mi in izip(files, names, metadata): path = self.create_upload_path(prefix, mi, fname, routing) if path and self.is_folder_ignored(storage, path[0]): raise MTPInvalidSendPathError(path[0]) parent = self.ensure_parent(storage, path) if hasattr(infile, 'read'): pos = infile.tell() infile.seek(0, 2) sz = infile.tell() infile.seek(pos) stream = infile close = False else: sz = os.path.getsize(infile) stream = lopen(infile, 'rb') close = True try: mtp_file = self.put_file(parent, path[-1], stream, sz) finally: if close: stream.close() ans.append((mtp_file, bl_idx)) i += 1 self.report_progress(i / total, _('Transferred %s to device') % mi.title) self.report_progress(1, _('Transfer to device finished...')) debug('upload_books() ended') return ans
def upload_books(self, files, names, on_card=None, end_session=True, metadata=None): debug('upload_books() called') from calibre.devices.utils import sanity_check sanity_check(on_card, files, self.card_prefix(), self.free_space()) prefix = self.prefix_for_location(on_card) sid = {'carda':self._carda_id, 'cardb':self._cardb_id}.get(on_card, self._main_id) bl_idx = {'carda':1, 'cardb':2}.get(on_card, 0) storage = self.filesystem_cache.storage(sid) ans = [] self.report_progress(0, _('Transferring books to device...')) i, total = 0, len(files) routing = {fmt:dest for fmt,dest in self.get_pref('rules')} for infile, fname, mi in izip(files, names, metadata): path = self.create_upload_path(prefix, mi, fname, routing) if path and self.is_folder_ignored(storage, path): raise MTPInvalidSendPathError('/'.join(path)) parent = self.ensure_parent(storage, path) if hasattr(infile, 'read'): pos = infile.tell() infile.seek(0, 2) sz = infile.tell() infile.seek(pos) stream = infile close = False else: sz = os.path.getsize(infile) stream = lopen(infile, 'rb') close = True try: mtp_file = self.put_file(parent, path[-1], stream, sz) finally: if close: stream.close() ans.append((mtp_file, bl_idx)) i += 1 self.report_progress(i/total, _('Transferred %s to device')%mi.title) self.report_progress(1, _('Transfer to device finished...')) debug('upload_books() ended') return ans