U
    9¡_m… ã                   @   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Ze dd¡ d dl	m
Z
 d dl	mZ d dl	mZ d dl	mZ d dl	mZ d d	l	mZ d d
lmZ d dlZd dlZd dlZd dl	m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 d dlT d dl Z d dl!Z!d dl"Z"d dl#m$Z$ e %d¡ z e dd¡ d dl	m&Z& dZ'W n e(k
rp   dZ'Y nX d dl)Z)e)j*e j+e j,d d dl!m-Z- e j.Z/dZ0dZ1dZ2e
 3d¡ e'r*e&j4 5de&j6j7e&j8j9e&j8j9e&j8j9e&j8j9e&j8j:e&j8j9e&j8j9e&j8j9dœ¡Z;G dd„ dƒZ<G dd „ d ƒZ=G d!d"„ d"ƒZ>G d#d$„ d$ƒZ?G d%d&„ d&ejƒZ@G d'd(„ d(eƒZAdS ))é    NÚNotifyz0.7)r   )ÚGLib)ÚGObject)ÚGdk)Ú	GdkPixbuf)ÚGtk)ÚGtkGUI)ÚPango)Úsaxutils)Ú*)Úreducez1.9.47ÚSecretÚ1)r   TF)ÚdomainÚ	localedir)ÚStateReasonÚprinteré   zdocument-print-previewz"System Config Printer Notificationzorg.system.config.printer.store)Úuserr   ÚobjectÚprotocolÚportÚserverZauthtypeÚuric                   @   s,   e Zd Ze ¡ Zdd„ Zdd„ Zdd„ ZdS )Ú
ServiceGetc                 C   s   t j |¡}d S ©N)r   ÚServiceZ
get_finish)ÚselfÚsourceÚresultÚunusedÚservice© r"   ú-/usr/share/system-config-printer/jobviewer.pyÚon_get_service^   s    zServiceGet.on_get_servicec                 C   s   t j dd | jd ¡ d S ©Nr   )r   r   Úgetr$   ©r   r"   r"   r#   Ú__init__a   s
    ýzServiceGet.__init__c                 C   s   t jS r   )r   r!   r'   r"   r"   r#   Úget_serviceg   s    zServiceGet.get_serviceN)	Ú__name__Ú
__module__Ú__qualname__r   r   r!   r$   r(   r)   r"   r"   r"   r#   r   [   s   r   c                   @   s*   e Zd Zeƒ Zdd„ Zdd„ Zdd„ ZdS )Ú
ItemSearchc                 C   s   t j d |¡}d S r   )r   r   Zsearch_finish)r   r   r   r    Úitemsr"   r"   r#   Úon_search_itemn   s    zItemSearch.on_search_itemc              	   C   s"   t j |t|t jjd | jd ¡ d S r   )r   r   ÚsearchÚNETWORK_PASSWORDZSearchFlagsZLOAD_SECRETSr/   )r   r!   Úattrsr"   r"   r#   r(   q   s    úzItemSearch.__init__c                 C   s   t jS r   )r-   r.   r'   r"   r"   r#   Ú	get_itemsz   s    zItemSearch.get_itemsN)r*   r+   r,   Úlistr.   r/   r(   r3   r"   r"   r"   r#   r-   k   s   	r-   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPasswordStorec              	   C   s   t  t|t j||d | j¡ d S r   )r   Zpassword_storer1   ZCOLLECTION_DEFAULTÚon_password_stored)r   r2   ÚnameÚsecretr"   r"   r#   r(      s    úzPasswordStore.__init__c                 C   s   t  |¡ d S r   )r   Zpassword_store_finish)r   r   r   r    r"   r"   r#   r6   ˆ   s    z PasswordStore.on_password_storedN)r*   r+   r,   r(   r6   r"   r"   r"   r#   r5   ~   s   	r5   c                   @   s^   e Zd Zddd„Zddd„Zddd„Zdd	„ Zd
d„ Zddd„Zdd„ Z	dd„ Z
ddd„ZdS )ÚPrinterURIIndexNc                 C   s$   i | _ |d krg }|| _|  ¡  d S r   )r   ÚnamesÚ_collect_names)r   r:   r"   r"   r#   r(      s
    zPrinterURIIndex.__init__c                 C   sV   | j s
d S |s2zt ¡ }W n tk
r0   Y d S X | j D ]}| j||d q8g | _ d S )N©Ú
connection)r:   ÚcupsÚ
ConnectionÚRuntimeErrorÚadd_printer)r   r=   Úcr7   r"   r"   r#   r;   •   s    
zPrinterURIIndex._collect_namesc                 C   s.   z| j ||d W n tk
r(   Y d S X d S )N)r7   r=   )Ú_map_printerÚKeyError)r   r   r=   r"   r"   r#   rA   ¤   s    zPrinterURIIndex.add_printerc                 C   st   g }d|kr0|d }t |ƒtkr&|g}| |¡ d|krF| |d ¡ d|kr\| |d ¡ |D ]}|| j|< q`d S )Núprinter-uri-supportedznotify-printer-uriúprinter-more-info)Útyper4   ÚextendÚappendr   )r   r   r2   ÚurisZuri_supportedr   r"   r"   r#   Úupdate_from_attrsª   s    
z!PrinterURIIndex.update_from_attrsc                 C   s:   |   ¡  t| j ¡ ƒ}|D ]}| j| |kr| j|= qd S r   )r;   r4   r   Úkeys)r   r   rJ   r   r"   r"   r#   Úremove_printer¹   s
    zPrinterURIIndex.remove_printerc                 C   s<   |   ¡  z| j| W S  tk
r6   | j||d Y S X d S )N)r   r=   )r;   r   rD   rC   )r   r   r=   r"   r"   r#   ÚlookupÁ   s
    zPrinterURIIndex.lookupc                 C   s   |   ¡  t| j ¡ ƒS r   )r;   Úsetr   Úvaluesr'   r"   r"   r#   Úall_printer_namesÈ   s    z!PrinterURIIndex.all_printer_namesc                 C   s4   |   ¡  | j ¡ D ]\}}||kr|  S qt‚d S r   )r;   r   r.   rD   )r   r7   r   r   r"   r"   r#   Úlookup_cached_by_nameÌ   s
    
z%PrinterURIIndex.lookup_cached_by_namec                 C   s    zD|d krt  ¡ }dddg}|d k	r4|j||d}n|j||d}W n0 tk
r\   t‚Y n t jk
rt   t‚Y nX |d }|  ||¡ |d k	rœ|| j|< |S )Núprinter-namerE   rF   ©r   Úrequested_attributes©rU   )r>   r?   ÚgetPrinterAttributesr@   rD   ÚIPPErrorrK   r   )r   r   r7   r=   Úrr2   r"   r"   r#   rC   Ô   s(    
ÿÿ


zPrinterURIIndex._map_printer)N)N)N)N)NNN)r*   r+   r,   r(   r;   rA   rK   rM   rN   rQ   rR   rC   r"   r"   r"   r#   r9   Œ   s   



r9   c                   @   sš   e Zd Zejjddfejjdeffejjdeejffejjddf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S )ÚCancelJobsOperationNr"   )Údestroyújob-deletedú	ipp-errorÚfinishedc                 C   s¬  t j  | ¡ t|ƒ| _|| _|| _|| _|| _|rdt| jƒdkrRt	dƒ}t	dƒ}q”t	dƒ}t	dƒ}n0t| jƒdkr„t	dƒ}t	dƒ}nt	dƒ}t	d	ƒ}t
j||d
d
d}	|	 t	dƒt
jj|t
jj¡ |	 t
jj¡ |	 d¡ |	 d¡ t
j dd¡}
t
 ¡ }| t
jt
jj¡ | dd¡ |
 |ddd¡ t
j|d}| d
¡ | dd¡ |
 |ddd¡ |	j |
ddd¡ |	 d| j ¡ |	 d| j!¡ |	 "¡  |	| _#d | _$t%d|  ƒ d S )Né   zDelete Jobsz(Do you really want to delete these jobs?z
Delete Jobz&Do you really want to delete this job?zCancel Jobsz(Do you really want to cancel these jobs?z
Cancel Jobz&Do you really want to cancel this job?T)ÚtitleÚtransient_forZmodalZdestroy_with_parentzKeep Printingé   Fé   ç        r   ©ÚlabelÚresponseúdelete-eventz+%s)&r   r(   r4   ÚjobidsÚ	purge_jobÚhostr   Ú
encryptionÚlenÚ_r   ÚDialogÚadd_buttonsÚResponseTypeÚNOÚYESÚset_default_responseÚset_border_widthÚset_resizableÚHBoxÚnewÚImageÚset_from_stockZSTOCK_DIALOG_QUESTIONÚIconSizeÚDIALOGÚset_alignmentÚ
pack_startÚLabelÚset_line_wrapÚvboxÚconnectÚon_job_cancel_prompt_responseÚon_job_cancel_prompt_deleteÚshow_allÚdialogr=   Ú
debugprint)r   Úparentrk   r   rl   ri   rj   Zdialog_titleZdialog_labelr†   ÚhboxÚimagerf   r"   r"   r#   r(   ÷   sX    



 ÿ ÿ


