
    Z'iB7                         d dl Z d dlZd dlZd dlZd dl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mZ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 d d	lmZ d
 Zd Zd Z d Z!d Z"d Z#d Z$ e	ejJ                        dd       Z&ddZ'd Z(d Z)y)    N)HttpResponseHttp404)
cache_page)Book	bookshelf)settingsutilsopdsdbfb2parse)create_bookfilemime_detector)Mimetype)config)Imagec                     t         j                  r0t        j                  | j                  dz   | j
                  z         }nt        j                  | j                        }t        j                  |      S )N.)r   SOPDS_TITLE_AS_FILENAMEr	   translittitleformatfilenameto_ascii)book	transnames     /opt/sopds/opds_catalog/dl.pygetFileNamer      sL    %%NN4::#3dkk#AB	NN4==1	>>)$$    c                    t         j                  j                  t        j                  | j                        }| j
                  t        j                  k(  rt         j                  j                  |      \  }}t         j                  j                  |      \  }}t         j                  j                  |      \  }}t         j                  j                  ||      }d }d }	d }
d }| j
                  t        j                  k(  rBt         j                  j                  || j                        }	 t        j                  |d      }nv| j
                  t        j                  t        j                  fv rJ	 t        j                  |d      }	t        j                   |	dd      }|j                  | j                        }t#        j$                         }|j'                  |j)                                |j+                  d       |r|j-                          |r|j-                          |	r|	j-                          |S # t        $ r d }Y w xY w# t        $ r d }Y w xY w)NrbrT
allowZip64r   )ospathjoinr   SOPDS_ROOT_LIBcat_typer
   CAT_INPsplit
CAT_NORMALr   codecsopenFileNotFoundErrorCAT_ZIPzipfileZipFileioBytesIOwritereadseekclose)r   	full_pathinp_pathzip_name	inpx_pathinp_namer$   	inpx_namezfzsfo	file_pathdios                 r   getFileDatarC      s   V22DII>I}}fnn$WW]]95( ggmmH5	8''--	2iGGLLh/	A	BA	B}}f''''',,y$--8		{{9d+B 
6>>6>>:	:	{{9d+BCD9At}}%B **,CIIbggiHHQK	288:!'')	288:J- ! 	B	 ! 	B	s%   ,H5 0A	I 5IIIIc                 &   t        |       }t        |       }t        j                         }t	        j
                  |dt        j                        }|j                  ||j                                |j                          |j                  d       |S )Nwr   )r   rC   r1   r2   r/   r0   ZIP_DEFLATEDwritestrr4   r6   r5   )r   r   r@   rB   zos        r   getFileDataZiprI   J   sf    D!I	T	B
**,C	c7#7#7	8BKK	2779%HHJHHQKJr   c                    | j                   dk7  ry t        |       }|sy t        |       }t        j                  j                  |      \  }}|d|}|dk(  rt        j                  }n'|dk(  rt        j                  }n|j                          y t        j                  j                  t        j                  | j                        }t        j                  j                  t        j                  |      }	t        |d      }
|
j                  |j                                |
j                          |j                          d|d|d|	d}t!        j"                  |dt         j$                  	      }|j&                  j)                         }t        j                  j+                  |	      rt-        j                  |	d
      }ny t/        j0                         }|j                  |j                                |j3                  d       |j                          t        j4                  |       t        j4                  |	       |S )Nfb2r   epubmobiwb"" "Tshellstdoutr   r   )r   rC   r   r#   r$   splitextr   SOPDS_FB2TOEPUBSOPDS_FB2TOMOBIr6   r%   SOPDS_TEMP_DIRr   r,   r3   r4   
subprocessPopenPIPErS   	readlinesisfiler+   r1   r2   r5   remove)r   convert_typer@   r   ne
dlfilenameconverter_pathtmp_fb2_pathtmp_conv_pathfw
popen_argsprocoutrB   s                  r   getFileDataConvri   U   s   {{e	T	BD!IWWi(FQ|,Jv//		//

77<< 5 5t}}ELGGLL!6!6
CM	l4	 BHHRWWYHHJHHJ,:L-XJJd:??KD ++


!C	ww~~m$[[-
**,CIIbggiHHQKHHJIIlIImJr   c                     t        | d      S )NrL   ri   r   s    r   getFileDataEpubrm          4''r   c                     t        | d      S )NrM   rk   rl   s    r   getFileDataMobirp      rn   r   c                 :	   t         j                  j                  |      }t        j                  rA| j
                  j                  r+t        j                  j                  | j
                  |       t        j                  j                  t        j                  |j                        }|j                  t        j                  k(  rt        j                  j!                  |      \  }}t        j                  j!                  |      \  }}t        j                  j!                  |      \  }	}
t        j                  j                  |	|      }t        j"                  r0t%        j&                  |j(                  dz   |j*                  z         }nt%        j&                  |j,                        }t%        j.                  |      }|dk(  r5|dz   }|j*                  dk(  rt0        j2                  nt0        j4                  }n!|}t7        j8                  |j*                        }t;               }|d|d|d	<   d
|z  |d<   d|d<   d}d}d}|j<                  }|j                  t        j>                  k(  rqt        j                  j                  ||j,                        }t        j                  jA                  |      }	 tC        jD                  |d      }|jK                         }n|j                  t        jL                  t        j                  fv r	 tC        jD                  |d      }tO        jP                  |dd      }|jS                  |j,                        jT                  }|jE                  |j,                        }|jK                         }|dk(  rtW        jX                         }tO        jP                  |dtN        jZ                        }|j]                  ||       |j_                          |ja                         }tc        te        |            |d<   |jg                  |       ntc        |      |d<   |jg                  |       j_                          |r|j_                          |r|j_                          |S # tF        $ r tH        w xY w# tF        $ r tH        w xY w)u(    Загрузка файла книги iduserr   r   1z.ziprK   ; name="rO   Content-Typeattachment; filename="%s"Content-DispositionbinaryContent-Transfer-EncodingNr   r    Tr!   rE   Content-Length)4r   objectsgetr   
SOPDS_AUTHru   is_authenticatedr   get_or_creater#   r$   r%   r&   r'   r
   r(   r)   r   r	   r   r   r   r   r   r   FB2_ZIPZIPr   fmtr   filesizer*   getsizer+   r,   r-   r   r4   r.   r/   r0   getinfo	file_sizer1   r2   rF   rG   r6   getvaluestrlenr3   )requestbook_idzip_flagr   r7   r8   r9   r:   r;   r$   r<   r   ra   content_typeresponser=   r>   r?   	book_sizerA   r@   rB   rH   bufs                           r   Downloadr      sR   <<w'DW\\::''W\\'Eggll600;I}}fnn$WW]]95( ggmmH5	8''--	2iGGLLh/	%%..C!;<	../	y)I3V#
*.++u*<h&&(,,
$((5~H.::FH^&A:&NH"#*2H()A	BAI}}f''''',,y$--8	''//),		{{9d+B '')	6>>6>>:	:	{{9d+B OOB5))DMM*44	FF4==!
'')}jjl__S#w';';<
Ia 

