
    =	fQ                        d Z dZdZdZ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
Z
ddlZddlmZmZ ddl ddl ddlmZmZmZmZ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 Zddl!m"Z" er	 ddl#m$Z$m%Z%m&Z&m'Z'm(Z( nddl*m$Z$m%Z%m&Z&m'Z'm(Z( dZ+ddl0Z0 e0jb                  de2       dZ3d\  a4a5da6da7d\  a8a9a:i Z; G d de<      Z= G d dej|                  j~                        Z@d ZAd ZBd ZCd ZDd ZEd ZFd  ZGd*d!ZHd" ZId*d#ZJd$ ZKd*d%ZLd& ZMd' ZNd( ZO	 	 	 dd)ZPy#  ddl)m$Z$m%Z%m&Z&m'Z'm(Z( Y xY w# e,$ r( e-j]                  d       dZ+ ej^                  d       Y w xY w)+z12.0z9Services and Status System Tray dBus Child/Parent ProcesshpssdzProvides persistent data and event services to HPLIP client applications. Required to be running for PC send fax, optional in all other cases.    N)loadsHIGHEST_PROTOCOL)*)utilsdevicestatusmodelsmoduleservicesos_utils)PY3)to_bytes_utf8)lowlevel	SystemBus
SessionBus)DBusGMainLoop)MainLooptimeout_addthreads_initio_add_watchIO_INTzAdbus failed to load (python-dbus ver. 0.80+ required). Exiting...F   ignorei   )NN)NNNc                       e Zd ZddZy)DeviceCachec                     t        j                  t        j                        | _        t        j                  |      | _        i | _        i | _	        i | _
        d| _        d| _        d| _        y )Nr   F)r   
RingBufferprophistory_sizehistoryr
   normalizeModelNamemodelcachefaxesdqbackoff_counterbackoff_countdownpolling)selfr#   s     /usr/share/hplip/hpssd.py__init__zDeviceCache.__init__X   sX    ''(9(9:..u5


 !"    N) )__name__
__module____qualname__r,    r-   r+   r   r   W   s    	r-   r   c                   Z   e Zd Zd Zej
                  j                  ddd      d        Zej
                  j                  ddd      d        Zej
                  j                  dd	d
      d        Z	ej
                  j                  ddd
      d        Z
ej
                  j                  ddd      d        Zej
                  j                  ddd      d        Zej
                  j                  dd	d      dd       Zd Zej
                  j                  ddd      d        Zy)StatusServicec                 Z    t         j                  j                  j                  | ||       y N)dbusserviceObjectr,   )r*   nameobject_paths      r+   r,   zStatusService.__init__f   s    $$T4=r-   com.hplip.StatusServiceszsa(ssisisd))in_signatureout_signaturec                    t         j                  d|z         t                	 t        |    t        |   j                  j                         }t         j                  dt        |      z         |D cg c]  }|j                          c} ||D cg c]  }|j                          c}fS c c}w c c}w # t        $ r |g fcY S w xY w)NzGetHistory('%s')z%d events in history:)	logdebugsend_systray_blipdevicesr!   getlenas_tupleKeyError)r*   
device_urihxs       r+   
GetHistoryzStatusService.GetHistoryj   s    		$z12		;J
 
#++//1AII-A67 !"1QWWY"q 9! 9:: # 9  	$##	$s   	B7 3B-B27CCzsa{ss}c           
      l   t         j                  d|z         t                	 t        |    i }t        |   j                  }t        |j                               D cg c]   }|j                  |t        ||               " c} t         j                  |       ||fS c c}w # t        $ r |i fcY S w xY w)NzGetStatus('%s'))
rA   rB   rC   rD   r&   listkeys
setdefaultstrrH   )r*   rI   tr&   rK   s        r+   	GetStatuszStatusService.GetStatusz   s    		#j01
	#J
 A$''B26rwwy/BQQ\\!SAZ(BIIaL?" C  	$##	$s   	B# %B#B32B3ssiic                     t         j                  d|||fz         t        |      t        k(  r|t        |   j
                  |<   |S y)Nz!SetCachedIntValue('%s', '%s', %d)rA   rB   check_deviceERROR_SUCCESSrD   r$   r*   rI   keyvalues       r+   SetCachedIntValuezStatusService.SetCachedIntValue   sE    		5S%8PPQ