zCancelJobsOperation.__init__c                 C   s   t d|  ƒ d S )Nz-%s)r‡   r'   r"   r"   r#   Ú__del__%  s    zCancelJobsOperation.__del__c                 C   s<   | j r| j  ¡  d | _ | jr,| j ¡  d | _td|  ƒ d S )NzDESTROY: %s)r=   r[   r†   r‡   r'   r"   r"   r#   Ú
do_destroy(  s    

zCancelJobsOperation.do_destroyc                 C   s   |   d¡ d S )Nr[   )Úemitr'   r"   r"   r#   r[   3  s    zCancelJobsOperation.destroyc                 C   s   |   |tjj¡ d S r   )rƒ   r   rq   rr   ©r   r†   Úeventr"   r"   r#   r„   6  s    z/CancelJobsOperation.on_job_cancel_prompt_deletec                 C   sf   |  ¡  d | _|tjjkr(|  d¡ d S t| jƒdkrD|  d¡ d S tj	| j
| j| j| j| jd d S )Nr^   r   )rk   r   rl   Úreply_handlerÚerror_handler)r[   r†   r   rq   rs   r   rm   ri   Ú	asyncconnr?   rk   r   rl   Ú
_connectedÚ_connect_failed)r   r†   rg   r"   r"   r#   rƒ   9  s    

üz1CancelJobsOperation.on_job_cancel_prompt_responsec                 C   s   t d|t|ƒf ƒ d S )Nz)CancelJobsOperation._connect_failed %s:%s)r‡   Úrepr)r   r=   Úexcr"   r"   r#   r”   K  s    z#CancelJobsOperation._connect_failedc                 C   sN   || _ | jrtdƒ}ntdƒ}| j  |¡ | j j| jd | j| j| jd d S )Nzdeleting jobzcanceling jobr   ©r   r‘   )r=   rj   rn   Ú_begin_operationÚ	cancelJobri   ÚcancelJob_finishÚcancelJob_error)r   r=   r   Z	operationr"   r"   r#   r“   N  s    
þzCancelJobsOperation._connectedc                 C   s¢   t d|t|ƒf ƒ t|ƒtjkrb|j\}}|tjkrT|tjkrT|  d| j	d |¡ |  
|d ¡ n<| j ¡  | j ¡  d | _|  d| j	d |¡ |  d¡ d S d S )NzcancelJob_error %s:%sr]   r   r^   )r‡   r•   rG   r>   rX   ÚargsÚIPP_NOT_POSSIBLEÚIPP_NOT_FOUNDr   ri   rš   r=   Ú_end_operationr[   )r   r=   r–   ÚeÚmr"   r"   r#   r›   [  s    

ÿ


z#CancelJobsOperation.cancelJob_errorc                 C   s~   t d|t|ƒf ƒ |  d| jd ¡ | jd= | js\| j ¡  | j ¡  d | _|  d¡ d S |j| jd | j| j	| j
d d S )NzcancelJob_finish %s:%sr\   r   r^   r—   )r‡   r•   r   ri   r=   rŸ   r[   r™   rj   rš   r›   )r   r=   r   r"   r"   r#   rš   l  s    


þz$CancelJobsOperation.cancelJob_finish)r*   r+   r,   r   ÚSignalFlagsÚRUN_LASTÚintZTYPE_PYOBJECTÚ__gsignals__r(   r‹   rŒ   r[   r„   rƒ   r”   r“   r›   rš   r"   r"   r"   r#   rZ   î   s"   ÿû.rZ   c                	   @   sš  e Zd ZeddddddddgƒZd	ejjd
dfiZd dd„Z	dd„ Z
dd„ Zdd„ Zd¡dd„Zdd„ Zd¢dd„Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd£d$d%„Zd&d'„ Zd¤d(d)„Zd*d+„ Zd¥d,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd¦d8d9„Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNdO„ Z)dPdQ„ Z*dRdS„ Z+dTdU„ Z,dVdW„ Z-dXdY„ Z.dZd[„ Z/d\d]„ Z0d^d_„ Z1d`da„ Z2dbdc„ Z3d§ddde„Z4dfdg„ Z5d¨dhdi„Z6d©djdk„Z7dªdldm„Z8d«dndo„Z9dpdq„ Z:drds„ Z;d¬dtdu„Z<dvdw„ Z=d­dxdy„Z>dzd{„ Z?d|d}„ Z@d~d„ ZAd€d„ ZBd‚dƒ„ ZCd„d…„ ZDd†d‡„ ZEdˆd‰„ ZFdŠd‹„ ZGdŒd„ ZHdŽd„ ZIdd‘„ ZJd’d“„ ZKd”d•„ ZLd–d—„ ZMd˜d™„ ZNdšd›„ ZOdœd„ ZPdždŸ„ ZQd
S )®Ú	JobViewerújob-k-octetsújob-nameújob-originating-user-nameújob-printer-uriú	job-stateútime-at-creationúauth-info-requiredújob-preservedr^   Nr"   FTc                 C   sö  t j  | ¡ || _|| _|| _|| _|| _t ¡ }d|k| _	d|k| _
i | _i | _g | _i | _tƒ | _tƒ | _i | _d| _i | _i | _i | _d | _i | _i | _tƒ | _g | _| jddddgdgd	œtjd
 tj dd}	|	 !dtj"t#dƒd t#dƒ| j$fdtj%t#dƒd t#dƒ| j&fdtj't#dƒd t#dƒ| j(fdtj)t#dƒd t#dƒ| j*fdtj+t#dƒd t#dƒ| j,fdtj-t#dƒd t#dƒ| j.fdd t#d ƒd d d fd!d t#d"ƒd d | j/fd#d t#d$ƒd d | j0fd%tj1d d&t#d'ƒ| j2fg
¡ t 3¡ | _4| j4 5|	d(¡ | j4 6d)¡ | j4 7¡  | j8 9| j4 :¡ ¡ t ;¡ | _<d*D ]h}
|
s0t =¡ }n>|	 >|
¡}| ?d+¡ | @¡ }|
dkrn|| _At ;¡ }| B|¡ | C¡  | j< D|¡ qd,D ]J}
|	 >|
¡}| ?|
d%k¡ | E|
d%k¡ | F¡ }| C¡  | jG H|d(¡ qŠd+d+t#d-ƒ| jIfd.d+t#d/ƒ| jJfd+d.t#d0ƒ| jKfd+d.t#d1ƒ| jLfd+d+t#d2ƒ| jMffD ]x\}}}}|rF|rFq*t N¡ }|rp| Od3tPjQjR¡ | Od4d5¡ t S||¡}| T||d ¡ | Ud.¡ | jV W|¡ q*t N¡ }tjSt#d6ƒ|d7d8}| Ud.¡ | jV W|¡ t St#d9ƒ¡}t X¡ }| Y|d+¡ t N¡ }| Od3tPjQjR¡ | Od4d5¡ | Y|d.¡ | T|| jZd ¡ | T|| j[d ¡ | jV W|¡ t \t]t^¡| __| j_ `dtjajb¡ | jV c| j_¡ | jV dd.¡ | jV e¡ | _f| jf gtjhji¡ | jf jd:| jk¡ | jV jd;| jl¡ | jV jd<| jm¡ | j8 nto¡ | j8 p¡  |rtqd=d>„ |ƒ}|r(|rt#d?ƒ| }nt#d@ƒ}n|r8dA| }nt#dBƒ}| j8 rt#dCƒ| ¡ |rf| j8 s|¡ dDdE„ }tjt u¡ }||toƒ| _v||dFƒ| _w| jv x¡ | _y| jy zd¡ | jv {| jydd| jy |¡ | jy }¡ dddGdGt~jj€dH¡ | jr.| j
s.t ¡ | _‚| j‚ ƒ| jy¡ | j‚ jdI| j„¡ | j‚ jd<| j…¡ | j‚ †d+¡ |d kr@t‡ ˆ¡ }|  ‰¡  |  Šd.¡ t‹ Œ¡ | _t‹ Ž¡ | _t‹ ¡ | _‘t’j“|||| j| j| j‘dJ| _’| j’ jdK| j”¡ | j’ jdL| j•¡ | j’ jdM| j–¡ | j’ jdN| j—¡ | j’ jdO| j˜¡ | j’ jdP| j™¡ | j’ jdQ| jš¡ | j’ jdR| j›¡ | j’ jdS| jœ¡ | j’ jdT| j¡ | j’ jdU| jž¡ | j’ Ÿ¡  d | _ |sšt’j“|d.| j| j| j‘dV| _ | j  jdL| j•¡ | j  jdM| j–¡ | j  Ÿ¡  | js¬| j8 C¡  t ¡¡ | _¢| j¢ rt#dWƒ¡ | j¢ £tj¤j¥¡ | j¢ ¦dXdX¡ | j¢ s| j8¡ | j¢ jdY| j§¡ | j¢ 9| j4 :¡ ¡ tj dZd}| !d%tj1d d&t#d'ƒ| j§fg¡ t 3¡ | _¨| j¨ 5|d(¡ | j¨ 6d[¡ | j¨ 7¡  | j¢ 9| j¨ :¡ ¡ t ©¡ }| j¢ ª|¡ t «¡ }| j¨ >d\¡}| F¡ }| Ed.¡ | H|d¡ | Y|d+d+d¡ t ¬¡ | _­| Y| j­d.d.d¡ d S )]NZactionsZpersistencer   Ú
JobsWindowÚtreeviewÚ	statusbarÚtoolbarÚstatusicon_popupmenu)r¯   r³   )r   ZJobActionGroup)r7   ú
cancel-jobZ_CancelzCancel selected jobsú
delete-jobZ_DeletezDelete selected jobsúhold-jobZ_HoldzHold selected jobsúrelease-jobZ_ReleasezRelease selected jobsúreprint-jobZRe_printzReprint selected jobsúretrieve-jobZ	Re_trievezRetrieve selected jobsúmove-jobz_Move Toúauthenticate-jobZ_Authenticateújob-attributesz_View AttributesÚclosez<ctrl>wzClose this windowéÿÿÿÿay  
<ui>
 <accelerator action="cancel-job"/>
 <accelerator action="delete-job"/>
 <accelerator action="hold-job"/>
 <accelerator action="release-job"/>
 <accelerator action="reprint-job"/>
 <accelerator action="retrieve-job"/>
 <accelerator action="move-job"/>
 <accelerator action="authenticate-job"/>
 <accelerator action="job-attributes"/>
 <accelerator action="close"/>