lln%(S]!"s%(^!"qHHJ!'')	288:O; ! 	M	 ! 	M	s   7Q7 R
 7R
Rc                 |   t         j                  j                  |      }t               }t        j
                  j                  t        j                  |j
                        }|j                  t        j                  k(  rt        j
                  j                  |      \  }}t        j
                  j                  |      \  }}	t        j
                  j                  |      \  }
}t        j
                  j                  |
|      }	 |j                  t        j                  k(  rwt        j
                  j                  ||j                        }t        j                   |d      }t#        ||j                        }|j%                         }|j'                          n|j                  t        j(                  t        j                  fv rt        j                   |d      }t+        j,                  |dd      }|j!                  |j                        }t#        ||j                        }|j%                         }|j'                          |j'                          |j'                          rd|d<   |rt/        j                   t1        j2                  |            j5                  d	      }|j7                  t8        j:                  t8        j:                  ft.        j<                         t1        j2                         }|j?                  |d
       |jA                         }|jC                  |       |st        j
                  jE                  t        jF                        rPd|d<   t!        t        jF                  d      }|jC                  |jI                                |j'                          |S tJ        |S #  d}d}Y UxY w)!    Загрузка обложки rr   r   r    Tr!   N
image/jpegrx   RGBJPEG)&r   r~   r   r   r#   r$   r%   r   r&   r'   r
   r(   r)   r*   r   r+   r,   r   extract_cover_memoryr6   r.   r/   r0   r   r1   r2   convert	thumbnailr   
THUMB_SIZE	ANTIALIASsaver   r3   existsSOPDS_NOCOVER_PATHr4   r   )r   r   r   r   r   r7   r8   r9   r:   r;   r$   r<   rA   r@   	book_dataimager>   r=   thumbtfilefs                        r   Coverr      s    <<w'D~HV22DII>I}}&WW]]95( ggmmH5	8''--	2iGGLLh/	==F---Y>IY-B'4==9I224EHHJ]]v~~v~~>>Y-BCD9A&B'DMM:I224EHHJGGIHHJ
 #/ JJrzz%0199%@EOOX00(2E2EFXJJLEJJuf%NN$Eu77>>&334'3H^$V..5ANN1668$GGI O MO/	s   EN2 2N;c                 T   t         j                  j                  |      }t               }d}t        j
                  j                  t        j                  |j
                        }|j                  t        j                  k(  rt        j
                  j                  |      \  }}t        j
                  j                  |      \  }	}
t        j
                  j                  |	      \  }}t        j
                  j                  ||      }|j                  dk(  rt        j                  d      }|j                  t        j                   k(  rct        j
                  j                  ||j"                        }t%        j&                  |d      }|j)                  |d       |j+                          n|j                  t        j,                  t        j                  fv rt%        j&                  |d      }t/        j0                  |dd      }|j'                  |j"                        }|j)                  |d       |j+                          |j+                          |j+                          t3        |j4                  j6                        dkD  r	 |j4                  j6                  }t9        j:                  |      }|rd	|d
