3
NZ              7   @   s  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T d dlm	Z	m
Z
mZ d dlT ddlT yd dlT d dlT W n( ek
r   ejd e jd Y nX ddlmZ yd dlZd dlmZmZ W n( ek
r   ejd e jd Y nX d dlZejd	e d
Zyd dlZW n> ek
rV   yd dlZW n ek
rP   dZY nX Y nX dZdZ dZ!dZ"dZ#d"Z$e%e&j'e(e&j'e)e&j*e+e&j,e-e&j*e.e&j*e/e&j*e0e&j'e1e&j'e2e&j'e3e&j'e4e&j'iZ5erVe6dZ7e6dZ8e6dZ9e%e7ej:fe(e7ej:fe)e8ej;fe+e9ej<fe-e8ej;fe.e8ej;fe/e8ej;fe0e7ej:fe1e7ej:fe2e7ej:fe3e7ej:fe4e7ej:fiZ=i Z>G dd de?Z@G dd deAZBG dd deCZDG dd deEZFdd ZGdS )#    N)*)deviceutilsmodels   z<Python bindings for Qt4 not found. Try using --qt3. Exiting!)SystrayFrame)
SessionBuslowlevelz,Python bindings for dbus not found. Exiting!ignoreTFi'  i  i  i  
      <   infowarningerrorc               @   s   e Zd Zdd Zdd ZdS )
DeviceMenuc             C   s$   t j| || || _|| _|| _d S )N)QMenu__init__
device_uridevice_histindex)selftitleparentr   r   r    r   "/usr/share/hplip/ui5/systemtray.pyr   u   s    zDeviceMenu.__init__c             C   s   | j   | jrd}x| jD ]}tj|jt}tj|jd}tt	t
|| j d|t|jf | }|r|j }|jd |j| | jt	t
|| j  d}| j| qW n | jt	tddtjddd  d S )	NTr   z%s %sFr   16x16
SystemTrayz(No events))clearr   STATUS_TO_ERROR_STATE_MAPget
event_codeERROR_STATE_CLEARr   queryStringQActionQIconZgetStatusListIconr   ZgetTimeDeltaDescZtimedateZfontZsetBoldZsetFontsetIcon	addActionload_pixmapQApplication	translate)r   firsteerror_stateZessafr   r   r   update|   s"    

zDeviceMenu.updateN)__name__
__module____qualname__r   r0   r   r   r   r   r   t   s   r   c               @   s(   e Zd Zd	ddZdd Zd
ddZdS )HistoryDeviceTc          	   C   s<  || _ || _tj|\	}}}}}}}	}
}|dkr8|| _n&|dkrH|	| _n|dkrX|| _nd| _tj|| _|dkrt| _	| j
d| j| jf | _nn|dkrt| _	| j
d| j| jf | _nF|d	krt| _	| j
d
| j| jf | _nt| _	| j
d| j| jf | _tj| j| _d| _| jjdtttfkr2d| _d | _d S )Nusbnetparunknownhpz%s Printer (%s)hpaioz%s Scanner (%s)hpfaxz%s Fax (%s)z%s (%s)r   z	tech-typer   )needs_updater   r   parseDeviceURIidr   normalizeModelUINamemodelZDEVICE_TYPE_PRINTERZdevice_type_HistoryDevice__tr	menu_textZDEVICE_TYPE_SCANNERZDEVICE_TYPE_FAXZDEVICE_TYPE_UNKNOWNZqueryModelByURIZmqr   r    ZTECH_TYPE_NONEZTECH_TYPE_MONO_LASERZTECH_TYPE_COLOR_LASERhistory)r   r   r<   back_endis_hpbusr@   serialdev_filehostzcportr   r   r   r      s6    zHistoryDevice.__init__c             C   sH   |d k	rD| j rD|j| j\}}dd t|d t d D | _d| _ d S )Nc             S   s   g | ]}t jt| qS r   )r   Eventtuple).0r,   r   r   r   
<listcomp>   s    z,HistoryDevice.getHistory.<locals>.<listcomp>r   F)r<   Z
GetHistoryr   listMAX_MENU_EVENTSrC   )r   servicer   hr   r   r   
getHistory   s     zHistoryDevice.getHistoryNc             C   s   t jd||S )Nr   )r)   r*   )r   scr   r   r   __tr   s    zHistoryDevice.__tr)T)N)r1   r2   r3   r   rU   rA   r   r   r   r   r4      s   
)r4   c               @   s0   e Zd ZdddZdd Zd	d
 ZdddZdS )SystraySettingsDialogNTr    c             C   sh   t j| | || _|| _|d k	r(|| _ni | _|| _|| _|| _|	| _|| _	|
| _
| j  | jj  d S )N)QDialogr   systray_visiblesystray_messagesdevice_listpollingpolling_intervalupgrade_notifyupgrade_last_update_timeupgrade_pending_timeupgrade_msginitUiSystemTraySettingsZupdateUi)r   r   r\   r_   r`   r]   r^   ra   rc   rb   rd   r   r   r   r      s    zSystraySettingsDialog.__init__c          	   C   s  | j d | jttddddj j| j  t| | _| jj d t	| | _
| j
j| j| j| j| j| j| j| j| j ttjtj}|jd |jd |j| j
j j  | j
j| | j
jtj | j
j d | jj| j
dddd t d	d
tjtj!}| jj"|dddd t#| | _$| j$j%t#j&t#j'B t#j(B  | j$j)d | j$j d | jj| j$dddd | j$j*j+| j, | j$j-j+| j. | j/| j0d | j1t2t3dd d S )NrY   r   i  i5  
gridlayoutrf   r      i-     F
StdButtonsz(HP Device Manager - System Tray Settingshp_logoZ128x128)4ZsetObjectNameZresizeZQSizeZQRectsizeZ
expandedToZminimumSizeHintZQGridLayoutrg   r   rf   re   r\   r_   r`   r^   r]   ra   rc   rd   ZQSizePolicyZ	ExpandingZsetHorizontalStretchZsetVerticalStretchZsetHeightForWidth
sizePolicyZhasHeightForWidthZsetSizePolicyZsetFrameShadowZQFrameZRaisedZ	addWidgetZQSpacerItemZMinimumZaddItemZQDialogButtonBoxrj   ZsetStandardButtonsZCancelZNoButtonZOkZsetCenterButtonsZacceptedconnectacceptClickedZrejectedZrejectZsetWindowTitle_SystraySettingsDialog__trZsetWindowIconr%   r(   )r   rm   Z
spacerItemr   r   r   re      s>    
&





