U
    XXbk‡  ã                   @   s’  d dl Z dZz e  dd¡ d dlmZ dZW n8 ek
rd   e  dd¡ d dlmZ ejjej_Y nX 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Zd dlZd dlZd dlZd dlZddlmZmZ ddlmZmZmZmZ ddlmZ ddl m!Z! d dl"Z"ddl#m"Z$ G dd„ dej%j&j'ƒZ(G dd„ dej%j&j)ƒZ*G dd„ deƒZ+G dd„ deƒZ,G dd„ de-ƒZ.G dd„ de-ƒZ/G dd „ d ee!ƒZ0e1d!krŽe0ƒ Z2e+e2ƒZ3e,e2ƒZ4e2 5¡  6d"d#d$g¡ e	 7¡  e 8d ¡ e 9¡ Z:ej;dd… D ],Z<e:e< j=r.e:e<  >¡  ne:e<  ?¡  qe: @e3e4¡ e	 7¡  e4 Ad%d&¡ e2 5¡  6d"d#d$g¡ e2 Bd'd(d)¡ e2 Cd*g d+¡ dS ),é    NFÚVtez2.91)r   Tz2.90)ÚGtk)ÚGdk)ÚGLib)ÚGObject)ÚPangoé   )Ú
run_apportÚapport_crash)ÚDistUpgradeViewÚFuzzyTimeToStrÚInstallProgressÚAcquireProgress)Úget)ÚSimpleGtkbuilderApp)Úgettextc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚGtkCdromProgressAdapterzi Report the cdrom add progress
        Subclass this class to implement cdrom add progress reporting
    c                 C   s   |j | _|j| _|| _d S ©N)Úlabel_statusÚstatusÚprogressbar_cacheÚprogressÚparent©Úselfr   © r   úA/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewGtk3.pyÚ__init__B   s    z GtkCdromProgressAdapter.__init__c                 C   s>   |r| j  |¡ | j |jt| jƒ ¡ t ¡ r:t 	¡  q(dS )z; update is called regularly so that the gui can be redrawn N)
r   Úset_textr   Úset_fractionÚvalueÚfloatZ
totalStepsr   Úevents_pendingÚmain_iteration)r   ÚtextÚstepr   r   r   ÚupdateF   s
    zGtkCdromProgressAdapter.updatec                 C   s   dS )N)FÚ r   ©r   r   r   r   Úask_cdrom_nameM   s    z&GtkCdromProgressAdapter.ask_cdrom_namec                 C   s   dS )NFr   r(   r   r   r   Úchange_cdromO   s    z$GtkCdromProgressAdapter.change_cdromN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r)   r*   r   r   r   r   r   >   s
   r   c                       s.   e Zd Zdd„ Zd‡ fdd„	Zdd„ Z‡  ZS )	ÚGtkOpProgressc                 C   s   || _ d| _d S )Nç        )ÚprogressbarÚfraction)r   r1   r   r   r   r   T   s    zGtkOpProgress.__init__Nc                    sV   t t| ƒ |¡ | jd }t| j| ƒdkr@|| _| j | j¡ t 	¡ rRt 
¡  q@d S )Nç      Y@çš™™™™™¹?)Úsuperr/   r&   ÚpercentÚabsr2   r1   r   r   r"   r#   )r   r6   Znew_fraction©Ú	__class__r   r   r&   Z   s    
zGtkOpProgress.updatec                 C   s   | j  d¡ d S )Nú )r1   r   r(   r   r   r   Údoneg   s    zGtkOpProgress.done)N)r+   r,   r-   r   r&   r;   Ú__classcell__r   r   r8   r   r/   S   s   r/   c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡ fdd„Zd	d
„ Z‡ fdd„Z‡  Z	S )ÚGtkAcquireProgressAdapterc                    sF   t t| ƒ ¡  |j| _|j| _|| _d| _|j	| _
| j
 d| j¡ d S )NFZclicked)r5   r=   r   r   r   r   r   r   ÚcanceledZbutton_fetch_cancelÚbutton_cancelÚconnectÚcancelClickedr   r8   r   r   r   o   s    z"GtkAcquireProgressAdapter.__init__c                 C   s   t  d¡ d| _d S )NrA   T)ÚloggingÚdebugr>   )r   Úwidgetr   r   r   rA   x   s    