</ui>
)
r´   rµ   r¶   r·   r¸   r¹   rº   Nr»   r¼   F)r´   rµ   r¶   r·   r¸   r¹   r½   ZJobTZUserZDocumentZPrinterZSizeÚ	ellipsizezwidth-charsé   zTime submittedr_   ©ÚtextZStatusZchangedZbutton_release_eventz
popup-menuc                 S   s   | d | S )Nz, r"   )ÚxÚyr"   r"   r#   Ú<lambda>9  ó    z$JobViewer.__init__.<locals>.<lambda>zmy jobs on %szmy jobsz%szall jobszDocument Print Status (%s)c              
   S   s\   z|   |td¡}W nD tjk
rV   td| ƒ tj tjj	ddtt¡}| 
d¡ Y nX |S )Nr   úNo %s icon availableTé   )Ú	load_iconÚ	ICON_SIZEr   ÚGErrorr‡   r   ZPixbufrx   Z
ColorspaceZRGBÚfill)ÚthemeÚiconÚpixbufr"   r"   r#   rÉ   J  s       ÿz%JobViewer.__init__.<locals>.load_iconzprinter-printingç      ð?é   Úactivate)ÚbusÚmy_jobsÚspecific_destsrk   r   rl   Úrefreshz	job-addedz	job-eventzjob-removedzstate-reason-addedzstate-reason-removedzstill-connectingznow-connectedzprinter-addedzprinter-eventzprinter-removed)rÓ   rÔ   rk   r   rl   zJob attributesiX  Zdelete_eventZAttrsActionGroupz+
<ui>
 <accelerator action="close"/>
</ui>
z/close)®r   r(   ÚloopÚappletÚsuppress_icon_hiderÔ   rÕ   r   Zget_server_capsÚnotify_has_actionsÚnotify_has_persistenceÚjobsÚjobitersri   Ú
jobs_attrsrO   Úactive_jobsÚstopped_job_promptsÚprinter_state_reasonsÚnum_jobs_when_hiddenZconnecting_to_deviceÚstate_reason_notificationsÚauth_info_dialogsÚjob_creation_times_timerÚnew_printer_notificationsÚcompleted_job_notificationsÚauthenticated_jobsÚopsZ
getWidgetsÚconfigÚPACKAGEr   ZActionGroupZadd_actionsÚSTOCK_CANCELrn   Úon_job_cancel_activateZSTOCK_DELETEÚon_job_delete_activateÚSTOCK_MEDIA_PAUSEÚon_job_hold_activateZSTOCK_MEDIA_PLAYÚon_job_release_activateZ
STOCK_REDOÚon_job_reprint_activateZSTOCK_SAVE_ASÚon_job_retrieve_activateÚon_job_authenticate_activateÚon_job_attributes_activateZSTOCK_CLOSEÚon_delete_eventZ	UIManagerÚjob_ui_managerZinsert_action_groupZadd_ui_from_stringZensure_updater¯   Zadd_accel_groupZget_accel_groupÚMenuÚjob_context_menuZSeparatorMenuItemÚ
get_actionÚset_sensitiveZcreate_menu_itemÚmove_job_menuitemÚset_submenuÚshowrI   Zset_is_importantZcreate_tool_itemr²   ÚinsertÚ_set_job_job_number_textÚ_set_job_user_textÚ_set_job_document_textÚ_set_job_printer_textÚ_set_job_size_textÚCellRendererTextÚset_propertyr	   ZEllipsizeModeZENDZTreeViewColumnZset_cell_data_funcrv   r°   Zappend_columnZCellRendererPixbufr~   Ú_set_job_status_iconÚ_set_job_status_textZ	TreeStorer¤   ÚstrÚstoreÚset_sort_column_idÚSortTypeÚ
DESCENDINGÚ	set_modelZset_rules_hintÚget_selectionÚ	selectionÚset_modeÚSelectionModeZMULTIPLEr‚   Úon_selection_changedÚ on_treeview_button_release_eventÚon_treeview_popup_menuÚset_icon_nameÚICONÚhider   Z	set_titleZset_transient_forÚ	IconThemeÚget_defaultÚ	icon_jobsÚicon_jobs_processingÚcopyÚicon_no_jobsrÌ   Ú	compositeÚ	get_widthÚ
get_heightr   Ú
InterpTypeÚBILINEARZ
StatusIconÚ
statusiconÚset_from_pixbufÚtoggle_window_displayÚon_icon_popupmenuÚset_visibleÚdbusZ	SystemBusZconnect_signalsÚset_process_pendingr>   Z	getServerrk   ZgetPortr   ZgetEncryptionrl   ÚmonitorZMonitorÚ
on_refreshÚ	job_addedÚ	job_eventÚjob_removedÚstate_reason_addedÚstate_reason_removedÚstill_connectingÚnow_connectedÚprinter_addedÚprinter_eventÚprinter_removedrÖ   Ú
my_monitorZWindowÚJobsAttributesWindowÚset_positionÚWindowPositionZMOUSEZset_default_sizeÚjob_attributes_on_delete_eventZattrs_ui_managerÚVBoxÚaddZToolbarZNotebookÚnotebook)r   rÓ   r×   rØ   rÙ   rÔ   rÕ   rˆ   Znotify_capsZjob_action_groupZaction_nameÚitemÚactionZprintersÚskipr¿   r7   ÚsetterÚcellÚcolumnrÎ   rÂ   Z	the_destsr`   rÉ   rÍ   Zattrs_action_groupr   r²   r"   r"   r#   r(   ‹  sô   

ýúø
 ÿ ÿ ÿ ÿ ÿ ÿÿÿ
 ÿî
ÿ








üÿ

ÿ




   ù





 ý
 þ


ÿ
 ÿÿ
ÿ


zJobViewer.__init__c              
   C   sØ   | j  ¡  | jr| j ¡  | j ¡  | j ¡ | j ¡ fD ]H}|D ]>}t|dd ƒdkr@z| 	¡  W n t
jk
rv   Y nX d|_q@q8| jd k	ržt
 | j¡ d | _| jD ]}| ¡  q¤| jrÊ| jsÊ| j d¡ |  d¡ d S )NÚclosedTFr^   )r+  Úcleanupr7  r¯   r  ræ   rP   rã   Úgetattrr½   r   rË   rE  rå   Úsource_removeré   r[   rØ   rÛ   r$  r(  r   )r   ÚlÚnotificationÚopr"   r"   r#   rF  ²  s,    


ÿ



zJobViewer.cleanupc                 C   s
   || _ d S r   )Úprocess_pending_events)r   Zwhetherr"   r"   r#   r*  Ò  s    zJobViewer.set_process_pendingc                 G   s<   | j s| js.| j ¡  d| j_| j s8|  ¡  n
| j ¡  dS )NFT)rØ   r×   r¯   r  ÚvisiblerF  Úquit)r   rœ   r"   r"   r#   rö   Õ  s    


zJobViewer.on_delete_eventc                 C   s4   t | j ¡ ƒD ]}| j d¡ qi | _| j ¡  dS )Nr¾   T)Úranger>  Zget_n_pagesÚremove_pagerÞ   r8  r  )r   Úwidgetr   Úpager"   r"   r#   r;  à  s
    
z(JobViewer.job_attributes_on_delete_eventc                 C   s   t  ||| j¡S r   )ÚerrordialogsÚshow_IPP_Errorr¯   )r   Z	exceptionÚmessager"   r"   r#   rT  ç  s    zJobViewer.show_IPP_Errorc           
      C   sÜ   t | jdd ƒ}|rd}| jr8|r,| j ¡  qÎ| j ¡  n–|rœ| j ¡ }| j ¡ }| j ¡ \}}}}	|rŽ| 	d¡ |d k	r‚| 	d¡ | j 
¡  qÎ| j d¡ n2| j ¡  | j 	d¡ | j ¡ }|d k	rÎ| 	d¡ | | j_d S )NrM  FT)rG  r¯   rÛ   r  rþ   Z
get_windowr8  r$  Zget_geometryZset_skip_taskbar_hintZiconifyr(  ZpresentrM  )
r   rÎ   Ú
force_showrM  ÚwZawZlocÚsZareaÚor"   r"   r#   r&  ê  s.    






zJobViewer.toggle_window_displayc                 C   s<   |  ¡ rd}nd}| jj|dd | jr8| jj|dd d S )NÚallznot-completedF)Ú
which_jobsZrefresh_all)Z
get_activer+  rÖ   r7  )r   Ztoggletoolbuttonr[  r"   r"   r#   Úon_show_completed_jobs_clicked
  s    z(JobViewer.on_show_completed_jobs_clickedc                    s¦  t   ¡ }d}ˆ j ¡ D ]<\}}tdƒ}d|kr0|d }|| }d}|dk rXtdƒ}nØ|dk rzt|d ƒ}td	ƒ| }n¶|d
k r®t|d ƒ}	|	dkr tdƒ}ntdƒ|	 }n‚|dk rât|d
 ƒ}
|
dkrÔtdƒ}ntdƒ|
 }nN|dk rt|d ƒ}|dkrtdƒ}ntdƒ| }nd}t  dt  |¡¡}|ˆ jkrˆ j| }ˆ j 	|d|¡ q|r‚ˆ j
s‚‡ fdd„}t d|¡}|ˆ _
|s¢ˆ j
r¢t ˆ j
¡ d ˆ _
|S )NFÚUnknownr¬   Téx   za minute agoi  é<   z%d minutes agoi€Q r_   zan hour agoz%d hours agoi€:	 Z	yesterdayz%d days agoi _7 z	last weekz%d weeks agoz%B %Yc                     s   t  ¡  ˆ  ¡ } t  ¡  | S r   ©r   Úthreads_enterÚupdate_job_creation_timesÚthreads_leave)Zretr'   r"   r#   Úupdate_times_with_locking<  s    zFJobViewer.update_job_creation_times.<locals>.update_times_with_locking)ÚtimerÜ   r.   rn   r¤   ÚstrftimeÚ	localtimerÝ   r
  Ú	set_valuerå   r   Útimeout_add_secondsrH  )r   ÚnowZneed_updateÚjobÚdataÚtZcreatedZagoZminsZhoursZdaysZweeksÚiterrd  r"   r'   r#   rb    sT    








z#JobViewer.update_job_creation_timesc                 C   sP   |  ¡  | ¡  | j |¡ |tjjkrLd| jkrLdd l}| 	| j
¡}|| _d S )NÚtroubleshooterr   )r  r[   rà   Úremover   rq   rr   Ú__dict__ÚtroubleshootÚrunÚon_troubleshoot_quitro  )r   r†   rg   Újobidrr  ro  r"   r"   r#   Úprint_error_dialog_responseM  s    
z%JobViewer.print_error_dialog_responsec                 C   s   | ` d S r   )ro  )r   ro  r"   r"   r#   rt  X  s    zJobViewer.on_troubleshoot_quitc           
         sÌ   ˆ j |||d |ˆ jkrd S ˆ j}ˆ j d ¡}| |d|¡ td| ƒ |ˆ j|< ˆ j ¡ }|d k	rª|\}}ˆ j 	¡ dt
