
    ,(ig                     r   d dl mZ d dlmZ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 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 d dl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/m0Z0 dedfdZ1d Z2 ed       e1d      d               Z3 ed       e1d      d               Z4 ed       e1d      d               Z5 ed       e1d      d               Z6 ed       e1d      d               Z7 ed       e1d      d               Z8 ed       e1d      d               Z9 ed       e1d      d                Z: ed       e1d      d!               Z; ed       e1d      d"               Z<d# Z=d$ Z> ed       e1d      d%               Z?d& Z@y)'    )randint)renderredirect)csrf)CountMin)gettext)authenticateloginlogoutREDIRECT_FIELD_NAME)user_passes_test)vary_on_headers)reversereverse_lazy)
strip_tags)Q)HttpResponseForbidden)models)BookAuthorSeries	bookshelfCounterCatalogGenre	lang_menu)settings)config)	Paginator)HALF_PAGES_LINKSNc                 J    t        d t        |      |      }| r ||       S |S )Nc                 >    t         j                  r| j                  S dS )NT)r   
SOPDS_AUTHis_authenticated)us    %/opt/sopds/sopds_web_backend/views.py<lambda>zsopds_login.<locals>.<lambda>   s    ):):1%%      )	login_urlredirect_field_name)r   r   )functionr+   urlactual_decorators       r'   sopds_loginr/      s1    'Es#/
 ))r)   c                 6   i }t         j                  |d<   t        j                  |d<   t         j                  |d<   t        j
                  |d<   t        j                  |d<   t        j                  dk7  |d<   t        j                  dk7  |d<   t         j                  |d	<   d
|d<   t        j
                  r	t        |d<   t        j                  r| j                  }|j                  rg }t        j                  j                  |      j!                  d      d d D ]  }t"        j                  j%                  |j&                        }|j(                  |j*                  |j&                  |j,                  |j.                  j1                         d}|j3                  |        ||d<   t4        j                  j7                  t8        j:                        }|r5t=        d|      }	 t"        j                  j?                         |dz
  | d
   }	nd }	|	|d<   t4        jB                  j?                         j1                         D 
ci c]  }
|
d   |
d    }}
t4        j                  jE                         |d<   ||d<   |S # t"        j@                  $ r d }	Y w xY wc c}
w )N	app_title
sopds_authsopds_versionalphabet
splititems 	fb2tomobi	fb2toepubnozipr   cache_tr   userz	-readtime   id)r?   readtimebook_idtitleauthorsr      random_booknamevaluelastscan_datestats)#r   TITLEr   r$   VERSIONSOPDS_ALPHABET_MENUSOPDS_SPLITITEMSSOPDS_FB2TOMOBISOPDS_FB2TOEPUBNOZIP_FORMATSr   r<   r%   r   objectsfilterorder_byr   getrA   r?   r@   rB   rC   valuesappendr   get_counterr   counter_allbooksr   allDoesNotExistobjget_lastscan)requestargsr<   resultrowbookpbooks_count	random_idrE   drI   s               r'   sopds_processorrf   "   sQ   	DnnD((D"**D11D00D//3D//3D**DMDO!!%[\\  F ((//T/:CCKPQSRST !||''3;;'7&&clls{{]a]g]gswss  tG  tG  tI  Ja ! %D//--f.E.EFKAk*		,,**,Yq[CAFK %D,3KKOO,=,D,D,FHqai'
"HEH"??779E/DMK    	K	 Is   $'I; J;JJHTTP_ACCEPT_LANGUAGEz	web:login)r-   c                    i }|j                  t        |              | j                  r>| j                  j                  dd      }| j                  j                  dd      }t	        | j                  j                  dd            }|dkD  r|nd}|dk(  r]t
        j                  j                  |j                         	      j                  d
d      }t        d      t        d      |g|d<   d|d<   |dk(  r_t
        j                  j                  |j                               j                  d
d      }t        d      t        d      |g|d<   d|d<   n|dk(  r	 t	        |      }t        j                  j                  |      }|j                  }t
        j                  j                  |      j                  d
d      }t        d      t        d      |g|d<   d|d<   n#|dk(  r	 t	        |      }	t        j                  j                  |	      j                  }
t
        j                  j                  |	      j                  dd
d      }t        d      t        d      |
g|d<   d|d<   n|dk(  r	 t	        |      }t        j                  j                  |      j                   }t        j                  j                  |      j"                  }t        d      t        d      ||g|d<   t
        j                  j                  |      j                  d
