
     (i                     <   d dl mZ d dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZmZmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*  G d de
      Z+ G d de      Z, G d de      Z- G d de+      Z. G d de+      Z/d Z0 G d de+      Z1 G d de+      Z2 G d  d!e+      Z3 G d" d#e+      Z4 G d$ d%e+      Z5 G d& d'e+      Z6 G d( d)e+      Z7 G d* d+e+      Z8 G d, d-e+      Z9 G d. d/e+      Z:y0)1    )timezone)gettext)	Atom1Feed	Enclosurerfc3339_date)Feedreverserender)CountMin)
strip_tags)BookCatalogAuthorGenreSeries	bookshelfCounter	lang_menu)models)settings)BasicAuthMiddleware)	Paginator)mime_detector)Mimetype)configc                   "     e Zd ZdZ fdZ xZS )AuthFeedNc                    || _         t        j                  r)|j                  j                  rt        |   |g|i |S t               }|j                  | j                         }|d k7  r|S t        |   |g|i |S N)	requestr   
SOPDS_AUTHuseris_authenticatedsuper__call__r   process_request)selfr#   argskwargsbauresult	__class__s          /opt/sopds/opds_catalog/feeds.pyr(   zAuthFeed.__call__   s|    ||,,w'????!#""4<<04<Mw7777    )__name__
__module____qualname__r#   r(   __classcell__r/   s   @r0   r    r       s    G8 8r1   r    c                        e Zd Z fdZ xZS )opdsEnclosurec                 >    || _         t        t        |   |d|       y Nr   )relr'   r8   __init__)r*   url	mime_typer;   r/   s       r0   r<   zopdsEnclosure.__init__'   s    mD*39=r1   )r2   r3   r4   r<   r5   r6   s   @r0   r8   r8   &   s    > >r1   r8   c                   "    e Zd ZdZd Zd Zd Zy)opdsFeedz#application/atom+xml; charset=utf-8c                     i }d|d<   d|d<   |S )Nzhttp://www.w3.org/2005/Atomxmlnszhttp://purl.org/dc/termszxmlns:dcterms )r*   attrss     r0   root_attributeszopdsFeed.root_attributes/   s!    6g!;o r1   c           	         d|_         |j                  d       |j                  d| j                  d          |j                  dt        j
                         |j                  d       | j                  j                  d      5|j                  dd | j                  d   ddd       |j                  d       | j                  j                  d	      5|j                  dd | j                  d	   d
dd       |j                  d       |j                  d| j                  d          |j                  d       | j                  j                  d      0|j                  d| j                  d          |j                  d       |j                  dt        | j                                      |j                  d       | j                  j                  d      6|j                  dd | j                  d   dddd       |j                  d       | j                  j                  d      6|j                  dd | j                  d   dddd       |j                  d       | j                  j                  d      5|j                  dd | j                  d   ddd       |j                  d       | j                  j                  d      6|j                  dd | j                  d   ddd       |j                  d       y y )NT
idiconlinkr*   9application/atom+xml;profile=opds-catalog;kind=navigation)hrefr;   type	start_urlstarttitlesubtitleupdatedprev_urlprevzPrevious Page)application/atom+xml;profile=opds-catalog)rL   r;   rP   rM   next_urlnextz	Next Page
search_urlsearchsearchTerm_urlzapplication/atom+xml)	_short_empty_elements
charactersaddQuickElementfeedr   ICONgetr   latest_post_date)r*   handlers     r0   add_root_elementszopdsFeed.add_root_elements8   s   (,%4 diio664 99== ,##FD$))F:KRX  a\  3]  ^t$99==%1##FD$))K:PW^  gb  3c  dt$7);<4 99==$0##J		*0EFt$	<8M8M8O+PQ4 99==$0##FD$))J:OV\et  }h  3i  jt$99==$0##FD$))J:OV\ep  yd  3e  ft$99==&2##FD$))L:QX`  id  3e  ft$99==)*6##FD$))DT:U\d  mC  3D  Et$ 7r1   c                    |j                  d      }|j                  d       |j                  d|d          |j                  d       |j                  d|d          |j                  d       |s*|j                  dd|d   dd	       |j                  d       |sa|j                  d
      P|d
   D ]H  }|j                  dd|j                  |j                  |j
                  d       |j                  d       J |j                  d      /|j                  dt        |d                |j                  d       | j                  j                  d      | j                  d   }nd}|j                  d      )|j                  d|d   d|i       |j                  d       |j                  d      |d   D ]  }|j                  di        |j                  d|d          |j                  d       |j                  ddt        dd|d   d      ddt        d      d|d   iz  d       |j                  d        |j                  d      7|d   D ]  }|j                  d d|d!   |d!   d"         |j                  d       |j                  d#      D|j                  ddt        dd$|d#   d      ddt        d%      d       |j                  d       y y )&Ndisable_item_linksrG   rH   	unique_idrP   rJ    	alternate)rL   r;   