zSystraySettingsDialog.initUic             C   sH   | j j| _| j j| _| j j| _| j j| _| j j| _| j j| _| j  d S )N)rf   r\   r_   r`   r^   r]   ra   Zaccept)r   r   r   r   ro     s    





z#SystraySettingsDialog.acceptClickedc             C   s   t jd||S )NrY   )r)   r*   )r   rV   rW   r   r   r   rX   )  s    zSystraySettingsDialog.__tr)NTr   r   rZ   )N)r1   r2   r3   r   re   ro   rp   r   r   r   r   rY      s       
0
rY   c               @   s   e Z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 Zdd Zdd Zdd Zejddddfd d!Zd"d# Zd$d% Zd)d'd(Zd&S )*SystemTrayAppc             C   s  t j| | d | _|| _d| _tj| j| _d| _d| _	t
 | _| jj  | jj  t | _tdd}t|| _tdd}t|}|jdd| |j  t|| _| jj| j t | _d | _x"tjd	d
gdD ]}| j| qW | jj| jd | jj j!| j  t"| jt"j#}|j$t% j!| j& | jj$d j!| j' t(j(t(j)t(j* | jj+  | jj,t-krn| jj.d nt/j0t1| j2 | jj| j d| _	d|kr| j3  t/j0t4| j5 t/ | _6| j6j7j!| j3 | j6j8t9 d S )NZ80s80sI32sI80sfFrk   Z32x32Zactiver       r   r9   r;   )back_end_filterzHPLIP Status Servicez!QSystemTrayIcon::ActivationReasonTz--ignore-update-firsttime):r)   r   menu	read_pipefmtstructZcalcsizefmt_sizeZtimer_activeactive_iconZUserSettingsuser_settingsloaddebugQSystemTrayIcon	tray_iconr(   r%   	prop_iconZQPainterZ
drawPixmapendprop_active_iconr&   r   session_busrS   r   getSupportedCUPSDevices	addDeviceZ
setToolTip_SystemTrayApp__trmessageClickedrn   QSocketNotifierRead	activatedintnotifierActivatedtrayActivatedsignalSIGINTSIG_DFLshowr\   SYSTRAY_VISIBLE_SHOW_ALWAYS
setVisibleQTimer
singleShotHIDE_INACTIVE_DELAYtimeoutHideWhenInactivehandle_hplip_updationSET_MENU_DELAYinitDoneZupdate_timerZtimeoutstartUPGRADE_CHECK_DELAY)r   argsru   Zpmr.   Zpainterdnotifierr   r   r   r   /  sR    







zSystemTrayApp.__init__c             C   s    | j j| j d| _| j  d S )NF)r~   r&   r   ry   setMenu)r   r   r   r   r   w  s    zSystemTrayApp.initDonec             C   s   t j  d S )N)devicesr   )r   r   r   r   resetDevice}  s    zSystemTrayApp.resetDevicec             C   s<   yt |  W n  tk
r,   t|t |< Y nX dt | _d S )NT)r   KeyErrorr4   r<   )r   r   r   r   r   r     s
    zSystemTrayApp.addDevicec             C   s,   t jd tjdd}d| }tj| d S )Nzhandle_hplip_clean dirshomezsh %s/hplip_clean.sh)logr|   sys_confr    ossystem)r   Zhome_dircmdr   r   r   handle_hplip_clean  s    
z SystemTrayApp.handle_hplip_cleanc             C   sL  t jd| jj  tjd}| jjdkrt jd |rtjj|d}t jd|  tj	tj
|dd tjd ytjdtj W n tk
r   Y nX d S tj }t|| jjkrtjd}|rtjj|d}t jd|  tj	tj
|dd	 tjd n
t jd
 nt jd| jj|f  ytjdtj W n tk
rF   Y nX d S )Nz(handle_hplip_updation upgrade_notify =%dz
hp-upgradeFz,upgrade notification is disabled in systray zRunning hp-upgrade: %s z--check   r   z--notifyz+Unable to find hp-upgrade --notify on PATH.zOupgrade schedule time is not yet completed. schedule time =%d current time =%d )r   r|   rz   ra   r   whichr   pathjoinspawnlpP_NOWAITtimesleepwaitpidWNOHANGOSErrorr   upgrade_pending_update_timer   )r   r   Zcurrent_timer   r   r   r     s8    



z#SystemTrayApp.handle_hplip_updationc             C   s  t  | _t| j}|j| jd |j| j |jd | jjd | t	r| j
d krd}xT|dk ry| jjdd| _
W n  tjk
r   tjd Y nX |d7 }tjd	 q\W | j
d k	r| jj  xTt	D ]L}t	| j| j
 tt	| j| j|t	| jt	| j}| jj| |j  qW | jj  | jj| jd
| j | jj  | jjttdd| jd| j| _ | jj  | jjttddd| j! | j"j#| j d S )NzHPLIP Status ServiceTr      zcom.hplip.StatusServicez/com/hplip/StatusServicez/Unable to connect to StatusService. Retrying...r   g      ?zHP Device Manager...Zsettingsr   zSettings...quitZQuit)$r   rt   r$   ZsetTextr   r&   r   ZsetIconVisibleInMenuZinsertActionr   rS   r   Z
get_objectdbusDBusExceptionr   warnr   r   ZaddSeparatorrU   r   rB   rC   r   ZaddMenur0   r'   toolboxTriggeredr%   r(   settingsTriggeredZsettings_actionquitTriggeredr~   ZsetContextMenu)r   r   tr   rt   r   r   r   r     s@    





$


zSystemTrayApp.setMenuc             C   s  | j d krd S | jddt tjdd}| jj  tjdtj	| jj
}tj|| jjrttj | jjk rtjdtj	| jj}d||| jj|f }q| jj
rd||| jjf }qd|| jjf }n| jj
rd||f }nd	| }zt| j | jj| jj| jj| jj| jj| jj| jj| jj
|
}|j tjkr|j| j_|j| j_|j| j_tjd
| jj  | jj  | jjtkrtjd | jjd ntjd t j!t"| j# | jddt$ W d | jddt% X d S )NrZ   hplipversionz%d-%m-%YzzHPLIP-%s version was installed on %s.

New version of HPLIP-%s is available for upgrade. HPLIP upgrade is scheduled on %s.zXHPLIP-%s version was installed on %s.

New version of HPLIP-%s is available for upgrade.zRHPLIP-%s version was installed.

New version of HPLIP-%s is available for upgrade.z%HPLIP-%s version was installed on %s.zHPLIP-%s version was installed.zHPLIP update  notification = %dz
Showing...TzWaiting to hide...)&rt   sendMessageZEVENT_DEVICE_STOP_POLLINGr   r    rz   r{   r   ZstrftimeZ	localtimerb   r   ZIs_HPLIP_older_versionZlatest_available_versionr   r   rY   r\   r_   r`   r]   Zpolling_device_listra   exec_r[   ZAcceptedr   r|   Zsaver   r~   r   r   r   r   r    EVENT_USER_CONFIGURATION_CHANGEDZEVENT_DEVICE_START_POLLING)r   Zcur_versZinstalled_timeZpostponed_timerd   Zdlgr   r   r   r     sL    