d      }d |d<   n|d!k(  rt$        j&                  rht
        j                  j                  | j(                  "      j                  d#      }t        d      t        d$      | j(                  j*                  g|d<   n9t
        j                  j                  d      }t        d      t        d$      g|d<   d|d<   d|d%<   n|d&k(  rt	        |      }t
        j                  j                  |      }t
        j                  j                  |j,                  |j.                  j1                         '      j3                  |      j5                         j                  d      }t        d      t        d(      |j,                  g|d<   d|d<   nS|d)k(  rN	 t	        |      }t
        j                  j                  |      }t        d      |d   j,                  g|d<   d|d<   j7                         }t9        |d|t$        j:                  t<              }g }d}t?               }t$        j@                  xr |d&k7  }|jB                  dk(  s|s|jB                  n|jB                  dz
  }|jD                  }|||dz    D ]  }i d*dd+|jF                  d,|jH                  d-|jJ                  d.|jL                  d/|jN                  d0tQ        |jR                        d1|jT                  d2|jV                  d|j,                  d3|jX                  d4z  d5|j.                  j[                         d6|j\                  j[                         d|j^                  j[                         d7|j`                  j[                  d7      d8t$        j&                  r5|jb                  j                  | j(                  9      j[                  d8      nd }|rh|d   }|d5   D ch c]  }|d/   	 }}|j                         |j                         k(  r||k(  r|d:   d*xx   dz  cc<   n|je                  |       |}|}|je                  |        |rd;}|dz   |k  r|r|dz  }||   j,                  j                         |j                         k(  rB||   j.                  j[                         D ch c]  }|d/   	 c}|k(  r|d:   d*xx   dz  cc<   nd<}|dz   |k  r|r|jB                  dk7  r|jg                  d       |ji                         |d=<   ||d<   ||d<   ||d><   d?|d@<   |dA|dA|jj                  |dB<   t$        jl                  |dC<   to        | dD|      S #  d}d}Y xY w#  d}	d}
Y kxY w#  d}t        d      t        d      g|d<   Y xY w#  d}Y xY wc c}w c c}w )EN
searchtypemsearchtermsr6   page1r   rD   )search_title__containssearch_titlez-docdateBookszSearch by titlebreadcrumbsrB   searchobjectb)search_title__startswithar>   rC   zSearch by authorauthors)seriesbseries__ser_nozSearch by seriesry   gzSearch by genre)genresgenrer&   )bookshelf__userz-bookshelf__readtime	Bookshelfisbookshelfre   )rB   authors__inzDoubles for bookidoubles	lang_codefilenamepathregisterdater?   
annotationdocdateformatfilesize  rC   r|   ser_nor@   r;   TF	paginatorbookssearchcurrent:cache_idr:   zsopds_books.html)8updater   GETrT   intr   rQ   rR   upperrS   _r   	full_namer   serr   section
subsectionr   r$   r<   usernamerB   rC   rY   excludedistinctcountOPDS_PaginatorSOPDS_MAXITEMSr!   setSOPDS_DOUBLES_HIDEd1_first_posd1_last_posr   r   r   r   r?   r   r   r   r   r   rU   r|   ry   bseries_setbookshelf_setrV   popget_data_dictpage_numSOPDS_CACHE_TIMEr   )r]   r^   ri   rk   r   r   	author_idrw   anameser_idr   genre_idr   r   rA   mbookrc   opitems
prev_titleprev_authors_setsummary_DOUBLES_HIDEstartfinishr`   rb   rB   ru   authors_setdouble_flags                                 r'   SearchBooksViewr   M   s    DKKW{{[[__\37
kkoomR8w{{vs34'z8q LL''{?P?P?R'S\\]klvwE#$W:a0A.B;"OD#*D LL''ARARAT'U^^_mnxyE#$W:a0A.B;"OD#*D 3,	++y+9(( LL''	':CCNS]^E#$W:a0B.CE"JD#+D  3[)nn((F(377
 LL''v'6??@QR`aklE#$W:a0B.CC"HD#+D  3H{+--++x+8@@"]]..(.;FF
'(z!4E2Fwz&Z]#
 LL''x'8AA.Q[\E#*D  3  ++GLL+IRRSij'(z!K.AVAV&W]# ll))Q)/'(z1[>&B]##*D "#D 3+&GLL$$$0ELL''ekku}}GXGXGZ'[ccgncoxxz  D  D  EO  PE#$W:a0B.CEKK"PD#*D  3k*
 LL''7'3E#$W:eAhnn"=D $+D  kkmKHf6K6KM]^
5 !' 9 9 QzS?P%'__a%7AU]_]l]lmn]nvax( 	 C1 k3== *cll TZ\_\d\d  #"2"248#&&BNPZ[^[i[iPjS[[*2CJJ@GT^`c`l`lnr`r S[[//1 4<SZZ=N=N=P S[\_\f\f\m\m\o qyz}  {J  {J  {Q  {Q  RZ  {[ _e_p_pS..557<<5HOOPZ[vz	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){ !		!,,.[']%\W"Y%0BKKHZ//Y',d33K	H'(z!4E2F&G]#>R > Hys=   7a5 *5b 7A:b :b0 7b:b?5a>b
b-0b7c                    i }|j                  t        |              | j                  r=| j                  j                  dd      }| j                  j                  dd      }t	        | j                  j                  dd            }|dkD  r|nd}|dk(  r/t
        j                  j                  |j                         	      }ng|d
