Commit 12c01c56 authored by mitshel's avatar mitshel
Browse files

Вроде "Выпилил" весь функционал по предварительному извлечению обложек

parent 6319c6b6
Loading
Loading
Loading
Loading
+2 −13
Original line number Diff line number Diff line
@@ -17,10 +17,9 @@ formats = .pdf .djvu .fb2 .txt
#Некоторым OPDS-клиентам требуется полный путь в HTTP-запросе
#таким образом cgi_path и cover_path - задают такие пути
#если закомментировать эти параметры, то будет применены параметры по умолчанию:
#cgi_path=sopds.cgi, wsgi_path=sopds.wsgi  и cover_path=../covers
#cgi_path=sopds.cgi, wsgi_path=sopds.wsgi
cgi_path=/opds/py/sopds.cgi
wsgi_path=/opds/py/sopds.wsgi
cover_path=/opds/covers

# Количество выдаваемых строк на одну страницу
maxitems   = 60
@@ -36,19 +35,9 @@ dublicates_show = no
# Извлекать метаинформацию из книг fb2
fb2parse   = yes

# Если cover_extract = yes, то при сканировании книг fb2 из них извлекается изображение обложки
# файлы с изображениями обложек помещаются в каталог covers 
# При просмотре каталога OPDS-клиентом извлеченная обложка будет показываться
# если cover _show = 1 или 3
# Установка этой опции в yes значительно замедляет сканирование каталога (НА ПОРЯДОК!!!) 
# Правда зарание извлеченные обложки в OPDS-клиенте будут загружаться практически мгновенно
cover_extract = yes

# cover_show - способ показа обложек:
# 0 - не показывать, 
# 1 - показывать заранее извлеченные обложки, 
# 2 - извлекать обложки на лету и показывать 
# 3 - показать ранее извлеченную обложку, если обложка не извлекалась, то извелечь на лету и показать
# 1 - извлекать обложки на лету и показывать 
# 
cover_show = 1

−495 B (40.9 KiB)

File changed.

No diff preview for this file type.

+2 −82
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ class opdsScanner:
        self.books_in_archives = 0

    def init_parser(self):
        self.fb2parser=sopdsparse.fb2parser(self.cfg.COVER_EXTRACT)
        self.fb2parser=sopdsparse.fb2parser(False)

    def log_options(self):
        self.logger.info(' ***** Starting sopds-scan...')
@@ -69,10 +69,6 @@ class opdsScanner:
        self.opdsdb.openDB()
        self.opdsdb.avail_check_prepare()

        if self.cfg.COVER_EXTRACT:
            if not os.path.isdir(sopdscfg.COVER_PATH):
                os.mkdir(sopdscfg.COVER_PATH)

        for full_path, dirs, files in os.walk(self.cfg.ROOT_LIB):
            for name in files:
                file=os.path.join(full_path,name)
@@ -129,8 +125,6 @@ class opdsScanner:
               lang=''
               annotation=''
               docdate=''
               fnpat=''
               ictype=''

               if e.lower()=='.fb2' and self.cfg.FB2PARSE:
                  if isinstance(file, str):
@@ -154,24 +148,9 @@ class opdsScanner:

               if title=='': title=n

               if e.lower()=='.fb2' and self.cfg.FB2PARSE and self.cfg.COVER_EXTRACT:
                  (fnpat,ictype)=self.cover_meta()

               book_id=self.opdsdb.addbook(name,rel_path,cat_id,e,title,annotation,docdate,lang,file_size,archive,self.cfg.DUBLICATES_FIND, fnpat, ictype)
               book_id=self.opdsdb.addbook(name,rel_path,cat_id,e,title,annotation,docdate,lang,file_size,archive,self.cfg.DUBLICATES_FIND)
               self.books_added+=1

               if e.lower()=='.fb2' and self.cfg.FB2PARSE and self.cfg.COVER_EXTRACT and fnpat!='':
                  try:
                    fn=fnpat.format(book_id)
                    self.cover_save(fn)
                  except:
                    self.logger.error('Error extract cover from file '+name) 

#                  try:
#                    self.create_cover(book_id)
#                  except:
#                    self.logger.error('Error extract cover from file '+name)

               if archive==1:
                  self.books_in_archives+=1
               self.logger.debug("Book "+rel_path+"/"+name+" Added ok.")
