
    =	f                     J   d dl Z 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	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZmZmZ 	 dd	lmZ 	 d dlZd dlZ ej8                  de       d ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2 G d de	      Z3 G d de4      Z5 G d d ejl                        Z7ddde8d!fd"Z9d Z:dZ;d#Z<d$Z=d%Z>d&Z?d'Z@d(ZAd)ZBd*ZCd+ZDd,ZCd-ZEd.ZFd/ZG G d0 d1ej                        ZIy# e$ r Y w xY w# e$ r ej5                  d
       Y w xY w)2    N)*)
LDIFParser)deviceutilsvcard)cups)BytesIO)to_bytes_utf8to_long
to_unicode   )
coverpagesz!dbus is required for PC send fax.ignore                     	   
                     c                       e Zd Zd Zd Zy)FaxLDIFParserc                 >    t        j                  | |       || _        y N)r   __init__db)selfinputr$   s      /usr/share/hplip/fax/fax.pyr#   zFaxLDIFParser.__init__   s    D%(    c           
      T   |r	 |d   d   }	 |d   d   }	 |d   d   }	 |d	   d   }	 |d   d   }g }	 |d   }|j                  t        d             |D 	cg c]  }	|	s|		 }
}	|rRt        j	                  d|d|ddj                  |
      d|       | j                  j                  ||||||
|       y y y # t         $ r 	 |d   d   }n# t         $ r d}Y nw xY wY w xY w# t         $ r 	 |d   d   }n# t         $ r d}Y nw xY wY w xY w# t         $ r |dz   |z   }Y w xY w# t         $ r8 	 |d
   d   }n*# t         $ r 	 |d   d   }n# t         $ r d}Y nw xY wY nw xY wY ?w xY w# t         $ r 	 |d   d   }n# t         $ r d}Y nw xY wY aw xY w# t         $ r Y iw xY wc c}	w )N	givenNamer   	firstname snlastnamecn facsimiletelephonenumberfax	workphonetitle
departmentouAllImport: name=, fax=z, group(s)=,z, notes=)KeyErrorappendr   logdebugjoinr$   set)r%   dnentryr+   r.   nicknamer2   r4   grpsggroupss              r'   handlezFaxLDIFParser.handle   s'   #!+.q1	" ;q>6 ;q>	"67:gq) DT{ KK
5)*!%+Aa+F+		xY\^a^f^fgm^nprstHeY#vrR c   ## %k 21 5I # "I##  ""$Z03H "!H""  6$s?X56
  "",q/C ""#K03# "!"""  !,/2E E   ,s&  B: C$ D D& E* F F%F%:	C!CC!CC!CC! C!$	D.C76D7DDDD
DD#"D#&	E'0D98E'9	E EE EE EE E'E  E'&E'*	F4E=<F=FF
FFF	F"!F"N)__name__
__module____qualname__r#   rG    r(   r'   r    r       s    4Sr(   r    c                       e Zd Zd Zd Zd ZeZd Zd ZeZ	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)FaxAddressBookc                 2    i | _         | j                          y r"   )_dataloadr%   s    r'   r#   zFaxAddressBook.__init__   s    
 			r(   c                    d| _         t        j                  d k7  rt        j                  j                  t        j                  d      | _         t        j                  j                  | j                         rAt        | j                   d      }t        j                  |      | _
        |j                          y | j                          y y )Nz	/dev/nullz
fab.picklerb)_fabpropuser_dirospathr?   existsopenpicklerP   rO   closesaver%   pickle_files     r'   rP   zFaxAddressBook.load   s    	==D T]]LADI ww~~dii(!$))T2{"KK4tz  "yy{ !r(   c                 
   |D cg c]  }t        |       }	}t        |      t        |      t        |      t        |      t        |      t        |      |	d| j                  t        |      <   | j                          y c c}w )N)namer4   r+   r.   r2   notesrF   )r   rO   r]   )
