3
ZW                 @   sF  d dl Z d dlZeje je jd d dlZd dl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Zd dlZd dlT d dlT d dlZd dlmZ y
ejZW n ek
r   dZY nX G dd	 d	e	jZG d
d deZedkrBde
jd< ej Zdd Zdd Ze d e Z!e!j"de e!j"de e!j"de ej#  dS )    N)domain	localedir)GObject)Gtk)*)GtkGUIZ_remote_anyc               @   s   e Zd Zdd ZdS )_UnobtrusiveButtonc             K   sN   t jj| f| | jt jj | j }|j }|jd |j	dd|   d S )NTz<span size="small" zunderline="single" zcolor="#0000ee">%s</span>z&<span size="small" underline="single" )
r   Button__init__Z
set_reliefZReliefStyleNONEZ	get_childZget_textZset_use_markupZ
set_markup)selfargslabeltext r   2/usr/share/system-config-printer/serversettings.pyr
   1   s    
z_UnobtrusiveButton.__init__N)__name__
__module____qualname__r
   r   r   r   r   r   0   s   r   c               @   s   e Zd Zejjdf fejjdf fejjdf fdZdZd&ddZdd Z	dd	 Z
d
d Zdd Zdd Zd'ddZd(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 ))ServerSettingsN)zsettings-appliedzdialog-canceledzproblems-clickedz/admin/conf/cupsd.confc             C   sf  t j j|  tj||d| _|| _|| _| jddddddddd	d
ddddddgitj	d t
tdd}| jj|ddd |jd| j |j  | jjd| j i | _| j| _| j| _| j| _| j| _| jj }|jtjj | j |d| j! x| jj" D ]}| jj#| qW tj$dtj% dd}| jj&| | j'  | j(  |rP| jj)| | j*  | jj  d S )N)host
encryptionServerSettingsDialogchkServerBrowsechkServerSharechkServerShareAnychkServerRemoteAdminchkServerAllowCancelAllchkServerLogDebughboxServerBrowserbPreserveJobFilesrbPreserveJobHistoryrbPreserveJobNonetvBrowseServersframeBrowseServersbtAdvServerAddbtAdvServerRemove)r   z	Problems?)r   Fr   Zclickedresponsechanged )r   )+r   r
   authconnZ
Connectioncupsconn_host_parentZ
getWidgetsconfigPACKAGEr   _r   Zpack_endconnectproblems_clickedshowr   on_responsehandler_idsdialogr#   browse_treeviewr%   addr&   removeget_selectionZset_moder   ZSelectionModeZMULTIPLE_connecton_treeview_selection_changedget_columnsZremove_columnZTreeViewColumnZCellRendererTextZappend_column_fillAdvanced
_fillBasicZset_transient_forZconnect_signals)r   r   r   parentproblems	selectioncolumncolr   r   r   r
   E   sX    

zServerSettings.__init__c             C   s   | j S )N)r6   )r   r   r   r   
get_dialog~   s    zServerSettings.get_dialogc             C   s   | j d d S )Nzproblems-clicked)emit)r   buttonr   r   r   r2      s    zServerSettings.problems_clickedc             C   s  t j }y| jj| j|d W n: tjk
rX } z|j\}t|| j	  W Y d d }~X nX dd }d}d}d}g | _
|jd x|D ]}|jd}|j j }	|	jdry||	}W n   Y nX q|	jd	ry||	}W n   Y nX q|	jd
ry||	}W n   Y nX q|	jdr| j
j|tdd  j  qW | jj| |r\| jjd n |rp| jjd n| jjd || _|| _tjt}
| jj|
 x| j
D ]}|
j|gd qW d S )N)filec          	   S   sT   | j dd j }|dkrdS |dkr*dS yt|dkr<dS W n   Y nX td S )N    trueonenabledyesTfalseoffdisabledno0Fr   )rK   rL   rM   rN   )rO   rP   rQ   rR   rS   )splitstripintRuntimeError)lineZarg1r   r   r   parse_yesno   s    z1ServerSettings._fillAdvanced.<locals>.parse_yesnoTFr   zUTF-8zpreservejobhistory zpreservejobfiles z	browsing zbrowsepoll )row)tempfileTemporaryFiler+   getFileRESOURCEcups	HTTPErrorr   show_HTTP_Errorr-   browse_pollseekdecodelowerrU   
startswithappendlenr$   set_sensitiver    
set_activer!   r"   preserve_job_historypreserve_job_filesr   Z	ListStorestrr7   Z	set_model)r   fesrY   rk   rl   ZbrowsingrX   lmodelserverr   r   r   r>      sZ    





 
zServerSettings._fillAdvancedc             C   s  t  | _| jjtd y| jj | _W nH tjk
rp } z*|j	\}}t
||| j | jj   W Y d d }~X nX | jj  x| jtjf| jtjf| jtf| jtjf| jtjf| jtjfgD ]\\}}||_|| jkr|jt| j|  |jd |j  q|jd |jd |j  qW tj| jkr6| jj  n
| jj  ytj}t| j| }|| _ W n t!k
rt   Y nX | j"| j d S )Nzfetching server settingsTF)#setr(   r+   _begin_operationr0   ZadminGetServerSettingsserver_settingsr_   IPPErrorr   show_IPP_Errorr-   _end_operationr   CUPS_SERVER_REMOTE_PRINTERSr   CUPS_SERVER_SHARE_PRINTERSr   try_CUPS_SERVER_REMOTE_ANYr   CUPS_SERVER_REMOTE_ADMINr   CUPS_SERVER_USER_CANCEL_ANYr   CUPS_SERVER_DEBUG_LOGGINGsettingrj   rV   ri   r3   hider$   Zserver_is_publishingAttributeErroron_server_changed)r   ro   mwidgetr   flagZ
publishingr   r   r   r?      sF    