@@ -192,62 +171,3 @@ class opdsScanner:
            else:
               self.books_skipped+=1
               self.logger.debug("Book "+rel_path+"/"+name+" Already in DB.")
    
    def cover_meta(self):
        ictype=self.fb2parser.cover_image.getattr('content-type')
        coverid=self.fb2parser.cover_image.getattr('id')
        fn=''
        e='.img'
        if ictype==None:
           ictype=''
        else:
           ictype=ictype.lower()
           if ictype=='image/jpeg' or ictype=='image/jpg':
              e='.jpg'
           elif ictype=='image/png':
              e='.png'
           elif coverid!=None:
             (f,e)=os.path.splitext(coverid)
           else:
             e='.img'
           fn='{}'+e
        return (fn,ictype)

    def cover_save(self,fn):
        fp=os.path.join(sopdscfg.COVER_PATH,fn)
        if len(self.fb2parser.cover_image.cover_data)>0:
           img=open(fp,'wb')
           s=self.fb2parser.cover_image.cover_data
           dstr=base64.b64decode(s)
           img.write(dstr)
           img.close()

    def create_cover(self,book_id):
        ictype=self.fb2parser.cover_image.getattr('content-type')
        coverid=self.fb2parser.cover_image.getattr('id')
        fn=''
        if ictype==None:
           ictype=''
        else:
           ictype=ictype.lower()
           if ictype=='image/jpeg' or ictype=='image/jpg':
              fn=str(book_id)+'.jpg'
           else:
              if ictype=='image/png':
                 fn=str(book_id)+'.png'
              else:
                 if coverid!=None:
                    (f,e)=os.path.splitext(coverid)
                 else:
                    e='.img'
                 fn=str(book_id)+e

           fp=os.path.join(sopdscfg.COVER_PATH,fn)
           if len(self.fb2parser.cover_image.cover_data)>0:
              img=open(fp,'wb')
              s=self.fb2parser.cover_image.cover_data
              dstr=base64.b64decode(s)
              img.write(dstr)
              img.close()
        self.opdsdb.addcover(book_id,fn,ictype)
+0 −6
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ PY_PATH=os.path.dirname(os.path.abspath(__file__))
CFG_FILENAME='sopds.conf'
CFG_PATH_DEFAULT=ROOT_PATH+os.path.sep+'conf'+os.path.sep+CFG_FILENAME
CFG_PATH=CFG_PATH_DEFAULT
COVER_PATH=os.path.join(ROOT_PATH,'covers')
NOCOVER_IMG='nocover.jpg'
NOCOVER_PATH=os.path.join(PY_PATH,NOCOVER_IMG)
LOG_PATH=os.path.join(ROOT_PATH,'logs')
@@ -69,9 +68,6 @@ class cfgreader:
       self.WSGI_PATH=config.getdefault(CFG_S_GLOBAL,'wsgi_path','sopds.wsgi')
       self.WSGI_PATH=os.path.normpath(self.WSGI_PATH)

       self.COVER_PATH=config.getdefault(CFG_S_GLOBAL,'cover_path','../covers')
       self.COVER_PATH=os.path.normpath(self.COVER_PATH)

       self.FB2TOEPUB_PATH=config.getdefault(CFG_S_GLOBAL,'fb2toepub',None)
       self.FB2TOEPUB=self.FB2TOEPUB_PATH!=None and os.path.isfile(self.FB2TOEPUB_PATH)

@@ -101,7 +97,6 @@ class cfgreader:
       self.FB2PARSE=config.getboolean(CFG_S_GLOBAL,'fb2parse')
       self.ZIPSCAN=config.getboolean(CFG_S_GLOBAL,'zipscan')
       self.ZIPRESCAN=config.getboolean(CFG_S_GLOBAL,'ziprescan')
       self.COVER_EXTRACT=config.getboolean(CFG_S_GLOBAL,'cover_extract')
       self.DELETE_LOGICAL=config.getboolean(CFG_S_GLOBAL,'delete_logical')
       self.ZIPFILE_PATCH=config.getdefault_bool(CFG_S_GLOBAL,'zipfile_patch',False)
       self.SINGLE_COMMIT=config.getdefault_bool(CFG_S_GLOBAL,'single_commit',False)
@@ -116,7 +111,6 @@ class cfgreader:
       zip_codepage=config.getdefault(CFG_S_GLOBAL,'zip_codepage','cp866')
       self.BOOK_SHELF=config.getdefault_bool(CFG_S_GLOBAL,'book_shelf',True)

       if self.COVER_EXTRACT: self.FB2SIZE=0
       self.EXT_LIST=self.FORMATS.lower().split()

       if zip_codepage.lower() in {'cp437','cp866','cp1251','utf-8'}: self.ZIP_CODEPAGE=zip_codepage.lower()
Loading