z'GtkAcquireProgressAdapter.cancelClickedc                 C   sj   t dƒ||f }tj| jjtjjtjjtj	j
d}| |¡ | ¡ }| d¡ | ¡  |tjjkrfdS dS )Nz&Please insert '%s' into the drive '%s'©r   ÚflagsÚtypeZbuttonsr'   TF)Ú_r   ÚMessageDialogr   Úwindow_mainÚDialogFlagsÚMODALÚMessageTypeÚQUESTIONÚButtonsTypeZ	OK_CANCELÚ
set_markupÚrunÚ	set_titleÚdestroyÚResponseTypeZOK)r   ZmediumZdriveÚmsgÚdialogÚresr   r   r   Úmedia_change{   s    
ý

z&GtkAcquireProgressAdapter.media_changec                    s2   t t| ƒ ¡  | j d¡ | j ¡  | j ¡  d S )Nr   )r5   r=   Ústartr   r   r   Úshowr?   r(   r8   r   r   rY   ‰   s    
zGtkAcquireProgressAdapter.startc                 C   s*   | j  d¡ | j tdƒ¡ | j ¡  d S )Nr:   zFetching is complete)r   r   r   rH   r?   Úhider(   r   r   r   Ústop   s    zGtkAcquireProgressAdapter.stopc                    sþ   t t| ƒ |¡ t| j| j ¡ d  ƒdkrä| j | jd ¡ | jd }|| j	krX| j	}| j
dkr¾t | j
¡}t|tƒr†| t ¡ ¡}| j tdƒ|| j	|f ¡ | j tdƒt| jƒ ¡ n&| j tdƒ|| j	f ¡ | j d¡ t ¡ röt ¡  qä| j S )	Nr3   r4   r   r   z!Fetching file %li of %li at %sB/súAbout %s remainingzFetching file %li of %liz  )r5   r=   Úpulser7   r6   r   Úget_fractionr   Zcurrent_itemsZtotal_itemsÚcurrent_cpsÚapt_pkgZsize_to_strÚ
isinstanceÚbytesÚdecodeÚlocaleÚgetpreferredencodingr   r   rH   r   Úetar   r"   r#   r>   )r   ÚownerZcurrentItemr`   r8   r   r   r^   ”   s8    



ÿ  ÿÿ
 ÿ
zGtkAcquireProgressAdapter.pulse)
r+   r,   r-   r   rA   rX   rY   r\   r^   r<   r   r   r8   r   r=   k   s   	r=   c                   @   sj   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ddd„Zdd„ Zdd„ Zdd„ ZdS )ÚGtkInstallProgressAdapteri,  c                 C   sX   t  | ¡ d | _|j| _|j| _|j| _|j| _	| j	 
d| j¡ || _tj dd¡ d S )Núchild-exitedzDPkg::StopOnErrorÚFalse)r   r   Ú_cacher   r   r   Úexpander_terminalÚexpanderÚ_termÚtermr@   Úchild_exitedr   ra   ZconfigÚsetr   r   r   r   r   ³   s    
z"GtkInstallProgressAdapter.__init__c                 C   sâ   t  | ¡ d| _| j tdƒ¡ | j d¡ | j d¡ | j 	d¡ | j
 ¡  | j
 d| j¡ tj d¡pld}|dkr¢| jr¢d	| jks’| jd	 js¢d
}| j d¡ d| j dg| _dtjkrÌ| j d| ¡ d| _d| _d| _d S )NFzApplying changesr0   r:   Tzcontents-changedZDEBIAN_FRONTENDZgnomezlibgtk3-perlrV   zVTE_PTY_KEEP_FD=%szAPT_LISTCHANGES_FRONTEND=nonezDEBIAN_FRONTEND=%s)r   Ústart_updateÚfinishedr   r   rH   r   r   rn   Úset_sensitiverp   rZ   r@   Ú_on_term_content_changedÚosÚenvironr   rl   Úis_installedÚset_expandedZwritefdÚenvÚappendÚ
start_timeÚtime_uiÚlast_activity)r   Zfrontendr   r   r   rs   À   s.    