enclosures)r;   rL   rM   updateddaterR   description_mime_type	text/htmldescriptioncontentrM   authorsauthorname	full_nameopds_catalog:searchbooksa
searchtypesearchtermsr,   relatedrU   zAll books by %(author)s)rL   r;   rM   rP   genrescategory
subsection)termlabeldoublesdzBook doublicates)r`   r\   r]   r;   r=   r>   r   r^   startElement
endElementr
   _)r*   rb   itemre   	enclosurecontent_typert   gs           r0   add_item_elementszopdsFeed.add_item_elementsZ   s#   !XX&:;4 d;&784 g74 !##FBfk0Z[t$!xx%1!%l!3 -I++FB(}} ) ) 3 39 
 &&t,- 88M".##I|D<O/PQt$99==01=99%<=L&L88M".##ItM/BV\DZ[t$88I*)_ 	)$$Xr2''+?""8,''WE_vy  JK  LP  JQ  iR  >S<E<g=>?X=Y[cdefqdrZs=s5u v ""4(	) 88H)(^ m''
B<[\]i[j8klmt$88I*''WE_vy  JN  OX  JY  iZ  >[<E<g=>?Q=R5T U ""4( +r1   N)r2   r3   r4   r   rE   rc   r   rC   r1   r0   r@   r@   +   s    8L%D7)r1   r@   c                   |    e Zd ZeZej                  Zej                  Z	d Z
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zy)MainFeedc                     t        d      S )Nopds_catalog:mainr	   r*   s    r0   rJ   zMainFeed.link   s    *++r1   c                 :    t        d      dt        d      ddS Nopds_catalog:opensearch{searchTerms}/r   text)rZ   rN   rk   r	   r*   objs     r0   feed_extra_kwargszMainFeed.feed_extra_kwargs   s'    )01J)KL\!]#$78(.	
 	
r1   c                 .   dt        d      dt        d      t        j                  j                  t        j
                        t        j                  j                  t        j                        dddt        d      t        j                  rd	nd
t        d      dt        j                  j                  t        j                        iddt        d      t        j                  rdndt        d      dt        j                  j                  t        j                        iddt        d      dt        d      dt        j                  j                  t        j                        iddt        d      t        j                  rdndt        d      dt        j                  j                  t        j                        idg}t        j                  r| j                  j                  j                  r|dt        d      d | j                  j                  j                   iz  d!t        d"      t"        j                  j%                  | j                  j                  #      j'                         | j                  j                  j                   d$dgz  }|S )%N   By catalogszopds_catalog:catalogsz)Catalogs: %(catalogs)s, books: %(books)s.)catalogsbooks)rH   rP   rJ   descrcounters   z
By authorszopds_catalog:lang_authorszopds_catalog:nolang_authorszAuthors: %(authors)s.ro      z	By titleszopds_catalog:lang_bookszopds_catalog:nolang_bookszBooks: %(books)s.r      z	By genresopds_catalog:genreszGenres: %(genres)s.rz      z	By serieszopds_catalog:lang_serieszopds_catalog:nolang_serieszSeries: %(series)s.series   z%(username)s Book shelfusernamezopds_catalog:bookshelfz)%(username)s books readed: %(bookshelf)s.)r%   )r   r   )r   r   objectsget_counterr   counter_allcatalogscounter_allbooksr   SOPDS_ALPHABET_MENUcounter_allauthorscounter_allgenrescounter_allseriesr$   r#   r%   r&   r   r   filtercount)r*   	mainitemss     r0   itemszMainFeed.items   s   Q}%5>U KLdkdsdsdd  AG  A[  A[  e\  el  et  et  e@  e@  AG  AX  AX  eY  YZ[Q|_]c]w]w>Y  ~[ 78YwOjOjkq  lE  lE  PF  EGHQ{^Z`ZtZt=V  {V 34IdIdeke|e|I}@~@Q{^<Q 568GOOLgLghn  iA  iA  MB  CCDQ{^[a[u[u=W  |X 568GOOLgLghn  iA  iA  MB  CCD
	 !2!2!C!C+D)E
SWS_S_SdSdSmSmGn)o  yQ!"#N!Ohqhyhy  iA  iA  GK  GS  GS  GX  GX  iA  iY  i_  i_  ia  mq  my  my  m~  m~  mG  mG  \HI I
 r1   c                     t        |d         S )NrJ   r	   r*   r   s     r0   	item_linkzMainFeed.item_link   s    tF|$$r1   c                     |d   S NrP   rC   r   s     r0   
item_titlezMainFeed.item_title       G}r1   c                     |d   |d   z  S )Nr   r   rC   r   s     r0   item_descriptionzMainFeed.item_description   s    G}T*---r1   c                     d|d   z  S )Nzm:%srH   rC   r   s     r0   	item_guidzMainFeed.item_guid       d4j  r1   c                 *    t        j                         S r"   r   nowr   s    r0   item_updateddatezMainFeed.item_updateddate       ||~r1   c                 6    t        t        |d         dd      fS )NrJ   rK   r|   )r8   r
   r   s     r0   item_enclosureszMainFeed.item_enclosures   s%    gd6l34oq}~  A  	Ar1   c                 N    t        |d   j                               d   dk(  }d|iS )Nr   r   re   )listvalues)r*   r   re   s      r0   item_extra_kwargszMainFeed.item_extra_kwargs   s1    "4
#3#:#:#<=a@!C$%788r1   N)r2   r3   r4   r@   	feed_typer   TITLErP   SUBTITLErQ   rJ   r   r   r   r   r   r   r   r   r   rC   r1   r0   r   r      sN    INNE  H,
*%.!A9r1   r   c                   f    e Zd ZeZej                  ZddZd Z	d Z
d Zd Zd Zd Zd	 Zd
 Zd Zy)CatalogsFeedNc                 V   t        |t              st        |      }|dkD  r|nd}	 |!t        j                  j	                  |      }n t        j                  j	                  |      }t        j                  j                  |      j                  d      }|j                         }t        j                  j                  |      j                  d      }|j                         }	t        ||	|t        j                        }
g }||
j                  |
j                  dz    D ]C  }d|j                  |j                   |j"                  |j$                  d	}|j'                  |       E ||
j(                  |
j*                  dz    D ]  }d|j,                  |j.                  |j0                  |j2                  |j                   t5        |j6                        |j8                  |j:                  |j<                  |j>                  d
z  |j@                  jC                         |jD                  jC                         |jF                  jC                         |jH                  jC                  d      d}|j'                  |        |||
jK                         fS # t        j
                  $ r d }Y >w xY w)Nr   r   rH   )