k(  r/t
        j                  j                  |j                               }n3|dk(  r.t
        j                  j                  |j                               }j                  t        d            j                         j                  d      }|j                         }t        |d|t        j                   t"              }g }||j$                  |j&                  dz    D ]B  }	|	j(                  |	j*                  |	j,                  |	j.                  d}
|j1                  |
       D |j3                         |d<   ||d<   ||d<   ||d<   d|d<   d|d<   t5        d      t5        d      |g|d<   |d|d|j6                  |d<   t        j8                  |d<   t;        | d|      S )Nri   rj   rk   r6   rl   rm   r   rD   )search_ser__containsrs   )search_ser__startswithe)
search_serra   )
count_bookr   )r?   r   r   
book_countr   ry   rr   r   r   r   Searchrq   r   r   r:   zsopds_series.html)r   r   r   rT   r   r   rQ   rR   r   annotater   r   rS   r   r   r   r   r!   r   r   r?   r   r   r   rV   r   r   r   r   r   )r]   r^   ri   rk   r   ry   series_countr   r   r`   rb   s              r'   SearchSeriesViewr      s    DKKW{{[[__\37
kkoomR8w{{vs34'z8q^^**@Q@Q@S*TF3^^**+BSBSBU*VF3^^**k6G6G6I*JF E&M:CCENN|\ ||~L!Xv7L7LN^_"//"..*:; 	CffCGG#--WZWeWefALLO	
 ,,.[']%\X'^"Y {1X;{C]%0BKKHZ//Y'-t44r)   c                    i }|j                  t        |              | j                  rT| j                  j                  dd      }| j                  j                  dd      }t	        | j                  j                  dd            }|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                  t              }g }||j                  |j                   dz    D ]d  }	|	j"                  |	j$                  |	j&                  t(        j                  j                  |	      j                         d}
|j+                  |
       f |j-                         |d<   ||d<   ||d<   ||d<   d|d<   d|d<   t/        d      t/        d      |g|d<   |d|d|j0                  |d<   t        j2                  |d<   t5        | d|      S )Nri   rj   rk   r6   rl   rm   r   rD   )search_full_name__containssearch_full_namers   )search_full_name__startswithr   )r   rv   )r?   r   r   r   r   rC   rw   rr   r   r   Authorsr   rq   r   r   r:   zsopds_authors.html)r   r   r   rT   r   r   rQ   rR   r   rS   r   r   r   r   r!   r   r   r?   r   r   r   rV   r   r   r   r   r   )r]   r^   ri   rk   r   rC   authors_countr   r   r`   rb   s              r'   SearchAuthorsViewr   &  sE    DKKW{{[[__\37
kkoomR8w{{vs34'z8qnn++{GXGXGZ+[ddewxG3nn++IZIZI\+]ffgyzG3nn++[=N=N=P+QZZ[mnG  M1h8M8MO_`2??2>>!+;< 	Cff#--cmmcgcococvcv  @Ccv  dD  dJ  dJ  dL  MALLO	 ,,.[']%\Y'^"Y |AhKD]%0BKKHZ//Y'.55r)   c                 $   i }| j                   rB| j                   j                  dd       }t        | j                   j                  dd            }nd }d}	 |!t        j                  j                  |      }n t        j                  j                  |      }t        j                  j                  |      j                  d      }|j                         }t        j                  j                  |	      j                  d
      }|j                         }t        |||t        j                  t              }	g }
