3
NZuT                 @   s   d dl Z d dlZd dlZd dlZd dlZd dlT d dlT d dlmZm	Z	m
Z
 yd dlZW n2 ek
r   ejdsejd ejd Y nX dZdZd	Zd
ZdZdZde Zde ZG dd dZG dd dZdS )    N)*)deviceutilsexifZHPLIP_BUILDz>PCARDEXT could not be loaded. Please check HPLIP installation.      i         i         c               @   s@   e Zd ZdddZdd ZdddZd	d
 Zdd Zdd ZdS )PhotoCardFileNc             C   sZ   d| _ d| _d| _|| _tjd| _|d k	r6| j| t| _| jj	t
j| jd| j d S )Nr   Tc)posclosed	file_sizepcarraybufferopenINITIAL_PCARDFILE_BUFFERbuffer_size
fromstringpcardextreadname)selfr   r    r   #/usr/share/hplip/pcard/photocard.py__init__:   s    
zPhotoCardFile.__init__c             C   s   d| _ || _d S )NF)r   r   )r   r   r   r   r   r   H   s    zPhotoCardFile.openr   c             C   sF   |dkr|| _ n2|dkr(|  j |7  _ n|dkr>| j| | _ nd S d S )Nr   r   r   )r   r   )r   offsetwhencer   r   r   seekL   s    zPhotoCardFile.seekc             C   s   | j S )N)r   )r   r   r   r   tellW   s    zPhotoCardFile.tellc             C   s   |dkr| j | | jk rD| j| j | j |  j }|  j |7  _ |S x<| j | | jkr| jjtj| j| jt |  jt7  _qFW | j|S d S )Nr   )	r   r   r   Ztostringr   r   r   r   INCREMENTAL_PCARDFILE_BUFFER)r   sizedatar   r   r   r   [   s    zPhotoCardFile.readc             C   s   d| _ d| _d S )NTr   )r   r   )r   r   r   r   closei   s    zPhotoCardFile.close)N)r   )	__name__
__module____qualname__r   r   r!   r"   r   r&   r   r   r   r   r   7   s   