zServerSettings._fillBasicc             C   st   t d|  |j}|| jkrPtt|j | j| krD| jj| n| jj| | j	j }| j
j|olt| jk d S )Nzon_server_changed: %s)Z
debugprintr   rv   rm   rV   
get_activer(   discardr8   r   r   ri   r|   )r   r   r   Zsharingr   r   r   r      s    

z ServerSettings.on_server_changedc             C   s8   |j ||}|| jkr g | j|< | j| j||f d S )N)r1   r5   rg   )r   r   signalZhandlerreasonidr   r   r   r;      s    

zServerSettings._connectc             C   s8   || j kr4x | j | D ]\}}|j| qW | j |= d S )N)r5   Z
disconnect)r   r   r   r   r   r   r   _disconnect  s    
zServerSettings._disconnectc             C   s   | j j|j dk d S )Nr   )r9   ri   Zcount_selected_rows)r   rB   r   r   r   r<     s    z,ServerSettings.on_treeview_selection_changedc             C   s   | j j }|jdtdgd}|jd | j j d }|j d }|jdd | j jt	j
 |d | j|d| jd | j|d	| jd d S )
Nr   zEnter hostname)rZ   FeditableTZeditededitzediting-canceled)r7   	get_modelinsertr0   ri   r=   Z	get_cellsset_propertyZ
set_cursorr   TreePathr;   on_browse_poll_editedon_browse_poll_edit_cancel)r   rG   rr   iterrD   cellr   r   r   on_add_clicked  s    

zServerSettings.on_add_clickedc             C   s  | j j }|j|}|j|d| |jd |jdd | jjd | jd d}yt	j
|dt	jddt	j W n t	jk
r   |jd}d}xj|D ]b}	|	d dks|	jdrd}P x:|	D ]2}
|s|
j rd}|
j p|
j p|
dksd}P qW |sP qW |r| rd}Y nX |r~d}|j }x`|rz|j|d|krl|d	7 }|d
krld}| j j }|j| P |j|}q(W n
|j| d S )Nr   Fr   Tr   rS   .-rJ      )r7   r   get_iterZ	set_valuestop_editingr   r8   ri   r   socketZgetaddrinfoZ	AF_UNSPECZAI_NUMERICHOSTZgaierrorrT   endswithisalphaisdigitget_iter_first	get_valuer:   Zselect_iter	iter_nextr9   )r   r   pathZnewvaluerr   r   ZvalidZlabelsZ
seen_alphar   charcountirB   r   r   r   r     sZ    











z$ServerSettings.on_browse_poll_editedc             C   s^   |j d |jdd | jj }|jtj }|j| | jj	d | jj	d | j
d d S )NTr   Fr   )r   r   r7   r   r   r   r   r9   r8   ri   r   )r   r   rr   r   r   r   r   r   S  s    


z)ServerSettings.on_browse_poll_edit_cancelc                s`   | j j  | j j }|j } fdd|d D }x(|D ] }|j } j|} j| q8W d S )Nc                s   g | ]}t jj |qS r   )r   ZTreeRowReferencenew).0r   )rr   r   r   
<listcomp>a  s    z4ServerSettings.on_remove_clicked.<locals>.<listcomp>rJ   )r7   r   r:   Zget_selected_rowsget_pathr   r9   )r   rG   rB   ZrowsZrefsrefr   r   r   )rr   r   on_remove_clicked]  s    



z ServerSettings.on_remove_clickedc             C   sN   |t jjks|t jjkr:| j  | jj  | jd ~ d S | j  | j	  d S )Nzdialog-canceled)
r   ResponseTypeZCANCELZOKr   r6   r   rF   	saveBasicsaveAdvanced)r   r6   r'   r   r   r   r4   g  s    

zServerSettings.on_responsec             C   sh   yNd}xD|dkrJy| j j  P W q tk
rF   tjd |d7 }Y qX qW W n tk
rb   Y nX d S )NrJ      )r+   r;   rW   timesleepr   )r   Zattemptr   r   r   
_reconnects  s    