<   t=        j&                  t?        j@                  |            jC                  d      }|jE                  tF        jH                  tF        jH                  ft<        jJ                         t?        j@                         }|jM                  |d       |jO                         }n|j4                  jQ                  d      |d
<   |jS                  |       d}|dk(  rt        j
                  jU                  t        jV                        rPd	|d
<   t'        t        jV                  d      }|jS                  |jY                                |j+                          |S tZ        |S #  d}Y xY w)r   rr   r   rK      r   r    Tr!   r   rx   r   r   zcontent-type).r   r~   r   r   r#   r$   r%   r   r&   r'   r
   r(   r)   r   r   	fb2parserr*   r   r+   r,   parser6   r.   r/   r0   r   cover_image
cover_database64	b64decoder   r1   r2   r   r   r   r   r   r   r   getattrr3   r   r   r4   r   )r   r   r   r   r   c0r7   r8   r9   r:   r;   r$   r<   rK   rA   r@   r>   r=   r?   dstrr   r   r   s                          r   Cover0r     s   <<w'D~HBggll600;I}}fnn$WW]]95( ggmmH5	8''--	2iGGLLh/	{{Eq!==&+++ggll9T]];I{{9d+BIIbOHHJ]]v~~v~~>>{{9d+BCD9A&BIIbOHHJGGIHHJs))*1,//,,%%a(/;H^,!JJrzz$'78@@GEOOX%8%8(:M:M$NPUP_P_`JJLEJJuf- >>+D/2/F/F~/VH^,t$ 
1u77>>&334%1H^$6,,T2ANN1668$GGI O MOs   DP! !P'c                     t        | |d      S )NT)r   )r   r   s     r   	Thumbnailr   M  s    '4((r   c                 t	   t         j                  j                  |      }|j                  dk7  rt        t
        j                  rA| j                  j                  r+t        j                  j                  | j                  |       t        j                  j                  t
        j                  |j                        }|j                  t         j"                  k(  rt        j                  j%                  |      \  }}t        j                  j%                  |      \  }}t        j                  j%                  |      \  }	}
t        j                  j                  |	|      }t
        j&                  r0t)        j*                  |j,                  dz   |j                  z         }nt)        j*                  |j.                        }t)        j0                  |      }t        j                  j3                  |      \  }}|d|}|dk(  rt
        j4                  }n|dk(  rt
        j6                  }t9        j:                  |      }|j                  t         j<                  k(  r-d}t        j                  j                  ||j.                        }n|j                  t         j>                  t         j"                  fv r	 tA        jB                  |d      }tG        jH                  |d	d
      }|jK                  |j.                  t
        jL                         t        j                  j                  t
        jL                  |j.                        }|}t        j                  j                  t
        jL                  |      }ddd|d}tO        jP                  |d
tN        jR                        }|jT                  jW                         }t        j                  jY                  |      rtA        jB                  |d      }|j[                         }t]               }|d|d|d<   d|z  |d<   d|d<   t_        ta        |            |d<   |jc                  |       |je                          nt        	 rt        jf                  |       	 t        jf                  |       |S # tD        $ r t        w xY w#  Y /xY w#  Y |S xY w)uZ    Выдача файла книги после конвертации в EPUB или mobi rr   rK   rt   r   rL   rM   Nr   r    Tr!   rO   rP   rQ   rw   rx   ry   rz   r{   r|   r}   )4r   r~   r   r   r   r   r   ru   r   r   r   r#   r$   r%   r&   r'   r
   r(   r)   r   r	   r   r   r   r   rT   rU   rV   r   r   r*   r.   r+   r,   r-   r/   r0   extractrW   rX   rY   rZ   rS   r[   r\   r4   r   r   r   r3   r6   r]   )r   r   r^   r   r7   r8   r9   r:   r;   r$   r<   r   r_   r`   ra   rb   r   rc   rA   r>   r=   rd   rf   rg   rh   r@   r?   r   s                               r   
ConvertFB2r   Q  sa   <<w'D{{EW\\::''W\\'Eggll600;I}}fnn$WW]]95( ggmmH5	8''--	2iGGLLh/	%%..C!;<	../	y)I
''

9
%EQq,'JV--	v	--""<0L}}f''''',,y$--8		6>>6>>:	:	{{9d+B OOB5			$-- 5 56WW\\&"7"7F	'',,v44Z@M*8=QJJd:??KD
++


!C	ww~~m$;;}d+
'')>2>z!J *Ez*R&'.6,-%(Q[!"q

IIl#
		-  OK ! 	M	<Os$   6R )R+ R2 R(+R/2R7)F)*r#   r+   r   r1   rX   django.httpr   r   django.views.decorators.cacher   opds_catalog.modelsr   r   opds_catalogr   r	   r
   r   opds_catalog.zipfzipfr/   book_tools.formatr   r   book_tools.format.mimetyper   	constancer   PILr   r   rC   rI   ri   rm   rp   r   SOPDS_CACHE_TIMEr   r   r   r    r   r   <module>r      s    
   	  - 4 / : : # < /  %)V	1f((IX F##$5 %5p8t)Mr   