o
    AVb3  ã                   @   s’   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mZ eed
ƒƒ Z\ZZZdZdZG dd„ de
ƒZdS )é    )ÚGtk)ÚPango)Úlogé   )Úuiutil)ÚvmmAsyncJob)ÚvmmGObjectUI)ÚvmmCreateNetwork)ÚvmmXMLEditoré   Ústate_runningÚstate_shutoffc                   @   sæ   e Zd Zdd„ Zdd„ Zd8d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d$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ ZdS )9ÚvmmHostNetsc                    sÆ   t jˆ dd ||d |ˆ _d ˆ _d ˆ _tƒ ˆ _ˆ  d¡ˆ _ˆ j	 
ˆ jˆ jˆ jˆ j‡ fdd„ˆ j‡ fdd„‡ fdd„dœ¡ ˆ  ¡  ˆ  ¡  ˆ  ¡  ˆ j d	ˆ j¡ ˆ j d
ˆ j¡ ˆ j dˆ j¡ d S )Nzhostnets.ui)ÚbuilderÚtopwinztop-boxc                     ó   ˆ   ¡ S ©N)Ú
_net_apply©Úx©Úself© ú//usr/share/virt-manager/virtManager/hostnets.pyÚ<lambda>/   ó    z&vmmHostNets.__init__.<locals>.<lambda>c                     ó
   ˆ   t¡S r   )Ú_enable_net_applyÚEDIT_NET_AUTOSTARTr   r   r   r   r   1   ó   
c                     r   r   )r   ÚEDIT_NET_NAMEr   r   r   r   r   3   r   )Úon_net_add_clickedÚon_net_delete_clickedÚon_net_stop_clickedÚon_net_start_clickedÚon_net_apply_clickedÚon_net_list_changedÚon_net_autostart_toggledÚon_net_name_changedz	net-addedznet-removedústate-changed)r   Ú__init__ÚconnÚ_addnetÚ
_xmleditorÚsetÚ_active_editsÚwidgetÚtop_boxr   Úconnect_signalsÚ_add_network_cbÚ_delete_network_cbÚ_stop_network_cbÚ_start_network_cbÚ_net_selected_cbÚ_init_uiÚ_populate_networksÚ_refresh_conn_stateÚconnectÚ_conn_nets_changed_cbÚ_conn_state_changed_cb)r   r+   r   r   r   r   r   r*      s0   ÿ


÷zvmmHostNets.__init__c                 C   s0   d | _ | jr| j ¡  d | _| j ¡  d | _d S r   )r+   r,   Úcleanupr-   r   r   r   r   Ú_cleanupC   s   


zvmmHostNets._cleanupNc                 C   s   | j r
| j  ¡  d S d S r   )r,   Úclose)r   Úignore1Úignore2r   r   r   r@   M   s   ÿzvmmHostNets.closec                    sV  ˆ   d¡ d¡ tˆ jˆ jˆ   d¡ˆ   d¡ƒˆ _ˆ j d‡ fdd„¡ ˆ j dˆ j¡ ˆ j d	ˆ j¡ t	 
ttttt¡}ˆ   d
¡ |¡ ˆ   d
¡ ¡ }| ‡ fdd„d ¡ t	 tdƒ¡}| d¡ t	 ¡ }| dtjj¡ t	 ¡ }| |d¡ | |d¡ | |dd¡ | |dd¡ | |dd¡ | |dd¡ ˆ   d
¡ |¡ | dt	jj ¡ d S )Núnetwork-pagesFznet-details-alignúnet-detailsÚchangedc                    r   r   )r   ÚEDIT_NET_XML)Úsr   r   r   r   ]   s   
 z&vmmHostNets._init_ui.<locals>.<lambda>zxml-requestedz	xml-resetúnet-listc                     r   r   )Ú_confirm_changesr   r   r   r   r   h   r   ÚNetworksé   Ú	ellipsizeTÚtextr   Ú	sensitiveé   z	icon-nameé   z
stock-sizer   )!r0   Úset_show_tabsr
   r   r   r-   r;   Ú_xmleditor_xml_requested_cbÚ_xmleditor_xml_reset_cbr   Ú	ListStoreÚobjectÚstrÚintÚboolÚ	set_modelÚget_selectionÚset_select_functionÚTreeViewColumnÚ_Úset_spacingÚCellRendererTextÚset_propertyr   ÚEllipsizeModeÚENDÚCellRendererPixbufÚ
pack_startÚadd_attributeÚappend_columnÚset_sort_column_idÚSortTypeÚ	ASCENDING)r   ÚnetListModelÚselÚnetColÚnet_txtÚnet_imgr   r   r   r8   V   s>   
þ
ÿÿÿ
zvmmHostNets._init_uic                 C   s   | j jdd d S )NT)Úpollnet)r+   Úschedule_priority_tickr   r   r   r   Úrefresh_page}   s   zvmmHostNets.refresh_pagec                 C   sx   | j  ¡ }|  d¡ |o| j j ¡ ¡ |r"| j j ¡ s"|  tdƒ¡ |r/t 	|  d¡d¡ d S |  
¡  |  tdƒ¡ d S )Nznet-addz?Libvirt connection does not support virtual network management.rH   r   zConnection not active.)r+   Ú	is_activer0   Úset_sensitiveÚsupportÚconn_networkÚ_set_error_pager]   r   Úset_list_selection_by_numberr9   )r   Úconn_activer   r   r   r:   …   s   

