
    h"                         d dl mZmZ d dlZd dlZd dlZddl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mZmZ d Zd	 Zd
 Zd Zd Zd Zd Z G d de
      Zy)    )print_functionunicode_literalsN   )AuthSrv)bos)	StreamArcerrdesc)min_exsanitize_fnspacksunpack	yieldfilezlibc                    t        d|       \  }}|dz  dz  }|dz	  dz  }|dz	  }|dz  }|dz	  dz  }|dz	  d	z   }||||||f}	d
}
 |
j                  |	 }t        j                  |d      }t	        t        j                  |            S )N   <HH         ?         	     z){:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}z%Y-%m-%d %H:%M:%S)r   formattimestrptimeintcalendartimegm)buftdtstmthdddmdytttfisodts                C/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/szip.pydostime2unixr.      s    63DAq
d(aB
q&DB	
bB	
TB
q&CB
q&DB
b"b"b	!B	4B
"))R.C	s/	0Bxr"##    c           	          t        j                  | dz         \	  }}}}}} }}}|dz
  dz  |dz  z   |z   }|dz  |dz  z   | dz  z   }	 t        d||      S #  Y yxY w)	Nr   r   r   r   r   r   r   s     ! )r   gmtimer   )	r#   r(   r'   r&   r%   r$   _bdbts	            r-   unixtime2dosr5       s|    &*kk"q&&9#BBBAq!9
rQw	'"	,B
(rQw	"'	)B#VR$$#"s   A Ac                 8    d}|rdnd}|t        ||| |       z  }|S )Ns   PKs   <LQQs   <LLLr   )szcrc32z64retfmts        r-   	gen_fdescr=   *   s*    
C'gC5eR$$CJr/   c           
         |r||gng }| r| dk\  r|j                  |        |rdnd}	|rt        d|      }
nd}
| d|	z   }nd|	z   }||rdnd	z  }||rd	ndz  }|d
t        |      z   |
z   z  }|rdn|}|t        d||      z  }t        |d      }|j	                  |rdndd      j                  dd      }|rt        |      dz  dz   nd}|t        dt        |      d|z         z  }| #|dz  }|dz  }|t        dt        | d            z  }||z  }|t        dddt        |      t        |      dd      z  }|r,|t        ddt        |      z  z   dt        |      dz  g| z  }|S )z
    does regular file headers
    and the central directory meme if h_pos is set
    (h_pos = absolute position of the regular header)
        s   - s   
 s   <L       s   PKs   PK            s   <LL/zutf-8cp437replace   ?   _      r   r      s       s   <HHLLHH      i     Qr   )	appendr   r5   r   encoderF   lenminr   )h_posr:   fnr8   lastmodutf8icrc32pre_crcz64vreq_verr9   r;   vszbfnz64_lens                  r-   gen_hdrr^   1   s   & B8D*$E !kkGeV$}!G+ *G3g77*Cd7'C ;g..66C
 *C5c""C 
R	B
))tG)
<
D
DT4
PC $(c$i!maQG5S4'>22C{ 	** 	uUCz2333JC 5S#s7|S\4NNCuVdSY..3t9q=H4HHJr/   c                     d}|dz  }||z
  }t        dt        |             }t        d|      }t        d|      }|dk(  xs d||fv }|t        d||||      z  }|dz  }||fS )z]
    summary of all file headers,
    usually the zipfile footer unless something clamps
    s   PKr@   i  r?   s   <HHLLrC   )rR   rQ   r   )	itemscdir_poscdir_endr;   cdir_sznitemscszcposneed_64s	            r-   gen_ecdrrh      s     C ;C!GU$F