parent__id)parentcat_name)catalogsearch_title)
is_catalogrP   rH   cat_type	parent_id  ser_no)r   	lang_codefilenamepathregisterdaterH   
annotationdocdateformatrP   filesizero   rz   r   r   )&
isinstanceintr   r   r`   DoesNotExistr   order_byr   r   OPDS_Paginatorr   SOPDS_MAXITEMSd1_first_posd1_last_posr   rH   r   r   appendd2_first_posd2_last_posr   r   r   r   r   r   r   r   rP   r   ro   r   rz   r   bseries_setget_data_dict)r*   r#   cat_idpagepage_numcatcatalogs_listcatalogs_count
books_listbooks_countopr   rowps                 r0   
get_objectzCatalogsFeed.get_object   sT   $$t9D64q	!oo))V)4oo))V)<  ..c.:CCJO&,,. \\(((5>>~N
 &&( NK6CXCXY 1AB 	C#,,SVVPSP\P\jmjwjwxALLO	 boobnnQ.>? 	Ccmm_b_g_g"%"2"2#&&PZ[^[i[iPj [[CJJ`c`l`lnr`rKK..03::;L;L;NY\YcYcYjYjYlwz  xG  xG  xN  xN  OW  xXYA LLO	 c2++---3 ## 	C	s   AJ J('J(c                     |\  }}}|j                   r+t        j                  dt        d      d|j                  S t        j                  dt        d      S )N | r   )r   r   r   r   r   r*   r   r   r   	paginators        r0   rP   zCatalogsFeed.title   sC     #sI::#+>>!M2BCHHMM&nnQ}-=>>r1   c                 H    |\  }}}t        d|j                  |d   d      S )Nopds_catalog:cat_pagenumberr   r   rx   r
   rH   r   s        r0   rJ   zCatalogsFeed.link   s,     #sI.PYZbPc7deer1   c                     |\  }}}t        d      }|d   rt        d|j                  |d   d      }nd }|d   rt        d|j                  |d   d      }nd }t        d	      d
|||dS )Nr   has_previousr   previous_page_numberr  rx   has_nextnext_page_numberr   r   )rZ   rN   rS   rV   r  )r*   r   r   r   r   rN   rS   rV   s           r0   r   zCatalogsFeed.feed_extra_kwargs  s     #sI/0	^$6W`awWx?yzHHZ 6W`asWt?uvHH *11J)KL\!]%##	
 	
r1   c                     |\  }}}|S r"   rC   r   s        r0   r   zCatalogsFeed.items  s     #sIr1   c                     |d   S r   rC   r   s     r0   r   zCatalogsFeed.item_title  r   r1   c                 &    |d   rdnd}||d   S )Nr   zc:zb:rH   rC   )r*   r   gps      r0   r   zCatalogsFeed.item_guid  s    ,'TT$t*%%r1   c                 V    |d   rt        dd|d   i      S t        d|d   dd      S )	Nr   opds_catalog:cat_treer   rH   rx   opds_catalog:downloadr   book_idzip_flagr	   r   s     r0   r   zCatalogsFeed.item_link!  s9    2HT$Z;PQQ2d4j\];^__r1   c           
         |d   rt        t        dd|d   i      dd      fS t        j                  |d         }t        t        d	|d   d
d      |d      g}|d   t        j
                  vrJ|t        j                  k(  rt        j                  nd|z  }|t        t        d	|d   dd      |d      gz  }|t        t        dd|d   i      dd      t        t        dd|d   i      dd      gz  }t        j                  dk7  r8|d   dk(  r0|t        t        d|d   dd      t        j                  d      gz  }t        j                  dk7  r8|d   dk(  r0|t        t        d|d   dd      t        j                  d      gz  }|S )Nr   r  r   rH   rx   rK   r|   r   r  r   r  ,http://opds-spec.org/acquisition/open-access%s+zipr   opds_catalog:coverr  
image/jpeghttp://opds-spec.org/imageopds_catalog:thumbhttp://opds-spec.org/thumbnailrg   fb2opds_catalog:convertepubr  convert_typemobi)r8   r
   r   fmtr   NOZIP_FORMATSr   FB2FB2_ZIPr   SOPDS_FB2TOEPUBEPUBSOPDS_FB2TOMOBIMOBIr*   r   mimer   mimezips        r0   r   zCatalogsFeed.item_enclosures'  s>   !'*A8TXY]T^J_"`  b]  _k  l  n  n $$T(^4D&w/F[_`d[estOu'vx|  m  n  pI>X%;%;;.2hll.B(**SWmG4K`dei`jxyTz,{  ~E  Gu  v  w  w	-0DiY]^bYcMd(egs  uQ  R'0DiY]^bYcMd(egs  uU  V I &&",4>U3JmG4J_cdh_i  |B  TC  -D  EM  ER  ER  TB  C  D  D	&&",4>U3JmG4J_cdh_i  |B  TC  -D  EM  ER  ER  TB  C  D  D	r1   c                    |d   r|d   S d}|d   r|t        d      z  }|d   r|t        d      z  }|d   r|t        d	      z  }|d
   r|t        d      z  }|t        d      z  }|dz  }||d   |d   |d   |d   |d   dj                  d |d   D              dj                  d |d   D              dj                  d |d   D              dj                  d |d
   D              d	z  S )Nr   rP   !<b> Book name: </b>%(title)s<br/>ro    <b>Authors: </b>%(authors)s<br/>rz   <b>Genres: </b>%(genres)s<br/>r   <b>Series: </b>%(series)s<br/>r   $<b>No in Series: </b>%(ser_no)s<br/>f<b>File: </b>%(filename)s<br/><b>File size: </b>%(filesize)s<br/><b>Changes date: </b>%(docdate)s<br/>"<p class='book'>%(annotation)s</p>r   r   r   r   , c              3   &   K   | ]	  }|d      ywrr   NrC   .0rt   s     r0   	<genexpr>z0CatalogsFeed.item_description.<locals>.<genexpr>F  s     )RQ!K.)R   c              3   &   K   | ]	  }|d      ywr|   NrC   r7  r   s     r0   r8  z0CatalogsFeed.item_description.<locals>.<genexpr>G  s     (QQ<(Qr9  c              3   &   K   | ]	  }|d      ywserNrC   r7  ss     r0   r8  z0CatalogsFeed.item_description.<locals>.<genexpr>H  s     (Ja5(Jr9  c              3   8   K   | ]  }t        |d            ywr   Nstrr@  s     r0   r8  z0CatalogsFeed.item_description.<locals>.<genexpr>I  s     )Sq#ak*:)S   )	rP   r   r   r   r   ro   rz   r   r   r   joinr*   r   rA  s      r0   r   zCatalogsFeed.item_description:  s*   = 1AIQ'I%J JH~qA&F$GGqH~qA&F$GGqH~qA&L$MMq{||A44Ad7mtJ7GTXYcTdost}o~  MQ  R^  M_ $		)R$y/)R R#yy(Q$x.(QQ#yy(J4>(JJ $		)SDN)S S	  r1   )Nr   )r2   r3   r4   r@   r   r   r   rQ   r   rP   rJ   r   r   r   r   r   r   r   rC   r1   r0   r   r      sG    I  H#.J?f
(&`&r1   r   c                     t        | d      S )u2   
    Выводим шаблон поиска
    zopensearch.htmlr   )r#   s    r0   
OpenSearchrK  L  s     ',--r1   c                   f    e Zd ZeZej                  ZddZd Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zy)SearchTypesFeedc                 &    |j                  dd      S )N+ )replace)r*   r#   rw   s      r0   r   zSearchTypesFeed.get_objectV  s    ""3s++r1   c                      t        d      dS )Nr   r   r	   r   s     r0   rJ   zSearchTypesFeed.linkY  s    89:JKKr1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   z!SearchTypesFeed.feed_extra_kwargs\  '    )01J)KL\!]#$78(.
 	