r%   ra   r4   r+   r.   r2   rF   rb   srD   s
             r'   r@   zFaxAddressBook.set   sr    
 (..!
1..1;D1A-7->1;I1F0:80D+5c?-7->.2(4

:d#$ 			 /s   B c                 Z    || j                   t        |         |<   | j                          y r"   )rO   r   r]   )r%   ra   keyvalues       r'   set_key_valuezFaxAddressBook.set_key_value   s#    ,1

:d#$S)		r(   c                 :    | j                   j                  |d       S r"   )rO   getr%   ra   s     r'   ri   zFaxAddressBook.get  s    zz~~dD))r(   c                 2   	 | j                   |    	 | j                   |    y # t        $ r\ | j                   |   j                         | j                   |<   || j                   |   d<   | j                   |= | j                          Y y w xY w# t        $ r Y y w xY w)Nra   )rO   r;   copyr]   )r%   old_namenew_names      r'   renamezFaxAddressBook.rename
  s    	JJx 

8$ '+zz(';'@'@'B

8$/7

8$V,JJx(			  		s!   B
 " A"BB
	BBc                     g }t        | j                  j                               D ]%  \  }}|d   D ]  }||vs|j                  |        ' |S NrF   listrO   itemsr<   )r%   
all_groupsevrE   s        r'   get_all_groupszFaxAddressBook.get_all_groups  s]    
))+, 	)DAqx[ )J&%%a()	) r(   c                     | j                   S r"   )rO   rQ   s    r'   get_all_recordszFaxAddressBook.get_all_records"  s    zzr(   c                 H    t        | j                  j                               S r"   )rs   rO   keysrQ   s    r'   get_all_nameszFaxAddressBook.get_all_names&  s    DJJOO%&&r(   c                     	 t        | j                  d      }t        j                  | j                  |d       |j                          y # t        $ r t        j                  d       Y y w xY w)Nwbr   )protocolzI/O error saving fab file.)	rZ   rT   r[   dumprO   r\   IOErrorr=   errorr^   s     r'   r]   zFaxAddressBook.save*  sS    	4tyy$/KKK

K!< 	4II23	4s   AA A,+A,c                 2    i | _         | j                          y r"   rO   r]   rQ   s    r'   clearzFaxAddressBook.clear3  s    
		r(   c                 \    || j                   v r| j                   |= | j                          yy)NTFr   rj   s     r'   deletezFaxAddressBook.delete8  s)    4::

4 IIKr(   c                 t    	 t        j                  | j                        j                  S # t        $ r Y yw xY wNr   )rW   statrT   st_mtimeOSErrorrQ   s    r'   last_modification_timez%FaxAddressBook.last_modification_timeA  s2    	77499%... 		s   (+ 	77c                    t        | j                  j                               D ]W  \  }}|d   |v r&||d   vs|d   j                  t	        |             3||d   v s;|d   j                  t	        |             Y | j                          y )Nra   rF   )rs   rO   rt   r<   r   remover]   r%   groupmembersrv   rw   s        r'   update_groupszFaxAddressBook.update_groupsH  s    ))+, 	:DAqyG#(+hK&&z%'89AhK'hK&&z%'89	: 			r(   c                     t        | j                  j                               D ]*  \  }}||d   v s|d   j                  t	        |             , | j                          y rq   )rs   rO   rt   r   r   r]   )r%   r   rv   rw   s       r'   delete_groupzFaxAddressBook.delete_groupS  sU    ))+, 	6DAq(#("":e#45	6 			r(   c                     g }t        | j                  j                               D ]  \  }}||d   v s|j                  |         |S rq   rr   r   s        r'   group_memberszFaxAddressBook.group_membersZ  sK    ))+, 	"DAq(#q!	" r(   c                     | j                  |      }g }|D ]  }||vs|j                  |        | j                  |||z          y r"   r   r<   r   )r%   r   r   r   new_group_membersms         r'   add_to_groupzFaxAddressBook.add_to_groupb  sU    **51 	,A%!((+	, 	5-2C"CDr(   c                     | j                  |      }g }|D ]  }||vs|j                  |        | j                  ||       y r"   r   )r%   r   remove_membersr   r   r   s         r'   remove_from_groupz FaxAddressBook.remove_from_groupl  sP    **51 	,A&!((+	, 	5"34r(   c                 n    | j                  |      }| j                  |g        | j                  ||       y r"   )r   r   )r%   	old_group	new_groupr   s       r'   rename_groupzFaxAddressBook.rename_groupv  s2    $$Y/9b)9g.r(   c                    	 t        |d      j                         }t        j                  ||       t	        t        |d      |       }|j                          | j                          y# t        $ r}d|j                  fcY d }~S d }~ww xY w)NrTr,   F)	rZ   readr=   debug_blockr    parser]   
ValueErrormessage)r%   filenamedataparserrv   s        r'   import_ldifzFaxAddressBook.import_ldif|  sq    	$#&++-DOOHd+"4##6=FLLNIIK 	$!))##	$s   A&A) )	B
2B?B
B
c                    t        |d      j                         }t        j                  ||       t	        j
                  t	        j                  t	        j                  |                  D ]C  }t        j                  |       |d   sd}t        dd      D ])  }|dk(  rd}nd|z  }	 ||    d||   d	   v s!||   d
   } n |j                  dd      }|r|g}n%|j                  dd      j                  d      }|sg }|j                  t        d             |D cg c]  }|s|	 }	}|d   }