ÿÿ
z&GtkInstallProgressAdapter.start_updatec                 C   sâ   t  | ||¡ t d||f ¡ t dd¡|kr4dS | jj | jj¡ t	dƒ| }t	dƒ| }d||f }| jj 
¡  | jj d¡ | jj ¡  tjj¡ | jj |¡ | jj ¡  |¡ | jj ¡  | jj ¡  | jj ¡  d S )	Nz*got an error from dpkg for pkg: '%s': '%s'Zdpkgz*dependency problems - leaving unconfiguredFzCould not install '%s'zThe upgrade will continue but the '%s' package may not be in a working state. Please consider submitting a bug report about it.ú<big><b>%s</b></big>

%sr'   )r   ÚerrorrB   r   Údgettextr   Údialog_errorÚset_transient_forrJ   rH   ÚrealizerR   Ú
get_windowÚset_functionsr   Ú
WMFunctionÚMOVEÚlabel_errorrP   Útextview_errorÚ
get_bufferr   Úscroll_errorrZ   rQ   r[   )r   ÚpkgZerrormsgÚsummaryrU   Úmarkupr   r   r   r   Ü   s$    þzGtkInstallProgressAdapter.errorc                 C   sZ  t  d| ¡ t ¡ }tdƒ| }tdƒ}d||f }| jj |¡ | jj d¡ | jj 	| jj
¡ tj |¡sx|d }tj d¡rÈdd||g}tj|tjd	 ¡ d
 }| dd¡}| jj ¡  |¡ n| jj ¡  tdƒ¡ | jj ¡ }	| jj ¡  |  jt ¡ | 7  _|	tjjkr d}
nd}
z| j |
 d¡¡ W n   | j |
d¡ Y nX d S )Nz.got a conffile-prompt from dpkg for file: '%s'z/Replace the customized configuration file
'%s'?ztYou will lose any changes you have made to this configuration file if you choose to replace it with a newer version.z1<span weight="bold" size="larger">%s </span> 

%sr'   z
.dpkg-distz/usr/bin/diffz-u)Ústdoutr   zUTF-8Úreplacez The 'diff' command was not foundzy
zn
zutf-8éÿÿÿÿ)rB   rC   ÚtimerH   r   Zlabel_conffilerP   Zdialog_conffilerR   r„   rJ   rw   ÚpathÚexistsÚ
subprocessÚPopenÚPIPEZcommunicaterd   Ztextview_conffilerŒ   r   rQ   r[   r~   r   rT   ÚYESrp   Z
feed_childÚencode)r   ZcurrentÚnewrY   ZprimZsecr   ÚcmdZdiffrW   Zresponser   r   r   Úconffileó   s>     ÿÿz"GtkInstallProgressAdapter.conffilec                 C   st   t j t jj¡}t ¡ }|dkrX| jD ]}| d¡\}}|tj	|< q&| 
¡  dtj	d< n| j |¡ | j |¡ |S )Nr   ú=Ú1ZDPKG_UNTRANSLATED_MESSAGES)r   ÚPtyÚnew_syncÚPtyFlagsÚDEFAULTrw   Úforkr{   Úsplitrx   Zchild_setuprp   Úset_ptyZwatch_child)r   ZptyÚpidr{   Úkeyr    r   r   r   r¥     s    
zGtkInstallProgressAdapter.forkc                 C   s   t   ¡ | _d| _dS )zŠ helper function that is called when the terminal changed
            to ensure that we have a accurate idea when something hangs
        FN)r”   r   Úactivity_timeout_reported)r   rp   r   r   r   rv   ,  s    
z2GtkInstallProgressAdapter._on_term_content_changedc                 C   sî   | j dkrt ¡ | _ t|| j ¡ d  ƒdkrR| j t|ƒd ¡ | j | 	¡ ¡ |dkrê| j
| j  }|| j8 }t|ƒ| }d| | }|dkr²|dk r²| j tdƒt|ƒ ¡ n| j d¡ | jjrê| jj d	¡d
krê| jj d| ¡ d S )Nr0   r3   r4   ç      ð?g     €N@i £ r]   r:   zload-statusé   zprogress("%s"))r}   r”   r7   r   r_   r   r!   r   r   Ústripr   r~   rH   r   r   Ú_webkit_viewÚget_propertyZexecute_script)r   rŽ   r6   r   ZdeltaZtime_per_percentrg   r   r   r   Ústatus_change3  s"    