r1   c                     dt        d      |t        d      ddt        d      |t        d      ddt        d	      |t        d	      dgS )
Nr   zSearch by titleszSearch books by title)rH   rP   r}   r   r   zSearch by authorszSearch authors by namer   zSearch seriesr   r   s     r0   r   zSearchTypesFeed.itemsc  sU    Q'9%:3QRSjQklQ':%;CRSTlRmnQ%7aP_N`a
 	
r1   c                     |d   dk(  rt        dd|d   d      S |d   dk(  rt        d	d|d   d      S |d   d
k(  rt        dd|d   d      S y )NrH   r   rs   mr}   ru   rx   r   opds_catalog:searchauthorsr   opds_catalog:searchseriesr	   r   s     r0   r   zSearchTypesFeed.item_linkj  st    :?5C_cdj_k>lmm$Z1_7caeflam@noo$Z1_6S`dek`l?mnnr1   c                     |d   S r   rC   r   s     r0   r   zSearchTypesFeed.item_titles  r   r1   c                     |d   S Nr   rC   r   s     r0   r   z SearchTypesFeed.item_descriptionv  r   r1   c                     d|d   z  S )Nzst:%srH   rC   r   s     r0   r   zSearchTypesFeed.item_guidy      tDz!!r1   c                 *    t        j                         S r"   r   r   s    r0   r   z SearchTypesFeed.item_updateddate|  r   r1   c                 <    t        | j                  |      dd      fS NrK   r|   r8   r   r   s     r0   r   zSearchTypesFeed.item_enclosures      dnnT23np|}r1   N)rg   )r2   r3   r4   r@   r   r   r   rQ   r   rJ   r   r   r   r   r   r   r   r   rC   r1   r0   rM  rM  R  sF    I  H,L

"@r1   rM  c                   x    e Zd ZeZej                  Zd ZddZ	d Z
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zy)SearchBooksFeedc                     t         j                  dt        d      dt        j                  rt        d      dS t        d      dS )Nr   zBooks foundz (zdoubles hidezdoubles show))r   r   r   r   SOPDS_DOUBLES_HIDEr   s     r0   rP   zSearchBooksFeed.title  sW    '~~a.>TZTmTmq?P  @E  F  	Fst  vD  tE  @E  F  	Fr1   Nc                 
   t        |t              st        |      }|dkD  r|nd}|dk(  r@t        j                  j	                  |j                               j                  dd      }n|dk(  r@t        j                  j	                  |j                               j                  dd      }nf|d	k(  r@t        j                  j	                  |j                         
      j                  dd      }n!|dk(  r>	 t        |      }t        j                  j	                  |      j                  dd      }n|dk(  r?	 t        |      }	t        j                  j	                  |	      j                  ddd      }n|dk(  rO	 t        |      }	t        |      }t        j                  j	                  ||	r|	nd       j                  ddd      }nF|dk(  r>	 t        |      }
t        j                  j	                  |
      j                  dd      }n|dk(  rkt        j                  r:t        j                  j	                  |j                        j                  d      }nt        j                  j	                  d      }n|dk(  rt        |      }t        j                  j                  |      }t        j                  j	                  |j                  |j                  j                               j                  |      j                  dd      }j                         }t!        |d|t        j"                        }g }d}t%               }t        j&                  xr |dk7  }|j(                  dk(  s|s|j(                  n|j(                  dz
  }|j*                  }|||dz    D ]a  }d|j,                  |j.                  |j0                  |j2                  |j4                  t7        |j8                        |j:                  |j<                  |j                  |j>                  dz  |j                  jA                         |jB                  jA                         |jD                  jA                         |jF                  jA                  d      d}|rh|d   }|d   D ch c]  }|d    	 }}|j                         |j                         k(  r||k(  r|d!   d"xx   dz  cc<   n|jI                  |       |}|}Q|jI                  |       d |rd#}|dz   |k  r|r|dz  }||   j                  j                         |j                         k(  rB||   j                  jA                         D ch c]  }|d    	 c}|k(  r|d!   d"xx   dz  cc<   nd$}|dz   |k  r|r|j(                  dk7  r|jK                  d       |||||jM                         d%S #  d}Y xY w#  d}	Y xY w#  d}	d}Y WxY w#  d}
Y xY wc c}w c c}w )&Nr   r   rX  )search_title__containsr   z-docdateb)search_title__startswithe)r   rt   ro   rA  )r   bseries__ser_noas)ro   r   r   )rz   u)bookshelf__userz-bookshelf__readtimer   r   )title__iexactauthors__inrg   r   r   )r   r   r   r   r   rH   r   r   r   rP   r   ro   rz   r   r   rP   ro   rH   r   TF)r   rw   searchterms0rv   r   )'r   r   r   r   r   upperr   r   r$   r%   r`   rP   ro   allexcluder   r   r   setri  r   r   r   r   r   r   rH   r   r   r   r   r   r   rz   r   r   r   popr   )r*   r#   rv   rw   rw  r   r   r   	author_idser_idgenre_idr  mbookr   r   r   
prev_titleprev_authors_setsummary_DOUBLES_HIDErO   finishr   r   rP   rt   authors_setdouble_flags                              r0   r   zSearchBooksFeed.get_object  s   $$t9D64q #LL''{?P?P?R'S\\]klvwE3LL''ARARAT'U^^_mnxyE3LL''[5F5F5H'IRRSablmE3,	 LL''	':CCNS]^E3[) LL''v'6??@QSacmnE4\*,	 LL''	F&X\']ffgx  {I  KU  VE3{+ LL''x'8AA.Q[\E3  ++GLL+IRRSijll))Q)/3+&GLL$$$0ELL''ekku}}O`O`Ob'ckkovkw  A  A  BP  Q[  \E kkmKHV5J5JK
5 !' 9 9 QzS?P%'__a%7AU]_]l]lmn]nvax( 	 C3==cll\_\d\d"%"2"2#&&PZ[^[i[iPj [[CJJ`c`l`lnr`rKK..03::;L;L;NY\YcYcYjYjYlwz  xG  xG  xN  xN  OW  xXYA $'
01)=1qw==;;=*"2"2"44FV9V"Ii(!+(LLO"
#. Q	 $  K1Hk){!=&&,,.
0@0@0BBY^_eYfYnYnYuYuYwGxTU$Gx  {K  HK"Ii(!+("'K 1Hk){ !		![dn|~  }M  }M  }O  P  	Po		N > Hys<   :W =W W% W1 W;+X WW"%W.1W8c                 N    |d   |d   d}|j                  d      |d   |d<   |S )Nrv   rw   ru   rw  )r`   )r*   r   r,   s      r0   get_link_kwargszSearchBooksFeed.get_link_kwargs  s9     .c->PQ77>".#&~#6F>"r1   c                 :    t        d| j                  |            S )Nrs   rx   )r
   r  r   s     r0   rJ   zSearchBooksFeed.link  s    1$:N:Ns:STTr1   c                     | j                  |      }|d   d   r|d   d   |d<   t        d|      }nd }|d   d   r|d   d   |d<   t        d|      }nd }t        d	      d