#}4-2GJ%%c*Lr-   ssc                     	 t         |   j                  |   }t        j	                  d|||fz         |S # t        $ r d}Y *w xY w)NrW   z$GetCachedIntValue('%s', '%s') --> %drD   r$   rH   rA   rB   r*   rI   r\   rets       r+   GetCachedIntValuezStatusService.GetCachedIntValue   sR    	*%++C0C 			8JS;QQR
	  	C	s   5 AAsssc           	          t         j                  d|d|d|d       t        |      t        k(  r|t        |   j
                  |<   |S y)NzSetCachedStrValue('', 'z')r.   rX   r[   s       r+   SetCachedStrValuezStatusService.SetCachedStrValue   s?    		:sERS
#}4-2GJ%%c*Lr-   c                     	 t         |   j                  |   }t        j	                  d|d|d|       |S # t        $ r d}Y -w xY w)Nr.   zGetCachedStrValue('rg   z') --> ra   rb   s       r+   GetCachedStrValuezStatusService.GetCachedStrValue   sL    	*%++C0C 			JSQR
	  	C	s   8 AAssisisdsc                    t         j                  d|||fz         t                |dd||dddf}t        |       t	        |       |r,	 t
        |   j                  ||f    | j                  |||      S t        t
        |   j                  j                               D ]  \  }}||k(  s| j                  |||      c S  |S # t        $ r |cY S w xY w)Nz"CheckForWaitingFax('%s', '%s', %d)r.   r           )rA   rB   rC   rY   show_waiting_faxesrD   r%   check_for_waiting_fax_returnrH   rN   rO   )r*   rI   usernamejob_idrujs          r+   CheckForWaitingFaxz StatusService.CheckForWaitingFax   s    		6*hPV9WWXQ&"c2>Z :&W
#))8V*<= 88XvVV WZ066;;=> O1=<<ZANNO H  s   	C CCc                     t         j                  d||fz         t        |   j                  ||f   j	                         }t        |   j                  ||f= t        |       |S )NzFFax (username=%s, jobid=%d) removed from faxes and returned to caller.)rA   rB   rD   r%   rG   rn   )r*   drs   rt   rr   s        r+   ro   z*StatusService.check_for_waiting_fax_return   s_    		Z^_ab]ccdAJaV$--/AJaV$1r-   ssisisr.   c                 N    t        j                  ||||||      }t        |       y r6   r   Eventhandle_event)r*   rI   printer_name
event_coderp   rq   titleevents           r+   	SendEventzStatusService.SendEvent   s#    Zz8VUZ[Ur-   N)r   )r/   r0   r1   r,   r7   r8   methodrL   rS   r^   rd   rh   rj   ru   ro   r   r2   r-   r+   r4   r4   e   st   > 
\\2Tab; c; 
\\2T\]# ^#  
\\2VYZ [ 
\\2UXY Z 
\\2VYZ [ 
\\2UXY Z 
\\2V`a b0 
\\2Y[\ ]r-   r4   c           
      `   t         st        |       } 	 t        |     t        S # t        $ r t        j                  d| z         	 t        j                  |       \	  }}}}}}}}}	n/# t        $ r# t        j                  d| z         t        cY cY S w xY wt        |      t        | <   Y t        S w xY w)NzNew device: %szInvalid device URI: %s)r   rQ   rD   rH   rA   rB   r   parseDeviceURIErrorERROR_INVALID_DEVICE_URIr   rZ   )
rI   back_endis_hpbusr#   serialdev_filehostzcports
             r+   rY   rY      s    _
1
   	1		"Z/0	,%%j1 JHeS%4T 	,II.;<++	, *%0
	1s3   	" !B-A$#B-$'BB-BB-,B-c                 r   t         | j                     j                  j                         }|r^|d   j                  | j                  k(  rBt
        j                  d       t         | j                     j                  j                  |        yt         | j                     j                  j                  |        y)NrW   z*Duplicate event. Replacing previous event.TF)	rD   rI   r!   rE   r~   rA   rB   replaceappend)r   r!   s     r+   create_historyr      s    e&&'//335G72;))U-=-==		>?  !))11%8  !))007r-   c                 :   | j                   t        k(  rb| j                  t        j                  k(  rDt	        j
                  d      \  }}t        j                  |t        j                        }d}	 t        j                  |t              }|sn%t        j                  ||       |t        |      z  }Bt        j                  d||fz         t        j                  |       t        j                  |       t!        j"                  ||       t$        | j&                     j(                  | j                  | j*                  f<   t-        | j&                         	 t        j.                  dt        j0                         t5        j6                  d| j8                  z  d      \  }}|rt5        j:                  |       t5        j<                  d      }	|	r!t        j>                  jA                  |	d      }	nt        jC                  d	       y t        j                  d