ÿÿzvmmHostNets._refresh_conn_statec                 C   s   t  |  d¡¡S )NrH   )r   Úget_list_selectionr0   r   r   r   r   Ú_current_network–   s   zvmmHostNets._current_networkc                 C   s\   |   d¡ d¡ |   d¡ |¡ |   d¡ d¡ |   d¡ d¡ |   d¡ d¡ |  ¡  d S )NrC   r   znetwork-error-labelú	net-startFúnet-stopú
net-delete)r0   Úset_current_pageÚset_textrs   Ú_disable_net_apply)r   Úmsgr   r   r   rv   ™   s   zvmmHostNets._set_error_pagec              
   C   sŠ   |   ¡ }|s|  tdƒ¡ d S |  d¡ d¡ z|  |¡ W n  ty> } zt |¡ |  tdƒ| ¡ W Y d }~nd }~ww |  	¡  d S )NzNo virtual network selected.rC   r   zError selecting network: %s)
rz   rv   r]   r0   r~   Ú_populate_net_stateÚ	Exceptionr   Ú	exceptionr€   )r   ÚnetÚer   r   r   Ú_refresh_current_network¡   s   
€þz$vmmHostNets._refresh_current_networkc              
   C   s°   |   d¡}|  ¡ }| ¡ }| d ¡ z7| ¡  ¡  | ¡  | j ¡ D ] }| 	| ¡ | 
d| j¡ | || ¡ dtjjt| ¡ ƒg¡ q"W | |¡ n| |¡ w t ||¡ d S )NrH   r)   znetwork-idle)r0   rz   Ú	get_modelrY   rZ   Úunselect_allÚclearr+   Ú	list_netsÚdisconnect_by_objr;   Ú_net_state_changed_cbÚappendÚget_namer   ÚIconSizeÚLARGE_TOOLBARrX   rr   r   Úset_list_selection)r   Únet_listÚcurnetÚmodelr…   r   r   r   r9   °   s"   



þýzvmmHostNets._populate_networksc                 C   s|   |  ¡ \}\}}|  d¡ t|ƒ¡ |sd S |  d¡ | ¡ ¡ tdƒ}|r,|d | }|  d¡ |¡ |  d¡ |¡ d S )Nznet-ipv4-expanderznet-ipv4-forwardingÚDisabledú - znet-ipv4-dhcp-rangeznet-ipv4-network)Úget_ipv4_networkr0   Úset_visiblerX   r   Úpretty_forward_moder]   )r   r…   ÚnetstrÚ	dhcpstartÚdhcpendÚdhcpstrr   r   r   Ú_populate_net_ipv4_stateÅ   s   z$vmmHostNets._populate_net_ipv4_statec                 C   sœ   |  ¡ \}\}}|  d¡ t|ƒ¡ |rtdƒ}n| ¡ r"tdƒ}ntdƒ}|  d¡ |¡ tdƒ}|r:|d | }|  d¡ |¡ |  d	¡ |pJd
¡ d S )Nznet-ipv6-expanderzRouted networkz'Isolated network, internal routing onlyz"Isolated network, routing disabledznet-ipv6-forwardingr–   r—   znet-ipv6-dhcp-rangeznet-ipv6-networkÚ )Úget_ipv6_networkr0   r™   rX   r]   Úget_ipv6_enabledr   )r   r…   r›   rœ   r   Ú
prettymoderž   r   r   r   Ú_populate_net_ipv6_stateÔ   s   

z$vmmHostNets._populate_net_ipv6_statec                 C   sB  |  ¡ }|  d¡ d¡ |  d¡ | ¡ ¡ |  d¡ | ¡ |  d¡ | ¡ p)d¡ |  d¡ | ¡ p5d¡ t 	|  d¡t
| ¡ ƒ¡ |rHtpIt}|  d¡ | ¡ ¡ |  d¡ |tjj¡ |  d	¡ | ¡ |  d
¡ |¡ |  d¡ | ¡ | ¡ }|  d¡ |¡ |  d¡ tdƒ¡ |  |¡ |  |¡ | j |¡ d S )NrD   Túnet-namez
net-devicer    znet-name-domainz	net-stateznet-state-iconr{   r|   r}   únet-autostartzOn Boot)rr   r0   rs   r   r   Úset_editableÚget_bridge_deviceÚget_name_domainr   Úset_grid_row_visiblerX   ÚICON_RUNNINGÚICON_SHUTOFFÚ
run_statusÚset_from_icon_namer   r   ÚBUTTONÚget_autostartÚ
set_activeÚ	set_labelr]   rŸ   r¤   r-   Úset_xml_from_libvirtobject)r   r…   ÚactiveÚiconÚ	autostartr   r   r   r‚   ç   s.   
ÿÿ

