Loading README.md +1 −4 Original line number Diff line number Diff line Simple OPDS Catalog Простой OPDS Каталог Author: Dmitry V.Shelepnev Версия 0.10.1 Версия 0.15 Установка Simple OPDS в Fedora: Loading Loading @@ -92,6 +92,3 @@ Alias /opds "/home/www/opds" fb2toepub=../fb2epub/fb2epub temp_dir=/tmp conf/sopds.conf +6 −1 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ temp_dir=/tmp # Если single_commit = no то коммиты происходят кажды раз при добавлении книги в БД. # Применение однократного коммита значительно ускоряет сканирование. # По умолчанию будет считаться что single_commit=no single_commit = no single_commit = yes # Установка параметра title_as_filename = yes приведет к тому, что при скачивании книги имя файла будет изменено # на транслитерацию заголовка (title) книги Loading @@ -108,6 +108,11 @@ alphabet_menu = yes # по умолчанию new_period = 7 new_period = 7 # Установка параметра book_shelf = yes приведет к появлению в основном меню Книжной полки для пользователя (если настроена авторизация web-сервером) # Здесь будут запоминаться скачанные пользователем книги. Это удобно при использование нескольких устройств. # При установке book_shelf = no Книжная полка в главном меню отображаться не будет, также не будет происходить запоминание загружаемых книг book_shelf = yes [site] id=http://sopds.ru/ title=SOPDS.RU | OPDS Catalog Loading db/tables.sql +10 −2 Original line number Diff line number Diff line Loading @@ -89,14 +89,22 @@ PRIMARY KEY(book_id,ser_id), INDEX(ser_id)); commit; drop table if exists bookshelf; create table bookshelf( user VARCHAR(32) not NULL, book_id INT not NULL, readtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, INDEX(user,readtime)); commit; drop table if exists dbver; create table dbver( ver varchar(5)); commit; insert into dbver(ver) values("0.14"); insert into dbver(ver) values("0.15"); commit; insert into authors(author_id,last_name) values(1,"Неизвестный Автор"); insert into authors(author_id,last_name,first_name) values(1,"Неизвестный Автор",""); commit; DROP PROCEDURE IF EXISTS sp_update_dbl; Loading py/__pycache__/sopdsdb.cpython-33.pyc +1 B (36.5 KiB) File changed.No diff preview for this file type. View original file View changed file py/sopds.cgi +44 −7 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import sopdsparse import base64 import subprocess import zipf from urllib import request from urllib import parse ####################################################################### Loading @@ -23,6 +24,14 @@ from urllib import parse cfg=sopdscfg.cfgreader() zipf.ZIP_CODEPAGE=cfg.ZIP_CODEPAGE ###################################################################### # # Парсим данные response (выясняем имя пользователя если была Аутентификация) # user = None if 'REMOTE_USER' in os.environ: user = os.environ['REMOTE_USER'] ####################################################################### # # Вспомогательные функции Loading Loading @@ -82,7 +91,7 @@ def footer(): def main_menu(): if cfg.ALPHA: am='30' else: am='' dbinfo=opdsdb.getdbinfo(cfg.DUBLICATES_SHOW) dbinfo=opdsdb.getdbinfo(cfg.DUBLICATES_SHOW,cfg.BOOK_SHELF,user) enc_print('<link href="'+cfg.SEARCHXML_PATH+'" rel="search" type="application/opensearchdescription+xml" />') enc_print('<link href="'+cfg.CGI_PATH+'?searchTerm={searchTerms}" rel="search" type="application/atom+xml" />') enc_print('<entry>') Loading Loading @@ -115,6 +124,13 @@ def main_menu(): enc_print('<title>Новинки за %s суток</title>'%cfg.NEW_PERIOD) enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=navigation" href="'+cfg.CGI_PATH+'?id=05"/>') enc_print('<id>id:05</id></entry>') if cfg.BOOK_SHELF and user!=None: enc_print('<entry>') enc_print('<title>Книжная полка для %s</title>'%user) enc_print('<content type="text">Книг: %s.</content>'%dbinfo[5][1]) enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=navigation" href="'+cfg.CGI_PATH+'?id=08"/>') enc_print('<id>id:08</id></entry>') def new_menu(): if cfg.ALPHA: am='30' Loading Loading @@ -217,17 +233,17 @@ def entry_content(e_content): def entry_content2(annotation='',title='',authors='',genres='',filename='',filesize=0,docdate='',series=''): enc_print('<content type="text/html">') if annotation!='': enc_print('<p class=book>'+annotation+'</p>') enc_print('<p class=book>'+websym(annotation)+'</p>') if title!='': enc_print('<b>Название книги:</b> '+title+'<br/>') enc_print('<b>Название книги:</b> '+websym(title)+'<br/>') if authors!='': enc_print('<b>Авторы:</b> '+authors+'<br/>') enc_print('<b>Авторы:</b> '+websym(authors)+'<br/>') if genres!='': enc_print('<b>Жанры:</b> '+genres+'<br/>') enc_print('<b>Жанры:</b> '+websym(genres)+'<br/>') if series!='': enc_print('<b>Серии:</b> '+series+'<br/>') enc_print('<b>Серии:</b> '+websym(series)+'<br/>') if filename!='': enc_print('<b>Файл:</b> '+filename+'<br/>') enc_print('<b>Файл:</b> '+websym(filename)+'<br/>') if filesize>0: enc_print('<b>Размер файла:</b> '+str(fsize//1000)+'Кб.<br/>') if docdate!='': Loading Loading @@ -561,6 +577,24 @@ if type_value==7: entry_finish() footer() ######################################################### # Выдача списка книг на книжной полке # if type_value==8: header() for (book_id,book_name,book_path,reg_date,book_title,annotation,docdate,format,fsize,cover,cover_type) in opdsdb.getbooksforuser(user,cfg.MAXITEMS,page_value): id='90'+str(book_id) entry_start() entry_head(book_title, reg_date, id_value) entry_link_book(book_id,format) entry_covers(cover,cover_type,book_id) authors=entry_authors(opdsdb,book_id,True) genres=entry_genres(opdsdb,book_id) series=entry_series(opdsdb,book_id) entry_content2(annotation,book_title,authors,genres,book_name,fsize,docdate,series) entry_finish() page_control(opdsdb,page_value,id_value) footer() ######################################################### # Выдача списка авторов по имени или на основании поиска Loading Loading @@ -676,6 +710,7 @@ elif type_value==90: # elif type_value==91: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) if cfg.TITLE_AS_FN: transname=translit(title+'.'+format) else: transname=translit(book_name) Loading Loading @@ -710,6 +745,7 @@ elif type_value==91: # elif type_value==92: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) if cfg.TITLE_AS_FN: transname=translit(title+'.'+format) else: transname=translit(book_name) Loading Loading @@ -751,6 +787,7 @@ elif type_value==92: # elif type_value==93: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) (n,e)=os.path.splitext(book_name) if cfg.TITLE_AS_FN: transname=translit(title)+'.epub' Loading Loading
README.md +1 −4 Original line number Diff line number Diff line Simple OPDS Catalog Простой OPDS Каталог Author: Dmitry V.Shelepnev Версия 0.10.1 Версия 0.15 Установка Simple OPDS в Fedora: Loading Loading @@ -92,6 +92,3 @@ Alias /opds "/home/www/opds" fb2toepub=../fb2epub/fb2epub temp_dir=/tmp
conf/sopds.conf +6 −1 Original line number Diff line number Diff line Loading @@ -92,7 +92,7 @@ temp_dir=/tmp # Если single_commit = no то коммиты происходят кажды раз при добавлении книги в БД. # Применение однократного коммита значительно ускоряет сканирование. # По умолчанию будет считаться что single_commit=no single_commit = no single_commit = yes # Установка параметра title_as_filename = yes приведет к тому, что при скачивании книги имя файла будет изменено # на транслитерацию заголовка (title) книги Loading @@ -108,6 +108,11 @@ alphabet_menu = yes # по умолчанию new_period = 7 new_period = 7 # Установка параметра book_shelf = yes приведет к появлению в основном меню Книжной полки для пользователя (если настроена авторизация web-сервером) # Здесь будут запоминаться скачанные пользователем книги. Это удобно при использование нескольких устройств. # При установке book_shelf = no Книжная полка в главном меню отображаться не будет, также не будет происходить запоминание загружаемых книг book_shelf = yes [site] id=http://sopds.ru/ title=SOPDS.RU | OPDS Catalog Loading
db/tables.sql +10 −2 Original line number Diff line number Diff line Loading @@ -89,14 +89,22 @@ PRIMARY KEY(book_id,ser_id), INDEX(ser_id)); commit; drop table if exists bookshelf; create table bookshelf( user VARCHAR(32) not NULL, book_id INT not NULL, readtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, INDEX(user,readtime)); commit; drop table if exists dbver; create table dbver( ver varchar(5)); commit; insert into dbver(ver) values("0.14"); insert into dbver(ver) values("0.15"); commit; insert into authors(author_id,last_name) values(1,"Неизвестный Автор"); insert into authors(author_id,last_name,first_name) values(1,"Неизвестный Автор",""); commit; DROP PROCEDURE IF EXISTS sp_update_dbl; Loading
py/__pycache__/sopdsdb.cpython-33.pyc +1 B (36.5 KiB) File changed.No diff preview for this file type. View original file View changed file
py/sopds.cgi +44 −7 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import sopdsparse import base64 import subprocess import zipf from urllib import request from urllib import parse ####################################################################### Loading @@ -23,6 +24,14 @@ from urllib import parse cfg=sopdscfg.cfgreader() zipf.ZIP_CODEPAGE=cfg.ZIP_CODEPAGE ###################################################################### # # Парсим данные response (выясняем имя пользователя если была Аутентификация) # user = None if 'REMOTE_USER' in os.environ: user = os.environ['REMOTE_USER'] ####################################################################### # # Вспомогательные функции Loading Loading @@ -82,7 +91,7 @@ def footer(): def main_menu(): if cfg.ALPHA: am='30' else: am='' dbinfo=opdsdb.getdbinfo(cfg.DUBLICATES_SHOW) dbinfo=opdsdb.getdbinfo(cfg.DUBLICATES_SHOW,cfg.BOOK_SHELF,user) enc_print('<link href="'+cfg.SEARCHXML_PATH+'" rel="search" type="application/opensearchdescription+xml" />') enc_print('<link href="'+cfg.CGI_PATH+'?searchTerm={searchTerms}" rel="search" type="application/atom+xml" />') enc_print('<entry>') Loading Loading @@ -115,6 +124,13 @@ def main_menu(): enc_print('<title>Новинки за %s суток</title>'%cfg.NEW_PERIOD) enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=navigation" href="'+cfg.CGI_PATH+'?id=05"/>') enc_print('<id>id:05</id></entry>') if cfg.BOOK_SHELF and user!=None: enc_print('<entry>') enc_print('<title>Книжная полка для %s</title>'%user) enc_print('<content type="text">Книг: %s.</content>'%dbinfo[5][1]) enc_print('<link type="application/atom+xml;profile=opds-catalog;kind=navigation" href="'+cfg.CGI_PATH+'?id=08"/>') enc_print('<id>id:08</id></entry>') def new_menu(): if cfg.ALPHA: am='30' Loading Loading @@ -217,17 +233,17 @@ def entry_content(e_content): def entry_content2(annotation='',title='',authors='',genres='',filename='',filesize=0,docdate='',series=''): enc_print('<content type="text/html">') if annotation!='': enc_print('<p class=book>'+annotation+'</p>') enc_print('<p class=book>'+websym(annotation)+'</p>') if title!='': enc_print('<b>Название книги:</b> '+title+'<br/>') enc_print('<b>Название книги:</b> '+websym(title)+'<br/>') if authors!='': enc_print('<b>Авторы:</b> '+authors+'<br/>') enc_print('<b>Авторы:</b> '+websym(authors)+'<br/>') if genres!='': enc_print('<b>Жанры:</b> '+genres+'<br/>') enc_print('<b>Жанры:</b> '+websym(genres)+'<br/>') if series!='': enc_print('<b>Серии:</b> '+series+'<br/>') enc_print('<b>Серии:</b> '+websym(series)+'<br/>') if filename!='': enc_print('<b>Файл:</b> '+filename+'<br/>') enc_print('<b>Файл:</b> '+websym(filename)+'<br/>') if filesize>0: enc_print('<b>Размер файла:</b> '+str(fsize//1000)+'Кб.<br/>') if docdate!='': Loading Loading @@ -561,6 +577,24 @@ if type_value==7: entry_finish() footer() ######################################################### # Выдача списка книг на книжной полке # if type_value==8: header() for (book_id,book_name,book_path,reg_date,book_title,annotation,docdate,format,fsize,cover,cover_type) in opdsdb.getbooksforuser(user,cfg.MAXITEMS,page_value): id='90'+str(book_id) entry_start() entry_head(book_title, reg_date, id_value) entry_link_book(book_id,format) entry_covers(cover,cover_type,book_id) authors=entry_authors(opdsdb,book_id,True) genres=entry_genres(opdsdb,book_id) series=entry_series(opdsdb,book_id) entry_content2(annotation,book_title,authors,genres,book_name,fsize,docdate,series) entry_finish() page_control(opdsdb,page_value,id_value) footer() ######################################################### # Выдача списка авторов по имени или на основании поиска Loading Loading @@ -676,6 +710,7 @@ elif type_value==90: # elif type_value==91: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) if cfg.TITLE_AS_FN: transname=translit(title+'.'+format) else: transname=translit(book_name) Loading Loading @@ -710,6 +745,7 @@ elif type_value==91: # elif type_value==92: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) if cfg.TITLE_AS_FN: transname=translit(title+'.'+format) else: transname=translit(book_name) Loading Loading @@ -751,6 +787,7 @@ elif type_value==92: # elif type_value==93: (book_name,book_path,reg_date,format,title,annotation,docdate,cat_type,cover,cover_type,fsize)=opdsdb.getbook(slice_value) if cfg.BOOK_SHELF and user!=None: opdsdb.addbookshelf(user,slice_value) full_path=os.path.join(cfg.ROOT_LIB,book_path) (n,e)=os.path.splitext(book_name) if cfg.TITLE_AS_FN: transname=translit(title)+'.epub' Loading