|j                  dt        d            }t        j                  d|
d|ddj                  |	      d|       | j!                  |
t        d      t        d      t        d      ||	|       F y# t        $ r Y  w xY wc c}w )Nr   ra   r,   r   i'  phonezphone%dr2   typenumberorganisation
categories;r7   rb   r8   r9   z
 group(s)=r:   z notes=r   )rZ   r   r=   r   r   VCardsVFileopentextfiler>   ranger;   ri   splitr<   r   r?   r@   )r%   r   r   cardr2   xrc   orgorF   ra   rb   s               r'   import_vcardzFaxAddressBook.import_vcard  s   Hc"'')$'LLU-?-?-I!JK "	cDIIdOF|q$ "AAv#%M"Q !DGFO3"&q'("3C!" hh~r2%C((<4::3?C 

:e,-%(.A!..F|*R.9		DRUWZW_W_`fWginopz"~z"~z"~sTZ\abE"	cH / $   /s   *F4 G(G4	G GN)rH   rI   rJ   r#   rP   r@   insertrg   ri   selectro   rx   rz   r}   r]   r   r   r   r   r   r   r   r   r   r   r   rK   r(   r'   rM   rM      sz    " F
* F'4
E5/	$(r(   rM   c                       e Zd ZdddedfdZd Zd Z eee      Zd Z	d Z
 ee
e	      Zd Zd	 Zd
 Zd Z	 	 	 ddZd Zd Zy)	FaxDeviceNFc                     t         j                  j                  | ||d ||       d | _        d | _        || _        |s,t        j                         }|j                  dd      | _	        y d | _	        y )Nzcom.hplip.StatusServicez/com/hplip/StatusService)
r   Devicer#   send_fax_threadupload_log_threadfax_typedbus
SessionBus
get_objectservice)r%   
device_uriprinter_namecallbackr   disable_dbussession_buss          r'   r#   zFaxDevice.__init__  sh    
 	tZ#X|	=  $!% //+K&112KMghDLDLr(   c                     t         r"   AttributeError)r%   nums     r'   setPhoneNumzFaxDevice.setPhoneNum      r(   c                     t         r"   r   rQ   s    r'   getPhoneNumzFaxDevice.getPhoneNum  r   r(   c                     t         r"   r   rj   s     r'   setStationNamezFaxDevice.setStationName  r   r(   c                     t         r"   r   rQ   s    r'   getStationNamezFaxDevice.getStationName  r   r(   c                     t         r"   r   rQ   s    r'   setDateAndTimezFaxDevice.setDateAndTime  r   r(   c                     t         r"   r   rQ   s    r'   	uploadLogzFaxDevice.uploadLog  r   r(   c                     t         r"   r   rQ   s    r'   isUploadLogActivezFaxDevice.isUploadLogActive  r   r(   c                     t         r"   r   rQ   s    r'   waitForUploadLogThreadz FaxDevice.waitForUploadLogThread  r   r(   c
                     t         r"   r   )
r%   phone_num_listfax_file_listcover_messagecover_re
cover_funcpreserve_formattingr   update_queueevent_queues
             r'   	sendFaxeszFaxDevice.sendFaxes  s
     r(   c                 P    | j                   | j                   j                         S y)NF)r   is_aliverQ   s    r'   isSendFaxActivezFaxDevice.isSendFaxActive  s&    +''0022r(   c                     | j                   7| j                   j                         r	 | j                   j                          y y y # t        $ r Y y w xY wr"   )r   r   r?   KeyboardInterruptrQ   s    r'   waitForSendFaxThreadzFaxDevice.waitForSendFaxThread  sU    +  ))+$$))+ , ,
 % s   A 	AAr,   r,   NFr,   NN)rH   rI   rJ   FAX_TYPE_NONEr#   r   r   property	phone_numr   r   station_namer   r   r   r   r   r   r   rK   r(   r'   r   r     su    "&T'# & k2I NN;L SUKM15r(   r   Fc                    |t         k(  r| e|ct        j                         }|D ];  }|j                  j	                         |j	                         k(  s/|j
                  }  n t        t              | t        j                  |       }|d   }t        j                  d|z         |t        t        fv rddlm}  || ||||      S |t         k(  rddlm}	  |	| ||||      S |t&        k(  rddlm}
  |
| ||||      S |t,        k(  rddlm}  || ||||      S |t2        k(  rddlm}  || ||||      S |t8        k(  rdd	lm}  || ||||      S t        t>              )
Nzfax-typezfax-type=%dr   )PMLFaxDevice)SOAPFaxDevice)LEDMSOAPFaxDevice)MarvellFaxDevice)LEDMFaxDevice)CDMFaxDevice) r   r   getPrintersra   lowerr   ErrorERROR_DEVICE_NOT_FOUNDr   queryModelByURIr=   r>   FAX_TYPE_BLACK_SEND_EARLY_OPENFAX_TYPE_BLACK_SEND_LATE_OPENpmlfaxr   FAX_TYPE_SOAPsoapfaxr   FAX_TYPE_LEDMSOAPledmsoapfaxr   FAX_TYPE_MARVELL
marvellfaxr  FAX_TYPE_LEDMledmfaxr  FAX_TYPE_CDMcdmfaxr  'ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATION)r   r   r   r   r   printerspmqr   r   r   r  r  r  s                 r'   getFaxDevicer    sd   
 = ,":'')H 466<<>\%7%7%99!"J4
 233!''
3B*~HIImh&'24QRR(Jh,WW	]	"*Zx<XX	&	&2 \8X|\\	%	%0
L(Hl[[	]	"*Zx<XX	\	!(Jh,WW ;<<r(            (   2   <   F   P   Z   d   n   x      c                   t    e Z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ddZd Zd Zd Zd Zy)FaxSendThreadNc                    t         j                  j                  |        || _        || _        || _        || _        |
| _        || _        || _	        || _
        || _        |	| _        t               | _        d| _        d| _        || _        i | _        d| _        g | _        d | _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nr,   Fr   )	threadingThreadr#   devr   r   r   r   r   r   r   r   current_printerr	   streamprev_updateremove_temp_filer   resultscover_page_presentrecipient_file_listfjob_hort_dpijob_vert_dpijob_page_sizejob_resolutionjob_encoding)r%   r-  r   r   r   r   r   r   r   r   r   r   s               r'   r#   zFaxSendThread.__init__G  s     	!!$',*(&* $+i %#6 "'#% r(   c                    d| _         t        j                  | j                         | j                  D ]|  }|\  }}}}}|dk(  rd| _         t        j                  d       n9| j                  j                  |dd|f       t        j                  d||fz         | j                         swt        }~ t        j                  | j                         | j                         rt        }|S )NFzapplication/hplip-fax-coverpageTzSkipping coverpageapplication/hplip-faxHP Faxz+Processing pre-rendered file: %s (%d pages))r3  r=   r>   r   rendered_file_listr<   check_for_cancelSTATE_ABORTED)r%   statefax_filefax_file_namefax_file_typefax_file_descfax_file_titlefax_file_pagess           r'   
pre_renderzFaxSendThread.pre_renderg  s     #(		$$$% ** 	&H19/M=- AA*.'		./ ''..?Vn0. / 		G"N34 5 $$&%#	&& 			$))*  "!Er(   c                 L   | j                   d d  | _        t        j                  d       d| _        t        j                  | j                         d}| j                  D ]  }|d   }t        j                  d|z         t
        j                  j                  |      rtt        | j                  |<   t        |d      }|j                  t              }| j                  |      \
  }}}	}
}}}}}}|dk7  r/t        j                  d       t        | j                  |<   t         }|s,|
||||f\  | _        | _        | _        | _        | _        |dz  }n|| j"                  |
k7  s<| j$                  |k7  s-| j&                  |k7  s| j(                  |k7  s| j*                  |k7  r1t        j                  d|z         t,        | j                  |<   t         }t        j                  d	|||	|
||||fz         | xj                  |	z  c_        |j/                          n3t        j                  d
|z         t0        | j                  |<   t         } n| j3                         st4        } n | j6                  r| xj                  dz  c_        t        j                  d| j                  z         |S )NzCounting total pages...r   z'Processing file (counting pages): %s...rS      hplip_g3Invalid file header. Bad magic.r   z!Incompatible options for file: %s>Magic=%s Ver=%d Pages=%d hDPI=%d vDPI=%d Size=%d Res=%d Enc=%dzUnable to find HP Fax file: %szTotal fax pages=%d)r>  r4  r=   r>   job_total_pagesrW   rX   rY   ERROR_SUCCESSr2  rZ   r   FILE_HEADER_SIZEdecode_fax_headerr   ERROR_FAX_INVALID_FAX_FILESTATE_ERRORr6  r7  r8  r9  r:  ERROR_FAX_INCOMPATIBLE_OPTIONSr\   ERROR_FAX_FILE_NOT_FOUNDr?  r@  r3  )r%   rA  irB  rC  fax_file_fdheadermagicversiontotal_pageshort_dpivert_dpi	page_size
resolutionencoding	reserved1	reserved2s                    r'   count_pageszFaxSendThread.count_pages  su   #'#:#:1#= 		+, 		$**+00 7	H$QKMII?-OP ww~~m,.;]+"=$7$))*:; ..v6?wXx)Y K'II?@2LDLL/'E !(Iz8K?D%t'8$:L+T-> FA((H4))X5**i7++z9))X5		"E"UV6T]3 + 		Z ';#Y
HFF G $$3$!!# 		:]JK.F]+#$$&%o7	t ""  A% 		&)=)==>r(   c                 b    	 t        j                  d|      S # t         j                  $ r Y yw xY w)N>8sBIHHBBBII)
re  re  re  re  re  re  re  re  re  structunpackr   r%   rW  s     r'   rP  zFaxSendThread.decode_fax_header  s.    	:==88|| 	:9	:    ..c                 b    	 t        j                  d|      S # t         j                  $ r Y yw xY w)N>IIIIII)re  re  re  re  re  re  rf  ri  s     r'   decode_page_headerz FaxSendThread.decode_page_header  s.    	*==F33|| 	*)	*rj  c                 r   | j                   dkD  rt        }nt        }| j                  rt        j                  d|d   z         | j                  |      \  }}|rt        }|S |st        }|S | j                  j                  d|dddf       t        j                  d|z         t        | j                  |<   |S )	Nr   z%Creating cover page for recipient: %sra   r   r<  r=  
Cover PagezCover page G3 file: %s)rM  STATE_MERGE_FILESSTATE_SINGLE_FILEr3  r=   r>   render_cover_pager@  rR  r4  r   rN  r2  )r%   	recipientrA  rB  canceleds        r'   
cover_pagezFaxSendThread.cover_page  s    !#%E%E""II=	&@QQR!%!7!7	!BHh%  #  ((//H>U4<l4L M 		2X=>)6X&r(   c                 ~   t         }t        j                  d       | j                  d   d   | _        	 t        | j                  d      }|j                  t              }| j                  |      \
  }}}}}}	}
}}}t        | j                  | j                  <   |dk7  r8t        j                  d       t        | j                  | j                  <   t        }t        j                  d||||||	|
|fz         |j                          |S # t        $ r, t        j                  d| j                  z         t        }Y |S w xY w)NzProcessing single file...r   rS   rJ  rK  rL  zUnable to open fax file: %s)STATE_SEND_FAXr=   r>   r4  r5  rZ   r   rO  rP  rN  r2  r   rQ  rR  r\   r   )r%   rA  f_fdrW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  s                 r'   single_filezFaxSendThread.single_file  s)   		-.))!,Q/	%D
 YY/0F >B=S=STZ=[;E7K8YHi#0DLL #		;<'ATVV$#IIVg{Hh *h88 9 JJL-  	 II3dff<=E( -	 s   D 1D<;D<c                    t         j                  ddz         t         j                  | j                         d| _        d}d}d}| j                  ro	 t        j                         \  }| _        t        j                  |t        |             | j                  D ]  }|d   }t         j                  d|z         | j                  dz   | _        t        |d	      5 }	 t        j                  ||j                                d d d        | j                         rt        } n4t         j                  d
       | j!                  t"        |df       |dz   } t         j                  d       t        j                  |t        |             t        j$                  |       t         j                  d| j                  z         |S |S # t        $ r}	t         j                  |	       Y d }	~	d }	~	ww xY w# 1 sw Y   xY w#  t&        }Y |S xY w)Nz"%s State: Merge multiple CDM files********************Ts      As   IBr   r   Processing file: %s...rS   zWritting to queues...r,   zadding footer...Total pages=%d)r=   r>   r4  r1  rM  r   make_temp_filer5  rW   write	bytearrayrZ   r   	Exceptionr?  r@  write_queueSTATUS_PROCESSING_FILESr\   rR  )
r%   rA  HeaderSrtSessionAndOpenDataSrcFooterEndSessionAndCloseDataSrcjob_page_numrx  rB  rC  infileinsts
             r'   merge_cdm_fax_filesz!FaxSendThread.merge_cdm_fax_files  s   		6&AB		$**+ $)|&*5'$$335dfy)GHI $ 8 8 4H$,QKMII6FG+/+?+?!+CD(mD1 ,V,HHT&++-8,
 ,,. -II56$$&=|R%PQ#/!#3L4 		,-y)HIJ		*T-A-AAB u  ) ,IIdOO,, ,$#sJ   BG: G.$G B?G: 	G+G&!G.&G++G..G7	3G: :Hc                    t         j                  ddz         t         j                  | j                         t         j                  d       d| _        | j                  rt        j                         \  }| _        t         j                  d| j                  z         t        j                  ddt        d      | j                  | j                  | j                  | j                  | j                  | j                  t        d	      t        d	            }t!        j"                  ||       d}| j                  D ]  }|d	   }t         j                  d
|z         | j$                  |   t&        k(  rt)        |d      }|j+                  t,              }| j/                  |      \
  }	}
}}}}}}}}|	dk7  rt         j1                  d       t2        } n`t         j                  d|	|
||||||fz         t5        |      D ]  }|j+                  t6              }| j9                  |      \  }}}}}}|dk(  r t         j1                  d       |t2        z
    nt        j                  d|||||t        d	            }t!        j"                  ||       | j;                  t<        |df       t         j                  d|||||fz         t!        j"                  ||j+                  |             |dz  } |j?                          | jA                         stB        } nt         j1                  d|z          t!        j>                  |       t         j                  d| j                  z         |S )Nz%s State: Merge multiple filesr{  zMerging g3 files...TzTemp file=%srd  rJ  r   r   r|  rS   rK  rL  re  zPage header errorrl  r,   z%Page=%d PPR=%d RPP=%d BPP=%d Thumb=%szSkipping file: %sr}  )"r=   r>   r4  r1  rM  r   r~  r5  rg  packr   r6  r7  r8  r9  r:  rW   r  r2  rN  rZ   r   rO  rP  r   rR  r   PAGE_HEADER_SIZErm  r  r  r\   r?  r@  )r%   rA  rx  r   r  rB  rC  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r  page_numpprrppbytes_to_readthumbnail_bytess                            r'   merge_fileszFaxSendThread.merge_files:  s   		2f=>		$**+		'( $ //1LD$&IIntvv-.;;~{GAJH\H\!!4#4#4d6H6H##T%6%6