ÿz'GtkInstallProgressAdapter.status_changeNc                 C   s$   |d kr|  ¡ | _n|| _d| _d S ©NT)Zget_child_exit_statusÚ
apt_statusrt   )r   rp   r   r   r   r   rq   M  s    z&GtkInstallProgressAdapter.child_exitedc                 C   s   | j s|  ¡  q | jS r   )rt   Úupdate_interfacer²   r(   r   r   r   Ú
wait_childV  s    
z$GtkInstallProgressAdapter.wait_childc                 C   s   | j  d¡ d S )Nr'   ©r   r   r(   r   r   r   Úfinish_update[  s    z'GtkInstallProgressAdapter.finish_updatec                 C   sš   t  | ¡ | jdkr(| j ¡  t d¡ | jdkrz| j| j t ¡ k rz| j	slt
 d| j| j ¡ f ¡ d| _	| jj d¡ t ¡ rŒt ¡  qzt d¡ d S )Nr0   gš™™™™™É?r   z+no activity on terminal for %s seconds (%s)Tg{®Gáz„?)r   r³   r}   r   r^   r”   Úsleepr   ÚTIMEOUT_TERMINAL_ACTIVITYrª   rB   Úwarningr   Zget_textr   rm   rz   r   r"   r#   r(   r   r   r   r³   ^  s    




ÿ
z*GtkInstallProgressAdapter.update_interface)N)r+   r,   r-   r¸   r   rs   r   rž   r¥   rv   r°   rq   r´   r¶   r³   r   r   r   r   ri   ®   s   '
	ri   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚDistUpgradeVteTerminalc                 C   s   || _ || _d S r   )rp   r   )r   r   rp   r   r   r   r   r  s    zDistUpgradeVteTerminal.__init__Fc              
      sä   t r‡ fdd„}n‡ fdd„}ˆ j ¡  ˆ j d|¡ ˆ jj d¡ |dkrZˆ jj d¡ dˆ _t rˆˆ j 	t