jjfkrª|t
 d¡krªˆ j t
 ¡ d ddd¡ ˆ jsÈ‡ fdd„}	t d	|	¡ d S )
Nr<   r   zJob %d addedr_   Frd   c                      s   t  ¡  ˆ  ¡  t  ¡  dS ©NFr`  r"   r'   r"   r#   Ú!start_updating_job_creation_timesu  s    z<JobViewer.add_job.<locals>.start_updating_job_creation_timesiô  )Ú
update_jobrÜ   r
  rI   rh  r‡   rÝ   r°   Zget_visible_rangeZget_sort_column_idr   r  r  ZTreePathZscroll_to_cellrå   r   Ztimeout_add)
r   rk  rl  r=   r
  rn  rO  ÚstartÚendrx  r"   r'   r#   Úadd_job[  s0    



ÿþ  ÿzJobViewer.add_jobc                 C   s   | j  ¡  | jr| j ¡  d S r   )r+  Úupdater7  r'   r"   r"   r#   Úupdate_monitor}  s    
zJobViewer.update_monitorc              	   C   sŒ  | j t| ¡ ƒ }|| jkr&|  |¡ |r¾d }zD|d krNtj| j| j| j	d}t
d| ƒ t|ƒ}|j||d}W n< tk
r†   Y n* tk
r˜   Y n tjk
r®   Y d S X |r¾| |¡ || j|< d}zö| dtj¡}t|ƒ}|tjtjfkrÀdddg}	dd	g}
| d¡}tj| j| j| j| j	d}|j||
d
}z|d }W n& tk
rl   t
dƒ ddg}Y nX t|tƒsˆ|g}||d< | |¡ |j||	d}| |¡ | dtj¡}t|ƒ}W n@ tk
rØ   Y n, tk
rì   Y n tjk
r   Y nX z
|d= W n tk
r$   Y nX | j ¡  |tjkoJ| dd¡dk}|rz|  || d	¡| d¡| dg ¡| j ¡ d| _!|  "¡  d S )N©rk   r   rl   zrequesting %srV   Fr«   újob-hold-untilrª   r­   ú
device-urirT   ú1No auth-info-required attribute; guessing insteadÚusernameÚpasswordÚ_status_textÚnone)#Úrequired_job_attributesrO   rL   rÞ   Úupdate_job_attributes_viewerr>   r?   rk   r   rl   r‡   r4   ÚgetJobAttributesr@   ÚAttributeErrorrX   r}  rÜ   r&   ÚIPP_JOB_PROCESSINGr¤   ÚIPP_JOB_HELDÚIPP_JOB_STOPPEDÚauthconnr¯   rW   rD   Ú
isinstanceÚ
ValueErrorr°   Ú
queue_drawÚget_authenticationrØ   Zsubmenu_setÚupdate_sensitivity)r   rk  rl  r=   rY   r2   Újob_requires_authÚjstaterX  ÚjattrsÚpattrsr   rB   Úauth_info_requiredr"   r"   r#   ry  ‚  s     

þÿ




ýÿ
ÿ



ÿÿ
ýzJobViewer.update_jobc           !      C   s  || j krzt d¡ W n   tdƒ Y d S X t}tƒ }d }|rðd|krðtj |¡\}	}
|	dkrt	j
|d}| ¡ \}}}}}t|ƒ|d< n.tj |
¡\}}
|d kr®d }ntj |¡\}}|	d ksÎ|d krÔd}n| t| ¡ ƒt|	ƒdœ¡ || jkr d}d	t|ƒi}|rôd|krô||fD ]Æ}tƒ }| ¡ D ]\}}||i}| |¡ q6tƒ }| ¡ }t||ƒ}| ¡ }|r$d
d„ |D ƒ}| d¡}|d jD ]$}|jdkrœ| ¡ ||<  qÊqœtdƒ | d¡}|d j||<  qôq$tdƒ |r4ztj| j| j| j | j!d}W n t"k
r2   d}Y nX |rÎ|d k	rÎzH| #t$dƒ¡ | %||¡ | &¡  |  '¡  td| ƒ | j (|¡ W d S  tj)k
r´   | &¡  t*ƒ  Y d S    | &¡  t*ƒ  Y nX |r|rt+ ,t- .¡ ¡d } | /¡ }| |¡ t| ƒ|d< |  0||¡ d S )Nz1.9.37z;Authentication required but authenticateJob() not availabler„  Úsmb)r   r   F)r   r   r   c                 S   s   g | ]}d ‘qS ©Ú r"   ©Ú.0rÃ   r"   r"   r#   Ú
<listcomp>$  s     z0JobViewer.get_authentication.<locals>.<listcomp>rƒ  r   r   z)Did not find username keyring attributes.z!Failed to find secret in keyring.r  úauthenticating jobz"Automatically authenticated job %d)1rä   r>   Úrequirer‡   Ú
USE_SECRETÚdictÚurllibÚparseÚ	splittypeÚsmburiZSMBURIZseparater	  Z	splithostZ
splitnportr}  Úlowerrè   r.   r   r)   r-   r3   ÚindexÚ
attributesr7   Z
get_stringr8   rŽ  r?   r¯   rk   r   rl   r@   r˜   rn   ÚauthenticateJobrŸ   r~  r=  rX   ÚnonfatalExceptionÚpwdÚgetpwuidÚosÚgetuidr  Údisplay_auth_info_dialog)!r   rk  Ú
device_uriÚprinter_urir˜  Zshow_dialogZ
try_secretZinformational_attrsÚ	auth_infoÚschemeÚrestr   Úgroupr   Zsharer   r„  Z
serverportr   Zidentifying_attrsÚkeyring_attrsr2   ÚkeyÚvalÚkey_val_dictZservice_objr!   Z
search_objr.   ÚindÚattrrB   rƒ  r"   r"   r#   r’  è  s¦    ÿ ÿ




ý


zJobViewer.get_authenticationc                 C   s\  | j | }z|d }W n$ tk
r:   tdƒ ddg}Y nX tj|td}||_||_| t	j
j¡ dd„ |D ƒ}t t ¡ ¡d }d|krÀz | d¡}|||< | |¡ W n   tƒ  Y nX d}	|D ]&}
||	 d	kræ| |
¡  qð|	d
7 }	qÈ| tdƒ| dtdƒ¡|f ¡ || j|< | d| j¡ | d| j¡ ||_| ¡  | d¡ | ¡  d S )Nr­   r‚  rƒ  r„  )r˜  Zallow_rememberc                 S   s   g | ]}d ‘qS rš  r"   rœ  r"   r"   r#   rž  h  s     z6JobViewer.display_auth_info_dialog.<locals>.<listcomp>r   r›  r_   z;Authentication required for printing document `%s' (job %d)r¨   r]  rg   rh   T)rÜ   rD   r‡   rŽ  Z
AuthDialogr¡  r·  r˜  r9  r   r:  ZCENTERr¬  r­  r®  r¯  r¨  Zset_auth_infor«  Zfield_grab_focusZ
set_promptrn   r&   rä   r‚   Úauth_info_dialog_responseÚauth_info_dialog_deleteÚjob_idr…   Zset_keep_aboveZshow_now)r   rk  r·  rl  r˜  r†   r³  rƒ  r»  r¨  Zfieldr"   r"   r#   r°  Y  sN    
ÿ



ÿþ

z"JobViewer.display_auth_info_dialogc                 C   s   |   |tjj¡ d S r   )r½  r   rq   ÚCANCELrŽ   r"   r"   r#   r¾  †  s    z!JobViewer.auth_info_dialog_deletec              
   C   sð  |j }| j|= |tjjkr&| ¡  d S | ¡ }ztj| j	| j