r   c               @   s  e Zd Zd\ddZd]ddZd^dd	Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zd_dd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd`d-d.Zdad/d0Zdbd1d2Zd3d4 Zdcd6d7Zd8d9 Zddd:d;Zd<d= Zded>d?Zdfd@dAZ dgdBdCZ!dDdE Z"dFdG Z#dHdI Z$dhdJdKZ%dLdM Z&didNdOZ'dPdQ Z(dRdS Z)dTdU Z*dVdW Z+dXdY Z,dZd[ Z-dS )j	PhotoCardNc             C   s   |d kr(t j||| _ | j j  d| _n|| _ d| _tj | _g | _| j j| _d| _	g | _
i | _i | _d| _d| _d | _d| _d S )NTF)r   ZDevicer   Zclose_devicer   Stack	dir_stackcurrent_dir
device_uripcard_mounted	saved_pwdsector_buffersector_buffer_counts
cache_flagwrite_protectcallbackchannel_opened)r   Zdev_objr.   Zprinter_namer   r   r   r   p   s"    


zPhotoCard.__init__ c             C   s   d S )Nr   )r   r   r   r   r   START_OPERATION   s    zPhotoCard.START_OPERATIONTc             C   s   | j r|r| j  d S )N)r6   close_channel)r   r   flagr   r   r   END_OPERATION   s    
zPhotoCard.END_OPERATIONc             C   s
   || _ d S )N)r5   )r   r5   r   r   r   set_callback   s    zPhotoCard.set_callbackc             C   s  t jd||f  | jrxt||| D ]}|| jkr(P q(W d}xbt||| D ]P}dj|| j| g}t jd|  | j| }|d | j|< | jd k	rP| j  qPW |S | jd k	r| j  | js| j	  t jd||f  t
t||| }tjdd|  t|f| }| jd k	r| j  | jj|}t jd|  | jjd	}	tjd
|	d }
t jd|
  |
dkr|| jjd}	tjd|	\}}t jd|
||f  dd|t   }}}xJ||k r| jj|}	|t|	7 }dj||	g}| jd k	r| j  qW | jrxd}xft||| D ]T}|||t  | j|< | jj|d}|d | j|< |t7 }| jd k	r| j  qW | j| |S t jd|
  dS d S )Nz%read pcard sector: sector=%d count=%dr7   zCached sector read sector=%dr   z%Normal sector read sector=%d count=%dz!HHIz%d bytes writtenr   z!Hr   zReturn code: %xi     z!IHzcode=0x%x, nsector=%d, ver=%dzError code: %d)logdebugr3   ranger1   joinr2   r5   r6   open_channelliststructpackREAD_CMDr   
writePCard	readPCardunpackSECTOR_SIZElenget_check_cacheerror)r   sectornsectorsr   countZsectors_to_readrequestZbytes_writtenr%   codeZnsector_readZverZ	data_readZtotal_to_readir   r   r   _read   sh    





zPhotoCard._readc       
      C   s  t jd||t|f  | js&| j  tt||| }tjdd|  t	|df| }dj
||g}| jd k	rv| j  | jj| | jjd}| jd k	r| j  tjd|d }|tkr6| jr2d}xLt||| D ]:}	t jd|  |||t  | j|	< d	| j|	< |t7 }qW | jd k	r(| j  | j| dS | jrxDt||| D ]2}	y| j|	= | j|	= W n tk
r|   Y nX qNW t jd
 | j  d	S d S )Nz-write pcard sector: sector=%d count=%d len=%dz!HHHr=   r   r7   r   z!HzCaching sector %dr   z5Photo card write failed (Card may be write protected))r?   r@   rL   r6   rC   rD   rA   rE   rF   	WRITE_CMDrB   r5   r   rH   rI   rJ   NAKr3   rK   r1   r2   rN   KeyErrorrO   r9   )
r   rP   rQ   r   Zsectors_to_writerT   r%   rU   rV   rR   r   r   r   _write   sF    





zPhotoCard._writec             C   s~   t | jtkrzt| jj d d  d }}xN|D ]F}| j| dkr0| j|= | j|= |d7 }||krdP | jd k	r0| j  q0W d S )Nr   r   )rL   r1   	MAX_CACHErD   keysr2   r5   )r   rQ   tnrR   r   r   r   rN     s    

zPhotoCard._check_cachec             C   s   | j S )N)r2   )r   r   r   r   
cache_info/  s    zPhotoCard.cache_infoc             C   s   | j j|dS )Nr   )r2   rM   )r   rP   r   r   r   cache_check2  s    zPhotoCard.cache_checkc             C   s   || _ | j s| j  d S )N)r3   cache_reset)r   Zcontrolr   r   r   cache_control5  s    zPhotoCard.cache_controlc             C   s   | j S )N)r3   )r   r   r   r   cache_state;  s    zPhotoCard.cache_statec             C   s   | j j  | jj  d S )N)r1   clearr2   )r   r   r   r   rb   >  s    
zPhotoCard.cache_resetc             C   s*   d}| j d ztj }W d | jd |S )Nr   df)r8   r   rf   r;   )r   rf   r   r   r   rf   B  s    

zPhotoCard.dfr   c                sv   |sd}|r4 j d ztj  _W d  jd| X dd  jD  _|dkrT jS  fdd|j j j D d S )Nr   lsc             S   s    g | ]\}}}|j  ||fqS r   )lower).0r_   arR   r   r   r   
<listcomp>U  s    z PhotoCard.ls.<locals>.<listcomp>c                s   g | ]}t j j|qS r   )fnmatchfilterr-   )ri   x)r   r   r   rk   Z  s    r   )r8   r   rg   r-   r;   striprh   split)r   Z
force_read	glob_list	opencloser   )r   r   rg   K  s    
zPhotoCard.lsc             C   s*   x$| j D ]}||kr| j | d S qW dS )Nr   r   )r-   )r   r   fr   r   r   r$   \  s    zPhotoCard.sizec             C   s   dd | j D S )Nc             S   s   g | ]}|d  dkr|qS )r   dr   )ri   rn   r   r   r   rk   c  s    z+PhotoCard.current_files.<locals>.<listcomp>)r-   )r   r   r   r   current_filesb  s    zPhotoCard.current_filesc             C   s   dd | j D S )Nc             S   s   g | ]}|d  dkr|qS )r   rt   r   )ri   rn   r   r   r   rk   f  s    z1PhotoCard.current_directories.<locals>.<listcomp>)r-   )r   r   r   r   current_directoriese  s    zPhotoCard.current_directoriesc                sD   t |dkr@dd | j D   fdd|j j j D d S g S )Nr   c             S   s   g | ]}|d  qS )r   r   )ri   rn   r   r   r   rk   j  s    z)PhotoCard.match_files.<locals>.<listcomp>c                s   g | ]}t j |qS r   )rl   rm   )ri   rn   )ru   r   r   rk   k  s    )rL   ru   ro   rh   rp   )r   rq   r   )ru   r   match_filesh  s    "zPhotoCard.match_filesc                sD   t |dkr@dd | j D   fdd|j j j D d S g S )Nr   c             S   s   g | ]}|d  qS )r   r   )ri   rn   r   r   r   rk   p  s    z(PhotoCard.match_dirs.<locals>.<listcomp>c                s   g | ]}t j |qS r   )rl   rm   )ri   rn   )current_dirsr   r   rk   q  s    )rL   rv   ro   rh   rp   )r   rq   r   )rx   r   
match_dirsn  s    "zPhotoCard.match_dirsc             C   s   t j|d }|d krdS |S )Nr   zunknown/unknown)	mimetypesZ
guess_type)r   filenamer^   r   r   r   classify_filet  s    zPhotoCard.classify_filec             C   sF   | j d d}z&t|d}tj||j }|j  W d | jd| |S )Ncpr   w)r8   r   r   r}   filenor&   r;   )r   r   Z
local_filerr   totalrs   r   r   r   r}   {  s    

zPhotoCard.cpc             C   s   d\}}| j d tj }zrx\|D ]T}| j||d}	|r`|tjj| j |tjjtj ||	 ||	7 }|r"tj	| q"W tj }
|
| }W d |r| j
ddd | jd ||fS )Nr   cp_multipleFTr   )r   r   )r8   timer}   ospathrB   pwdgetcwdr   rmrg   r;   )r   filelistremove_after_copycp_status_callbackrm_status_callbackdeltar   t1rs   r$   t2r   r   r   r     s"    

