Skip to content
Snippets Groups Projects
Commit 07078bd5 authored by Dmitry Shelepnev's avatar Dmitry Shelepnev
Browse files

Add extract_cover_memory for mobi books

parent 224906db
No related branches found
No related tags found
No related merge requests found
......@@ -77,7 +77,6 @@ def create_bookfile(file, original_filename):
if isinstance(file, str):
file = open(file, 'rb')
mimetype = detect_mime(file)
file.seek(0,0)
if mimetype == Mimetype.EPUB:
return EPub(file, original_filename)
elif mimetype == Mimetype.FB2:
......
......@@ -50,6 +50,7 @@ class EPub(BookFile):
self.__initialize()
def __initialize(self):
self.file.seek(0,0)
self.__zip_file = zipfile.ZipFile(self.file)
self.issues = []
try:
......
......@@ -35,3 +35,13 @@ class Mobipocket(BookFile):
return (None, False)
finally:
shutil.rmtree(tmp_dir)
def extract_cover_memory(self):
try:
image = BookMobi(self.file).unpackMobiCover()
except Exception as err:
print(err)
image = None
return image
......@@ -262,6 +262,7 @@ class BookMobi(object):
f = file
self.filename = f.name
self.f = f
self.f.seek(0,0)
# palm database header
header = f.read(78)
for key, u_fmt, offset in self.palmdb_format:
......@@ -556,6 +557,14 @@ class BookMobi(object):
self.saveRecordImage(cover_rn, '%s_cover' % basename)
print('Unpack MOBI successfully')
def unpackMobiCover(self):
if 201 in self.mobi_exth:
cover_rn, = struct.unpack('>L', self.mobi_exth[201])
cover_rn += self.mobi['firstImageIndex']
rec = self.loadRecord(cover_rn)
return rec
return None
def removeSrcs(self, outmobi, outsrcs=None):
srcs_rn = self.mobi['srcsRecordNumber']
srcs_rc = self.mobi['srcsRecordCount']
......
......@@ -97,7 +97,7 @@ def Download(request, book_id, zip_flag):
return response
# Новая версия (0.42) процедуры извлечения обложек из файлов книг fb2, epub, mobi
def Cover(request, book_id, thumbnail=False):
""" Загрузка обложки """
book = Book.objects.get(id=book_id)
......@@ -153,6 +153,7 @@ def Cover(request, book_id, thumbnail=False):
return response
# Старая версия (до 0.41) процедуры извлечения обложек из файлов книг только fb2
def Cover0(request, book_id, thumbnail = False):
""" Загрузка обложки """
book = Book.objects.get(id=book_id)
......
......@@ -195,6 +195,7 @@ class opdsScanner:
zip_process_error = 1
self.bad_archives+=zip_process_error
# Новая версия (0.42) процедуры извлечения метаданных из файлов книг fb2, epub, mobi
def processfile(self,name,full_path,file,cat,archive=0,file_size=0):
(n, e) = os.path.splitext(name)
if e.lower() in config.SOPDS_BOOK_EXTENSIONS.split():
......@@ -246,6 +247,7 @@ class opdsScanner:
self.books_skipped+=1
self.logger.debug("Book "+rel_path+"/"+name+" Already in DB.")
# Старая версия (до 0.41) процедуры извлечения метаданных из файлов книг только fb2
def processfile0(self,name,full_path,file,cat,archive=0,file_size=0):
(n,e)=os.path.splitext(name)
if e.lower() in config.SOPDS_BOOK_EXTENSIONS.split():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment