U
    9¡_TW  ã                   @   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 z
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 ¡ Zdd„ Zdd„ Ze dƒ eƒ Z!e! "de¡ e! "de¡ e! "de¡ e #¡  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|Ž |  t jj¡ |  ¡ }| ¡ }| d¡ | 	dd|  ¡ d S )NTz&<span size="small" underline="single" zcolor="#0000ee">%s</span>)
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dfejjddfejjdd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 )*ÚServerSettingsNr   )úsettings-appliedúdialog-canceledúproblems-clickedú/admin/conf/cupsd.confc                 C   sb  t 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 |ddd¡ | d| j¡ | ¡  | j d| j¡ i | _| j| _| j| _| j| _| j| _| j ¡ }| tjj¡ |   |d| j!¡ | j "¡ D ]}| j #|¡ qøtj$dt %¡ dd}| j &|¡ |  '¡  |  (¡  |rL| 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   s^    òÿï
zServerSettings.__init__c                 C   s   | j S ©N)r:   )r   r   r   r   Ú
get_dialog~   s    zServerSettings.get_dialogc                 C   s   |   d¡ d S )Nr   )Úemit)r   Úbuttonr   r   r   r6      s    zServerSettings.problems_clickedc              
   C   sº  t  ¡ }z| jj| j|d W n: tjk
rX } z|j\}t|| j	ƒ ‚ W 5 d }~X Y nX dd„ }d}d}d}g | _
| d¡ |D ]´}| d¡}| ¡  ¡ }	|	 d¡rÂz||	ƒ}W n   Y nX q‚|	 d	¡rèz||	ƒ}W n   Y nX q‚|	 d
¡rz||	ƒ}W n   Y nX q‚|	 d¡r‚| j
 |tdƒd …  ¡ ¡ q‚| j |¡ |rX| j d¡ n |rl| j d¡ n| j d¡ || _|| _t t¡}
| j |
¡ | j
D ]}|
j|gd q d S )N©Úfilec                 S   sV   |   d¡d  ¡ }|dkrdS |dkr*dS zt|ƒdkr>W dS W n   Y nX t‚d S )Nú é   )ÚtrueZonÚenabledZyesT)ZfalseZoffZdisabledZnoÚ0Fr   )ÚsplitÚstripÚintÚRuntimeError)ÚlineZarg1r   r   r   Úparse_yesnoŽ   s    
z1ServerSettings._fillAdvanced.<locals>.parse_yesnoTFr   úUTF-8úpreservejobhistory úpreservejobfiles ú	browsing úbrowsepoll ©Úrow)ÚtempfileÚTemporaryFiler/   ÚgetFileÚRESOURCEÚcupsÚ	HTTPErrorr   Úshow_HTTP_Errorr1   Úbrowse_pollÚseekÚdecodeÚlowerrU   Ú
startswithÚappendÚlenr(   Úset_sensitiver$   Ú
set_activer%   r&   Úpreserve_job_historyÚpreserve_job_filesr   Z	ListStoreÚstrr;   Z	set_model)r   ÚfÚeÚsrY   rq   rr   ZbrowsingrX   ÚlÚmodelÚserverr   r   r   rB   „   sZ    






zServerSettings._fillAdvancedc              
   C   s‚  t ƒ | _| j tdƒ¡ z| j ¡ | _W nH tjk
rp } z(|j	\}}t
||| jƒ | j ¡  ‚ W 5 d }~X Y nX | j ¡  | jtjf| jtjf| jtf| jtjf| jtjf| jtjffD ]\\}}||_|| jkrú| t| j| ƒ¡ | d¡ | ¡  qº| d¡ | d¡ | ¡  qºtj| jkr2| j ¡  n
| j ¡  ztj}t| j| ƒ}|| _ W n t!k
rp   Y nX |  "| j¡ d S )Nzfetching server settingsTF)#Úsetr,   r/   Ú_begin_operationr4   ZadminGetServerSettingsÚserver_settingsre   ÚIPPErrorr   Úshow_IPP_Errorr1   Ú_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Úsettingrp   rV   ro   r7   Úhider(   Zserver_is_publishingÚAttributeErrorÚon_server_changed)r   ru   ÚmÚwidgetr†   ÚflagZ
publishingr   r   r   rC   Æ   sF    







ú







zServerSettings._fillBasicc                 C   st   t d| ƒ |j}|| jkrPtt| ¡ ƒƒ| j| krD| j |¡ n| j |¡ | j	 ¡ }| j
 |olt| jk¡ d S )Nzon_server_changed: %s)Z
debugprintr†   r|   rs   rV   Ú
get_activer,   Údiscardr<   r   r   ro   r‚   )r   r‹   r†   Zsharingr   r   r   r‰   ó   s    

ÿz ServerSettings.on_server_changedc                 C   s8   |  ||¡}|| jkr g | j|< | j|  ||f¡ d S rI   )r5   r9   rm   )r   r‹   ÚsignalZhandlerÚreasonÚidr   r   r   r?      s    

