
    =	fuT                     .   d dl Z d dlZd dlZd dlZd dlZd dl d dl d dlmZm	Z	m
Z
 	 d dlZdZdZd	Zd
ZdZdZdez  Zdez  Z G d d      Z G d d      Zy# e$ r6 ej                  d      s"ej!                  d       ej%                  d       Y ew xY w)    N)*)deviceutilsexifHPLIP_BUILDz>PCARDEXT could not be loaded. Please check HPLIP installation.      i         i         c                   4    e Zd ZddZd Zd	dZd Zd Zd Zy)
PhotoCardFileNc                 4   d| _         d| _        d| _        || _        t	        j                  d      | _        || j                  |       t        | _        | j
                  j                  t        j                  | j                  d| j                               y )Nr   Tc)posclosed	file_sizepcarraybufferopenINITIAL_PCARDFILE_BUFFERbuffer_size
fromstringpcardextreadname)selfr   r   s      #/usr/share/hplip/pcard/photocard.py__init__zPhotoCardFile.__init__:   sp    kk#&IIdO3x}}TYY4;K;KLM    c                      d| _         || _        y NF)r   r   r   r   s     r    r   zPhotoCardFile.openH   s    	r"   c                     |dk(  r|| _         y |dk(  r| xj                   |z  c_         y |dk(  r| j                  |z
  | _         y y )Nr   r   r   )r   r   )r   offsetwhences      r    seekzPhotoCardFile.seekL   s?    Q;DHq[HHHq[~~.DHr"   c                     | j                   S N)r   r   s    r    tellzPhotoCardFile.tellW   s    xxr"   c                 4   |dkD  r| j                   |z   | j                  k  rK| j                  | j                   | j                   |z    j                         }| xj                   |z  c_         |S | j                   |z   | j                  k\  r~| j                  j	                  t        j                  | j                  | j                  t                     | xj                  t        z  c_        | j                   |z   | j                  k\  r~| j                  |      S y Nr   )	r   r   r   tostringr   r   r   r   INCREMENTAL_PCARDFILE_BUFFER)r   sizedatas      r    r   zPhotoCardFile.read[   s    !8xx$!1!11{{488dhho>GGID  hho)9)99KK**8==DDTDTVr+st$$(DD$ hho)9)99 yy& r"   c                      d| _         d| _        y )NTr   )r   r   r,   s    r    closezPhotoCardFile.closei   s    r"   r+   )r   )	__name__
__module____qualname__r!   r   r)   r-   r   r5    r"   r    r   r   7   s!    N'r"   r   c                   *   e Zd Zd-dZd.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d0dZd Zd Zd Zd Zd Zd Zd1dZd2dZd2dZd Zd3dZd Zd2dZd Zd1dZd1dZ d4d Z!d! Z"d" Z#d# Z$d1d$Z%d% Z&d5d&Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-y)6	PhotoCardNc                    |=t        j                  ||      | _         | j                   j                          d| _        n|| _         d| _        t	        j
                         | _        g | _        | j                   j                  | _        d| _	        g | _
        i | _        i | _        d| _        d| _        d | _        d| _        y )NTF)r   Devicer   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   dev_objrB   printer_names       r    r!   zPhotoCard.__init__p   s    ? --