t        d      d||dS )Nr   r  r  r   rs   rx   r  r  r   r   r   rl   rZ   rN   rk   rS   rV   )r  r
   )r*   r   r,   rS   rV   s        r0   r   z!SearchBooksFeed.feed_extra_kwargs   s    %%c*{N+{+,BCF6N9&IHH{J'{+,>?F6N9&IHH)01J)KL\!]#$78(3##
 	
r1   c                     |d   S )Nr   rC   r   s     r0   r   zSearchBooksFeed.items  s    7|r1   c                     |d   S r   rC   r   s     r0   r   zSearchBooksFeed.item_title  r   r1   c                     d|d   z  S )Nzb:%srH   rC   r   s     r0   r   zSearchBooksFeed.item_guid      tDz""r1   c                 (    t        d|d   dd      S )Nr  rH   r   r  rx   r	   r   s     r0   r   zSearchBooksFeed.item_link  s    .$t*XY7Z[[r1   c                     |d   S )Nr   rC   r   s     r0   r   z SearchBooksFeed.item_updateddate!  s    N##r1   c           
         t        j                  |d         }t        t        d|d   dd      |d      g}|d   t        j
                  vrJ|t        j                  k(  rt        j                  nd|z  }|t        t        d|d   d	d      |d      gz  }|t        t        d
d|d   i      dd      t        t        dd|d   i      dd      gz  }t        j                  dk7  r8|d   dk(  r0|t        t        d|d   dd      t        j                  d      gz  }t        j                  dk7  r8|d   dk(  r0|t        t        d|d   dd      t        j                  d      gz  }|S )Nr   r  rH   r   r  rx   r  r  r   r  r  r  r  r  r  rg   r  r  r  r  r  )r   r   r8   r
   r   r!  r   r"  r#  r   r$  r%  r&  r'  r(  s        r0   r   zSearchBooksFeed.item_enclosures$  s     h0'"9dSWjfgBhiko  r`  ad	H~!7!77*.*<h&&(4-G-0G\`ae\ftuPv(w  zA  Cq  r  s  sImG,@)UYZ^U_I`$aco  rN  O#G,@)UYZ^U_I`$aco  rR  S 		 ""b(tH~/Fg&<QUVZQ[msEtuw  xE  xE  Gu  vw wI""b(tH~/Fg&<QUVZQ[msEtuw  xE  xE  Gu  vw wI r1   c                 8    |d   |d   |d   dkD  r|d   dS d dS )Nro   rz   r   r   rH   )ro   rz   r   rC   r   s     r0   r   z!SearchBooksFeed.item_extra_kwargs7  s4    y/4>\`aj\klm\mdSWjxxswxxr1   c                    d}|d   r|t        d      z  }|d   r|t        d      z  }|d   r|t        d      z  }|d   r|t        d	      z  }|t        d
      z  }|d   r|t        d      z  }|dz  }||d   |d   |d   |d   |d   |d   dj                  d |d   D              dj                  d |d   D              dj                  d |d   D              dj                  d |d   D              d
z  S )Nr,  ro   r-  rz   r.  r   r/  r   r0  r1  r   z&<b>Doubles count: </b>%(doubles)s<br/>r2  rP   r   r   r   r   r3  c              3   &   K   | ]	  }|d      ywr5  rC   r6  s     r0   r8  z3SearchBooksFeed.item_description.<locals>.<genexpr>E  s     %Nan%Nr9  c              3   &   K   | ]	  }|d      ywr;  rC   r<  s     r0   r8  z3SearchBooksFeed.item_description.<locals>.<genexpr>F  s     $MQ|_$Mr9  c              3   &   K   | ]	  }|d      ywr>  rC   r@  s     r0   r8  z3SearchBooksFeed.item_description.<locals>.<genexpr>G  s     $F!QuX$Fr9  c              3   8   K   | ]  }t        |d            ywrC  rD  r@  s     r0   r8  z3SearchBooksFeed.item_description.<locals>.<genexpr>H  s     %O1c!H+&6%OrF  )
rP   r   r   r   r   r   ro   rz   r   r   rG  rI  s      r0   r   z SearchBooksFeed.item_description:  s'   
-	?A#E!FFA>1"B CC1>1"B CC1>1"H II1	Qwxx	?A#K!LLA	00$w-4
3CPTU_P`kopykz Ol9K II%Nd9o%NN99$Md8n$MM99$FtH~$FF II%OX%OO  	r1   )rX  NNr   )r2   r3   r4   r@   r   r   r   rQ   rP   r   r  rJ   r   r   r   r   r   r   r   r   r   rC   r1   r0   rf  rf    sZ    I  HFlP\U
*#\$&yr1   rf  c                   j    e Zd ZeZej                  Zd Zd Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zy)SelectSeriesFeedc                 >    t         j                  dt        d      S )Nr   zSeries by authors selectr   r   r   r   s     r0   rP   zSelectSeriesFeed.titleO  s    "..+E)FGGr1   c                 2    	 t        |      }|S #  d}Y |S xY wr:   )r   )r*   r#   rv   rw   r}  s        r0   r   zSelectSeriesFeed.get_objectR  s+    	+&I 	Is    c                 "    t        dd|d      S )Nrs   rq  ru   rx   r	   r   s     r0   rJ   zSelectSeriesFeed.linkY  s    1tZ]9^__r1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   z"SelectSeriesFeed.feed_extra_kwargs\  rT  r1   c                     dt        d      |t        d      ddt        d      |t        d      ddt        d	      |t        d
      dgS )Nr   zBooks by serieszBooks by author and series)rH   rP   rp   r   r   zBooks outside serieszBooks by author outside seriesr   zBooks by alphabetz"Books by author alphabetical orderrV  r   s     r0   r   zSelectSeriesFeed.itemsc  sW    Q'8%9CRSTpRqrQ'=%>WXYyWz{Q':%;cTUVzT{|
 	
r1   c                     |d   dk(  rt        dd|d   d      S |d   dk(  rt        d	d
|d   dd      S |d   dk(  rt        d	d|d   d      S y )NrH   r   rZ  rt   rp   ru   rx   r   rs   rq  r   rv   rw   rw  r   r	   r   s     r0   r   zSelectSeriesFeed.item_linkj  s    :?6S`dem`n?opp$Z1_5D`dem`n  @A  ?B  C  C$Z1_5C_cdl_m>noo r1   c                     |d   S r   rC   r   s     r0   r   zSelectSeriesFeed.item_titler  r   r1   c                     |d   S r]  rC   r   s     r0   r   z!SelectSeriesFeed.item_descriptionu  r   r1   c                     d|d   z  S )Nzas:%srH   rC   r   s     r0   r   zSelectSeriesFeed.item_guidx  r_  r1   c                 *    t        j                         S r"   r   r   s    r0   r   z!SelectSeriesFeed.item_updateddate{  r   r1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   z SelectSeriesFeed.item_enclosures~  rd  r1   N)r2   r3   r4   r@   r   r   r   rQ   rP   r   rJ   r   r   r   r   r   r   r   r   rC   r1   r0   r  r  K  sM    I  HH`