(
zPhotoCard.cp_multiplec             C   s   | j   d\}}| jd tj }zx|D ]}|jdd d }	|jdd }
x|	D ]}| j|d qTW | j|
|
d}|d k	r||tjjtj	 |
| ||7 }|rt
j|
 |d k	r|| | jdd q*W tj }|| }W d | j  | jd ||fS )	Nr   cp_list/r   F)r   r   r   )save_wdr8   r   rp   cdr}   r   r   rB   r   r   r   
restore_wdr;   )r   r   r   r   r   r   r   r   rs   	path_listr{   pr$   r   r   r   r   r     s0    




zPhotoCard.cp_listc             C   s.   d}| j d ztj||}W d | jd |S )Nr   cp_fd)r8   r   r}   r;   )r   r   fdr   r   r   r   r     s    

zPhotoCard.cp_fdFc             C   s  d}| j   | jd d}tj }x|D ]}|s*|\}	}
}}|	jd}|d d
 }|d }| jdd |d k	r|tjj| j |tjjtj	 |drd}P t
|dkrx|D ]}| j|d qW tjjtjjtj	 |r6d}x2tjjtjjtj	 |d|  sP |d7 }qW || j||d|  d7 }n|| j||d7 }|d k	r|tjj| j |tjjtj	 ||
rd}P |s*|d k	r|tjj| j | | j|dd q*W tj }| jd | jdd	d | jd ||| |fS )NFunloadr   r   r   Tr   z (%d)r   r   r   )r   r8   r   rp   r   r   r   rB   r   r   rL   existsr}   r   r   rg   r;   )r   Zunload_listr   r   Zdont_removeZwas_cancelledr   r   rs   r   r$   typsubtypr   dirsr{   rt   rV   r   r   r   r   r     sT    


$



zPhotoCard.unloadc             C   s   | j  }| j|S )N)tree_PhotoCard__build_unload_list)r   r   r   r   r   get_unload_list  s    zPhotoCard.get_unload_listc       	      C   s   |d krg }t j }x|D ]}t|| ti krX|j| | j|| || |j  q| j|jd\}}|dkr|j }dj	dj	||g}|j
||| ||f qW |S )Nr   imageaudiovideo)r   r   r   )r   r+   typepushr   popr|   rp   as_listrB   append)	r   r   r   outrt   r   r   r   r   r   r   r   Z__build_unload_list  s    