zvmmHostNets._populate_net_statec                 C   sf   |   ¡ }|d u r
d S | j tdƒ| ¡  ¡}|sd S t d| ¡ ¡ t |j	g | tdƒ| ¡  ¡ d S )Nz;Are you sure you want to permanently delete the network %s?zDeleting network '%s'zError deleting network '%s')
rz   ÚerrÚyes_nor]   r   r   Údebugr   Úsimple_async_noshowÚdelete)r   Úsrcr…   Úresultr   r   r   r4   	  s   ÿÿzvmmHostNets._delete_network_cbc                 C   óF   |   ¡ }|d u r
d S t d| ¡ ¡ t |jg | tdƒ| ¡  ¡ d S )NzStarting network '%s'zError starting network '%s')rz   r   r¹   r   r   rº   Ústartr]   ©r   r¼   r…   r   r   r   r6     ó   ÿzvmmHostNets._start_network_cbc                 C   r¾   )NzStopping network '%s'zError stopping network '%s')rz   r   r¹   r   r   rº   Ústopr]   rÀ   r   r   r   r5      rÁ   zvmmHostNets._stop_network_cbc              
   C   st   t  d¡ z| jd u rt| jƒ| _| j | j¡ W d S  ty9 } z| j 	t
dƒt|ƒ ¡ W Y d }~d S d }~ww )NzLaunching 'Add Network'z"Error launching network wizard: %s)r   r¹   r,   r	   r+   Úshowr   rƒ   r·   Úshow_errr]   rV   )r   r¼   r†   r   r   r   r3   )  s   

&€ÿzvmmHostNets._add_network_cbc              
   C   sò   |   ¡ }|d u r
d S t d| ¡ ¡ zaz5t| jv r%|  d¡ ¡ }| |¡ t	| jv r:| 
|  d¡ ¡ ¡ |  | j¡ t| jv rG| | j ¡ ¡ W n$ tyl } z| j tdƒt|ƒ ¡ W Y d }~W |  ¡  d S d }~ww W |  ¡  d S |  ¡  w )Nz!Applying changes for network '%s'r¦   r¥   z#Error changing network settings: %s)rz   r   r¹   r   r   r/   r0   Ú
get_activeÚset_autostartr    Údefine_nameÚget_textÚidle_addr9   rF   Ú
define_xmlr-   Úget_xmlrƒ   r·   rÄ   r]   rV   r€   )r   r…   Úautor†   r   r   r   r   7  s,   



€€ü€zvmmHostNets._net_applyc                 C   s$   t ƒ | _|  d¡ d¡ d| j_d S )Nú	net-applyF)r.   r/   r0   rs   r-   Údetails_changedr   r   r   r   r€   M  s   zvmmHostNets._disable_net_applyc                 C   s(   |   d¡ d¡ | j |¡ d| j_d S )NrÍ   T)r0   rs   r/   Úaddr-   rÎ   )r   Úedittyper   r   r   r   R  s   zvmmHostNets._enable_net_applyc                 C   s,   |   ¡ r| jr| j ¡ r|  ¡  |  ¡  dS )NT)Ú
is_visibler/   r·   Úconfirm_unapplied_changesr   r€   r   r   r   r   rI   W  s   ÿþzvmmHostNets._confirm_changesc                 C   ó   |   ¡  d S r   )r:   )r   r+   r   r   r   r=   e  ó   z"vmmHostNets._conn_state_changed_cbc                 C   rÓ   r   )r9   rÀ   r   r   r   r<   h  rÔ   z!vmmHostNets._conn_nets_changed_cbc                 C   sL   |   d¡ ¡ D ]}|d |kr| ¡ |d< q|  ¡ }||kr$|  ¡  d S d S )NrH   r   rO   )r0   rˆ   rr   rz   r‡   )r   r…   Úrowr”   r   r   r   r   k  s   €ÿz!vmmHostNets._net_state_changed_cbc                 C   rÓ   r   ©r‡   )r   Ú	selectionr   r   r   r7   v  rÔ   zvmmHostNets._net_selected_cbc                 C   rÓ   r   rÖ   ©r   r¼   r   r   r   rR   y  rÔ   z'vmmHostNets._xmleditor_xml_requested_cbc                 C   rÓ   r   rÖ   rØ   r   r   r   rS   |  rÔ   z#vmmHostNets._xmleditor_xml_reset_cb)NN)Ú__name__Ú
__module__Ú__qualname__r*   r?   r@   r8   rq   r:   rz   rv   r‡   r9   rŸ   r¤   r‚   r4   r6   r5   r3   r   r€   r   rI   r=   r<   r   r7   rR   rS   r   r   r   r   r      s8    $

	'"		r   N)Úgi.repositoryr   r   Úvirtinstr   Úlibr   Úasyncjobr   Ú	baseclassr   Ú	createnetr	   Ú	xmleditorr
   ÚlistÚrangeÚEDIT_NET_IDSr    r   rF   r«   r¬   r   r   r   r   r   Ú<module>   s    
ü