p"@r1   r  c                   f    e Zd ZeZej                  Zd ZddZ	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zy)SearchAuthorsFeedc                 >    t         j                  dt        d      S )Nr   zAuthors foundr  r   s     r0   rP   zSearchAuthorsFeed.title  s    "..?);<<r1   c                 f   t        |t              st        |      }|dkD  r|nd}|dk(  r>t        j                  j	                  |j                               j                  d      }n|dk(  r>t        j                  j	                  |j                               j                  d      }nB|dk(  r=t        j                  j	                  |j                         	      j                  d      }j                         }t        |d|t        j                        }g }	||j                  |j                  dz    D ]d  }
|
j                  |
j                  |
j                  t         j                  j	                  |

      j                         d}|	j#                  |       f |	|||j%                         dS )Nr   r   rX  )search_full_name__containssearch_full_namerl  )search_full_name__startswithrn  )r  ro  )rH   rr   r   
book_count)ro   rw   rv   r   )r   r   r   r   r   rx  r   r   r   r   r   r   r   rH   rr   r   r   r   r   )r*   r#   rw   rv   r   r   ro   authors_countr   r   r   r   s               r0   r   zSearchAuthorsFeed.get_object  s   $$t9D64qnn++{GXGXGZ+[ddewxG3nn++IZIZI\+]ffgyzG3nn++[=N=N=P+QZZ[mnG  M1h8M8MN2??2>>!+;< 	Cff#--cmmcgcococvcv  @Ccv  dD  dJ  dJ  dL  MALLO	  {acaqaqasttr1   c                 .    t        d|d   |d   d      S )NrY  rv   rw   ru   rx   r	   r   s     r0   rJ   zSearchAuthorsFeed.link  s!    3#lJ[kno|k}<~r1   c                     |d   d   rt        d|d   |d   |d   d   d      }nd }|d   d	   rt        d|d   |d   |d   d
   d      }nd }t        d      dt        d      d||dS )Nr   r  rY  rv   rw   r  rv   rw   r   rx   r  r  r   r   r   r   r  r	   r*   r   rS   rV   s       r0   r   z#SearchAuthorsFeed.feed_extra_kwargs  s    {N+;RUVbRcsv  xE  tF  PS  T_  P`  aw  Px  Ez  {HH{J';RUVbRcsv  xE  tF  PS  T_  P`  as  Pt  Ev  wHH)01J)KL\!]#$78(.##
 	
r1   c                     |d   S )Nro   rC   r   s     r0   r   zSearchAuthorsFeed.items  s    9~r1   c                     |d   S )Nrr   rC   r   s     r0   r   zSearchAuthorsFeed.item_title  s    K  r1   c                 |    t        d      t        j                  j                  |d         j	                         z  S )NBooks count: %srH   ro  )r   r   r   r   r   r   s     r0   r   z"SearchAuthorsFeed.item_description  s2    "#T\\%8%8d%8%L%R%R%TUUr1   c                     d|d   z  S Nza:%srH   rC   r   s     r0   r   zSearchAuthorsFeed.item_guid  r  r1   c                 (    t        dd|d   d      S )Nrs   rq  rH   ru   rx   r	   r   s     r0   r   zSearchAuthorsFeed.item_link  s    1\`ae\f:ghhr1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   z!SearchAuthorsFeed.item_enclosures  rd  r1   Nr   r2   r3   r4   r@   r   r   r   rQ   rP   r   rJ   r   r   r   r   r   r   r   rC   r1   r0   r  r    sI    I  H=u.@
$!V#i@r1   r  c                   f    e Zd ZeZej                  Zd ZddZ	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zy)SearchSeriesFeedc                 >    t         j                  dt        d      S )Nr   zSeries foundr  r   s     r0   rP   zSearchSeriesFeed.title  s    "..>):;;r1   c                    d | _         t        |t              st        |      }|dkD  r|nd}|dk(  r/t        j                  j                  |j                               }n|dk(  r/t        j                  j                  |j                               }nt|dk(  r/t        j                  j                  |j                               }n@|d	k(  r;	 t        |      | _         t        j                  j                  | j                   
      }j                  t        d            j                         j                  d      }|j                         }t        |d|t        j                        }g }	||j                  |j                   dz    D ]B  }
|
j"                  |
j$                  |
j&                  |
j(                  d}|	j+                  |       D |	|||j-                         dS #  d | _         Y xY w)Nr   r   rX  )search_ser__containsrl  )search_ser__startswithrn  )
search_serrt   )book__authorsbook)
count_bookr  )rH   r?  r   r  )r   rw   rv   r   )r}  r   r   r   r   r   rx  annotater   distinctr   r   r   r   r   r   r   rH   r?  r   r  r   r   )r*   r#   rw   rv   r   r   r   series_countr   r   r   r   s               r0   r   zSearchSeriesFeed.get_object  s   $$t9D64q^^**@Q@Q@S*TF3^^**+BSBSBU*VF3^^**k6G6G6I*JF3&!$[!1 ^^***HFE&M:CCENN|\ ||~L!Xv7L7LM"//"..*:; 	CffCGG#--WZWeWefALLO	 k
`b`p`p`rss&!%s   G$ $	G0c                 .    t        d|d   |d   d      S )NrZ  rv   rw   ru   rx   r	   r   s     r0   rJ   zSearchSeriesFeed.link  s!    2\IZjmn{j|;}~~r1   c                     |d   d   rt        d|d   |d   |d   d   d      }nd }|d   d	   rt        d|d   |d   |d   d
   d      }nd }t        d      dt        d      d||dS )Nr   r  rZ  rv   rw   r  r  rx   r  r  r   r   r   r   r  r	   r  s       r0   r   z"SearchSeriesFeed.feed_extra_kwargs  s    {N+:QTUaQbru  wD  sE  OR  S^  O_  `v  Ow  Dy  zHH{J':QTUaQbru  wD  sE  OR  S^  O_  `r  Os  Du  vHH)01J)KL\!]#$78(.##
 	