GAJ(D
 HHT4 L 44 1 (		2]BC<<.-?"&}d";K(--.>?F FJE[E[\bEcCE7K8Y"Hi+		"CD +II^$g{HhPY[egopq r #;/ *!,!1!12B!C !33F; V#sM?I $r>II&9:!K/!!'Yc3P]_npwxypz!{v.((*A<QS)TU		"I#+S#}o"V#W X {'7'7'FG$))*,  %%',,. - II1MABc1f HHTNII&)=)==>r(   c              #   6   K   | j                   D ]  }|  y wr"   )r   r%   as     r'   next_recipient_genz FaxSendThread.next_recipient_gen  s      $$ 	AG	   c              #   6   K   | j                   D ]  }|  y wr"   )r4  r  s     r'   next_file_genzFaxSendThread.next_file_gen  s      )) 	AG	r  c                    d}d}d}d}t        j                          |dv rt        j                  d       |dkD  rt        j                  d|z         |rt        j                  d       t        j                  | j                  ||      }	t        j                          t
        j                  d	|	z         d}
t        j                  d       d}d
}t        j                         dz   }t        j                         |k  rt
        j                  dt        | j                  j                        z         t        | j                  j                  | j                  j                  t        j                   |	            }t#        |d         }t
        j                  d|z         |r	 |d
fS | j%                         r.t
        j'                  d|	z         t        j(                  |	       yt        j                  d       t        j                         |k  rt
        j'                  d|	z         t        j(                  |	       y)NTr,   r   r   )zapplication/x-cshellzapplication/x-perlzapplication/x-pythonzapplication/x-shellzapplication/x-shz
text/plainprettyprintznumber-up=%dzpage-ranges=1z	Job ID=%dFg     r@zWaiting for fax... type =%sr   zFax file=%sz%Render canceled. Canceling job #%d...)r,   Tz3Timeout waiting for rendering. Canceling job #%d...)r,   F)r   resetOptions	addOption	printFiler.  r=   r>   timesleepr   r-  r   rs   r   CheckForWaitingFaxrU   usernamestrr?  r   	cancelJob)r%   rX   r4   	mime_typeforce_single_page	all_pages
page_rangepage_setnupsent_job_idjob_idrB  completeend_timeresults                  r'   render_filezFaxSendThread.render_file  s   	
 ( ( NN=)7NN>C/0NN?+nnT%9%94G		++,

199;&iikH$II3D9L9L4MMN$,,99$((:M:Mt}}^ijkF6!9~HIImh./  $$&		AKOP{+JJqM! iikH$& IIKkYZNN;'r(   c                 &   d}| j                   j                         rZ	 | j                   j                  d      }|d   t        k(  rd}t        j                  d       | j                   j                         rZ|S # t        j                  $ r Y |S w xY w)NFr   TzCancel pressed!)r   qsizeri   EVENT_FAX_SEND_CANCELEDr=   r>   QueueEmpty)r%   rt  events      r'   r?  zFaxSendThread.check_for_cancel  s    $$&((,,Q/866#HII/0 $$&  ;; s   >A9 9BBc                 6   t         j                  d       t        j                          | j	                  t
        j                  | j                  |d   d|d   | j                  t        j                  dd      | j                  t        j                  dd      | j                  | j                  | j                        }t         j                  d|z         | j                  |d	d
d      \  }}	 t        j                   |       ||fS # t"        $ r Y ||fS w xY w)NzCreating cover page...ra   r,   r2   voice_phoneemail_address)r]  rZ  recipient_namerecipient_phonerecipient_faxsender_namesender_phone
sender_faxsender_email	regardingr   r   zPDF File=%sro  zapplication/pdfT)r  )r=   r>   	user_confr   r   r   PAGE_SIZE_LETTERrM  r  ri   r  r   r   r   r  rW   r   r   )r%   r  pdfrB  rt  s        r'   rr  zFaxSendThread.render_cover_page  s	   		*+ 	oo
(C(C*.*>*>-.vY.0,-eH*.*:*:+4==+N)-+4==+P(,&*&8&8262J2J  L  			-#%&!--c<AR" . $(	IIcN !!  	!!	s   0D	 		DDc                     | j                   H|| j                  k7  r8| j                   j                  |       t        j                  d       || _        y y y r   )r   r0  putr  r  )r%   r   s     r'   r  zFaxSendThread.write_queue  sK    (W8H8H-H!!'*JJqM&D .I(r(   c                      y r"   rK   rQ   s    r'   runzFaxSendThread.run  s    r(   r   )F)rH   rI   rJ   r#   rH  rb  rP  rm  ru  ry  r  r  r  r  r  r?  rr  r  r  rK   r(   r'   r)  r)  F  sb    UZAE@"JFP:*0@ DIX
:z "F'r(   r)  )JsysrW   r+  r[   r  rg  base.g
base.codes	base.ldifr   baser   r   r   prntr   base.sixextr	   r
   r   r   r,   r   ImportErrorr   r=   r   warningssimplefilterDeprecationWarningSTATUS_IDLEr  STATUS_SENDING_TO_RECIPIENTSTATUS_DIALINGSTATUS_CONNECTINGSTATUS_SENDINGSTATUS_COMPLETEDSTATUS_CREATING_COVER_PAGESTATUS_ERRORSTATUS_BUSYSTATUS_CLEANUPSTATUS_ERROR_IN_CONNECTINGSTATUS_ERROR_IN_TRANSMITTINGSTATUS_ERROR_PROBLEM_IN_FAXLINESTATUS_JOB_CANCELr  RESOLUTION_STDRESOLUTION_FINERESOLUTION_300DPIrO  r  r    objectrM   r   r   r   r  
STATE_DONEr@  STATE_SUCCESS
STATE_BUSYSTATE_READ_SENDER_INFOSTATE_PRERENDERSTATE_COUNT_PAGESSTATE_NEXT_RECIPIENTSTATE_COVER_PAGErq  rp  rw  STATE_CLEANUPrR  r,  r)  rK   r(   r'   <module>r     s  2  	         % %   : :	3    h 2 3       ! "$    v    9SJ 9S|bV bLE EV !t'#/=n 

       ~I$$ ~y  		
  3II123s$   
C> D	 >DD	D"!D"