zPhotoCard.__build_unload_listc             C   s   t j S )N)r   info)r   r   r   r   r   )  s    zPhotoCard.infoc             C   sv   | j d zXtj|}|r`|dkr.| jj  n$|jd}x|D ]}| jj| q>W | jddd W d | jd| X d S )Nr   r   Tr   F)	r8   r   r   r,   re   rp   r   rg   r;   )r   r   rr   statrt   r   r   r   r   -  s    



zPhotoCard.cdc             C   s   t | jj dkr| jd|S | jj  | jd z:tjd x| jj D ]}tj| qJW | jddd W d | jd| X d S )Nr   r   cdupTr   F)	rL   r,   r   r   r   r8   r   rg   r;   )r   rr   rt   r   r   r   r   @  s    


zPhotoCard.cdupc             C   s8   | j   z tj|}|r&| jddd W d | j| |S )NTr   F)r8   r   r   rg   r;   )r   r   Zrefresh_dirrr   rr   r   r   r   P  s    

zPhotoCard.rmc             C   s   t jd | jd zxtj| j| j}tj }|d | _t jd|  |dkr|| jr\| j	  d| _
tjd | jddd	 nd	| _
ttW d | j
r| jd X d S )
NzMounting photocard...mount   zstat=%dr   Tr   r   F)r?   r@   r8   r   r   rW   r[   r   r4   rC   r/   r   rg   ErrorZ'ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATIONr;   )r   r   Z	disk_infor   r   r   r   [  s"    



zPhotoCard.mountc             C   s   ddj | jj  S )Nr   )rB   r,   r   )r   r   r   r   r   y  s    zPhotoCard.pwdc             C   s   | j j d d  | _d S )N)r,   r   r0   )r   r   r   r   r   }  s    zPhotoCard.save_wdc             C   s,   | j d| x| jD ]}| j || qW d S )Nr   )r   r0   )r   rr   rt   r   r   r   r     s    zPhotoCard.restore_wdc             C   s<   | j d i }z| j  | j }| jd W d | jd |S )Nr   F)r8   r   _PhotoCard__treer   r;   )r   Zdir_treer   r   r   r     s    

zPhotoCard.treec             C   s   |d kri }t jd xt j D ]t}|d j }| jd k	rB| j  |d	kr |d dkr| j|d i ||< | j|| ||< | jd q |d ||< q W |S )
Nr   r   ...r   rt   Fr   )r   r   )r   r   rg   rh   r5   r   r   )r   Z_PhotoCard__drs   fnamer   r   r   Z__tree  s    

zPhotoCard.__treec             C   sJ   i }| j d d }zt| |}tj|}W d |d k	r<|j  | jd |S )Nget_exif)r8   r   r   process_filer&   r;   )r   r   	exif_infopcfr   r   r   r     s    


zPhotoCard.get_exifc             C   s   i }| j d | j  zR|jdd d }|jdd }x|D ]}| j|d q>W t| |}tj|}W d | jd |j  | j	d |S )Nget_exif_pathr   r   Fr   r   )
r8   r   rp   r   r   r   r   r   r&   r;   )r   r   r   r   r{   r   r   r   r   r   r     s    




zPhotoCard.get_exif_pathc             C   s*   | j d z| j|d}W d | jd |S )NrP   r   )r8   rW   r;   )r   rP   r%   r   r   r   rP     s
    

zPhotoCard.sectorc             C   s   t j  d| _d S )NF)r   umountr/   )r   r   r   r   r     s    zPhotoCard.umountc             C   s   d| _ | jj  d S )NT)r6   r   Z	openPCard)r   r   r   r   rC     s    zPhotoCard.open_channelc             C   s   d| _ | jj  d S )NF)r6   r   Z
closePCard)r   r   r   r   r9     s    zPhotoCard.close_channel)NNN)r7   )r7   T)Tr   T)T)NN)NN)NNF)NN)T)T)TT)T)N).r'   r(   r)   r   r8   r;   r<   rW   r[   rN   r`   ra   rc   rd   rb   rf   rg   r$   ru   rv   rw   ry   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   rC   r9   r   r   r   r   r*   n   sV   


V6	



(

=





r*   )rE   r   rl   rz   r   Zbase.gZ
base.codesbaser   r   r   r   ImportErrorr   getenvr?   rO   sysexitZACKrY   rG   rX   rK   r\   r   r#   r   r*   r   r   r   r   <module>   s.   

7