r1   c                     |d   S )Nr   rC   r   s     r0   r   zSearchSeriesFeed.items  s    8}r1   c                     d|d   z  S )N%sr?  rC   r   s     r0   r   zSearchSeriesFeed.item_title  s    T%[!!r1   c                 $    t        d      |d   z  S )Nr  r  rV  r   s     r0   r   z!SearchSeriesFeed.item_description  s    "#D$666r1   c                     d|d   z  S r  rC   r   s     r0   r   zSearchSeriesFeed.item_guid  r   r1   c                 l    | j                   rd| j                   |d   d}nd|d   d}t        d|      S )Nrq  rH   r  rA  ru   rs   rx   )r}  r
   )r*   r   r,   s      r0   r   zSearchSeriesFeed.item_link  s<    >>!%T^^SWX\S]^F!$DJ?F1&AAr1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   z SearchSeriesFeed.item_enclosures  rd  r1   Nr  r  rC   r1   r0   r  r    sI    I  H<t@
$"7!B@r1   r  c                   d    e Zd ZeZej                  Zd Zd Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zy)LangFeedc                 .    | j                   j                  S r"   r#   r   r   s     r0   rJ   zLangFeed.link      ||   r1   c                 >    t         j                  dt        d      S )Nr   zSelect languager  r   s     r0   rP   zLangFeed.title   s    "..+<)=>>r1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   zLangFeed.feed_extra_kwargs#  rT  r1   c                     dt        d      ddt        d      ddt        d      ddt        d	      dd
t        d      dg}|S )Nr   Cyrillic)rH   rP   r   Latinr   Digits	   zOther symbolsr   zShow allrV  )r*   	langitemss     r0   r   zLangFeed.items*  sP     Qz]3QwZ0Qx[1Q%78Qz]3
	 r1   c                 R    | j                   j                  t        |d         z   dz   S )NrH   /)r#   r   rE  r   s     r0   r   zLangFeed.item_link5  s$    ||  T$Z044r1   c                     |d   S r   rC   r   s     r0   r   zLangFeed.item_title8  r   r1   c                      y r"   rC   r   s     r0   r   zLangFeed.item_description;  s    r1   c                     d|d   z  S )Nzl:%srH   rC   r   s     r0   r   zLangFeed.item_guid>  r   r1   c                 *    t        j                         S r"   r   r   s    r0   r   zLangFeed.item_updateddateA  r   r1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   zLangFeed.item_enclosuresD  rd  r1   N)r2   r3   r4   r@   r   r   r   rQ   rJ   rP   r   r   r   r   r   r   r   r   rC   r1   r0   r  r    sE    I  H!?
	5!@r1   r  c                   `    e Zd ZeZej                  Zd Zd Z	d Z
ddZd Zd Zd Zd	 Zd
 Zy)	BooksFeedc                 .    | j                   j                  S r"   r  r   s     r0   rJ   zBooksFeed.linkK  r  r1   c                 >    t         j                  dt        d      S )Nr   zSelect books by substringr  r   s     r0   rP   zBooksFeed.titleN  s    "..+F)GHHr1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   zBooksFeed.feed_extra_kwargsQ  rT  r1   Nc                 l    t        |      | _        |d k(  rd}t        |      dz   |j                         fS Nrg   r   r   r   lenrx  r*   r#   r   charss       r0   r   zBooksFeed.get_objectX  2    Y$;EE
1ekkm,,r1   c                     |\  }}| j                   rd|| j                   |dz  }nd||dz  }t        j                  j                  |      }|S )Na6  select %(length)s as l, substring(search_title,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_book 
                   where lang_code=%(lang_code)s and search_title like '%(chars)s%%%%'
                   group by substring(search_title,1,%(length)s)
                   order by idlengthr   r  a  select %(length)s as l, substring(search_title,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_book 
                   where search_title like '%(chars)s%%%%'
                   group by substring(search_title,1,%(length)s)
                   order by idr  r  )r   r   r   rawr*   r   r  r  sqldatasets         r0   r   zBooksFeed.items^  sb    >>" -3X]"^	_C" -35"A	BC ,,""3'r1   c                      d|j                   z  S Nr  r   r   s     r0   r   zBooksFeed.item_titlep      DGG|r1   c                 2    t        d      |j                  z  S )NFound: %s booksr   cntr   s     r0   r   zBooksFeed.item_descriptions  s    "#DHH,,r1   c                    t        |j                        |j                  k  }|j                  t        j
                  k\  r&|s$t        d| j                  |j                  d      S t        d|sdnd|j                  d      S )Nzopds_catalog:chars_booksr   r  rx   rs   rl  rn  ru   r  rH   lr  r   SOPDS_SPLITITEMSr
   r   )r*   r   
title_fulls      r0   r   zBooksFeed.item_linkv  so    \$&&(
88V,,,Z54>>bfbibi>jkk5;E3^b^e^e"fh hr1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   zBooksFeed.item_enclosures~  rd  r1   r   Nr2   r3   r4   r@   r   r   r   rQ   rJ   rP   r   r   r   r   r   r   r   rC   r1   r0   r  r  G  sB    I  H!I
-$-h@r1   r  c                   `    e Zd ZeZej                  Zd Zd Z	d Z
ddZd Zd Zd Zd	 Zd
 Zy)AuthorsFeedc                 .    | j                   j                  S r"   r  r   s     r0   rJ   zAuthorsFeed.link  r  r1   c                 >    t         j                  dt        d      S )Nr   zSelect authors by substringr  r   s     r0   rP   zAuthorsFeed.title  s    "..+H)IJJr1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   zAuthorsFeed.feed_extra_kwargs  rT  r1   Nc                 l    t        |      | _        |d k(  rd}t        |      dz   |j                         fS r  r  r  s       r0   r   zAuthorsFeed.get_object  r  r1   c                     |\  }}| j                   rd|| j                   |dz  }nd||dz  }t        j                  j                  |      }|S )NaD  select %(length)s as l, substring(search_full_name,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_author 
                   where lang_code=%(lang_code)s and search_full_name like '%(chars)s%%%%'
                   group by substring(search_full_name,1,%(length)s)
                   order by idr  a)  select %(length)s as l, substring(search_full_name,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_author 
                   where search_full_name like '%(chars)s%%%%'
                   group by substring(search_full_name,1,%(length)s) 
                   order by idr  )r   r   r   r  r  s         r0   r   zAuthorsFeed.items  b    >>" -3X]"^	_C" -35"A	BC ..$$S)r1   c                      d|j                   z  S r  r   r   s     r0   r   zAuthorsFeed.item_title  r  r1   c                 2    t        d      |j                  z  S )NzFound: %s authorsr  r   s     r0   r   zAuthorsFeed.item_description  s    $%dhh..r1   c                    t        |j                        |j                  k  }|j                  t        j
                  k\  r&|s$t        d| j                  |j                  d      S t        d|sdnd|j                  d      S )Nzopds_catalog:chars_authorsr  rx   rY  rl  rn  ru   r  )r*   r   last_name_fulls      r0   r   zAuthorsFeed.item_link  so    TWWdff,HHf---~7T^^dhdkdk@lmm7;Isbfbibi"jl lr1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   zAuthorsFeed.item_enclosures  rd  r1   r  r  rC   r1   r0   r  r    sB    I  H!K