| j| jd}W n tk
rj   tdƒ Y d S X d}| tdƒ¡ z,| ||¡ | ¡ }| j |¡ |  ¡  W n: tjk
rä } z|j\}}|  ||¡ W 5 d }~X Y nX | ¡  |räzÜt|dd ƒ}	t|dd ƒ}
|	d k	rÎ|
d k	rÎz|
 d¡}|| |	d< W n tk
rR   Y nX d	|	 d¡|	 d
¡|	 d¡f }|
 d¡}|| }tƒ }|	  ¡ D ]\}}||i}| !|¡ q”t"|||ƒ}tdt#|f ƒ W n   t$ƒ  Y nX | ¡  d S )Nr  z+Error connecting to CUPS for authenticationFrŸ  r·  r˜  rƒ  r   z
%s@%s (%s)r   r   r„  zkeyring: created id %d for %s)%r¿  rä   r   rq   ÚOKr[   Zget_auth_inforŽ  r?   r¯   rk   r   rl   r@   r‡   r˜   rn   rª  Zget_remember_passwordrè   r=  r~  r>   rX   rœ   rT  rŸ   rG  r¨  Ú
IndexErrorr&   r¢  r.   r}  r5   Úidr«  )r   r†   rg   ru  r³  rB   Zrememberr    r¡   r·  r˜  r»  r7   r8   r2   r¸  r¹  rº  Zpassword_objr"   r"   r#   r½  ‰  sx    ý

þþ

þ
þz#JobViewer.auth_info_dialog_responsec                 C   sâ   | j s
d S | jrd| _d S t| j ¡ ƒ}|t| j ¡ ƒ7 }| j ¡ D ] \}}t|dd ƒdkrD|d7 }qDt| j	ƒ}t
d| ƒ t
d| ƒ t
d| j ƒ | jr d S | j d¡ | j |dkpÂ|| jk¡ | jrÞt ¡ rÞt ¡  qÆd S )	NFrE  Tr_   zopen notifications: %dznum_jobs: %dznum_jobs_when_hidden: %dr   )rØ   rÙ   rm   ræ   rL   rç   rã   r.   rG  rß   r‡   râ   rÛ   r$  Zset_has_tooltipr(  rL  r   Zevents_pendingZmain_iteration)r   Zopen_notificationsÚreasonrJ  Únum_jobsr"   r"   r#   Úset_statusicon_visibilityÉ  s,    

ÿz#JobViewer.set_statusicon_visibilityc                 C   s    t  t jj¡}|  ||d¡ d S r%   )r   ZEventZ	EventTypeZNOTHINGÚshow_treeview_popup_menu©r   r°   r   r"   r"   r#   r  í  s    z JobViewer.on_treeview_popup_menuc                 C   s   |j dkr|  |||j ¡ d S )Né   )ÚbuttonrÇ  rÈ  r"   r"   r#   r  ñ  s    
z*JobViewer.on_treeview_button_release_eventc              	   C   s:  |d kr| j  ¡ }| ¡ \}}| j d¡}| j d¡}| j d¡}| j d¡}| j d¡}| j d¡}	| j d¡}
| j d¡}| j d	¡}t|ƒd
krÀ||||||	||
|f	D ]}| d¡ q¬d S d}d}d}d}d}d}| j ¡ }t	ƒ }g | _
|D ]ø}| j |¡}| j |d
¡}| j
 |¡ | j| }d|krz|d }|tjkrHd}|tjkrXd}|tjkrhd}| dd¡szd}| dtj¡tjks¢| dd¡dkr¦d}| dd ¡}|ròz| j |¡}W n tk
rà   |}Y nX |||< qòt| ¡ ƒdkr0z| t| ¡ ƒd
 ¡ W n tk
r.   Y nX t|ƒd
krÚt ¡ }t|ƒ}| ¡  |D ]n}z| j |¡}W n tk
rˆ   d }Y nX tj|d}| |d k	¡ | ¡  |   || j!|¡ | |¡ qZ| j" #|¡ d}| |¡ | | ¡ | |¡ | |¡ | |¡ |	 |¡ | |¡ |
 |¡ | d¡ d S )Nz/cancel-jobz/delete-jobz	/hold-jobz/release-jobz/reprint-jobz/retrieve-jobz/authenticate-jobz/job-attributesz	/move-jobr   FTr«   r®   r€  r†  r­   rª   r_   re   )$r°   r  Zget_selected_rowsr÷   rú   rm   rû   Úprinter_uri_indexrQ   r¢  ri   r
  Zget_iterÚ	get_valuerI   rÜ   r>   ÚIPP_JOB_CANCELEDÚIPP_JOB_PENDINGrŒ  r&   rN   rD   rL   rp  r4   r   rø   ÚsortrR   ZMenuItemrþ   Ú_submenu_connect_hackÚon_job_move_activaterü   rý   )r   r  ÚmodelZpathlistZcancelÚdeleteÚholdÚreleaseZreprintZretrieveZauthenticater©  ZmoverQ  Zcancel_sensitiveZhold_sensitiveZrelease_sensitiveZreprint_sensitiveZauthenticate_sensitiveZmove_sensitiveZother_printersZjob_printersÚpathrn  ru  rk  rX  r   r   Zprinters_menuÚmenuitemr"   r"   r#   r“  õ  s¸    
  ÿ


ÿÿþ


þ






zJobViewer.update_sensitivityc                 C   s   |   |¡ d S r   )r“  )r   r  r"   r"   r#   r  T  s    zJobViewer.on_selection_changedc              	   C   s   | j  d d d d || ¡ ¡ d S r   )rù   ÚpopupZget_time)r   r°   r   Zevent_buttonr"   r"   r#   rÇ  W  s    ÿz"JobViewer.show_treeview_popup_menuc                 C   s   | j  d d d d ||¡ d S r   )r³   rØ  )r   rÎ   rÊ  re  r"   r"   r#   r'  \  s    zJobViewer.on_icon_popupmenuc                 C   s   t | j ¡ ƒ| _|  ¡  d S r   )rm   rÜ   rL   râ   rÆ  ©r   r×  r"   r"   r#   Úon_icon_hide_activate_  s    zJobViewer.on_icon_hide_activatec                 C   sP   i }t j ¡ D ]\}}|dkr q|||< qtjdgd|d}t d| j|¡ d S )NZSYSTEM_CONFIG_PRINTER_UIzsystem-config-printerT)Z	close_fdsÚenvé
   )r®  Úenvironr.   Ú
subprocessÚPopenr   ri  Úpoll_subprocess)r   r×  rÛ  r7   ÚvalueÚpr"   r"   r#   Ú#on_icon_configure_printers_activatec  s    
 ÿz-JobViewer.on_icon_configure_printers_activatec                 C   s   |  ¡ }|d kS r   )Zpoll)r   ZprocessÚ
returncoder"   r"   r#   rà  m  s    zJobViewer.poll_subprocessc                 C   s   |   ¡  | jr| j ¡  d S r   )rF  r×   rN  rÙ  r"   r"   r#   Úon_icon_quit_activateq  s    zJobViewer.on_icon_quit_activatec                 C   s   |   d¡ d S rw  ©Úon_job_cancel_activate2rÙ  r"   r"   r#   rí   v  s    z JobViewer.on_job_cancel_activatec                 C   s   |   d¡ d S )NTræ  rÙ  r"   r"   r#   rî   y  s    z JobViewer.on_job_delete_activatec                 C   sN   | j rJt| j| j| j| j| j |ƒ}| j |¡ | d| j	¡ | d| j
¡ d S )Nr^   r]   )ri   rZ   r¯   rk   r   rl   ré   rI   r‚   Úon_canceljobs_finishedÚon_canceljobs_error)r   rj   rK  r"   r"   r#   rç  |  s      ÿz!JobViewer.on_job_cancel_activate2c                 C   s(   |  ¡  | j |¡}| j|= |  ¡  d S r   )r[   ré   r¨  r~  )r   ÚcanceljobsoperationÚir"   r"   r#   rè  „  s    z JobViewer.on_canceljobs_finishedc                 C   sL   |   ¡  t|ƒtjkrD|j\}}|tjkr@|tjkr@|  ||¡ d S |‚d S r   )r~  rG   r>   rX   rœ   r   rž   rT  )r   rê  ru  r–   r    r¡   r"   r"   r#   ré  Š  s    

ÿzJobViewer.on_canceljobs_errorc                 C   sÞ   zt j| j| j| j| jd}W n tk
r4   Y d S X | jD ]’}| t	dƒ¡ z| 
|d¡ W nf tjk
rÄ } zF|j\}}|tjkrœ|tjkrœ|  ||¡ |  ¡  | ¡  W Y ¢ d S d }~X Y nX | ¡  q<~|  ¡  d S )Nr  zholding jobZ
indefinite©rŽ  r?   r¯   rk   r   rl   r@   ri   r˜   rn   ZsetJobHoldUntilr>   rX   rœ   r   rž   rT  r~  rŸ   ©r   r×  rB   ru  r    r¡   r"   r"   r#   rð   –  s0    ý



ÿ
zJobViewer.on_job_hold_activatec                 C   sÞ   zt j| j| j| j| jd}W n tk
r4   Y d S X | jD ]’}| t	dƒ¡ z| 
|d¡ W nf tjk
rÄ } zF|j\}}|tjkrœ|tjkrœ|  ||¡ |  ¡  | ¡  W Y ¢ d S d }~X Y nX | ¡  q<~|  ¡  d S )Nr  zreleasing jobzno-holdrì  rí  r"   r"   r#   rñ   °  s0    ý