LADKKK $D!DK %D++00"$&!"#r"   c                      y r+   r9   r%   s     r    START_OPERATIONzPhotoCard.START_OPERATION   s    r"   c                 D    | j                   r|r| j                          y y y r+   )rJ   close_channel)r   r   flags      r    END_OPERATIONzPhotoCard.END_OPERATION   s!    4  $(r"   c                     || _         y r+   )rI   )r   rI   s     r    set_callbackzPhotoCard.set_callback   s	     r"   c                     t         j                  d||fz         | j                  rt        |||z         D ]  }|| j                  vs n d}t        |||z         D ]x  }dj                  || j                  |   g      }t         j                  d|z         | j                  |   }|dz   | j                  |<   | j                  i| j                          z |S | j                  | j                          | j                  s| j                          t         j                  d||fz         t        t        |||z               }t        j                  dd|z  z   t        |g| }| j                  | j                          | j                  j                  |      }t         j                  d|z         | j                  j!                  d	      }	t        j"                  d
|	      d   }
t         j                  d|
z         |
dk(  ra| j                  j!                  d      }	t        j"                  d|	      \  }}t         j                  d|
||fz         dd|t$        z  }}}||k  r^| j                  j!                  |      }	|t'        |	      z  }dj                  ||	g      }| j                  | j                          ||k  r^| j                  rd}t        |||z         D ]o  }|||t$        z    | j                  |<   | j                  j)                  |d      }|dz   | j                  |<   |t$        z  }| j                  `| j                          q | j+                  |       |S t         j-                  d|
z         y)Nz%read pcard sector: sector=%d count=%d zCached sector read sector=%dr   z%Normal sector read sector=%d count=%dz!HHIz%d bytes writtenr   !Hr   zReturn code: %xi     z!IHzcode=0x%x, nsector=%d, ver=%dzError code: %d)logdebugrG   rangerE   joinrF   rI   rJ   open_channelliststructpackREAD_CMDr   
writePCard	readPCardunpackSECTOR_SIZElenget_check_cacheerror)r   sectornsectorsr   countsectors_to_readrequestbytes_writtenr3   codensector_readver	data_readtotal_to_readis                   r    _readzPhotoCard._read   s7   		9VW<MMN??66'>2 D... vvg~6 (AWWfd.@.@.C%DEFII<q@A 55a8E387D--a0}}0( ==$MMO""		9VW<MMNuVVG^<=++ec'k18WWW ==$MMO ..w7		$}45 {{$$Q'}}T4(+		#d*+6> ;;((+D &eT :L#II5|S8QQR/11g6K}IF},{{,,];SY&	&$0==,MMO }, vv'<= (A,21q},ED&&q) 5599!Q?E387D--a0$A}}0( !!'* MII&-.r"   c                 P   t         j                  d||t        |      fz         | j                  s| j	                          t        t        |||z               }t        j                  dd|z  z   t        |dg| }dj                  ||g      }| j                  | j                          | j                  j                  |       | j                  j                  d      }| j                  | j                          t        j                  d|      d   }|t         k7  r| j"                  rd}t        |||z         D ]K  }	t         j                  d|z         |||t$        z    | j&                  |	<   d	| j(                  |	<   |t$        z  }M | j                  | j                          | j+                  |       y| j"                  r/t        |||z         D ]  }		 | j&                  |	= | j(                  |	=  t         j/                  d
       | j1                          y	# t,        $ r Y Qw xY w)Nz-write pcard sector: sector=%d count=%d len=%dz!HHHrW   r   rV   r   rX   zCaching sector %dr   z5Photo card write failed (Card may be write protected))rZ   r[   rg   rJ   r^   r_   r\   r`   ra   	WRITE_CMDr]   rI   r   rc   rd   re   NAKrG   rf   rE   rF   ri   KeyErrorrj   rP   )
r   rk   rl   r   sectors_to_writerp   r3   rr   rw   rm   s
             r    _writezPhotoCard._write   s    			AVWVYZ`VaDbbc""  ffWn =>++fs7{2Iw]L\]''7F+,==$MMOw'{{$$Q'==$MMO}}T4(+3;vvg~6 %AII1F:;,21Q{],CD&&q)34D--a0$A	% ==,MMO!!'* vvg~6 A ..q1 55a8 IIMN  $ s   H	H%$H%c                 H   t        | j                        t        kD  rt        | j                  j	                               d d  d}}|D ]X  }| j
                  |   dk(  s| j                  |= | j
                  |= |dz  }||k\  r y | j                  I| j                          Z y y )Nr   r   )rg   rE   	MAX_CACHEr_   keysrF   rI   )r   rl   tnrm   s        r    ri   zPhotoCard._check_cache  s    t!!"Y.**//1215qqA (,,Q/14**1-11!4FAG|}}0( /r"   c                     | j                   S r+   )rF   r,   s    r    
cache_infozPhotoCard.cache_info/  s    (((r"   c                 :    | j                   j                  |d      S r/   )rF   rh   )r   rk   s     r    cache_checkzPhotoCard.cache_check2  s    ((,,VQ77r"   c                 L    || _         | j                   s| j                          y y r+   )rG   cache_reset)r   controls     r    cache_controlzPhotoCard.cache_control5  s!    ! r"   c                     | j                   S r+   )rG   r,   s    r    cache_statezPhotoCard.cache_state;  s    r"   c                 l    | j                   j                          | j                  j                          y r+   )rE   clearrF   r,   s    r    r   zPhotoCard.cache_reset>  s&      "!!'')r"   c                     d}| j                  d       	 t        j                         }| j                  d       |S # | j                  d       |c cY S xY w)Nr   df)rN   r   r   rR   )r   r   s     r    r   zPhotoCard.dfB  sO    T"	Bt$I t$Is	   < Ac                    |sd}|r=| j                  d       	 t        j                         | _        | j	                  d|       | j                  D cg c]  \  }}}|j                         ||f c}}}| _        |dk(  r| j                  S |j                         j                         j                         D cg c]"  }t        j                  | j                  |      $ c}d   S # | j	                  d|       w xY wc c}}}w c c}w )Nr   lsr   )
rN   r   r   rA   rR   lowerstripsplitfnmatchfilter)r   
force_read	glob_list	opencloser   arm   xs           r    r   zPhotoCard.lsK  s    I  &4#+;;= ""43;?;K;KLL1QQWWYqOL###=F__=N=T=T=V=\=\=^_t//3_`abb ""43L
 `s   C( C?;'D(C<c                 X    | j                   D ]  }||k(  s	| j                   |   d   c S  y)Nr   r   rA   )r   r   fs      r    r2   zPhotoCard.size\  s9    !! 	.ADy''*1--	. r"   c                 R    | j                   D cg c]  }|d   dk7  s| c}S c c}w Nr   dr   r   r   s     r    current_fileszPhotoCard.current_filesb  &    ++;aqts{;;;   $$c                 R    | j                   D cg c]  }|d   dk(  s| c}S c c}w r   r   r   s     r    current_directorieszPhotoCard.current_directoriese  r   r   c                    t        |      dkD  rq| j                         D cg c]  }|d   	 }}|j                         j                         j	                         D cg c]  }t        j                  ||       c}d   S g S c c}w c c}w r/   )rg   r   r   r   r   r   r   )r   r   r   r   s       r    match_fileszPhotoCard.match_filesh  sw    y>A+/+=+=+?@aQqT@M@>Goo>O>U>U>W>]>]>_`GNN=!4`abcc	 A`   BBc                    t        |      dkD  rq| j                         D cg c]  }|d   	 }}|j                         j                         j	                         D cg c]  }t        j                  ||       c}d   S g S c c}w c c}w r/   )rg   r   r   r   r   r   r   )r   r   r   current_dirss       r    