zServerSettings._connectc                 C   s4   || j kr0| j | D ]\}}| |¡ q| j |= d S rI   )r9   Z
disconnect)r   r   r‹   r‘   r   r   r   Ú_disconnect  s    
zServerSettings._disconnectc                 C   s   | j  | ¡ dk¡ d S )Nr   )r=   ro   Zcount_selected_rows)r   rF   r   r   r   r@     s    z,ServerSettings.on_treeview_selection_changedc                 C   sŠ   | j  ¡ }|jdtdƒgd}| d¡ | j  ¡ d }| ¡ d }| dd¡ | j  t	 
¡ |d¡ |  |d| jd¡ |  |d	| jd¡ d S )
Nr   zEnter hostnamer_   FÚeditableTZeditedÚeditzediting-canceled)r;   Ú	get_modelÚinsertr4   ro   rA   Z	get_cellsÚset_propertyZ
set_cursorr   ÚTreePathr?   Úon_browse_poll_editedÚon_browse_poll_edit_cancel)r   rL   rx   ÚiterrH   Úcellr   r   r   Úon_add_clicked  s    

 ÿzServerSettings.on_add_clickedc                 C   s†  | j  ¡ }| |¡}| |d|¡ | d¡ | dd¡ | j d¡ |  d¡ d}zt	 
|dt	jddt	j¡ W n  t	jk
r   | d¡}d}|D ]d}	|	d dks®|	 d¡r¶d} qú|	D ]4}
|sÎ|
 ¡ rÎd}|
 ¡ sº|
 ¡ sº|
dksºd} qðqº|s” qúq”|r
|s
d}Y nX |rxd}| ¡ }|r‚| |d¡|krh|d	7 }|d
krhd}| j  ¡ }| |¡ q‚| |¡}q"n
| |¡ d S )Nr   Fr“   Tr”   rS   Ú.ú-rP   é   )r;   r•   Úget_iterZ	set_valueÚstop_editingr—   r<   ro   r’   ÚsocketZgetaddrinfoZ	AF_UNSPECZAI_NUMERICHOSTZgaierrorrT   ÚendswithÚisalphaÚisdigitÚget_iter_firstÚ	get_valuer>   Zselect_iterÚ	iter_nextr=   )r   rœ   ÚpathZnewvaluerx   r›   ZvalidÚlabelsZ
seen_alphar   ÚcharÚcountÚirF   r   r   r   r™     sb    



ÿ
ÿÿþ



z$ServerSettings.on_browse_poll_editedc                 C   s^   |  d¡ | dd¡ | j ¡ }| t ¡ ¡}| |¡ | j 	d¡ | j 	d¡ |  
d¡ d S )NTr“   Fr”   )r¢   r—   r;   r•   r¡   r   r˜   r=   r<   ro   r’   )r   rœ   rx   r›   r   r   r   rš   S  s    


z)ServerSettings.on_browse_poll_edit_cancelc                    s\   | j  ¡ ‰ | j  ¡ }| ¡ }‡ fdd„|d D ƒ}|D ] }| ¡ }ˆ  |¡}ˆ  |¡ q6d S )Nc                    s   g | ]}t j ˆ |¡‘qS r   )r   ZTreeRowReferenceÚnew)Ú.0rª   ©rx   r   r   Ú
<listcomp>a  s     z4ServerSettings.on_remove_clicked.<locals>.<listcomp>rP   )r;   r•   r>   Zget_selected_rowsZget_pathr¡   r=   )r   rL   rF   ZrowsZrefsÚrefrª   r›   r   r±   r   Úon_remove_clicked]  s    


z ServerSettings.on_remove_clickedc                 C   sN   |t jjks|t jjkr:|  ¡  | j ¡  |  d¡ ~ d S |  ¡  |  	¡  d S )Nr   )
r   ÚResponseTypeZCANCELZOKr’   r:   r‡   rK   Ú	saveBasicÚsaveAdvanced)r   r:   r+   r   r   r   r8   g  s    
ÿ