ÿ
z!JobViewer.on_job_release_activatec              
   C   s    z6t j| j| j| j| jd}| jD ]}| |¡ q"~W n\ tj	k
r~ } z(|j
\}}|  ||¡ |  ¡  W Y ¢d S d }~X Y n tk
r’   Y d S X |  ¡  d S )Nr  )rŽ  r?   r¯   rk   r   rl   ri   Z
restartJobr>   rX   rœ   rT  r~  r@   rí  r"   r"   r#   rò   Ê  s"    ý

z!JobViewer.on_job_reprint_activatec                 C   sz  zt j| j| j| j| jd}W n tk
r4   Y d S X | jD ],}zØ| |¡}|d }z|d }W n  t	k
r„   | 
dd¡}Y nX td|d ƒD ]‚}| |||¡}| 
d¡}	| 
d¡}
| 
d	d
¡}|
d kr6tdƒt|ƒ }
|dkrô|
d }
nB| d¡dkr|
| dd
¡ }
n | d¡dkr6|
| dd¡ }
|	d k	rtjtdƒ| jtjjd}| tjtjjtjtjj¡ | |
¡ | d¡ | ¡ }|tjjkrä| ¡ }zt  |	|¡ W n( t!tj"fk
rà   t#d| ƒ Y nX n|tjjkrò| $¡  t% &|	¡ q”t#dƒ  W  d S q”W q< t'j(k
rh } z*|j)\}}|  *||¡ |  +¡  W Y ¢ d S d }~X Y q<X q<~|  +¡  d S )Nr  rª   znumber-of-documentszdocument-countr   r_   Úfilezdocument-namezdocument-formatr›  Z	retrievedzapplication/postscriptz.pszapplication/vnd.r¾   zapplication/vndzapplication/Ú.z	Save File)r`   ra   r@  TzUnable to save file z%Unable to retrieve file from job file),rŽ  r?   r¯   rk   r   rl   r@   ri   r‰  rD   r&   rO  ZgetDocumentrn   r	  ÚfindÚreplacer   ZFileChooserDialogZFileChooserActionZSAVErp   rì   rq   rÀ  Z
STOCK_SAVErÁ  Zset_current_nameZset_do_overwrite_confirmationrs  Úget_filenameÚshutilZcopyfileÚIOErrorÚErrorr‡   r[   r®  Úunlinkr>   rX   rœ   rT  r~  )r   r×  rB   ru  r2   r²  Zdocument_countZdocument_numberÚdocumentZtempfiler7   Úformatr†   rg   Zfile_to_saver    r¡   r"   r"   r#   ró   Ý  sz    ý







þ  þ


z"JobViewer.on_job_retrieve_activatec                    s4   t  d¡‰d‡ ‡‡fdd„	}| d|¡| d|¡fS )Nr_   c                    s    ˆ  d¡rtjˆ| fˆ žŽ  d S rw  )Úacquirer   Zidle_add)r?  r   ©rœ   ÚcallbackZ	only_oncer"   r#   Úhandle_event&  s    
z5JobViewer._submenu_connect_hack.<locals>.handle_eventzbutton-press-eventrÒ   )N)Ú	threadingZ	Semaphorer‚   )r   r?  rû  rœ   rü  r"   rú  r#   rÐ  #  s
    


ÿzJobViewer._submenu_connect_hackc              
   C   s¤   z:t j| j| j| j| jd}| jD ]}|j||d q"~W n\ tj	k
r‚ } z(|j
\}}|  ||¡ |  ¡  W Y ¢d S d }~X Y n tk
r–   Y d S X |  ¡  d S )Nr  )r¿  Újob_printer_uri)rŽ  r?   r¯   rk   r   rl   ri   ZmoveJobr>   rX   rœ   rT  r~  r@   )r   r×  rþ  rB   ru  r    r¡   r"   r"   r#   rÑ  -  s"    ý

zJobViewer.on_job_move_activatec           
   	   C   sÀ   zt j| j| j| jd}W n tk
r0   Y dS X dg}ddg}| jD ]t}|j||d}| d¡}|j	||d}z|d }	W n$ t
k
r    tdƒ d	d
g}	Y nX |  || d¡||	d¡ qFd S )Nr  Frª   r­   r  rV   rT   r‚  rƒ  r„  T)r>   r?   rk   r   rl   r@   ri   r‰  r&   rW   rD   r‡   r’  )
r   r×  rB   Z
jattrs_reqZ
pattrs_reqru  r–  r   r—  r˜  r"   r"   r#   rô   @  s6    þ

ÿ
ÿ  ÿz&JobViewer.on_job_authenticate_activatec                 C   s&   | j  ¡  | jr| j ¡  |  ¡  d S r   )r+  rÖ   r7  rb  )r   Z
toolbuttonr"   r"   r#   Úon_refresh_clicked\  s    

zJobViewer.on_refresh_clickedc           
      C   s  zt j| j| j| jd}W n tk
r0   Y dS X | jD ]Ö}|| jkr8t 	¡ }tj
t|ƒd}| j ||¡}t ¡ }| |¡ t ¡ }|jdtdƒ|dd t ¡ }|jdtdƒ|dd t tt¡}	| |	¡ | ¡  tjj¡ |	 dtjj¡ |	|f| j|< | j||d	 q8| j ¡  d
S )z> For every selected job create notebook page with attributes. r  Fre   r   ÚNamerÁ   r_   ZValue)ÚconnN)r>   r?   rk   r   rl   r@   ri   rÞ   r   ZScrolledWindowr   r	  r>  Zappend_pageZTreeViewr=  r  Zinsert_column_with_attributesrn   Z	ListStorer  r  r  r  ÚNONEr  r  Z	ASCENDINGrˆ  r8  r…   )
r   r×  rB   ru  Zscrolledwindowrf   Z
page_indexZattr_treeviewrC  Ú
attr_storer"   r"   r#   rõ   c  s>    þ



 ÿ ÿ
z$JobViewer.on_job_attributes_activatec           	      C   sâ   |dk	r|}n2zt j| j| j| jd}W n tk
r>   Y dS X || jkrÞ| j| \}}z| |¡}W n@ tk
r|   Y dS  t j	k
r¦   | j
 |¡ | j|= Y dS X | ¡  | ¡ D ]$\}}|dkrÊq¸| |t|ƒg¡ q¸dS )z* Update attributes store with new values. Nr  F)zjob-idzjob-printer-up-time)r>   r?   rk   r   rl   r@   rÞ   r‰  rŠ  rX   r>  rP  Úclearr.   rI   r	  )	r   ru  r  rB   r  rR  r2   r7   rá  r"   r"   r#   rˆ  ƒ  s0    þ

z&JobViewer.update_job_attributes_viewerc                 C   s    |  dtj¡}|tjkrdS dS )Nr«   FT)r&   r>   rÍ  )r   ÚjobdataÚstater"   r"   r#   Újob_is_active¢  s    
zJobViewer.job_is_activec           
      C   sX  d }|d krZ| j d k	rZ| j  ¡ }d}| j |g ¡D ]}|| j kr2| j } qLq2|d krZd | _ |d k	r| j |g ¡D ]}|d kr‚|}qp||krp|}qp|d k	rT| ¡ }|tjkrTtj| }| ¡ }znt	j
 ¡ }| |dd¡}	|	 || ¡ d | ¡ d |	 ¡ d |	 ¡ d | ¡ d | ¡ d ddtjjd¡ W n$ tjk
rR   td| ƒ Y nX |S )NFr   r   é   g      à?éÿ   rÇ   )Úworst_reasonÚget_printerrá   r&   Ú	get_levelr   ZREPORTZ
LEVEL_ICONr  r   r  r  rÉ   r  r   r!  r   r"  r#  r   rË   r‡   )
r   rÏ   r   r
  ÚfoundrÄ  ÚlevelrÎ   rÍ   Úemblemr"   r"   r#   Úadd_state_reason_emblemª  sN    










  ø	z!JobViewer.add_state_reason_emblemc                 C   s’   | j s
d S |d kr$t| j ¡ ƒdk}|rf| j}| j ¡ D ]*\}}| dtj¡}|tj	kr8| j
} qlq8n| j}z|  |¡}W n   tƒ  Y nX |S )Nr   r«   )rØ   rm   rÜ   rL   r  r.   r&   r>   rÎ  r‹  r  r  r  r«  )r   Ú	have_jobsrÏ   ru  r  r•  r"   r"   r#   Úget_icon_pixbufÕ  s"    
zJobViewer.get_icon_pixbufc                 C   s\   | j s
d S |d krLt| jƒ}|dkr.tdƒ}n|dkr@tdƒ}ntdƒ| }| j |¡ d S )Nr   zNo documents queuedr_   z1 document queuedz%d documents queued)rØ   rm   rÜ   rn   r$  Zset_tooltip_markup)r   ÚtooltiprÅ  r"   r"   r#   Úset_statusicon_tooltipí  s    


z JobViewer.set_statusicon_tooltipc              	   C   s  t ƒ }| j ¡ D ]\}}t|ƒdkr| |¡ qtd| ƒ t ƒ }t|ƒrˆt ƒ }| jD ]$}| j| d }||krV| |¡ qVtd| ƒ g }|D ]}| | j| ¡ qd | _	t|ƒdkrè|d }|D ]}	|	|krÄ|	}qÄ|| _	td| ƒ t
 ¡  | j d¡ | j	d k	r&| j	 ¡ \}
}| j d|¡ nªd }d}d}d}| jD ]`}z| j| d }W n tk
rn   Y q<Y nX |tjkr†|d }n|tjkr<|d }q<|dks²|dkrÐtd	ƒ||f }| j d|¡ | jr| js| j|d
}| j |¡ |  ¡  | j|d t
 ¡  d S )Nr   zUpset printers: %sújob-printer-namezMy upset printers: %szWorst reason: %sr›  r«   r_   zprocessing / pending:   %d / %d©r  )r  )rO   rá   r.   rm   r=  r‡   rß   rÜ   rH   r
  r   ra  r±   ÚpopÚget_descriptionÚpushrD   r>   r‹  rÎ  rn   rØ   rÛ   r  r$  r%  rÆ  r  rc  )r   r  Zupset_printersr   ÚreasonsZmy_upset_printersru  Z