-$/l@r1   r  c                   `    e Zd ZeZej                  Zd Zd Z	d Z
ddZd Zd Zd Zd	 Zd
 Zy)
SeriesFeedc                 .    | j                   j                  S r"   r  r   s     r0   rJ   zSeriesFeed.link  r  r1   c                 >    t         j                  dt        d      S )Nr   zSelect series by substringr  r   s     r0   rP   zSeriesFeed.title  s    "..+G)HIIr1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   zSeriesFeed.feed_extra_kwargs  rT  r1   Nc                 l    t        |      | _        |d k(  rd}t        |      dz   |j                         fS r  r  r  s       r0   r   zSeriesFeed.get_object  r  r1   c                     |\  }}| j                   rd|| j                   |dz  }nd||dz  }t        j                  j                  |      }|S )Na3  select %(length)s as l, substring(search_ser,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_series 
                   where lang_code=%(lang_code)s and search_ser like '%(chars)s%%%%'
                   group by substring(search_ser,1,%(length)s) 
                   order by idr  a  select %(length)s as l, substring(search_ser,1,%(length)s) as id, count(*) as cnt 
                   from opds_catalog_series 
                   where search_ser like '%(chars)s%%%%'
                   group by substring(search_ser,1,%(length)s) 
                   order by idr  )r   r   r   r  r  s         r0   r   zSeriesFeed.items  r  r1   c                      d|j                   z  S r  r   r   s     r0   r   zSeriesFeed.item_title  r  r1   c                 2    t        d      |j                  z  S )NzFound: %s seriesr  r   s     r0   r   zSeriesFeed.item_description  s    #$TXX--r1   c                    t        |j                        |j                  k  }|j                  t        j
                  k\  r&|s$t        d| j                  |j                  d      S t        d|sdnd|j                  d      S )Nzopds_catalog:chars_seriesr  rx   rZ  rl  rn  ru   r  )r*   r   series_fulls      r0   r   zSeriesFeed.item_link  so    $''l466)88V,,,[6DNNcgcjcj?kll6;FC_c_f_f"gi ir1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   zSeriesFeed.item_enclosures  rd  r1   r  r  rC   r1   r0   r  r    sB    I  H!J
-$.i@r1   r  c                   `    e Zd ZeZej                  Zd Zd Z	d Z
ddZd Zd Zd Zd Zd	 Zy
)
GenresFeedc                 .    | j                   j                  S r"   r  r   s     r0   rJ   zGenresFeed.link  r  r1   c                 ~    t         j                  dt        d      |dk(  rt        d      z  S t        d      z  S )Nr   zSelect genres (%s)r   sectionr|   r  r   s     r0   rP   zGenresFeed.title  s;    &nnQ/C-DVY[\V\a	l-rssbcdpbq-rssr1   c                 :    t        d      dt        d      ddS r   r	   r   s     r0   r   zGenresFeed.feed_extra_kwargs  rT  r1   c                     t        |t              st        |      | _        | j                  S || _        | j                  S r"   )r   r   
section_id)r*   r#   r*  s      r0   r   zGenresFeed.get_object  s6    '3'!'lDO  &DOr1   c                    |}|dk(  rct         j                  j                  d      j                  t	        d      t        d            j                  d      j                  d      }|S t         j                  j                  |      j                  }t         j                  j                  |      j                  t        d      	      j                  d      j                         j                  d
      }|S )Nr   r*  rH   r  )r-  num_book)num_book__gtr   )r*  )r/  r|   )
r   r   r   r  r   r   r   r   r`   r*  )r*   r   r-  r  r*  s        r0   r   zGenresFeed.items  s    
q=mm**95>>#d)^cdj^k>lss  BCs  D  M  M  NW  XG  mm'':'6>>Gmm**7*;DDeTZmD\ccqrcszz|  F  F  GS  TGr1   c                 >    d| j                   dk(  r|d   z  S |d   z  S )Nr  r   r*  r|   )r-  r   s     r0   r   zGenresFeed.item_title  s)    (:T)_SS\@RSSr1   c                 $    t        d      |d   z  S )Nr  r/  rV  r   s     r0   r   zGenresFeed.item_description  s    "#D$444r1   c                 j    | j                   dk(  rt        dd|d   i      S t        dd|d   d	      S )
Nr   r   r*  r-  rx   rs   r   rH   ru   )r-  r
   r   s     r0   r   zGenresFeed.item_link  s@    ??A0)DDV9WXX5C_cdh_i>jkkr1   c                 <    t        | j                  |      dd      fS rb  rc  r   s     r0   r   zGenresFeed.item_enclosures"  rd  r1   N)r   r  rC   r1   r0   r'  r'    sC    I  H!t
T5l@r1   r'  N);django.utilsr   django.utils.translationr   r   django.utils.feedgeneratorr   r   r    django.contrib.syndication.viewsr   django.urlsr
   django.shortcutsr   django.db.modelsr   r   django.utils.htmlr   opds_catalog.modelsr   r   r   r   r   r   r   r   opds_catalogr   r   opds_catalog.middlewarer   opds_catalog.opds_paginatorr   r   book_tools.formatr   book_tools.format.mimetyper   	constancer   r    r8   r@   r   r   rK  rM  rf  r  r  r  r  r  r  r  r'  rC   r1   r0   <module>rD     s   ! 1 I I 1  # ' ( c c c  ! 7 C + / 8t 8 >I >
f)y f)P99x 99v|8 ||..@h .@`Gh GR4@x 4@lC@ C@JQ@x Q@f,@x ,@\8@ 8@t8@( 8@t8@ 8@t.@ .@r1   