|	d| j8                         t        jD                  t        jF                  |	dd| j8                  z         y t        j                  d       y t        jI                  d       y # t2        $ r Y w xY w)Nzhpfax-)prefixr   TzSaved %d bytes to file %srW   zhp-sendfax-%sz
hp-sendfaxz"Unable to find hp-sendfax on PATH.zRunning hp-sendfax: z --printer=z--printer=%sz=hp-sendfax is running. Waiting for CheckForWaitingFax() call.zNot handled!)%r~   EVENT_FAX_RENDER_COMPLETErp   r   tempfilemkstemposopenO_RDONLYreadPIPE_BUFwriterF   rA   rB   closer   FaxEventrD   rI   r%   rq   rn   waitpidWNOHANGOSErrorr   lock_appr}   unlockwhichpathjoinerrorspawnlpP_NOWAITwarn)
r   	pipe_namefax_file_fdfax_file_namepipe
bytes_readdataok	lock_filer   s
             r+   handle_fax_eventr     s   44$--'%-%5%5X%F"]wwy"++.
774*DHH[$'#d)#J  			-]0KKL

 OOM51 	  !''(FG 	5++,	JJr2::&
 9K9K'KTRILL#;;|,Dww||D,7		>?IItUEWEWXYJJr{{D,!3!335 IIUV 	 9  		s   $J 	JJc                 R   t         |    j                  }t        |      st        j	                  d| z         y t        |      dk(  rt        j	                  d| z         n#t        j	                  dt        |      | fz         |D cg c]  }||   j	                          c} y c c}w )NzNo faxes waiting for %sr   z1 fax waiting for %s:z%d faxes waiting for %s:)rD   r%   rF   rA   rB   )rw   frK   s      r+   rn   rn   ;  s|    
Aq6		+a/0q6Q;II-12II0CFA;>? !!1!!s   B$c           
         t         j                  d|z         dt        d      }}	 t        j                  t        gg t        gd      \  }}}|snRt        j                  t        t              }|sn1t        d      j                  ||g      }|t        |      z  }||k(  rn{t         j                  d|z         ||k(  rt        |      }t        | j                        t        k(  r|j                         t        | j                     _        t#        t%        j&                  | j                  d|j)                  dt*              t,        j.                  dd             t1        | t2               y y y )Nz#Reading %d bytes from hpdio pipe...r   r.   rm   zRead %d byteszstatus-code)rA   rB   r   selectr3r   r   r   r   rF   r   rY   rI   rZ   copyrD   r&   r|   r   r{   rE   STATUS_PRINTER_IDLEr   rp   send_toolbox_eventEVENT_DEVICE_UPDATE_REPLY)	r   bytes_written
total_readr   rr   werK   r&   s	            r+   handle_hpdio_eventr   J  s2   II3mCD-+J
--b2$41a%GGB!%R %%tQi0c!f
&  IIo
*+]"4[(()]:+-779GE$$%(e&6&6}&9:DMM1bR S u&?@ ; #r-   c                     t        j                         } | dk(  rt        j                  d      }|j	                          t        j
                         }ddlm} |j                         }|j                         t        k7  rt        j                  d       nt        j                  d       |j                          t        j                   |t"        j$                         y t        j                  d       y )Nr   z/tmp/pluginInstall.tmp)pluginhandlerzhp-diagnose_pluginzNDevice Plug-in was already installed. Not Invoking Plug-in installation wizardz#Started Plug-in installation wizard)r   forkr   	Sync_Lockacquiregetpid	installerr   PluginHandle	getStatusPLUGIN_INSTALLEDr   executerA   rB   releasekillsignalSIGKILL)child_processlockObj	child_pidr   	pluginObjs        r+   handle_plugin_installr   g  s    '')Mq//":;))+	+!..0	 $4412IIfg
	&..)		78r-   c                     t        j                  d      } | r!t        j                  j	                  | d      } nt
        j                  d       y t
        j                  d| z         t        j                  t        j                  | dd       y )Nzhp-diagnose_queuesz*Unable to find hp-diagnose_queues on PATH.zRunning hp-diagnose_queues: %sz-s)