match_dirszPhotoCard.match_dirsn  sw    y>A*.*B*B*DEQAaDELE=F__=N=T=T=V=\=\=^_GNN<3_`abb	 F_r   c                 <    t        j                  |      d   }|y|S )Nr   zunknown/unknown)	mimetypes
guess_type)r   filenamer   s      r    classify_filezPhotoCard.classify_filet  s$      *1-9$r"   c                 
   | j                  d       d}	 t        |d      }t        j                  ||j	                               }|j                          | j                  d|       |S # | j                  d|       |c cY S xY w)Ncpr   w)rN   r   r   r   filenor5   rR   )r   r   
local_filer   totalr   s         r    r   zPhotoCard.cp{  ss    T"	Z%AKKahhj1EGGItY/L tY/Ls   A A) )Bc                    d\  }}| j                  d       t        j                         }	 |D ]  }| j                  ||d      }	|rf |t        j                  j                  | j                         |      t        j                  j                  t        j                         |      |	       ||	z  }|st        j                  |        t        j                         }
|
|z
  }|r| j                  ddd       | j                  d       ||fS # |r| j                  ddd       | j                  d       ||fc cY S xY w)Nr   r   cp_multipleFTr   )rN   timer   ospathr]   pwdgetcwdr   rmr   rR   )r   filelistremove_after_copycp_status_callbackrm_status_callbackdeltar   t1r   r2   t2s              r    r   zPhotoCard.cp_multiple  s   u]+YY[	" #wwq!U+%&rww||DHHJ'BBGGLLQSQZQZQ\^_D`bfg %KKN# BrEE c5)}-5>! !c5)}-5>!s   BD 40D -D=c                    | j                          d\  }}| j                  d       t        j                         }	 |D ]  }|j                  d      d d }	|j                  d      d   }
|	D ]  }| j	                  |d        | j                  |
|
d      }|: ||t        j                  j                  t        j                         |
      |       ||z  }|rt        j                  |
       | ||       | j	                  dd        t        j                         }||z
  }| j                          | j                  d       ||fS # | j                          | j                  d       ||fc cY S xY w)Nr   cp_list/F)save_wdrN   r   r   cdr   r   r   r]   r   r   r   