zSystemTrayApp.settingsTriggeredc             C   s4   t jd | jjttfkr0| jjd t jd d S )Nz	Hiding...FZHidden)r   r|   rz   r\   "SYSTRAY_VISIBLE_HIDE_WHEN_INACTIVESYSTRAY_VISIBLE_HIDE_ALWAYSr~   r   )r   r   r   r   r   $  s    
z%SystemTrayApp.timeoutHideWhenInactivec             C   sN   | j d krd S x:| j j D ],}y|j  j  W q tk
rD   wY qX qW d S )N)rt   Zactionsr0   AttributeError)r   r.   r   r   r   
updateMenu+  s    
zSystemTrayApp.updateMenuc             C   sd   |t jkr| j  nL|t jkr(| j  n8|t jkrV| j  | jd k	r`| jjtj	  n
|t j
kr`d S )N)r}   ZContextr   ZDoubleClickr   ZTriggerrt   ZpopupZQCursorposZMiddleClick)r   reasonr   r   r   r   6  s    





zSystemTrayApp.trayActivatedc             C   s   d S )Nr   )r   r   r   r   r   L  s    zSystemTrayApp.messageClickedc             C   s(   t jd | jddt | j  | `d S )NZExitingrZ   )r   r|   r   EVENT_SYSTEMTRAY_EXITr   r~   )r   r   r   r   r   Q  s    
zSystemTrayApp.quitTriggeredc             C   s   yt jdt j W n tk
r&   Y nX tjdd\}}|rtj| tjd}|rdt jj	|d}n.| j
j| jd| jdtjt tjd d S tjd t jt j|d n| jddtd	d
 d S )Nr   z
hp-toolboxTzHPLIP Status Servicez+Unable to locate hp-toolbox on system PATH.z"Unable to find hp-toolbox on PATH.zRunning hp-toolbox: hp-toolboxrZ   zcom.hplip.Toolbox)	interfacerP   )r   r   r   r   r   Zlock_appZunlockr   r   r   r~   showMessager   r}   CriticalTRAY_MESSAGE_DELAYr   r   r|   r   r   r   ZEVENT_RAISE_DEVICE_MANAGER)r   okZ	lock_filer   r   r   r   r   W  s$    




zSystemTrayApp.toolboxTriggeredr   rZ   zcom.hplip.StatusServicec	       	      C   s"   t j||||||j| j| d S )N)r   rL   Zsend_via_dbusr   )	r   r   printer_namer!   usernamejob_idr   Z	pipe_namer   r   r   r   r   v  s    zSystemTrayApp.sendMessagec             C   s  d}xy"t j | jgg | jgd\}}}W n" t jk
rL   tjd P Y nX |rbtjd|  P |rtj| j| j}xt|| jkrt	j
dd tj| j|d | j D  }|| jd  }|jtks|jtkr| j  x"t	jddgd	D ]}| j| qW | j  |jtkr8tjd
 | jj  | jj  n|jtkrP| j  d S | jjttfkrtjd | jjd |jtkr| j s|| jj!| j" d| _ q|n`|jt#kr| j r|| jj!| j$ d| _ q|n6|jt%kr| j s|| jj!| j" d| _ t&j't(| j) q|| jjtt*fkr,tjd t&j't+| j, |jt-ksN|jtksN|jtkr||jtkrn| j|j. | j  | jj/ r|tjd |j  t0j1|jt2}t	j3|j}	d}
| jj4t5krd}
nD| jj4t6t7fkr |t8krd}
n"| jj4t6kr |t9t:t;fkr d}
|j<r|j<}nt	j=|j.\	}}}}}}}}}|dkr>|}n$|dkrN|}n|dkr^|}nd}t>j?|| _@|dkr| jAd||f }nN|dkr| jAd||f }n0|dkr| jAd||f }n| jAd||f }|
r|tBrtCjDdrtEj1|tFdtCjGf\}}|jHr\|jIr\dtJ||	|jI|jK|jHf }tjd|j.|	|jI|jK|jH|jf  n,dtJ||	|jf }tjd|j.|	|jf  tCjLd||}|jMd d |jN| |t8kr|jOtCjP n
|jOtQ |jR  q|tSj1|tTjU}|jHrH|jIrHtjd!|j.|	|jI|jK|jH|jf  | jjV| jAdd||	|jI|jK|jHf |tQ q|tjd"|j.|	|jf  | jjV| jAdd||	|jf |tQ q|W qP qW d S )#NrZ   g      ?zError in select()zPipe error: %sc             S   s*   g | ]"}t |tr"|jd jdn|qS )    zutf-8)
isinstancebytesrstripdecode)rN   xr   r   r   rO     s    z3SystemTrayApp.notifierActivated.<locals>.<listcomp>r9   r;   )rs   z;Re-reading configuration (EVENT_USER_CONFIGURATION_CHANGED)z
Showing...TFzWaiting to hide...zTray icon message:r5   r6   r7   r8   z%s Printer (%s)r:   z%s Scanner (%s)z%s Fax (%s)z%s (%s)r   r   z%s
%s: %s
(%s/%s)z9Notify: uri=%s desc=%s title=%s user=%s job_id=%d code=%dz
%s
%s (%s)zNotify: uri=%s desc=%s code=%dzHPLIP Device StatusZ	transientz9Bubble: uri=%s desc=%s title=%s user=%s job_id=%d code=%dzBubble: uri=%s desc=%s code=%d)Wselectru   r   r   r|   r   readrx   lenr   rL   rw   Zunpackrv   r!   ZEVENT_CUPS_QUEUES_REMOVEDZEVENT_CUPS_QUEUES_ADDEDr   r   r   r   r   rz   r{   r   r   r\   r   r   r~   r   ZEVENT_DEVICE_UPDATE_ACTIVEry   r&   r   ZEVENT_DEVICE_UPDATE_INACTIVEr   ZEVENT_DEVICE_UPDATE_BLIPr   r   
BLIP_DELAYblipTimeoutr   r   r   ZEVENT_MAX_USER_EVENTr   ZsupportsMessagesr   r    r"   r#   r]   ZSYSTRAY_MESSAGES_SHOW_ALLZ)SYSTRAY_MESSAGES_SHOW_ERRORS_AND_WARNINGSZ!SYSTRAY_MESSAGES_SHOW_ERRORS_ONLYERROR_STATE_ERRORERROR_STATE_WARNINGERROR_STATE_LOW_SUPPLIESERROR_STATE_LOW_PAPERr   r=   r   r?   r@   r   have_pynotifypynotifyZinit(ERROR_STATE_TO_ICON_AND_URGENCY_PYNOTIFYgetPynotifyIconURGENCY_NORMALr   r   Z
to_unicoder   ZNotificationZset_hintZset_urgencyZset_timeoutZEXPIRES_NEVERr   r   ERROR_STATE_TO_ICONr}   Informationr   )r   rV   mrwr,   Zeventr   r-   ZdescZshow_messagerD   rE   rF   r@   rG   rH   rI   rJ   rK   ZiddZiconZurgencymsgnr   r   r   r   |  s    "
(












 




zSystemTrayApp.notifierActivatedc             C   s   | j r| jj| j d| _ d S )NF)ry   r~   r&   r   )r   r   r   r   r   #  s    zSystemTrayApp.blipTimeoutNc             C   s   t jd||S )Nr   )r)   r*   )r   rV   rW   r   r   r   rX   *  s    zSystemTrayApp.__tr)N)r1   r2   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zpropr   r   r   r   r   r   r   r   r   rq   -  s(   H*38 (rq   c             C   s   t jd t jdtj   yttj| }W n< tj	k
rh } zt jd|  tj
d W Y d d }~X nX |jd d}x(|dk rtj rP tjd |d7 }qzW tj std tjd	d
d tjd	dd  n&t| tj}|jt j|j |j  d S )Nzhp-systray(qt5)zPID=%dzCaught exception: %sr   Fr   r   g      ?r   zN<b>No system tray detected on this system.</b><p>Unable to start, exiting.</p>zHPLIP Status Service)r   Z
set_moduler|   r   getpidrq   sysargvr   r   exitZsetQuitOnLastWindowClosedr}   ZisSystemTrayAvailabler   r   Z	FailureUIr)   r*   r   r   r   r   rn   r   r   )ru   Zappr,   ir   r   r   r   run/  s0    




r   i  iQ i \&)Hr   rw   r   r   r   os.pathr   Zbase.gbaser   r   r   Z
base.codesZui_utilsZPyQt5.QtCoreZPyQt5.QtGuiImportErrorr   r   r   Zsystrayframer   r   r   r	   warningssimplefilterDeprecationWarningr   Znotify2r   r   r   r   r   rR   r   r"   r}   r   ZERROR_STATE_OKr   Warningr   r   r   ZERROR_STATE_BUSYr   ZERROR_STATE_PRINTINGZERROR_STATE_SCANNINGZERROR_STATE_PHOTOCARDZERROR_STATE_FAXINGZERROR_STATE_COPYINGr   r   r   r   errZURGENCY_LOWr   ZURGENCY_CRITICALr   r   r   r   ZQObjectr4   r[   rY   r)   rq   r   r   r   r   r   <module>   s   













#7_    