Commit ff147cf7 authored by mitshel's avatar mitshel
Browse files

Fix problem with Cyrillic filenames in zip archives

parent 4e6a2299
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -3,3 +3,6 @@ covers/*
py/*.jpg
py/*.png
py/__pycache__/*
py/man.zip
py/ziptest.py
py/fb2parse.py
+10 −3
Original line number Diff line number Diff line
@@ -15,15 +15,14 @@ formats = .pdf .djvu .fb2 .txt
# Количество выдаваемых строк на одну страницу
maxitems   = 60

# Устранение дубликатов пока не работает
dublicates = no          

# dublicates_find = yes, приводит к поиску дубликатов на основании полей title и filesize
# при этом дубликат помещается в базу, но помечается как дубликат и может исключаться из выдачи
# при поиске по наименованиям и по авторам, в случае поиска по книги, помеченные как дубликаты все равно будут показываться
# ***** Функция пока не реализована в текущей версии ПО
dublicates_find = yes

# Указывает следует ли показывать книги, помеченные при сканировании как дубликаты в сортировках по наименованию и автору
# ***** Функция пока не реализована в текущей версии ПО
dublicates_show = no

# Извлекать метаинформацию из книг fb2
@@ -57,6 +56,14 @@ zipscan = yes
# ziprescan = no - Предотвращает повторное сканирование всего zip-архива
ziprescan  = no

# Указываем какая кодировка для названий файлов используется в ZIP-архивах
# доступные кодировки: cp437, cp866, cp1251, utf-8
# по умолчанию применяется кодировка cp437
# Поскольку в самом ZIP архиве сведения о кодировке, в которой находятся имена файлов - отсутсвует
# то оавтоматически определить правильную кодировку для имен файлов не представляется возможным
# поэтому для того чтобы кириллические имена файлов не ваыгляядели как крякозябры следует применять кодировку cp866
zip_codepage = cp866

# При таком количестве авторов в выдаче по авторам следующий уровень сортировки предоставляться уже не будет 
splitauthors = 300 
# При таком количестве наименований книг в выдаче по наименованиям следующий уровень сортировки предоставляться уже не будет
+2 −2
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
import os
import sopdsdb
import sopdsparse
import zipfile
import zipf
import time
import datetime
import sopdscfg
@@ -157,7 +157,7 @@ def processzip(db,fb2,name,full_path,file):
    rel_path=os.path.relpath(full_path,cfg.ROOT_LIB)
    rel_file=os.path.join(rel_path,name)
    if cfg.ZIPRESCAN or db.zipisscanned(rel_file)==0:
       z = zipfile.ZipFile(file, 'r')
       z = zipf.ZipFile(file, 'r', codepage=cfg.ZIP_CODEPAGE)
       filelist = z.namelist()
       for n in filelist:
           try:
+6 −6
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ import cgi
import codecs
import os
import urllib.parse
import zipfile
import zipf
import io
import locale
import time
@@ -438,7 +438,7 @@ elif type_value==8:
      fo.close()
   elif cat_type==sopdsdb.CAT_ZIP:
      fz=codecs.open(full_path.encode("utf-8"), "rb")
      z = zipfile.ZipFile(fz, 'r')
      z = zipf.ZipFile(fz, 'r', codepage=cfg.ZIP_CODEPAGE)
      book_size=z.getinfo(book_name).file_size
      enc_print('Content-Length: '+str(book_size))
      enc_print()
@@ -466,7 +466,7 @@ elif type_value==9:
   if cat_type==sopdsdb.CAT_NORMAL:
      file_path=os.path.join(full_path,book_name)
      dio = io.BytesIO()
      z = zipfile.ZipFile(dio, 'w', zipfile.ZIP_DEFLATED)
      z = zipf.ZipFile(dio, 'w', zipf.ZIP_DEFLATED)
      z.write(file_path.encode('utf-8'),transname)
      z.close()
      buf = dio.getvalue()
@@ -475,7 +475,7 @@ elif type_value==9:
      sys.stdout.buffer.write(buf)
   elif cat_type==sopdsdb.CAT_ZIP:
      fz=codecs.open(full_path.encode("utf-8"), "rb")
      zi = zipfile.ZipFile(fz, 'r', allowZip64=True)
      zi = zipf.ZipFile(fz, 'r', codepage=cfg.ZIP_CODEPAGE)
      fo= zi.open(book_name)
      str=fo.read()
      fo.close()
@@ -483,7 +483,7 @@ elif type_value==9:
      fz.close()

      dio = io.BytesIO()
      zo = zipfile.ZipFile(dio, 'w', zipfile.ZIP_DEFLATED)
      zo = zipf.ZipFile(dio, 'w', zipf.ZIP_DEFLATED)
      zo.writestr(transname,str)
      zo.close()

@@ -512,7 +512,7 @@ elif type_value==99:
         fo.close()
      elif cat_type==sopdsdb.CAT_ZIP:
         fz=codecs.open(full_path.encode("utf-8"), "rb")
         z = zipfile.ZipFile(fz, 'r')
         z = zipf.ZipFile(fz, 'r', codepage=cfg.ZIP_CODEPAGE)
         fo = z.open(book_name)
         fb2.parse(fo,0)
         fo.close()
Loading