Commit eca91d7e authored by mitshel's avatar mitshel
Browse files

Replace websymbols as '&' and '<' to '&amp;' and '&lt;' in output sopds.cgi

parent 96edd008
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -18,15 +18,33 @@ maxitems = 60
# Устранение дубликатов пока не работает
dublicates = no          

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

# Указывает следует ли показывать книги, помеченные при сканировании как дубликаты в сортировках по наименованию и автору
dublicates_show = no

# Извлекать метаинформацию из книг fb2
fb2parse   = yes

# Если cover_enable = yes, то при сканировании книг fb2 из них извлекается изображение обложки
# Если cover_extract = yes, то при сканировании книг fb2 из них извлекается изображение обложки
# файлы с изображениями обложек помещаются в каталог covers
# При просмотре каталога OPDS-клиентом обложка показывается
# Установка этой опции значительно замедляет сканирование каталога
# При просмотре каталога OPDS-клиентом извлеченная обложка будет показываться показывается
# если cover_show = 1 или 3
# Установка этой опции значительно замедляет сканирование каталога (~ в 10 раз)
# Следует использовать при значительной нагрузке на OPDS-каталог или если 
cover_extract = yes
cover_enable = yes

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

# Предположительно столько байт от начала файла fb2 необходимо считать, чтобы получить необходимую метаинформацию (только description), если 0 то парсится весь файл
# при использование числа отличного от 0 возможны ошибки (например description очень длинный и занимает более, чем указанное число байт)
# при установленном cover_enable=yes значение fb2size вне зависимости от установки считается равным 0
+13 −11
Original line number Diff line number Diff line
@@ -33,6 +33,14 @@ def translit(s):
       s = s.replace(k,table2[k])
   return s.translate(table1)

def websym(s):
    """Replace special web-symbols"""
    result = s
    table = {'&':'&amp;','<':'&lt;'}
    for k in table.keys():
        result = result.replace(k,table[k])
    return result;

def enc_print(string='', encoding='utf8'):
    sys.stdout.buffer.write(string.encode(encoding) + b'\n')

@@ -179,7 +187,7 @@ elif type_value==2:
         id='02'+id

       enc_print('<entry>')
       enc_print('<title>-= '+letters+' =-</title>')
       enc_print('<title>-= '+websym(letters)+' =-</title>')
       enc_print('<id>sopds.cgi?id='+id_value+'</id>')
       enc_print('<link type="application/atom+xml" rel="alternate" href="sopds.cgi?id='+id+'"/>')
       enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=acquisition" rel="subsection" href="sopds.cgi?id='+id+'"/>')
@@ -215,7 +223,7 @@ elif type_value==3:
         id='03'+id
   
       enc_print('<entry>')
       enc_print('<title>-= '+letters+' =-</title>')
       enc_print('<title>-= '+websym(letters)+' =-</title>')
       enc_print('<id>sopds.cgi?id='+id_value+'</id>')
       enc_print('<link type="application/atom+xml" rel="alternate" href="sopds.cgi?id='+id+'"/>')
       enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=acquisition" rel="subsection" href="sopds.cgi?id='+id+'"/>')
@@ -241,7 +249,7 @@ if type_value==10:
   for (book_id,book_name,book_path,reg_date,book_title,book_genre,cover,cover_type) in opdsdb.getbooksfortitle(letter,cfg.MAXITEMS,page_value):
       id='07'+str(book_id)
       enc_print('<entry>')
       enc_print('<title>'+book_title+'</title>')
       enc_print('<title>'+websym(book_title)+'</title>')
       enc_print('<updated>'+reg_date.strftime("%Y-%m-%dT%H:%M:%SZ")+'</updated>')
       enc_print('<id>sopds.cgi?id='+id+'</id>')
       covers(cover,cover_type)
@@ -276,7 +284,7 @@ elif type_value==4:
   for (book_id,book_name,book_path,reg_date,book_title) in opdsdb.getlastbooks(cfg.MAXITEMS):
       id='07'+str(book_id)
       enc_print('<entry>')
       enc_print('<title>'+book_title+'</title>')
       enc_print('<title>'+websym(book_title)+'</title>')
       enc_print('<updated>'+reg_date.strftime("%Y-%m-%dT%H:%M:%SZ")+'</updated>')
       enc_print('<id>sopds.cgi?id=04</id>')
       enc_print('<link type="application/atom+xml" rel="alternate" href="sopds.cgi?id='+id+'"/>')
@@ -298,12 +306,6 @@ elif type_value==4:
if type_value==5:
   opdsdb=sopdsdb.opdsDatabase(cfg.DB_NAME,cfg.DB_USER,cfg.DB_PASS,cfg.DB_HOST,cfg.ROOT_LIB)
   opdsdb.openDB()
#   if slice_value==0:
#      letters=""
#   elif slice_value>=10000:
#      letters=chr(slice_value//10000)+chr(slice_value%10000)
#   else:
#      letters=chr(slice_value)

   i=slice_value
   letter=""
@@ -341,7 +343,7 @@ if type_value==6:
   for (book_id,book_name,book_path,reg_date,book_title,book_genre,cover,cover_type) in opdsdb.getbooksforautor(slice_value,cfg.MAXITEMS,page_value):
       id='07'+str(book_id)
       enc_print('<entry>')
       enc_print('<title>'+book_title+'</title>')
       enc_print('<title>'+websym(book_title)+'</title>')
       enc_print('<updated>'+reg_date.strftime("%Y-%m-%dT%H:%M:%SZ")+'</updated>')
       enc_print('<id>sopds.cgi?id='+id+'</id>')
       covers(cover,cover_type)