||	j                  |	j                  dz    D ]C  }d|j                   |j"                  |j$                  |j&                  d}|
j)                  |       E ||	j*                  |	j,                  dz    D ]\  }i ddd|j.                  d|j0                  d|j2                  d|j4                  d|j"                  dt7        |j8                        d|j:                  d|j<                  d|j>                  d|j@                  dz  d|jB                  jE                         d|jF                  jE                         d|jH                  jE                         d|jJ                  jE                  d      dt        jL                  r5|jN                  j                  | jP                        jE                  d      nd }|
j)                  |       _ |	jS                         |d<   |
|d <   ||d!<   d"|d#<   g }|rj|jT                  rA|jW                  d|j                   |j"                  f       |jT                  }|jT                  rA|jW                  dtY        d$      df       ||d%<   tY        d&      g|d'<   |d#   d(|d(|	jZ                  |d)<   t        j\                  |d*<   t_        | d+|      S # t        j
                  $ r d }Y uw xY w),Ncatrl   rm   rD   r>   )
parent__id)parentcat_name)catalogro   )
is_catalogrB   r?   cat_type	parent_idr   r   r   r   r   r   r?   r   r   r   rB   r   r   rC   r|   ry   r   r@   r;   r   r   cat_idr   r   ROOTbreadcrumbs_catCatalogsrq   r   r   r:   zsopds_catalogs.html)0r   rT   r   r   rQ   rZ   rR   rS   r   r   r   r   r   r!   r   r   r   r?   r   r   rV   d2_first_posd2_last_posr   r   r   r   r   r   r   r   rB   r   rC   rU   r|   ry   r   r$   r   r<   r   r   insertr   r   r   r   )r]   r^   r   r   r   catalogs_listcatalogs_count
books_listrc   r   r   r`   rb   breadcrumbs_lists                 r'   CatalogsViewr   P  s    D{{-w{{vs34//%%%0C//%%%8C OO**#*6??
KM"((*N $$S$1::>JJ""$K 
Xv?T?TVf	gBER__R^^A-=> cllCLLfifsfstQ "//"..*:; \! [#-- S\\ SY[^[c[c c..04cff>JJWZWeWeLf&.

<CSYYPZ\_\h\hjn\n **, /7szz7H7H7J MUUXU_U_UfUfUh kssv  tC  tC  tJ  tJ  KS  tT \b\m\m#++222ELLZXsw	 	Q ((*DDMDNDO
zz##Acff'=>**C zz 	AfIq>2/D	jM?D%))_VR[[ID--DO'/66Y  s   AO6 6PPc                    i }| j                   rBt        | j                   j                  dd            }| j                   j                  dd      }nd}d}t        |      dz   }|r
d|||dz  }nd	||d
z  }t        j
                  j                  |      }||d<   d|d<   ||d<   t        d      t        d      t        |   |g|d<   |d   d|d||d<   t        j                  |d<   t        | d|      S )Nlang0charsr6   r   rD   a'  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   ra   r   r   rp   Selectrq   r   r   r:   zsopds_selectbook.html)r   r   rT   lenr   rQ   rawr   r   r   r   r   r]   r^   r   r   r   sqlr   s          r'   	BooksViewr     s    D{{45	,	Z\F )/IuU	V )/u=	> LLS!EDMDO!DgJq{9Y3GND%))_YFD--DO'1488r)   c                    i }| j                   rBt        | j                   j                  dd            }| j                   j                  dd      }nd}d}t        |      dz   }|r
d|||dz  }nd	||d
z  }t        j
                  j                  |      }||d<   d|d<   ||d<   t        d      t        d      t        |   |g|d<   |d   d|d||d<   t        j                  |d<   t        | d|      S )Nr   r   r   r6   r   rD   a5  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   rw   r   r   r   r   rq   r   r   r:   zsopds_selectauthor.html)r   r   rT   r   r   rQ   r   r   r   r   r   r   r   s          r'   AuthorsViewr     s    D{{45	,	Z\F )/IuU	V )/u=	> NNs#EDMDO!DiL8Yy5I%PD%))_YFD--DO'3T::r)   c                    i }| j                   rBt        | j                   j                  dd            }| j                   j                  dd      }nd}d}t        |      dz   }|r
d|||dz  }nd	||d
z  }t        j
                  j                  |      }||d<   d|d<   ||d<   t        d      t        d      t        |   |g|d<   |d   d|d||d<   t        j                  |d<   t        | d|      S )Nr   r   r   r6   r   rD   a"  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   ry   r   r   r   r   rq   r   r   r:   zsopds_selectseries.html)r   r   rT   r   r   rQ   r   r   r   r   r   r   r   s          r'   
SeriesViewr     s    D{{45	,	Z\F )/IuU	V )/u=	> NNs#EDMDO!DhK(Ii4HOD%))_YFD--DO'3T::r)   c                 :   i }| j                   r&t        | j                   j                  dd            }nd}|dk(  r{t        j                  j                  d      j                  t        d      t        d            j                  d      j                  d      }t        d      t        d	      g|d
<   nt        j                  j                  |      j                  }t        j                  j                  |      j                  t        d            j                  d      j                         j                  d      }t        d      t        d	      |g|d
<   ||d<   d|d<   ||d<   |d   d||d<   t        j                  |d<   t        | d|      S )Nr   r   r   r?   ra   )
section_idnum_book)num_book__gtGenresr   rq   r>   )r   )r   r   r   r}   r   r   r   r   r:   zsopds_selectgenres.html)r   r   rT   r   rQ   rU   r   r   r   rR   rS   r   r   r   r   r   )r]   r^   r   r   r   s        r'   
GenresViewr     s{    D{{C89

1}$$Y/88CIX]^dXe8fmm{|m}  G  G  HQ  R !(AhK8]--##z#2::$$W$5>>f>V]]kl]mttv  AM  N !(AhK@]DMDO"D"&y/*=D--DO'3T::r)   c                    | j                   r| j                   j                  dd       }nd }t        |      }t        j                  j                  | j                  |      j                          t        dt        d      z        S )Nra   )r<   ra   %s?searchtype=uweb:searchbooks)
r   rT   r   r   rQ   rR   r<   deleter   r   )r]   ra   s     r'   	BSDelViewr     sj     {{{{vt,t9D',,T:AAC%g.?&@@AAr)   c                     t         j                  j                  | j                        j	                          t        dt        d      z        S )Nr;   r   r   )r   rQ   rR   r<   r   r   r   )r]   s    r'   BSClearViewr  &  s?     ',,/668%0A(BBCCr)   c                 >    i }t        d      g|d<   t        | d|      S )NHOMErq   zsopds_hello.html)r   r   r]   r^   s     r'   hellor  ,  s'    DV9+D'-t44r)   c                    i }t        d      g|d<   |j                  t        |              	 | j                  d   }| j                  d   }| j                  j                  dt        d            }t        ||      }|@|j                  rt        | |       t        |      S t        d	      d
d|d<   t        | |      S t        d      d
d|d<   t        | |      S # t        $ r t        | d|      cY S w xY w)NLoginrq   r   passwordsopds_login.htmlnextweb:main)r   r  zThis account is not active!alert)texttypesystem_messagez1User does not exist or the password is incorrect!)r   r   r   POSTKeyErrorr   r   rT   r   r
   	is_activer   r   
handler403)r]   r^   r   r  next_urlr<   s         r'   	LoginViewr  1  s    DW:,DKKW9<<
+<<
+ {{vgj&9:HH=D>>'4 H%%+,-J+KSZ#[D!"gd++ ())\']elm'$''!  9g14889s   C C54C5c                 b    t        |        i }t        d      g|d<   t        t        d            S )NLogoutrq   r  )r   r   r   r   r  s     r'   
LogoutViewr  N  s0     7ODX;-DGJ'((r)   c                 .    t        | d|      }d|_        |S )Nr	  i  )r   status_code)r]   r^   responses      r'   r  r  V  s    g148HHOr)   )Arandomr   django.shortcutsr   r   "django.template.context_processorsr   django.db.modelsr   r   django.utils.translationr	   r   django.contrib.authr
   r   r   r   django.contrib.auth.decoratorsr   django.views.decorators.varyr   django.urlsr   r   django.utils.htmlr   r   django.httpr   opds_catalogr   opds_catalog.modelsr   r   r   r   r   r   r   r   r   	constancer   opds_catalog.opds_paginatorr    r   sopds_web_backend.settingsr!   r/   rf   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r)   r'   <module>r-     s"    - 3 ' 1 P P ; 8 - (  -  c c c !  C 83FD (V '(g4  )g4R '(*5  )*5X '(&6  )&6P '(;7  );7z '(!9  )!9F '(!;  )!;F '(!;  )!;F '(;  );0 '(
B  )
B '(D  )D5
$: '()  ))r)   