j'
"Cz8$D;*d";G 566355C ;C<r/   c                 z    d}|dz  }|dz  }|dz  }||z
  }|t        dt        |       t        |       ||      z  }|S )zT
    z64 end of central directory
    added when numfiles or a headerptr clamps
    s   PKs   ,       s   - s           s   <QQQQ)r   rQ   )r`   ra   rb   r;   rc   s        r-   
gen_ecdr64rj      s_     C   C C ;C !G53u:s5z7HEECJr/   c                 ,    d}|t        dd| d      z  }|S )zK
    z64 end of central directory locator
    points to ecdr64
    why
    s   PKs   <LQLr   r   r7   )
ecdr64_posr;   s     r-   gen_ecdr64_locrm      s%     C 5!Z++CJr/   c                   6     e Zd Z	 	 d fd	Zd Zd Zd Z xZS )	StreamZipc                 h    t         t        |   |||       || _        || _        d| _        g | _        y )Nr   )superro   __init__rV   rX   posr`   )selflogasrvfgenrV   rX   kwargs	__class__s          r-   rr   zStreamZip.__init__   s4     	i'T48	
r/   c                 B    | xj                   t        |      z  c_         |S )N)rs   rQ   )rt   r    s     r-   _ctzStreamZip._ct   s    CH
r/   c           
   #   4  K   |d   }|d   }|d   }t        j                  |j                        ry |j                  }|j                  }| j
                  }d}| j                  r@t        || j                  j                        D ]  }	t        j                  |	|      } |dz  }|dk\  xs |dk\  }
t        d |
|||| j                  || j                        }	| j                  |	       t        || j                  j                        D ]7  }	| j                  st        j                  |	|      }| j                  |	       9 |dz  }| j                  j!                  |||||f       |
s| j                  s!t#        |||
      }	| j                  |	       y y w)Nvpapstr   r?   )statS_ISDIRst_modest_sizest_mtimers   rX   r   argsiobufr   r9   r^   rV   r{   r`   rO   r=   )rt   fnamesrcr   r8   r#   rS   crcr    r:   s              r-   serzStreamZip.ser   so    wgtW<<

#ZZ[[<< diioo6 +jjc*+ :C
 z!5R:%5dCr2tyy#t||LhhsmS$))//2 	 C<<jjc*((3-		  	z

4Re45dllBS)C((3- #s   FFc              #     K   i }g }d}	 | j                   D ]Q  }d|v r|j                  |d   |d   f       !	 | j                  |      D ]  }||z  }t        |      dk\  s| d} S |r| d}|rmt        | j                  j                  |      \  }}| j                  dj                  t        |      g|d	d  z                | j                  |      D ]  }|  | j                  }| j                  D ]c  \  }	}
}}}|d
k\  xs |
d
k\  }t        |||	|
|| j                   || j"                        }|| j%                  |      z  }t        |      dk\  s^| d}e | j                  }t'        | j                  ||      \  }}|rV| j                  }t)        | j                  ||      }|| j%                  |      z  }t+        |      }|| j%                  |      z  }t'        | j                  ||      \  }}|| j%                  |      z    |rt-        j.                  |d          y y # t        $ r   t        dd      j                  dd      }|j                  |d   |f       Y SxY w# |rt-        j.                  |d          w w xY ww)Nr/   errr}   i @  r   T
z
-- r   r?   r~   )rw   rO   r   rQ   GeneratorExitr
   rF   r	   rv   vfsru   joinreprrs   r`   r^   rV   rX   r{   rh   rj   rm   r   unlink)rt   errferrorsmbufr   xextxtra   r   r8   r#   r   rS   r:   r    rb   r2   rg   ecdir64_posecdrs                        r-   genzStreamZip.gen  s    3	'YY 1A:MM1T7AeH"56
1!XXa[ '	t9-"&J#&D	'1" 
#DIIMM6:	cT$ZL3qr7$:<=$ AG xxH,0JJ (b"c5z)=R:-=eS$B		3U%t9%JD xxH!$**hAJAw"hh Xx@%$[1%tzz8X>GD!$''

4:& M % 1400w?BMM1T7B-0D 

4:& sA   J-I, 'H) H)(C.I, B6I, J)=I)&I, ,J		J)FF)__name__
__module____qualname__rr   r{   r   r   __classcell__)ry   s   @r-   ro   ro      s      "' R7'r/   ro   )
__future__r   r   r   r   r   authsrvr   r   sutilr   r	   utilr
   r   r   r   r   r   r.   r5   r=   r^   rh   rj   rm   ro    r/   r-   <module>r      sS    7      % F F$&#Vr<4v'	 v'r/   