my_reasonsr
  rÄ  r`   r  Zstatus_messageZ
processingÚpendingZ	job_staterÏ   r"   r"   r#   Úupdate_statusü  sf    


zJobViewer.update_statusc                 C   sN   |  ¡ }|tjk rd S ddddddddd	d
dg}| ¡ |kr@d S |  |¡ d S )NÚotherzcom.apple.print.recoverableúconnecting-to-devicezcups-remote-pendingzcups-remote-pending-heldzcups-remote-processingzcups-remote-stoppedzcups-remote-canceledzcups-remote-abortedzcups-remote-completedzcups-waiting-for-job-completed)r  r   ZWARNINGÚ
get_reasonÚnotify_printer_state_reason)r   rÄ  r  Z	blacklistr"   r"   r#   Ú(notify_printer_state_reason_if_important<  s$    
çz2JobViewer.notify_printer_state_reason_if_importantc                 C   sæ   |  ¡ }|| jkr&tdt|ƒ ƒ d S | ¡ }|tjksD| ¡ dkrNtj	j
}ntj	j}| ¡ \}}tj ||d¡}d|_| |¡ | jr”| tj¡ | d| j¡ || j|  ¡ < |  ¡  z| ¡  W n tjk
rà   tƒ  Y nX d S )Nz Already sent notification for %sr  r   TrE  )Ú	get_tuplerã   r‡   r•   r  r   ZERRORr  r   ÚUrgencyZNORMALÚLOWr  ÚNotificationrx   Úuser_notifiedÚset_urgencyrÚ   Zset_timeoutZEXPIRES_NEVERr‚   Ú#on_state_reason_notification_closedrÆ  rþ   r   rË   r«  )r   rÄ  Útupler  Zurgencyr`   rÂ   rJ  r"   r"   r#   r   c  s2    


ÿ

ÿz%JobViewer.notify_printer_state_reasonc                 C   s"   t dt|ƒ ƒ d|_|  ¡  d S )NzNotification %s closedT)r‡   r•   rE  rÆ  )r   rJ  rÄ  r"   r"   r#   r(    s    z-JobViewer.on_state_reason_notification_closedc                 C   sP  | j  |i ¡}| dtdƒ¡}| d¡}|d k	r¼| d¡}|d kr˜dg}tj| j| j| j| jd}z|j	||d}W n t
jk
rŒ   Y d S X | d¡}|d k	r¼tj |¡\}	}
|	dkr¼d S | dtdƒ¡}tj td	ƒtd
ƒ||f d¡}| tjj¡ | d| j¡ ||_|| j|< |  ¡  z| ¡  W n tjk
rJ   tƒ  Y nX d S )Nr¨   r]  rª   r  r  rT   )ZsocketZippZhttpr™  r  zDocument printedz1Document `%s' has been sent to `%s' for printing.r   rE  )rÜ   r&   rn   rŽ  r?   r¯   rk   r   rl   rW   r>   rX   r£  r¤  r¥  r   r%  rx   r'  r#  r$  r‚   Ú$on_completed_job_notification_closedru  rç   rÆ  rþ   r   rË   r«  )r   ru  rk  r÷  r²  r±  r—  rB   r2   r´  rµ  r   rJ  r"   r"   r#   Únotify_completed_job…  sV    

ýÿ

ÿþûÿ
zJobViewer.notify_completed_jobc                 C   s   |j }| j|= |  ¡  d S r   )ru  rç   rÆ  )r   rJ  rÄ  ru  r"   r"   r#   r*  ·  s    z.JobViewer.on_completed_job_notification_closedc                 C   s*   | j  ¡  i | _tƒ | _i | _tƒ | _d S r   )r
  r  rÜ   rO   rß   rÝ   r9   rË  )r   Úmonr"   r"   r#   r,  ½  s
    
zJobViewer.on_refreshc                 C   s>  |  dd¡}z| j |¡}W n tk
r4   |}Y nX | jrJ|| jkrJd S ||d< || jkrj|  ||¡ nH|| jkr²| ¡ D ]4\}}	|| j	| kr||	| j	| |< t
d||	f ƒ q||| jkrÀd S |  |¡rØ| j |¡ n|| jkrî| j |¡ | jdd | jr:|  |¡sd S | j  |g ¡D ]}
|
js |  |
¡ q d S )Nrª   r›  r  zAdd %s=%s (my job)Tr  )r&   rË  rN   rD   rÕ   rÝ   r|  r7  r.   rÜ   r‡   r  rß   r=  rp  r  rØ   rá   r&  r!  )r   r,  ru  Ú	eventnamer   r  r   r   r¼  rá  rÄ  r"   r"   r#   r-  Ä  s8    





zJobViewer.job_addedc                 C   sÖ  |  dd¡}z| j |¡}W n tk
r4   |}Y nX | jrJ|| jkrJd S ||d< |  |¡rj| j |¡ n|| jkr€| j |¡ |  	||¡ |  
¡  || jkr¢d S | j| }| jr"|dksÖ|dkr"|d tjkr"|d }t|ƒtkrð|g}d}	|D ]}
|
 d	¡rød
}	 qqø|	s"|  |¡ | jrÒ|dksT|dkrÒ|d tjtjfkrÒ|| jkrÒd
}|d }|tjks’|tjkr˜|d dkr˜d}nˆ|d }|d }| d¡dkrÊtdƒ||f }nV| d¡dkrìtdƒ||f }n4| d¡dks|tjkrd}ntdƒ|||f }|rÒtdƒ | jd d
d tjtdƒ| jd}| tdƒtj j!tj"tj j#¡ | $tj j#¡ | %d¡ | &d¡ | 't(¡ tj) *dd¡}| %d¡ t +¡ }| ,tj-tj.j/¡ | 0|ddd¡ tj1 *dd¡}dtdƒ d  t2 3|¡ }z4|d! tj4kr6|d" }|d#7 }|td$ƒ| 7 }W n tk
rN   Y nX tj5|d%}| 6d
¡ | 7d
¡ | 8dd¡ | 0|ddd¡ | 0|ddd¡ |j9 0|ddd¡ | :d&| j;|¡ | j |¡ | <¡  d S )'Nrª   r›  r  újob-completedújob-state-changedr«   újob-state-reasonsFújob-canceledTzjob-stoppedr€  r­   znotify-textr¨   zbackend errorsr¾   zBThere was a problem sending document `%s' (job %d) to the printer.zfilter errorsz6There was a problem processing document `%s' (job %d).zbeing pausedz:There was a problem printing document `%s' (job %d): `%s'.zProblem detected)rV  zPrint Error)r`   ra   Z	_Diagnoserb   rc   r   z"<span weight="bold" size="larger">z	</span>

zprinter-staterS   ú z*The printer called `%s' has been disabled.re   rg   )=r&   rË  rN   rD   rÕ   r  rß   r=  rp  ry  r  rÜ   rØ   r>   ÚIPP_JOB_COMPLETEDrG   r4   Ú
startswithr+  r  rÎ  rà   r‹  rŒ  rð  rn   r‡   r&  r   ro   r¯   rp   rq   rr   ZSTOCK_OKrÁ  rt   ru   rv   r  r  rw   rx   ry   rz   ZSTOCK_DIALOG_ERRORr{   r|   r~   r<  r
   ÚescapeZIPP_PRINTER_STOPPEDr   Zset_use_markupr€   r}   r   r‚   rv  r…   )r   r,  ru  r-  r   r  r   r   r  ÚcanceledrÄ  Zmay_be_problemr•  Znotify_textr÷  rU  r†   r‰   rŠ   r   Zmarkupr7   rf   r"   r"   r#   r.  í  sî    




ÿþ

ÿþ
ÿýûÿ
þþÿÿþ
ÿ ÿ



ÿÿÿþÿ


 ÿzJobViewer.job_eventc                 C   sÔ   | j rt|dks$|dkrt|d tjkrt|d }t|ƒ t|ƒtkrF|g}d}|D ]}| d¡rNd} qfqN|st|  |¡ || jkr | j	 
| j| ¡ | j|= | j|= || jkr¶| j 
|¡ || jkrÈ| j|= |  ¡  d S )Nr.  r/  r«   r0  Fr1  T)rØ   r>   r3  r‡   rG   r4   r4  r+  rÝ   r
  rp  rÜ   rß   rÞ   r  )r   r,  ru  r-  r   r  r6  rÄ  r"   r"   r#   r/  ƒ  s2    ÿþ




zJobViewer.job_removedc           	      C   s°   |  ¡ \}}| ¡ }z| j| }W n" tk
rD   g }|| j|< Y nX d|_| |¡ |  ¡  | j ¡  | j	srd S | j
 ¡ D ].\}}|  |¡sq||d |kr||  |¡  q¬q|d S )NFr  )r  r  rá   rD   r&  rI   r  r°   r‘  rØ   rÜ   r.   r  r!  )	r   r,  rÄ  r`   rÂ   r   rI  rk  rl  r"   r"   r#   r0  £  s&    



zJobViewer.state_reason_addedc                 C   sú   |  ¡ }z| j| }W n tk
r4   tdƒ Y d S X z| |¡}W n tk
rb   tdƒ Y d S X ||= |  ¡  | j ¡  | j	s†d S | 
¡ }zR| j| }t|dd ƒdkrÎz| ¡  W n tjk
rÌ   Y nX | j|= |  ¡  W n tk
rô   Y nX d S )NzPrinter not foundzReason not foundrE  T)r  rá   rD   r‡   r¨  rÂ  r  r°   r‘  rØ   r"  rã   rG  r½   r   rË   rÆ  )r   r,  rÄ  r   r  rë  r)  rJ  r"   r"   r#   r1  ¾  s8    

zJobViewer.state_reason_removedc                 C   s   | j s
d S |  |¡ d S r   )rØ   r   )r   r,  rÄ  r"   r"   r#   r2  ä  s    zJobViewer.still_connectingc           
      C   s6  | j s
d S z0| j| }d }|D ]}| ¡ dkr|} q8qW n tk
rV   tdƒ Y nX |d k	rj| ¡ }n\tdƒ d }| j ¡ D ]0\}}}||kr€|dkr€tdƒ |||f} q²q€|d krÆtdƒ d S z| j| }	W n tk
rò   tdƒ Y d S X t|	dd ƒdkr2z|	 	¡  W n t
jk
r*   Y nX d|	_d S )	Nr  z(Couldn't find state reason (no reasons)!z#Couldn't find state reason in list!zFound from notifications listzBUnexpected now_connected signal (reason not in notifications list)zUnexpected now_connected signalrE  T)rØ   rá   r  rD   r‡   r"  rã   rL   rG  r½   r   rË   rE  )
r   r,  r   r  rÄ  rY   r)  r  râ  rJ  r"   r"   r#   r3  ê  sJ    


þ
zJobViewer.now_connectedc                 C   s   | j  |¡ d S r   )rË  rA   ©r   r,  r   r"   r"   r#   r4  	  s    zJobViewer.printer_addedc                 C   s   | j  ||¡ d S r   )rË  rK   )r   r,  r   r-  r   r"   r"   r#   r5  	  s    zJobViewer.printer_eventc                 C   s   | j  |¡ d S r   )rË  rM   r7  r"   r"   r#   r6  	  s    zJobViewer.printer_removedc                 G   s   |  dt| |d¡ƒ¡ d S )NrÂ   r   )r  r	  rÌ  )r   rD  rC  rÒ  rn  rl  r"   r"   r#   r   #	  s    z"JobViewer._set_job_job_number_textc                 G   sN   |  |d¡}z| j| }W n tk
r0   Y d S X | d| dtdƒ¡¡ d S )Nr   rÂ   r©   r]  ©rÌ  rÜ   rD   r  r&   rn   ©r   rD  rC  rÒ  rn  rl  ru  rk  r"   r"   r#   r  &	  s    ÿzJobViewer._set_job_user_textc                 G   sN   |  |d¡}z| j| }W n tk
r0   Y d S X | d| dtdƒ¡¡ d S )Nr   rÂ   r¨   r]  r8  r9  r"   r"   r#   r  0	  s    z JobViewer._set_job_document_textc           	      G   sp   |  |d¡}z| j|  d¡}W n tk
r6   Y d S X |dkrNdtdƒ }nd}| d| j| d | ¡ d S )	Nr   r0  zprinter-stoppedú - Zdisabledr›  rÂ   r  )rÌ  rÜ   r&   rD   rn   r  )	r   rD  rC  rÒ  rn  rl  ru  r  rÄ  r"   r"   r#   r  9	  s    zJobViewer._set_job_printer_textc           	      G   sb   |  |d¡}z| j| }W n tk
r0   Y d S X tdƒ}d|krRt|d ƒd }| d|¡ d S )Nr   r]  r§   ÚkrÂ   )rÌ  rÜ   rD   rn   r	  r  )	r   rD  rC  rÒ  rn  rl  ru  rk  Úsizer"   r"   r#   r  F	  s    zJobViewer._set_job_size_textc                 C   sø  z| j | }W n tk
r$   Y d S X | dtj¡}t|ƒ}|tjkoT| dd¡dk}d }|rjtdƒ}nx|tjkr‚tdƒ}| d¡}|d k	r
z^| d¡}|dkrðt	 
¡ }	t|d |… ƒ}
||d	 d …  d¡}|dkr||d	 7 }t||d	 |… ƒ}t||d	 d … ƒ}nt||d	 d … ƒ}d
}|	j}|
|	jk sr|
|	jkrz||	jk sr||	jkrz||	jk rz|d	7 }|	j|	j||
||d
d
df	}tj d¡}dtjd< t	 |¡}|d krÈtjd= n
|tjd< t	 |¡}tdƒt	 d|¡ }W n tk
r   Y nX |dkrtdƒ}nb|dkr2tdƒ}nN|dkrFtdƒ}n:|dkrZtdƒ}n&|dkrntdƒ}n|dkrâtdƒ}n`zHtjtdƒtjtdƒtjtdƒtjtdƒtjtdƒtjtd ƒi| }W n tk
rà   Y nX |d krôtd!ƒ}|S )"Nr«   r€  r†  r­   zHeld for authenticationZHeldú:r¾   r_   r   ZTZZUTCzHeld until %sz%Xzday-timezHeld until day-timeZeveningzHeld until eveningZnightzHeld until night-timezsecond-shiftzHeld until second shiftzthird-shiftzHeld until third shiftZweekendzHeld until weekendZPendingZ
ProcessingZStoppedZCanceledZAbortedZ	Completedr]  )rÜ   rD   r&   r>   r‹  r¤   rŒ  rn   rð  re  ÚgmtimeÚtm_mdayÚtm_hourÚtm_minÚtm_secÚtm_yearÚtm_monr®  rÝ  Úmktimerg  rf  r  rÎ  r  rÍ  ZIPP_JOB_ABORTEDr3  )r   rk  rl  r•  rX  r”  r  ZuntilZcolon1rj  ZhhZcolon2ZmmZssZdayrÔ  Zold_tzZ
simpletimeZlocalr"   r"   r#   Ú_find_job_state_textR	  sº    

ÿÿ




ÿþýý
     ÿ






ÿ












     ûû
zJobViewer._find_job_state_textc                 G   s(  |  |d¡}z| j| }W n tk
r0   Y d S X | dtj¡}t|ƒ}|tjkrZ| j}	n| j}	|tj	krzlt
j ¡ }
|
 t
jdd¡}|	 ¡ }| |dd| ¡ | ¡ | ¡ d d | ¡ d d ddtjjd¡ |}	W n& tjk
 rþ   tdt
j ƒ Y nX n|d	 }| j|	|d
}	| d|	¡ d S )Nr   r«   g      &@r  r_   rÐ   r	  rÇ   r  )r   rÏ   )rÌ  rÜ   rD   r&   r>   r‹  r¤   r  r  rŒ  r   r  r  rÉ   rï   r  r  r   r!  r   r"  r#  r   rË   r‡   r  r  )r   rD  rC  rÒ  rn  rl  ru  r•  rX  rÎ   rÍ   r  r  r   r"   r"   r#   r  ¥	  s>    


  úzJobViewer._set_job_status_iconc                 G   sÖ   |  |d¡}z| j| }W n tk
r0   Y d S X z|d }W n& tk
rd   |  |¡}||d< Y nX |d }| j |g ¡}	t|	ƒdkrÆ|	d }
|	dd … D ]}||
krœ|}
qœ|
 ¡ \}}|d| 7 }| d|¡ d S )Nr   r…  r  r_   r:  rÂ   )	rÌ  rÜ   rD   rF  rá   r&   rm   r  r  )r   rD  rC  rÒ  rn  rl  ru  rÂ   r   r  r
  rÄ  r`   r    r"   r"   r#   r  É	  s(    
zJobViewer._set_job_status_text)NNFFTNN)N)F)N)N)N)N)N)N)N)N)N)N)N)Rr*   r+   r,   rO   r‡  r   r¢   r£   r¥   r(   rF  r*  rö   r;  rT  r&  r\  rb  rv  rt  r|  r~  ry  r’  r°  r¾  r½  rÆ  r  r  r“  r  rÇ  r'  rÚ  rã  rà  rå  rí   rî   rç  rè  ré  rð   rñ   rò   ró   rÐ  rÑ  rô   rÿ  rõ   rˆ  r  r  r  r  r  r!  r   r(  r+  r*  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r   r  r  r  r  rF  r  r  r"   r"   r"   r#   r¦   }  s¼   ù
 ÿ        ý
  ) 

 	:
"
fq
-@$
_
F
 

+


@'
2
)  &/
	S$r¦   )Br’   rŽ  r>   r)  Z	dbus.glibZdbus.servicerý  ZgiZrequire_versionZgi.repositoryr   r   r   r   r   r   Zguir   r+  r®  ró  r	   r¬  r¦  rÞ  Úsysre  Zurllib.parser£  Zxml.saxr
   Údebugrê   ZstatereasonrS  Ú	functoolsr   r   r   r¡  r  ÚgettextÚinstallrë   r   r   Z
pkgdatadirZpkgdatar  rÊ   ZSEARCHING_ICONZinitZSchemarx   ZSchemaFlagsr  ZSchemaAttributeTypeÚSTRINGZINTEGERr1   r   r-   r5   r9   rZ   r¦   r"   r"   r"   r#   Ú<module>   s€   


øÿb 