jjd|d dd d d ¡\}}n ˆ j t
jjd|d dd d ¡\}}|r´|dk r¸d S ˆ jsÜt ¡ rÐt ¡  q¾t d	¡ q¸ˆ `d S )
Nc                    s
   dˆ _ d S r±   ©rt   )Zterminalr   r(   r   r   Úwait_for_childw  s    z3DistUpgradeVteTerminal.call.<locals>.wait_for_childc                    s
   dˆ _ d S r±   r»   )rD   r(   r   r   r¼   {  s    rj   TFú/r   r4   )Úvte291rp   rZ   r@   r   rm   ru   rz   rt   Z
spawn_syncr   r£   r¤   Zfork_command_fullr   r"   r#   r”   r·   )r   r   Zhiddenr¼   Zsuccessr¨   r   r(   r   Úcallu  sH    
ø
ù	
zDistUpgradeVteTerminal.callN)F)r+   r,   r-   r   r¿   r   r   r   r   rº   q  s   rº   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚHtmlViewc                 C   s
   || _ d S r   )r®   )r   Zwebkit_viewr   r   r   r   ¤  s    zHtmlView.__init__c                 C   st   | j s
d S z4ddlm} |s t‚| j  |¡ | j  d| j¡ W n0 tk
rn   | j  |¡ | j  d| j	¡ Y nX d S )Nr   ©ÚWebKit2zload-changedzload-finished)
r®   Úgi.repositoryrÂ   ÚAssertionErrorZload_urir@   Ú_on_load_changedÚImportErrorÚopenÚ_on_load_finished)r   ZurlrÂ   r   r   r   rÇ   ¦  s    zHtmlView.openc                 C   s   | j  ¡  d S r   )r®   rZ   r(   r   r   r   rZ   ±  s    zHtmlView.showc                 C   s   | j  ¡  d S r   )r®   r[   r(   r   r   r   r[   ³  s    zHtmlView.hidec                 C   s   |  ¡  d S r   )rZ   )r   ÚviewÚframer   r   r   rÈ   µ  s    zHtmlView._on_load_finishedc                 C   s$   ddl m} ||jjkr | ¡  d S )Nr   rÁ   )rÃ   rÂ   Z	LoadEventZLOAD_FINISHEDrZ   )r   rÉ   ÚeventÚdatarÂ   r   r   r   rÅ   ·  s    zHtmlView._on_load_changedN)	r+   r,   r-   r   rÇ   rZ   r[   rÈ   rÅ   r   r   r   r   rÀ   £  s   rÀ   c                       sæ   e Zd ZdZd7d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‡ fdd „Zd8d!d"„Zd9d#d$„Zd:d&d'„Zd;d)d*„Zd<d,d-„Zd.d/„ Zd0d1„ Zd=d3d4„Zd5d6„ Z‡  ZS )>ÚDistUpgradeViewGtk3z& gtk frontend of the distUpgrade tool Nc              
      s<  t  ˆ ¡ |ˆ _|r|dkr8tj t ¡ d¡}t ¡ }nd}tj |d¡}t t	j
¡ tƒ  d¡ zt d|¡ t d¡ W n0 tk
r¬ } zt d| ¡ W 5 d }~X Y nX t ˆ |d d¡ tj ¡ }zˆ j | d	d
d¡¡ W n4 tjk
r } zt d| ¡ W 5 d }~X Y nX ˆ j ¡ }| dd¡}ˆ j  |¡ ˆ  !¡  d ˆ _"tj ¡ ˆ _#d ˆ _$ˆ j %¡  ˆ j &¡  't(j)j*¡ t+ˆ j,ƒˆ _-t.ˆ ƒˆ _/t0ˆ ƒˆ _1t2ˆ ƒˆ _3t 4tj5¡ˆ _6t 7d¡}t 8¡ }	| 9|	d¡ | :|	dd¡ ˆ j; <|¡ ˆ j6 =dtj>j?¡ ˆ j; @ˆ j6¡ ˆ jA Bd¡ ‡ fdd„}
ˆ jC Dd|
¡ ˆ jEt	_Fd S )NÚ.Zmoz/usr/share/locale/Z
gtkbuilderZGTKzubuntu-release-upgraderzError setting locales (%s)z/DistUpgrade.uizsystem-software-updateé    r   z)error setting default icon, ignoring (%s)ú%sz20.04r'   Tr   Fc                    s   ˆ j  ¡ }ˆ j | ¡ d S r   )Úexpander_detailsZget_expandedÚdialog_changesÚset_resizable)ÚwZexpandedr(   r   r   Ú
_activatedü  s    
z0DistUpgradeViewGtk3.__init__.<locals>._activatedZactivate)Gr   r   Úlogdirrw   r•   ÚjoinÚgetcwdr   Z
init_checkÚsysÚargvÚget_telemetryZset_updater_typere   Úbindtextdomainr   Ú
textdomainÚ	ExceptionrB   r¹   r   Z	IconThemeZget_defaultrJ   Zset_default_iconZ	load_iconr   ZGErrorrC   Zlabel_titleZ	get_labelr’   Ú	set_labelÚcreate_terminalÚ	prev_stepÚ	iconthemer®   r…   r†   r‡   r   rˆ   r‰   r/   r   Ú_opCacheProgressr=   Ú_acquireProgressr   Ú_cdromProgressri   Ú_installProgressZ	TreeStoreZTYPE_STRINGÚdetails_listZTreeViewColumnZCellRendererTextÚ
pack_startZadd_attributeZtreeview_detailsZappend_columnZset_sort_column_idZSortTypeZ	ASCENDINGZ	set_modelrÒ   rÓ   rÑ   r@   Ú_handleExceptionÚ
excepthook)r   ZdatadirrÖ   Z	localedirZgladedirÚeZiconsZtitle_stringÚcolumnZrenderrÕ   r   r(   r   r   ¿  sb    

 þ






	zDistUpgradeViewGtk3.__init__c                 C   sf   dd l }| |||¡}t dd |¡ ¡ t|||ƒ tƒ sX|  tdƒtdƒd |¡¡ t 	d¡ d S )Nr   znot handled exception:
%sÚ
zA fatal error occurredzÿPlease report this as a bug (if you haven't already) and include the files /var/log/dist-upgrade/main.log and /var/log/dist-upgrade/apt.log in your report. The upgrade has aborted.
Your original sources.list was saved in /etc/apt/sources.list.distUpgrade.r   )
Ú	tracebackÚformat_exceptionrB   r   r×   r
   r	   rH   rÙ   Úexit)r   rG   r    Útbrî   Úlinesr   r   r   ré     s    
ùz$DistUpgradeViewGtk3._handleExceptionc                 C   s   t | | jƒS r   )rº   ro   r(   r   r   r   ÚgetTerminal!  s    zDistUpgradeViewGtk3.getTerminalc                 C   sž   | j d kr”zjzddlm} W n  tk
r<   ddlm} Y nX | ¡ | _ | j  ¡ }| dd¡ | j 	| j ddd¡ W n   t
 d¡ t ¡  Y S X t| j ƒS )Nr   rÁ   )ÚWebKitzenable-pluginsFTzhtml widget)r®   rÃ   rÂ   rÆ   rô   ZWebViewZget_settingsÚset_propertyZ	vbox_mainZpack_endrB   Z	exceptionr   ZDummyHtmlViewrÀ   )r   rô   Zsettingsr   r   r   ÚgetHtmlView#  s    



zDistUpgradeViewGtk3.getHtmlViewc                 C   sN   t |jƒdkrJt|jƒdkrJtdƒ}tdƒ}|  ||¡}t d|¡ | S dS )Nr   é   zCtrl-c pressedzkThis will abort the operation and may leave the system in a broken state. Are you sure you want to do that?z5ctrl-c press detected, user decided to pass it on: %sF)ÚlenÚstringÚordrH   ÚaskYesNoQuestionrB   r¹   )r   rD   Zkeyevr   rU   rW   r   r   r   Ú_key_press_handler3  s    ÿz&DistUpgradeViewGtk3._key_press_handlerc                 C   sè   t j ¡ | _t| jdƒs$| jj| j_| j d| j¡ t	 
d¡}| j |¡ g | _| j | jddd¡ | j ¡  t ¡ | _| j ¡  | j | jddd¡ | j | j ¡ ¡ zttj | jd¡dƒ| _W n tk
rà   tj| _Y nX | jS )z! helper to create a vte terminal r§   zkey-press-eventzmonospace 10Tr   zterm.logrÔ   )r   ZTerminalrœ   ro   ÚhasattrZset_pty_objectr§   r@   rü   r   Zfont_description_from_stringZset_fontZ_terminal_linesZhbox_customrè   r…   r   Z
VScrollbarZvscrollbar_terminalrZ   Zset_adjustmentZget_vadjustmentrÇ   rw   r•   r×   rÖ   Z_terminal_logrÞ   rÙ   r‘   )r   Zfontdescr   r   r   rà   ?  s$    



z#DistUpgradeViewGtk3.create_terminalc                 C   s   | j S r   )rä   r(   r   r   r   ÚgetAcquireProgressX  s    z&DistUpgradeViewGtk3.getAcquireProgressc                 C   s   || j _| j S r   )ræ   rl   )r   Úcacher   r   r   ÚgetInstallProgressZ  s    z&DistUpgradeViewGtk3.getInstallProgressc                 C   s   | j S r   )rã   r(   r   r   r   ÚgetOpCacheProgress]  s    z&DistUpgradeViewGtk3.getOpCacheProgressc                 C   s   | j S r   )rå   r(   r   r   r   ÚgetCdromProgress_  s    z$DistUpgradeViewGtk3.getCdromProgressc                 C   s   | j  d| ¡ d S )NrÐ   rµ   )r   rU   r   r   r   ÚupdateStatusa  s    z DistUpgradeViewGtk3.updateStatusc                 C   s4   t | d|j ƒ}t | d|j ƒ}| ¡  | ¡  d S ©Núimage_step%iúlabel_step%i)Úgetattrr    r[   ©r   r%   ÚimageÚlabelr   r   r   ÚhideStepc  s    zDistUpgradeViewGtk3.hideStepc                 C   s4   t | d|j ƒ}t | d|j ƒ}| ¡  | ¡  d S r  )r  r    rZ   r  r   r   r   ÚshowStepi  s    zDistUpgradeViewGtk3.showStepc                 C   sT   t jj}| j}|rPt| d|j ƒ}t| d|j ƒ}| t j|¡ | ¡  | 	¡  d S )Nr  úarrow_step%i)
r   ÚIconSizeÚMENUrá   r  r    Úset_from_stockZSTOCK_CANCELrZ   r[   )r   Úsizer%   r	  Úarrowr   r   r   Úabortn  s    zDistUpgradeViewGtk3.abortc                    sò   t t| ƒ |¡ | j ¡ r$t d¡ tjj	}t
 ¡ }| jršt| d| jj ƒ}t| d| jj ƒ}t| d| jj ƒ}| d|¡ | tj|¡ | ¡  | ¡  || _t| d|j ƒ}t| d|j ƒ}t| d|j ƒ}| d¡sÞd S | ¡  | ¡  d S )Nzicon theme changed, re-readingr  r  r  Z
attributesZvisible)r5   rÍ   ÚsetSteprâ   Zrescan_if_neededrB   rC   r   r  r  r   ZAttrListrá   r  r    rõ   r  ZSTOCK_APPLYrZ   r[   r¯   )r   r%   r  Zattrlistr	  r
  r  r8   r   r   r  w  s*    


zDistUpgradeViewGtk3.setStepc                 C   s¬   | j  d¡ | j  | j¡ d||f }| j |¡ |d krZ| j ¡ }| |¡ | j	 
¡  n
| j	 ¡  | j  ¡  | j  ¡  tjj¡ | j  ¡  | j  ¡  t ¡ r¨t ¡  q–d S )Nr'   r€   )Zdialog_informationrR   r„   rJ   Zlabel_informationrP   Ztextview_informationrŒ   r   Zscroll_informationrZ   r[   r…   r†   r‡   r   rˆ   r‰   rQ   r   r"   r#   ©r   r   rU   Zextended_msgÚbufferr   r   r   Úinformation•  s    





zDistUpgradeViewGtk3.informationc                 C   sš   | j  d¡ | j  | j¡ d||f }| j |¡ |d krZ| j ¡ }| |¡ | j	 
¡  n
| j	 ¡  | j  ¡  | j  ¡  tjj¡ | j  ¡  | j  ¡  dS )Nr'   r€   F)rƒ   rR   r„   rJ   rŠ   rP   r‹   rŒ   r   r   rZ   r[   r…   r†   r‡   r   rˆ   r‰   rQ   r  r   r   r   r   §  s    





zDistUpgradeViewGtk3.errorTc                 C   s¦  t  | ||||¡sdS |  jdtdƒ 7  _|d krl| j d¡ | j d¡ | j |d ¡ | j |d ¡ | j	 
d| ¡ | j 
| j¡ | j ¡  tdƒ| jftd	ƒ| jftd
ƒ| jftdƒ| jftdƒ| jftdƒ| jffD ]Z\}}|rà| j d |t|ƒ g¡}	|D ]0}
| j |	d|
jt t|
jdd ƒ¡f g¡ qqà| j ¡  | j | j¡ | j d¡ | j  ¡  !t"j#j$t"j#j%B ¡ | j &¡ }| j '¡  |t(j)j*kr¢dS dS )NFz

<b>%s</b>z?To prevent data loss close all open applications and documents.Tr   r   z<big><b>%s</b></big>z%No longer supported by Canonical (%s)z<b>Downgrade (%s)</b>zRemove (%s)zNo longer needed (%s)zInstall (%s)zUpgrade (%s)z<b>%s</b> - %sr   r'   )+r   ÚconfirmChangesZconfirmChangesMessagerH   Zbutton_cancel_changesZset_use_stockZset_use_underlinerß   Zbutton_confirm_changesZlabel_summaryrP   Zlabel_changesrç   ÚclearÚ	demotionsZtoDowngradeZtoRemoveZtoRemoveAutoZ	toInstallZ	toUpgrader|   rø   Únamer   Zmarkup_escape_textr  Ú	candidaterÒ   r…   r„   rJ   rR   r†   r‡   r   rˆ   r‰   ZRESIZErQ   r[   r   rT   rš   )r   r   Zchangesr  ZdownloadSizeZactionsZremoval_boldZparent_textrç   ZnoderŽ   rW   r   r   r   r  ¹  sV    
 ÿÿ
úÿ
 ÿ
ÿ

z"DistUpgradeViewGtk3.confirmChangesÚNoc                 C   sŠ   d||f }t j| jt jjt jjt jjd}| 	d¡ |dkrN| 
t jj¡ n| 
t jj¡ | |¡ | ¡ }| ¡  |t jjkr†dS dS )Nr€   rE   r'   r  TF)r   rI   rJ   rK   rL   rM   rN   rO   ZYES_NOrR   Úset_default_responserT   ZNOrš   rP   rQ   rS   ©r   r   rU   ÚdefaultrV   rW   r   r   r   rû   é  s     ý

z$DistUpgradeViewGtk3.askYesNoQuestionÚCancelc                 C   s®   |rd||f }t j| jt jjt jjt jjd}| 	d¡ | 
|¡ | tdƒt jjtdƒt jj¡ |dkr|| t jj¡ n| t jj¡ | ¡ }| ¡  |t jjkrªdS dS )Nr€   rE   r'   r!  ZContinueTF)r   rI   rJ   rK   rL   rM   ZWARNINGrO   ZNONErR   rP   Zadd_buttonsrH   rT   ÚCANCELZACCEPTr  rQ   rS   r  r   r   r   ÚaskCancelContinueQuestionû  s*    ý

 ÿz-DistUpgradeViewGtk3.askCancelContinueQuestionc                 C   s`   | j  | j¡ | j  d¡ | j  ¡  | j  ¡  tjj	¡ | j  
