Loading conf/sopds.conf +2 −13 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading py/__pycache__/sopdscfg.cpython-33.pyc −241 B (7.17 KiB) File changed.No diff preview for this file type. View original file View changed file py/__pycache__/sopdsdb.cpython-33.pyc −495 B (40.9 KiB) File changed.No diff preview for this file type. View original file View changed file py/sopdscan.py +2 −82 Original line number Diff line number Diff line Loading @@ -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...') Loading Loading @@ -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) Loading Loading @@ -129,8 +125,6 @@ class opdsScanner: lang='' annotation='' docdate='' fnpat='' ictype='' if e.lower()=='.fb2' and self.cfg.FB2PARSE: if isinstance(file, str): Loading @@ -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.") Loading @@ -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) py/sopdscfg.py +0 −6 Original line number Diff line number Diff line Loading @@ -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') Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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 Loading
conf/sopds.conf +2 −13 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
py/__pycache__/sopdscfg.cpython-33.pyc −241 B (7.17 KiB) File changed.No diff preview for this file type. View original file View changed file
py/__pycache__/sopdsdb.cpython-33.pyc −495 B (40.9 KiB) File changed.No diff preview for this file type. View original file View changed file
py/sopdscan.py +2 −82 Original line number Diff line number Diff line Loading @@ -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...') Loading Loading @@ -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) Loading Loading @@ -129,8 +125,6 @@ class opdsScanner: lang='' annotation='' docdate='' fnpat='' ictype='' if e.lower()=='.fb2' and self.cfg.FB2PARSE: if isinstance(file, str): Loading @@ -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.") Loading @@ -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)
py/sopdscfg.py +0 −6 Original line number Diff line number Diff line Loading @@ -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') Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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