zServerSettings.on_responsec                 C   sf   zLd}|dkrJz| j  ¡  W qJW q tk
rF   t d¡ |d7 }Y qX qW n tk
r`   Y nX d S )NrP   é   )r/   r?   rW   ÚtimeÚsleeprˆ   )r   Zattemptr   r   r   Ú
_reconnects  s    

zServerSettings._reconnectc              
   C   s¨  | j  ¡ }|p| j ¡ }| j ¡ }g }| ¡ }|rP| | |d¡¡ | |¡}q.t	|ƒt	| j
ƒkr˜|| jkr˜|| jkr˜|  ¡  | j ¡  |  d¡ ~ d S t ¡ }z| jj| j|d W n> tjk
rô } z|j\}t|| jƒ W Y ¢d S d }~X Y nX d }	 }
}|sd}	|rd}
|D ]}|d| 7 }q| d¡ t ¡ }d }}d}d}|D ]2}| d	¡}| ¡  ¡ }| d
¡rTd} qˆqT| d¡ |D ]â}| d	¡}| ¡  ¡ }| d¡rÐ|rÆq–|	}d}n–| d¡rð|ræq–|
}d}nv|r&| d
¡r&|rq–| |  d	¡¡ d}q–n@|sf| d¡rf|sf| |  d	¡¡ | |  d	¡¡ d}q–| |  d	¡¡ q–|s| |	  d	¡¡ |s¦| |
  d	¡¡ |s¼| |  d	¡¡ | !¡  | "¡ }t# $|dt#j%¡ z| jj&d|d W n‚ tj'k
r4 } z"|j\}}t(||| jƒ W Y ¢d S d }~X Y n@ tjk
rr } z|j\}t|| jƒ W Y ¢d S d }~X Y nX t) *d¡ |  +¡  |  ¡  |  d¡ | j ¡  ~ d S )Nr   r   rM   r-   zPreserveJobHistory No
zPreserveJobFiles Yes
zBrowsePoll %s
FrZ   r^   Tr[   r\   r]   r   )ÚfdrP   ),r$   r   r%   r;   r•   r§   rm   r¨   r©   rz   rh   rr   rq   r’   r:   r‡   rK   ra   rb   r/   rc   rd   re   rf   r   rg   ri   rj   rk   rU   rl   ÚwriteÚencodeÚflushÚfilenoÚosÚlseekÚSEEK_SETZputFiler}   r~   r¹   rº   r»   )r   rr   rq   rx   rh   r›   rt   ru   rv   Zjob_history_lineZjob_files_lineZbrowsepoll_linesry   ÚconfZwrote_preserve_historyZwrote_preserve_filesZwrote_browsepollZhas_browsepollrX   rw   r¼   rŠ   r   r   r   r·   „  sÊ    
ÿ
ÿþ






ÿÿ



zServerSettings.saveAdvancedc              
   C   sh  t ƒ }| jtjf| jtjf| jtf| jtj	f| j
tjf| jtjffD ](\}}|| jkrXqDtt| ¡ ƒƒ||< qD| j tdƒ¡ z| j |¡ W nŒ tjk
rÚ } z,|j\}}t||| jƒ | j ¡  W Y ¢dS d }~X Y nB tk
r } z"td || jƒ | j ¡  W Y ¢dS d }~X Y nX | j ¡  tƒ | _| j tjd¡}| tjd¡}|dkrR|dkrRzÎ| jdks~| jd dkr t  !¡ }	|	j"s–t  #¡ }	|	 $¡ }
nd}
|
s,t%j&| j'ddt%j(j)t%j*j+tdƒd}| ,td	ƒ¡ | -t%j.t%j/j0tdƒt%j/j1¡ | 2¡ }| 3¡  |t%j/j1kr,|	 4t j5¡ |	 6¡  W n" t7j8t9fk
rP   t:ƒ  Y nX t; <d
¡ |  =¡  d S )Nzmodifying server settingsTrS   Z	localhostr   ú/zAdjust Firewall)rD   ZmodalZdestroy_with_parentZmessage_typeZbuttonsr   z>Adjust the firewall now to allow all incoming IPP connections?rP   )>Údictr   re   r€   r   r   r   r‚   r    rƒ   r!   r„   r"   r…   r|   rs   rV   r   r/   r{   r4   ZadminSetServerSettingsr}   r   r~   r:   r   rW   rz   r,   Úgetr0   Ú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†   ru   rŠ   rv   Zold_settingZnew_settingrt   Zallowedr:   r+   r   r   r   r¶     sz    




ú
 




ÿÿ
 ü ÿ
zServerSettings.saveBasic)NNN)N)N)r   r   r   r   ZSignalFlagsZRUN_LASTZ__gsignals__rd   r
   rJ   r6   rB   rC   r‰   r?   r’   r@   r   r™   rš   r´   r8   r»   r·   r¶   r   r   r   r   r   ;   s.   ý
9B-

8

 r   Ú__main__ZuiZSYSTEM_CONFIG_PRINTER_UIc                  G   s   t  ¡  d S rI   )ÚloopÚquit)r   r   r   r   rÏ   N  s    rÏ   c                 C   s   t d|  ƒ d S )Nz%s: problems)Úprint)Úobjr   r   r   rE   Q  s    rE   Tr   r   r   )$r2   ÚgettextÚinstallr3   r   re   rË   Zgi.repositoryr   r   rÁ   r£   ra   r¹   r.   ÚdebugZerrordialogsrÈ   Zguir   ZCUPS_SERVER_REMOTE_ANYr‚   rˆ   r	   r   r   r   ÚenvironZMainLooprÎ   rÏ   rE   Zset_debuggingrv   r5   rÊ   r   r   r   r   Ú<module>   sH   

    