¡ }| j  ¡  |tjjkr\dS dS )Nr'   TF)Zdialog_restartr„   rJ   rR   r…   r†   r‡   r   rˆ   r‰   rQ   r[   r   rT   rš   )r   rW   r   r   r   ÚconfirmRestart  s    


z"DistUpgradeViewGtk3.confirmRestartc                 C   s   t  ¡ rt  ¡  q d S r   )r   r"   r#   r(   r   r   r   ÚprocessEvents  s    z!DistUpgradeViewGtk3.processEventsFc                 C   s   | j  ¡  |r| j  d¡ d S )Nr«   )r   r^   r   )r   rt   r   r   r   ÚpulseProgress"  s    
z!DistUpgradeViewGtk3.pulseProgressc                 C   sf   | j  | j¡ | j  d¡ | j  ¡  | j  ¡  tjj	¡ | j  
¡ }| j  ¡  |tjjkrbt d¡ dS )Nr'   r   T)Zdialog_cancelr„   rJ   rR   r…   r†   r‡   r   rˆ   r‰   rQ   r[   r   rT   r"  rÙ   rð   )r   rD   rË   rW   r   r   r   Úon_window_main_delete_event'  s    



z/DistUpgradeViewGtk3.on_window_main_delete_event)NN)N)N)NT)r  )r!  )F)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   r8   r   rÍ   ½  s6   
L	

   ÿ
0


rÍ   Ú__main__z/usr/bin/dpkgz--configurez-aZTODOzTODO~ZshortZlonga²  asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
Zxxéd   )DZgir¾   Zrequire_versionrÃ   r   rÞ   r¡   rœ   r¢   r   r   r   r   r   rÙ   re   rB   r”   r—   Zaptra   rw   ZDistUpgradeApportr	   r
   r   r   r   r   Z	telemetryr   rÛ   ZSimpleGtk3builderAppr   r   ZDistUpgradeGettextrH   r   ÚbaseZCdromProgressr   Z
OpProgressr/   r=   ri   Úobjectrº   rÀ   rÍ   r+   rÉ   ÚfpZipró   r¿   Úmainrð   ZCacherÿ   rÚ   rŽ   ry   Zmark_deleteZmark_installZcommitrž   r   r  r   r   r   r   Ú<module>   st   C D2  x

ÿ	