zServerSettings._reconnectc             C   s  | j j }|p| jj }| jj }g }|j }x$|rR|j|j|d |j|}q0W t	|t	| j
kr|| jkr|| jkr| j  | jj  | jd ~ d S tj }y| jj| j|d W n6 tjk
r } z|j\}t|| j d S d }~X nX d }	 }
}|sd}	|rd}
x|D ]}|d| 7 }qW |jd tj }d }}d}d}x6|D ].}|jd	}|j j }|jd
rVd}P qVW x|D ]}|jd	}|j j }|jdr|rq|	}d}n|jdr|rސq|
}d}nx|r|jd
r|rq|j|j d	 d}qnB| r`|jdr`|s`|j|j d	 |j|j d	 d}q|j|j d	 qW |s|j|	j d	 |s|j|
j d	 |s|j|j d	 |j!  |j" }t#j$|dt#j% y| jj&d|d W nr tj'k
r( } z|j\}}t(||| j d S d }~X n8 tjk
r^ } z|j\}t|| j d S d }~X nX t)j*d | j+  | j  | jd | jj  ~ d S )Nr   zsettings-applied)rH   r)   zPreserveJobHistory No
zPreserveJobFiles Yes
zBrowsePoll %s
FzUTF-8zbrowsepoll Tzpreservejobhistory zpreservejobfiles z	browsing z/admin/conf/cupsd.conf)fdrJ   ),r    r   r!   r7   r   r   rg   r   r   rt   rb   rl   rk   r   r6   r   rF   r[   r\   r+   r]   r^   r_   r`   r   ra   rc   rd   re   rU   rf   writeencodeflushfilenooslseekSEEK_SETZputFilerw   rx   r   r   r   )r   rl   rk   rr   rb   r   rn   ro   rp   Zjob_history_lineZjob_files_lineZbrowsepoll_linesrs   confZwrote_preserve_historyZwrote_preserve_filesZwrote_browsepollZhas_browsepollrX   rq   r   r   r   r   r   r     s    
















zServerSettings.saveAdvancedc             C   s\  t  }xj| jtjf| jtjf| jtf| jtj	f| j
tjf| jtjfgD ](\}}|| jkrZqFtt|j ||< qFW | jjtd y| jj| W n| tjk
r } z&|j\}}t||| j | jj  dS d }~X n: tk
r } ztd || j | jj  dS d }~X nX | jj  t | _| jjtjd}|jtjd}|dkrF|dkrFy| jdksr| jd dkrt j! }	|	j"st j# }	|	j$ }
nd}
|
s t%j&| j'ddt%j(j)t%j*j+tdd}|j,td	 |j-t%j.t%j/j0tdt%j/j1 |j2 }|j3  |t%j/j1kr |	j4t j5 |	j6  W n" t7j8t9fk
rD   t:  Y nX t;j<d
 | j=  d S )Nzmodifying server settingsTrS   Z	localhostr   /zAdjust Firewall)r@   ZmodalZdestroy_with_parentZmessage_typeZbuttonsr   z>Adjust the firewall now to allow all incoming IPP connections?rJ   )>dictr   r_   rz   r   r{   r   r|   r   r}   r   r~   r   r   rv   rm   rV   r   r+   ru   r0   ZadminSetServerSettingsrw   r   rx   r6   ry   rW   rt   r(   getr,   firewallsettingsZ	FirewallDrunningZSystemConfigFirewallZcheck_ipp_server_allowedr   ZMessageDialogr   ZMessageTypeZQUESTIONZButtonsTyper   Zformat_secondary_textZadd_buttonsZSTOCK_CANCELr   ZNOZYESrunZdestroyZadd_serviceZIPP_SERVER_SERVICEr   dbusZDBusException	ExceptionZnonfatalExceptionr   r   r   )r   Zsetting_dictr   r   ro   r   rp   Zold_settingZnew_settingrn   Zallowedr6   r'   r   r   r   r     sn    




 






zServerSettings.saveBasic)NNN)N)N)r   r   r   r   ZSignalFlagsZRUN_LASTZ__gsignals__r^   r
   rE   r2   r>   r?   r   r;   r   r<   r   r   r   r   r4   r   r   r   r   r   r   r   r   ;   s*   
9B-

8

}r   __main__ZuiZSYSTEM_CONFIG_PRINTER_UIc              G   s   t j  d S )N)loopquit)r   r   r   r   r   K  s    r   c             C   s   t d|   d S )Nz%s: problems)print)objr   r   r   rA   N  s    rA   Tzdialog-canceledzsettings-appliedzproblems-clicked)$r.   gettextinstallr/   r   r_   r   Zgi.repositoryr   r   r   r   r[   r   r*   debugZerrordialogsr   Zguir   ZCUPS_SERVER_REMOTE_ANYr|   r   r	   r   r   r   environZMainLoopr   r   rA   Zset_debuggingrp   r1   r   r   r   r   r   <module>   sH   

    