r   r   r   r   r   rA   r   rB   r   r   )r   s    r+   handle_printer_diagnoser   |  sb    ;;+,Dww||D"67		>?II.$78JJr{{D"6t<r-   c                    	 t        j                  dt         j                         t        j                  d       |g }| j                          | j                  t        k(  rt                y | j                  t        k(  rt                y | j                  rt        | j                        t        k7  ry | j                  t        kD  r$t        j                   | j                        | _        | j                  t"        k  ry t"        | j                  cxk  r	t$        k  rn n| j                  rt'        |       }| j                  t(        t*        t,        t.        t0        fv rnU| j                  t2        t4        t6        t8        t:        t<        t>        t@        tB        tD        tF        tH        tJ        tL        fv r	 stO        |        tQ        | tR               | j                  t<        tB        tH        fv rt                y y tT        | j                  cxk  r	tV        k  r5n n2|r0t        j                  d       tY        |d         }t[        | |       y | j                  t\        k(  rtO        |        y | j                  t^        k(  rtO        |        y | j                  t`        fv rtc        |        y | j                  td        tf        fv rtO        |        y | j                  th        k(  rtk        |d         }tm        | |       y | j                  tn        k(  s| j                  tp        k(  rtO        |        tQ        | tR               y | j                  tr        k(  rKtc        |        tQ        |        tO        |        t        j                  d       tt        jw                          y | j                  t2        t(        fv ry t        jy                  d| j                  z         y # t        $ r Y w xY w)Nr   zHandling event...z	Fax eventr   ExitingzUnhandled event: %d)=r   r   r   r   rA   rB   r~   EVENT_AUTO_CONFIGUREr   EVENT_DIAGNOSE_PRINTQUEUEr   rI   rY   rZ   EVENT_MAX_EVENTr	   MapPJLErrorCodeEVENT_MIN_USER_EVENTEVENT_MAX_USER_EVENTr   EVENT_DEVICE_STOP_POLLINGEVENT_START_MAINT_JOBEVENT_START_COPY_JOBEVENT_START_FAX_JOBEVENT_START_PRINT_JOBEVENT_DEVICE_START_POLLINGEVENT_END_MAINT_JOBEVENT_END_COPY_JOBEVENT_END_FAX_JOBEVENT_END_PRINT_JOB!EVENT_PRINT_FAILED_MISSING_PLUGINEVENT_SCANNER_FAILEVENT_END_SCAN_JOB EVENT_SCAN_FAILED_MISSING_PLUGINEVENT_FAX_JOB_FAILEVENT_FAX_JOB_CANCELEDEVENT_FAX_FAILED_MISSING_PLUGINEVENT_COPY_JOB_FAILEVENT_COPY_JOB_CANCELEDsend_event_to_systray_uir   EVENT_HISTORY_UPDATEEVENT_FAX_MINEVENT_FAX_MAXrQ   r    EVENT_USER_CONFIGURATION_CHANGEDEVENT_SYS_CONFIGURATION_CHANGEDEVENT_DEVICE_UPDATE_REQUESTEDsend_event_to_hpdioEVENT_DEVICE_UPDATE_ACTIVEEVENT_DEVICE_UPDATE_INACTIVEr   intr   EVENT_CUPS_QUEUES_ADDEDEVENT_CUPS_QUEUES_REMOVEDEVENT_SYSTEMTRAY_EXIT	main_loopquitr   )r   	more_args	dup_eventr   r   s        r+   r|   r|     s0   



1bjj! II!"		KKM//44!L)9)9:mK /)!11%2B2BC ..	!1!1	I5I	I&u-I$=$9$8$7$9	$; ;
 !!&@&9&8&7&9&G&8&8&F&8&<&E&9&=&? ?  $U+ 	5"67 ACc  eD   E  E!# E 
%**	;m	;			+	!%		*			=	= 	!'			<	< ' 
		;=	= 	E" 
		8:< 
< ' 
		6	6IaL)5-0 
		4	48H8HLe8e '5"67 
		2	2E"5! '		)			879 
9 			'%*:*::;q  s   $O 	O#"O#c                  L    t        t        j                  ddt                     y )Nr.   )r   r   r{   EVENT_DEVICE_UPDATE_BLIPr2   r-   r+   rC   rC     s    V\\"b2JKLr-   c                 b    | j                         }|||_        |j                  t        d       y )N
systemtray)r   r~   send_via_pipew1r   r~   r   s      r+   r   r     s(    

A!OOB%r-   c                 0    | j                  t        d       y )Nhpdio)r
  w2)r   s    r+   r   r     s    	G$r-   c                 b    | j                         }|||_        |j                  t        d       y )Nzcom.hplip.Toolbox)r   r~   send_via_dbussession_busr  s      r+   r   r     s+     	

A!OOK!45r-   c                 n    |d   dk(  r-|d   dk(  r$t        j                  |d d  }t        ||dd        S y y )N	interfacer<   memberr{      rz   )typargskwdsr   s       r+   handle_signalr  (  sM    K55X'!d2Ah'E48,, 	" 6r-   c                       t        dg| i |S )Nsystemr  r  r  s     r+   handle_system_signalr  0  s    1D1D11r-   c                       t        dg| i |S )Nsessionr  r  s     r+   handle_session_signalr"  4  s    2T2T22r-   c                 V   t         j                  d       t         j                  dt        j                         z         | ||caaat        d      a	t               a	 t        t              a	 t        j(                         at        j/                  t0        ddddd       t*        j/                  t2        ddddd       t        j4                  j7                  dt*              }t9        |d      }t         j                  d       	 t        j;                          y # t        j                  j                   $ r4}t         j#                  d       t%        j&                  d       Y d }~d }~ww xY w# t        j                  j                   $ rw}t        j,                         dk7  r+t         j#                  d	       t%        j&                  d       n*t         j#                  d
       t%        j&                  d       Y d }~|d }~ww xY w# t<        $ r t         j                  d       Y y w xY w)Nzhp-systray(hpssd)zPID=%dT)set_as_default)mainloopz.Unable to connect to dbus system bus. Exiting.r   r   z/Unable to connect to dbus session bus. Exiting.z8Unable to connect to dbus session bus (running as root?)senderdestr  r  r   )sender_keyworddestination_keywordinterface_keywordmember_keywordpath_keywordr<   z/com/hplip/StatusServicezEntering main dbus loop...zCtrl-C: Exiting...)rA   
set_modulerB   r   r   r  r  r   r   	dbus_loopr   r  r   
system_busr7   
exceptionsDBusExceptionr   sysexitr   r  getuidadd_signal_receiverr  r"  r8   BusNamer4   runKeyboardInterrupt)write_pipe1write_pipe2
read_pipe3r   session_namestatus_services         r+   r7  r7  9  s    NN&'IIh$%k:JBBT2I
I	2

oo' ""#7"kf # 6
 ##$9("kf $ 6
 <<''(A;OL"<1KLNII*+(= ??(( 		BC ??(( 99;!IIGHHHQKIIPQHHQK2  (		&'(sC   D /E0 H E-9*E((E-0HA,G??HH('H(r6   )Q__version__	__title____mod____doc__r2  structr   timegetoptr   r   r   pickler   r   base.g
base.codesbaser   r   r	   r
   r   r   r   base.sixextr   r   r7   r   r   r   dbus.servicedbus.mainloop.glibr   gi._gobjectr   r   r   r   r   gi.repository.GLibgobjectdbus_loadedImportErrorrA   r   r3  warningssimplefilterDeprecationWarningr   r.  r  r/  r  r  r  r   rD   objectr   r8   r9   r4   rY   r   r   rn   r   r   r   r|   rC   r   r   r   r  r  r"  r7  r2   r-   r+   <module>rU     s  . G	
 [   	      +   J J J  %440
	d\\ 	UTK    h 2 3 ! 	9

B

& 
wDLL'' wv(	7t"A:9*	=<FM&%6-23
 1(C	dcc  IIQRKCHHQKs*   D1 1D ?D1 D.,D1 1*EE