restore_wdrR   )r   r   r   r   r   r   r   r   r   	path_listr   pr2   r   s                 r    r   zPhotoCard.cp_list  sS   uY'YY[	" $GGCL"-	773<+" &AGGAu%& wwx59%1&q"'',,ryy{H*MtT$KK))5*1-U#+$. BrEE OOy)5>! OOy)5>!s   C(E	 	(E3c                     d}| j                  d       	 t        j                  ||      }| j                  d       |S # | j                  d       |c cY S xY w)Nr   cp_fd)rN   r   r   rR   )r   r   fdr   s       r    r   zPhotoCard.cp_fd  sT    W%	KKb)Ew'L w'Ls	   > Ac           	         d}| j                          | j                  d       d}t        j                         }|D ]h  }|r|\  }	}
}}|	j                  d      }|d d }|d   }| j	                  dd       |k |t
        j                  j                  | j                         |      t
        j                  j                  t
        j                         |      d      rd} nt        |      dkD  r|D ]  }| j	                  |d        t
        j                  j                  t
        j                  j                  t
        j                         |            r|d}	 t
        j                  j                  t
        j                  j                  t
        j                         |d|z  z               sn|d	z  }\|| j                  ||d|z  z   d      z  }n|| j                  ||d      z  }|j |t
        j                  j                  | j                         |      t
        j                  j                  t
        j                         |      |
      rd} nP|r |4 |t
        j                  j                  | j                         |             | j                  |dd       k t        j                         }| j                  d       | j                  dd
d       | j!                  d       |||z
  |fS )NFunloadr   r   r   Tr   z (%d)r   r   )r   rN   r   r   r   r   r   r]   r   r   rg   existsr   r   r   r   rR   )r   unload_listr   r   dont_removewas_cancelledr   r   r   r   r2   typsubtypr   dirsr   r   rw   r   s                      r    r   zPhotoCard.unload  sc   X&YY[ +	4A *+'dCJJsO"vR5U#%1)"'',,txxz8*L,.GGLLh,OQRT(,t9q=! *5)* 77>>"'',,ryy{H"EFA!ww~~bggll299;SZ]^S^H^._`!Q	  TWWXx'A+/EuMME TWWXx??E%1)"'',,txxz8*L,.GGLLh,OQUW(,")5*277<<
