def get_comic_metadata_from_cbr(self): ''' Reads the comic metadata from the comic cbr file as comictagger metadata and returns the metadata depending on do_action ''' from calibre.utils.unrar import extract_member, names, comment ffile = self.db.format(self.book_id, "cbr", as_path=True) with open(ffile, 'rb') as stream: # get the cix metadata fnames = list(names(stream)) for name in fnames: if name.lower() == "comicinfo.xml": self.cix_metadata = extract_member(stream, match=None, name=name)[1] self.cix_metadata = ComicInfoXml().metadataFromString( self.cix_metadata) break # get the cbi metadata comments = comment(ffile) if ComicBookInfo().validateString(comments): self.cbi_metadata = ComicBookInfo().metadataFromString( comments) delete_temp_file(ffile) self._get_combined_metadata()
def convert_cbr_to_cbz(self): ''' Converts a rar or cbr-comic to a cbz-comic ''' from calibre.utils.unrar import extract, comment with TemporaryDirectory('_cbr2cbz') as tdir: # extract the rar file ffile = self.db.format(self.book_id, self.format, as_path=True) extract(ffile, tdir) comments = comment(ffile) delete_temp_file(ffile) # make the cbz file with TemporaryFile("comic.cbz") as tf: zf = ZipFile(tf, "w") zf.add_dir(tdir) if comments: zf.comment = comments.encode("utf-8") zf.close() # add the cbz format to calibres library self.db.add_format(self.book_id, "cbz", tf) self.format = "cbz"