H+MNGGHeU3W+	4\ YY[c5!8$r"u},,r"   c                 D    | j                         }| j                  |      S r+   )tree_PhotoCard__build_unload_list)r   r   s     r    get_unload_listzPhotoCard.get_unload_list  s    yy{''--r"   c                    |g }t        j                         }|D ]  }t        ||         t        i       k(  r8|j                  |       | j	                  ||   ||       |j                          U| j                  |      j                  d      \  }}|dv s}|j                         }dj                  dj                  |      |g      }|j                  |||   ||f        |S )Nr   )imageaudiovideo)r   r?   typepushr   popr   r   as_listr]   append)	r   r   r   outr   r   r   r   r   s	            r    __build_unload_listzPhotoCard.__build_unload_list  s    <C;;=D 
	=ADG}R(		!((a$<
"00399#>V55A88SXXa[!$45DJJd1gsF;<
	= 
r"   c                 *    t        j                         S r+   )r   infor,   s    r    r   zPhotoCard.info)  s    }}r"   c                 t   | j                  d       	 t        j                  |      }|rf|dk(  r| j                  j	                          n3|j                  d      }|D ]  }| j                  j                  |        | j                  ddd       | j                  d|       y # | j                  d|       w xY w)Nr   r   Tr   F)	rN   r   r   r@   r   r   r   r   rR   )r   r   r   statr   s        r    r   zPhotoCard.cd-  s    T"	0;;t$D3;NN((*  ::c?D! /++A./ c5) tY/DtY/s   A=B# #B7c                    t        | j                  j                               dk(  r| j                  d|      S | j                  j	                          | j                  d       	 t        j                  d       | j                  j                         D ]  }t        j                  |        | j                  ddd       | j                  d|       y # | j                  d|       w xY w)Nr   r   cdupTr   F)	rg   r@   r   r   r   rN   r   r   rR   r   r   r   s      r    r   zPhotoCard.cdup@  s    t~~%%'(A-773	**V$	2KK^^++- A GGD#u%vy1Dvy1s   %AC C(c                     | j                          	 t        j                  |      }|r| j                  ddd       | j	                  |       |S # | j	                  |       c cY S xY w)NTr   F)rN   r   r   r   rR   )r   r   refresh_dirr   rs        r    r   zPhotoCard.rmP  s^    	D!Ac5)y)H y)Hs   *A A'c                 d   t         j                  d       | j                  d       	 t        j                  | j
                  | j                        }t        j                         }|d   | _        t         j                  d|z         |dk(  rL| j                  r| j                          d| _
        t        j                  d       | j                  ddd	       nd	| _
        t        t              	 | j                  r| j                  d       y y # | j                  r| j                  d       w w xY w)
NzMounting photocard...mount   zstat=%dr   Tr   r   F)rZ   r[   rN   r   r   rx   r~   r   rH   r^   rC   r   r   Error'ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATIONrR   )r   r   	disk_infos      r    r   zPhotoCard.mount[  s    		)*W%	,>>$**dkk:D I!*1DIIi$&'qy%% %%'%)"C c5) &+"CDD	 * !!""7+ "t!!""7+ "s   CD  D/c                 Z    ddj                  | j                  j                               z   S Nr   )r]   r@   r   r,   s    r    r   zPhotoCard.pwdy  s#    SXXdnn446777r"   c                 H    | j                   j                         d d  | _        y r+   )r@   r   rD   r,   s    r    r   zPhotoCard.save_wd}  s    //1!4r"   c                 n    | j                  d|       | j                  D ]  }| j                  ||        y r   )r   rD   r   s      r    r   zPhotoCard.restore_wd  s1    Y 	"AGGAy!	"r"   c                     | j                  d       i }	 | j                          | j                         }| j                  d       | j	                  d       |S # | j	                  d       |c cY S xY w)Nr   F)rN   r   _PhotoCard__treer   rR   )r   dir_trees     r    r   zPhotoCard.tree  sd    V$	LLN{{}HOOE"v&O v&Os   1A A1c                 r   |i }t        j                  d       t        j                         D ]  }|d   j                         }| j                  | j	                          |dvs7|d   dk(  r@| j                  |d       i ||<   | j                  ||         ||<   | j                  d       |d   ||<    |S )Nr   r   ).z..r   r   Fr   )r   r   r   r   rI   r  r   )r   _PhotoCard__dr   fnames       r    __treezPhotoCard.__tree  s    ;CKK 	&AaDJJLE}}(K'Q43;GGE5)!#CJ!%SZ!8CJIIe$ "#1CJ	&  
r"   c                    i }| j                  d       d }	 t        | |      }t        j                  |      }||j	                          | j                  d       |S # ||j	                          | j                  d       |c cY S xY w)Nget_exif)rN   r   r   process_filer5   rR   )r   r   	exif_infopcfs       r    r  zPhotoCard.get_exif  s    	Z(	d+C))#.I		z* 		z*s   !A (Bc                    i }| j                  d       | j                          	 |j                  d      d d }|j                  d      d   }|D ]  }| j                  |d        t	        | |      }t        j                  |      }| j                  d       |j                          | j                  d       |S # | j                  d       j                          | j                  d       |c cY S xY w)Nget_exif_pathr   r   F)
rN   r   r   r   r   r   r  r   r5   rR   )r   r   r  r   r   r   r  s          r    r  zPhotoCard.get_exif_path  s    	_-	

3,Izz#r*H "5!"  h/C))#.I OOE"IIK/ OOE"IIK/s   A"B; ;7C4c                     | j                  d       	 | j                  |d      }| j                  d       |S # | j                  d       c cY S xY w)Nrk   r   )rN   rx   rR   )r   rk   r3   s      r    rk   zPhotoCard.sector  sO    X&	::fa(Dx(K x(Ks	   8 Ac                 :    t        j                          d| _        y r$   )r   umountrC   r,   s    r    r  zPhotoCard.umount  s    "r"   c                 F    d| _         | j                  j                          y )NT)rJ   r   	openPCardr,   s    r    r^   zPhotoCard.open_channel  s    "r"   c                 F    d| _         | j                  j                          y r$   )rJ   r   
closePCardr,   s    r    rP   zPhotoCard.close_channel  s    # r"   )NNN)rV   )rV   T)Tr   T)T)NN)NNF)TTr+   ).r6   r7   r8   r!   rN   rR   rT   rx   r~   ri   r   r   r   r   r   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rk   r  r^   rP   r9   r"   r    r;   r;   n   s    $2!!Tl3l( )8*c"<<	"6$"P:-z.
&0&2 	,<85"	0,# !r"   r;   )r`   r   r   r   r   base.g
base.codesbaser   r   r   r   ImportErrorr   getenvrZ   rj   sysexitACKr{   rb   rz   rf   r   r   r1   r   r;   r9   r"   r    <module>r!     s   *        $ $ 	 	 k>  } 4 4nq	! q	!Y  99]#		RSs   A 8BB