o
    S(ev£  ã                   @   sþ  zGd dl mZ eƒ dkre‚ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ W n= ey„   ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ Y nw 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&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l0m1Z2 dd	l3Z3dd	l4Z4d dl5m4Z6 d dl5m7Z7 d dl8m8Z8 d6dd„Z9dd„ Z:dd„ Z;g fdd„Z<dd„ Z=ej=e_>e=e_=G dd„ dƒZ?G dd„ deƒZ@G dd „ d e$jAjBjCƒZDG d!d"„ d"e$jAjBjEƒZFG d#d$„ d$e/ƒZGG d%d&„ d&e.ƒZHG d'd(„ d(eƒZIG d)d*„ d*e,ƒZJeKd+k�rýeJƒ ZLeL Md,d-¡ ejNd  d.k�rƒeLjO P¡ ZQeQdk�rre" Rd/g¡ e S¡  	 eLjO T¡  e U¡  e! Vd1¡ �qsejNd  d2k�rÃeWejNd3 ƒ�ZXeX Y¡ ZZW d	  ƒ n	1 �s¢w   Y  eZD ]Z[eLjO \e[¡ e U¡  e! Vd4¡ �q©	 e U¡  �q½e$ ]¡ Z^ejNd d	… D ]Z_e^e_ j`�ræe^e_ ja�sæe^e_ jbd0d5� �qÎe^e_  c¡  �qÎe^ deLjeeLjf¡ 	 e U¡  �q÷d	S )7é   )Úget_distÚtrustyé    )Úuic)ÚQtÚQLocaleÚQTranslatorÚPYQT_VERSIONÚQTimer)
Ú	QTextEditÚQApplicationÚQDialogÚQMessageBoxÚQDialogButtonBoxÚQTreeWidgetItemÚQPushButtonÚQWidgetÚQHBoxLayoutÚQLabel)ÚQTextOptionÚQPixmapÚQIconÚQTextCursor)r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)Ú
run_apportÚapport_crash)ÚDistUpgradeViewÚFuzzyTimeToStrÚInstallProgressÚAcquireProgress)Úget)Úgettext)Úunicode_gettext)Ú
QUrlOpenerÚstrictc                 C   s   t | tƒr|  d|¡S | S )NúUTF-8)Ú
isinstanceÚbytesÚdecode)ÚsÚerrors© r*   ú@/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewKDE.pyÚutf8K   s   
r,   c                 C   s,   t j | ¡rt | |¡ d S td|  ƒ d S )Nzerror, can't find file: )ÚosÚpathÚexistsr   ÚloadUiÚprint)ÚfileÚparentr*   r*   r+   r0   R   s   r0   c                 C   s   t j | ¡r
t| ƒS d S ©N)r-   r.   r/   r   )r.   r*   r*   r+   Ú_find_pixmapY   s   r5   c                 C   s<   t tƒtkrt | ¡S |D ]}t|ƒ}|rt|ƒ  S qd S r4   )Útyper	   Úintr   Ú	fromThemer5   )ÚnameÚ	fallbacksr.   Úpixmapr*   r*   r+   Ú_icon^   s   
ÿr<   c                 C   s   |   ¡ s|  | ¡ d S d S r4   )ÚisMaximizedÚorigAdjustSize©Úselfr*   r*   r+   Ú
adjustSizeo   s   ÿrA   c                   @   s>   e Zd ZdZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )Ú
_OSReleasez/etc/os-releaseTc                 C   sH   i | _ d| _tj| _tj | j¡sd S |  ¡  d| _|r"|  	¡  d S d S )NFT)
ÚresultÚvalidrB   ÚOS_RELEASE_FILEr2   r-   r.   ÚisfileÚparseÚinject_lsb_compat)r@   Ú
lsb_compatr*   r*   r+   Ú__init__y   s   ÿz_OSRelease.__init__c                 C   sd   | j d | j d< | j d | j d< | j  d¡| j d< | j d s'| j  d¡| j d< | j  d¡| j d	< d S )
NÚIDzDistributor IDÚPRETTY_NAMEÚDescriptionÚVERSION_CODENAMEÚCodenameÚUBUNTU_CODENAMEÚ
VERSION_IDÚRelease)rC   r   r?   r*   r*   r+   rH   ‡   s   
z_OSRelease.inject_lsb_compatc                 C   sB   t | jdƒ}|D ]}| ¡ }|sq| j| dd¡Ž  q| ¡  d S )NÚrú=r   )Úopenr2   ÚstripÚparse_entryÚsplitÚclose)r@   ÚfÚliner*   r*   r+   rG   ‘   s   z_OSRelease.parsec                 C   s4   |   |¡}|dkrt|tƒr| d¡}|| j|< d S )NÚID_LIKEú )Úparse_valuer%   ÚstrrX   rC   )r@   ÚkeyÚvaluer*   r*   r+   rW   š   s   

z_OSRelease.parse_entryc                 C   s"   t  |¡}t|ƒdkr|d S |S )Nr   r   )ÚshlexrX   Úlen)r@   ra   Úvaluesr*   r*   r+   r^   ¢   s   
z_OSRelease.parse_valueN)T)
Ú__name__Ú
__module__Ú__qualname__ÚDEFAULT_OS_RELEASE_FILErE   rJ   rH   rG   rW   r^   r*   r*   r*   r+   rB   u   s    

	rB   c                   @   s@   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S )ÚDumbTerminalz A very dumb terminal c                 C   sR   t  | d|¡ || _|  d¡ |  d¡ |  tj¡ |  d¡ |  	d¡ d| _
dS )z2 really dumb terminal with simple editing support Ú Ú	Monospaceé   FTN)r   rJ   ÚinstallProgressÚsetFontFamilyÚsetFontPointSizeÚsetWordWrapModer   ÚNoWrapÚsetUndoRedoEnabledÚsetOverwriteModeÚ_block)r@   rm   Úparent_framer*   r*   r+   rJ   «   s   




zDumbTerminal.__init__c                 C   s,   t  ¡ \| _| j_| jdkrdtjd< | jS )ú
pty voodoor   ÚdumbÚTERM)ÚptyÚforkÚ	child_pidrm   Ú	master_fdr-   Úenvironr?   r*   r*   r+   rz   ¹   s   

zDumbTerminal.forkc                 C   sR   t   | jjgg g d¡\}}}t|ƒdkr#t | jjd¡}|  t|ƒ¡ t 	¡  d S )Nr   éÿ   )
Úselectrm   r|   rc   r-   ÚreadÚinsertWithTermCodesr,   r   ÚprocessEvents)r@   ÚrlistÚwlistÚxlistr[   r*   r*   r+   Úupdate_interfaceÀ   s
   zDumbTerminal.update_interfacec                 C   sh   d}|D ](}t |ƒdkr|  |¡ |  ¡  ¡  d}q|tdƒkr!q|tdƒkr(q||7 }q|  |¡ dS )z support basic terminal codes rj   rl   é   é   N)ÚordÚinsertPlainTextÚ
textCursorÚdeletePreviousCharÚchr)r@   ÚtextÚdisplay_textÚcr*   r*   r+   r�   Ç   s   

z DumbTerminal.insertWithTermCodesc                 C   s^   t | jdƒsdS | ¡ tjkrt | jjtdƒ¡ dS | 	¡ s!dS t | jj| 	¡  
¡ ¡ dS )z$ send (ascii) key events to the pty r|   Nrl   )Úhasattrrm   r`   r   ÚKey_Backspacer-   Úwriter|   r�   rŽ   ÚtoUtf8)r@   Úevr*   r*   r+   ÚkeyPressEventÚ   s   zDumbTerminal.keyPressEventc                 C   s&   | j rdS d| _ |  tj¡ d| _ dS )z: helper that ensures that the cursor is always at the end NTF)rt   Ú
moveCursorr   ÚEndr?   r*   r*   r+   ÚonCursorPositionChangedê   s
   
z$DumbTerminal.onCursorPositionChangedN)
re   rf   rg   Ú__doc__rJ   rz   r†   r�   r–   r™   r*   r*   r*   r+   ri   ©   s    ri   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚKDECdromProgressAdapterz Report the cdrom add progress c                 C   s   |j j| _|j j| _|| _d S r4   )Úwindow_mainÚlabel_statusÚstatusÚprogressbar_cacheÚprogressbarr3   ©r@   r3   r*   r*   r+   rJ   ö   s   


z KDECdromProgressAdapter.__init__c                 C   s4   |r| j  |¡ | j |jt| jƒ ¡ t ¡  dS )z; update is called regularly so that the gui can be redrawn N)	rž   ÚsetTextr    ÚsetValuera   ÚfloatÚ
totalStepsr   r‚   )r@   rŽ   Ústepr*   r*   r+   Úupdateû   s   zKDECdromProgressAdapter.updatec                 C   ó   dS )N)Frj   r*   r?   r*   r*   r+   Úask_cdrom_name  ó   z&KDECdromProgressAdapter.ask_cdrom_namec                 C   r¨   )NFr*   r?   r*   r*   r+   Úchange_cdrom  rª   z$KDECdromProgressAdapter.change_cdromN)re   rf   rg   rš   rJ   r§   r©   r«   r*   r*   r*   r+   r›   ô   s    r›   c                       s2   e Zd ZdZdd„ Zd	‡ fdd„	Zdd„ Z‡  ZS )
ÚKDEOpProgressz methods on the progress bar c                 C   s   || _ || _d S r4   )r    Úprogressbar_label)r@   r    r­   r*   r*   r+   rJ     s   
zKDEOpProgress.__init__Nc                    s*   t t| ƒ |¡ | j | j¡ t ¡  d S r4   )Úsuperr¬   r§   r    r£   Úpercentr   r‚   )r@   r¯   ©Ú	__class__r*   r+   r§     s   zKDEOpProgress.updatec                 C   ó   | j  d¡ d S ©Nrj   )r­   r¢   r?   r*   r*   r+   Údone  ó   zKDEOpProgress.doner4   )re   rf   rg   rš   rJ   r§   r´   Ú__classcell__r*   r*   r°   r+   r¬   	  s
    
r¬   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚKDEAcquireProgressAdapterz? methods for updating the progress bar while fetching packages c                 C   s(   t  | ¡ |jj| _|jj| _|| _d S r4   )r   rJ   rœ   r�   rž   rŸ   Úprogressr3   r¡   r*   r*   r+   rJ   $  s   



z"KDEAcquireProgressAdapter.__init__c                 C   s@   t dƒ||f }t | jjt dƒ|tjtj¡}|tjkrdS dS )Nz&Please insert '%s' into the drive '%s'zMedia ChangeTF)Ú_r   Úquestionr3   rœ   ÚOkÚCancel)r@   ÚmediumÚdriveÚmsgÚchanger*   r*   r+   Úmedia_change+  s
   
z&KDEAcquireProgressAdapter.media_changec                 C   s$   t  | ¡ | j d¡ | j ¡  d S )Nr   )r   Ústartr¸   r£   rž   Úshowr?   r*   r*   r+   rÂ   2  s   
zKDEAcquireProgressAdapter.startc                 C   s$   | j jj d¡ | j tdƒ¡ d S )Nú  zFetching is complete)r3   rœ   Úprogress_textr¢   rž   r¹   r?   r*   r*   r+   Ústop8  s   zKDEAcquireProgressAdapter.stopc                 C   sÜ   t  | |¡ | j | j¡ | jd }|| jkr| j}| jdkrSt 	| j¡}t
|tƒr1| t ¡ ¡}| j tdƒ|| j|f ¡ | jjj dtdƒt| jƒ  d ¡ n| j tdƒ|| jf ¡ | jjj d¡ t ¡  d	S )
z\ we don't have a mainloop in this application, we just call processEvents here and elsewherer   r   z!Fetching file %li of %li at %sB/sz<i>úAbout %s remainingz</i>zFetching file %li of %lirÄ   T)r   Úpulser¸   r£   r¯   Úcurrent_itemsÚtotal_itemsÚcurrent_cpsÚapt_pkgÚsize_to_strr%   r&   r'   ÚlocaleÚgetpreferredencodingrž   r¢   r¹   r3   rœ   rÅ   r   Úetar   r‚   )r@   ÚownerÚcurrent_itemrË   r*   r*   r+   rÈ   <  s   



(zKDEAcquireProgressAdapter.pulseN)	re   rf   rg   rš   rJ   rÁ   rÂ   rÆ   rÈ   r*   r*   r*   r+   r·     s    r·   c                   @   sd   e Zd 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„ Zdd„ Zdd„ ZdS )ÚKDEInstallProgressAdapterz?methods for updating the progress bar while installing packageséð   c              
   C   s¨   t  | ¡ d | _|jj| _|jj| _|jj| _|| _zt	ddƒ| _
W n( tyJ } zt d| ¡ tjdkr<tjj| _
ntj| _
W Y d }~nd }~ww tj dd¡ d S )Nz/var/log/dist-upgrade/term.logÚwbzCan not open terminal log: '%s'Ú3zDPkg::StopOnErrorÚFalse)r   rJ   Ú_cacherœ   r�   rŸ   r¸   rÅ   r3   rU   Ú_terminal_logÚ	ExceptionÚloggingÚerrorÚsysÚversionÚstdoutÚbufferrÌ   ÚconfigÚset)r@   r3   Úer*   r*   r+   rJ   Z  s    




€úz"KDEInstallProgressAdapter.__init__c                 C   s^   t  | ¡ d| _| j tdƒ¡ | j d¡ | j d¡ d| _	d| _
d| _| jjj d¡ d S )NFzApplying changesr   r]   ç        T)r   Ústart_updateÚfinishedr�   r¢   r¹   r¸   r£   rÅ   Ú
start_timeÚtime_uiÚlast_activityr3   rœ   ÚshowTerminalButtonÚ
setEnabledr?   r*   r*   r+   rå   m  s   
z&KDEInstallProgressAdapter.start_updatec                 C   sÄ   t  | ||¡ t d||f ¡ t dd¡|v rdS tdƒ| }tdƒ| }d||f }t| jjƒ}t	d|ƒ | j 
|¡ |j |¡ |d krS|j |¡ |j ¡  n|j ¡  | ¡  | ¡  d S )	Nz*got an error from dpkg for pkg: '%s': '%s'Ú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><br />%súdialog_error.ui)r   rÜ   rÛ   r    Údgettextr¹   r   r3   rœ   r0   Útranslate_widget_childrenÚlabel_errorr¢   Útextview_errorrÃ   ÚhiderA   Úexec_)r@   ÚpkgÚerrormsgÚsummaryr¿   Údialoguer*   r*   r+   rÜ   |  s&   þ

zKDEInstallProgressAdapter.errorc           
      C   s<  t  d| ¡ t ¡ }tdƒ| }tdƒ}d||f }t| jjƒ| _td| jƒ | jj	 
|¡ | jj ¡  | jjj | j¡ tj |¡sH|d }tj d¡rndd||g}tj|tjd	� ¡ d
 }| dd¡}| jj 
|¡ n	| jj 
tdƒ¡ | j ¡ }	|  jt ¡ | 7  _|	tjkr•t | jd¡ dS t | jd¡ dS )z6ask question in case conffile has been changed by userz.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> 

%szdialog_conffile.uiz
.dpkg-distz/usr/bin/diffz-u)rß   r   r$   Úreplacez The 'diff' command was not founds   y
s   n
N)rÛ   ÚdebugÚtimer¹   r   r3   rœ   ÚconfDialoguer0   Úlabel_conffiler¢   Útextview_conffileró   Úshow_difference_buttonÚclickedÚconnectÚshowConffiler-   r.   r/   Ú
subprocessÚPopenÚPIPEÚcommunicater'   rô   rè   ÚAcceptedr“   r|   )
r@   ÚcurrentÚnewrÂ   ÚprimÚsecÚmarkupÚcmdÚdiffrC   r*   r*   r+   Úconffile•  s.   

z"KDEInstallProgressAdapter.conffilec                 C   sP   | j j ¡ r| j j ¡  | j j tdƒ¡ d S | j j ¡  | j j tdƒ¡ d S )NzShow Difference >>>z<<< Hide Difference)rü   rþ   Ú	isVisibleró   rÿ   r¢   r¹   rÃ   r?   r*   r*   r+   r  º  s
   z&KDEInstallProgressAdapter.showConffilec                 C   sf   t  ¡ \| _| _| jdkr(dtjd< dtjvstjd dkr#dtjd< dtjd< t d	| j ¡ | jS )
rv   r   rw   rx   ÚDEBIAN_FRONTENDÚkdeÚnoninteractiveÚnoneÚAPT_LISTCHANGES_FRONTENDz fork pid is: %s)ry   rz   r{   r|   r-   r}   rÛ   rú   r?   r*   r*   r+   rz   Â  s   




zKDEInstallProgressAdapter.forkc                 C   s¾   | j dkr
t ¡ | _ | j | j¡ | j t| ¡ ƒ¡ |dkr]t ¡ | _	d| _
| j	| j  }|| j8 }t|ƒ| }d| j | }|dkrU|dk rU| j tdƒt|ƒ ¡ d	S | j d¡ d	S d	S )
zupdate progress bar and labelrä   g      ð?Fg      Y@g     €N@i £ rÇ   r]   N)rç   rû   r¸   r£   r¯   r�   r¢   r,   rV   ré   Úactivity_timeout_reportedrè   r¤   rÅ   r¹   r   )r@   rõ   r¯   rž   ÚdeltaÚtime_per_percentrÐ   r*   r*   r+   Ústatus_changeÎ  s   



ôz'KDEInstallProgressAdapter.status_changec                 C   r²   r³   )r�   r¢   r?   r*   r*   r+   Úfinish_updateå  rµ   z'KDEInstallProgressAdapter.finish_updatec              
   C   s~  	 z0t   | jgg g d¡\}}}t|ƒdkr.t | jd¡}| j |¡ | jj 	t
|dd�¡ nW n W n tyN } zt|ƒ t d| ¡ W Y d}~nd}~ww qzt | ¡ W n tyv } zt d| j|f ¡ d	| _W Y d}~nd}~ww | jdkr´| j| j t ¡ k r´| js­zt d
| j| j ¡ f ¡ W n ty©   t d| j ¡ Y nw d| _| jjj ¡  t ¡  t  d¡ dS )z–
        no mainloop in this application, just call processEvents lots here
        it's also important to sleep for a minimum amount of time
        Tr   r~   rù   )r)   z&error reading from self.master_fd '%s'NzHgot ValueError from InstallProgress.update_interface. Line was '%s' (%s)rj   z+no activity on terminal for %s seconds (%s)z&no activity on terminal for %s secondsg{®Gáz”?)!r   r|   rc   r-   r€   rÙ   r“   r3   Úterminal_textr�   r,   rÚ   r1   rÛ   rú   r   r†   Ú
ValueErrorrÜ   ré   ÚTIMEOUT_TERMINAL_ACTIVITYrû   r  Úwarningr�   rŽ   ÚUnicodeEncodeErrorrœ   Úkonsole_framerÃ   r   r‚   Úsleep)r@   rƒ   r„   r…   r[   rã   r*   r*   r+   r†   è  sJ   
ÿý€ýö€ý
ÿz*KDEInstallProgressAdapter.update_interfacec                 C   s0   	 |   ¡  t | jtj¡\}}|| jkr	 |S qr4   )r†   r-   Úwaitpidr{   ÚWNOHANG)r@   ÚpidÚresr*   r*   r+   Ú
wait_child  s   
úz$KDEInstallProgressAdapter.wait_childN)re   rf   rg   rš   r  rJ   rå   rÜ   r  r  rz   r  r  r†   r&  r*   r*   r*   r+   rÓ   T  s    %*rÓ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚUpgraderMainWindowc                 C   s   t  | ¡ td| ƒ d S )Nzwindow_main.ui)r   rJ   r0   r?   r*   r*   r+   rJ      s   
zUpgraderMainWindow.__init__c                 C   s
   || _ d S r4   )r3   )r@   Ú	parentRefr*   r*   r+   Ú	setParent%  s   
zUpgraderMainWindow.setParentc                 C   s&   | j  ¡ }|r| ¡  d S | ¡  d S r4   )r3   Úon_window_main_delete_eventÚacceptÚignore)r@   ÚeventrY   r*   r*   r+   Ú
closeEvent(  s   
zUpgraderMainWindow.closeEventN)re   rf   rg   rJ   r)  r.  r*   r*   r*   r+   r'    s    r'  c                       sê   e Zd ZdZd7d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‡ fdd„Zd8dd „Zd8d!d"„Z	#d9d$d%„Zd&d'„ Zd:d)d*„Zd;d,d-„Zd.d/„ Zd0d1„ Zd<d3d4„Zd5d6„ Z‡  ZS )=ÚDistUpgradeViewKDEz$KDE frontend of the distUpgrade toolNc           
   
   C   s´  t  | ¡ tƒ  d¡ t d¡}| tj¡ |r|dkr&tj	 
t ¡ d¡}nd}zt d|¡ t d¡ W n tyN } zt d| ¡ W Y d }~nd }~ww dtjvrXtd	ƒ‚d
tjd< dtjd< dtjd< d
tjd< tdgƒ| _t| jƒ}ttƒtkrˆ| t ¡ ddd¡ n
| t ¡ ddd¡ | j |¡ tƒ  ¡  tdddgd�}| j |¡ t ƒ | _!| j! "| ¡ | j! #¡  d | _$t%| j!j&| j!j'ƒ| _(t)| ƒ| _*t+| ƒ| _,t-| ƒ| _.| j/t0_1| j!j2 3d¡ | j!j2j4 5| j6¡ t d|¡ t d¡ |  7¡  t8ƒ j9d }|�r|dk�r	d}| j!j: ;¡ }	|	 <d|¡}	|	 <dd¡}	| j!j: =|	¡ | j!j> ?¡  t@| j!j>ƒ| _A| j!j> Bdd ¡ tC| j.| j!j>ƒ| _D| jA E| jD¡ | jD #¡  tF Gd!| jH¡ | j I¡  d S )"NÚKDEÚPyQt4Ú.Úmoz)/usr/share/locale/ubuntu-release-upgraderzubuntu-release-upgraderzError setting locales (%s)ÚDISPLAYzNo DISPLAY in os.environ foundr  ÚQT_PLATFORM_PLUGINÚTRUEÚKDE_FULL_SESSIONÚ5ÚKDE_SESSION_VERSIONÚQT_QPA_PLATFORMTHEMEÚqtr¹   z/usr/share/qt5/translationsz/usr/share/qt4/translationszsystem-software-updatez=/usr/share/icons/oxygen/48x48/apps/system-software-update.pngz5/usr/share/icons/hicolor/48x48/apps/adept_manager.png©r:   FrL   ÚUbuntuÚKubuntuz%sz22.04iX  i�  é
   )Jr   rJ   Úget_telemetryÚset_updater_typerÛ   Ú	getLoggerÚsetLevelÚINFOr-   r.   ÚjoinÚgetcwdr    ÚbindtextdomainÚ
textdomainrÚ   r  r}   r   Úappr   r6   r	   r7   Úloadr   ÚsystemÚinstallTranslatorr"   ÚsetupUrlHandlesr<   ÚsetWindowIconr'  rœ   r)  rÃ   Ú	prev_stepr¬   rŸ   rÅ   Ú_opCacheProgressr·   Ú_acquireProgressr›   Ú_cdromProgressrÓ   Ú_installProgressÚ_handleExceptionrÝ   Ú
excepthookrê   rë   r   r  ÚshowTerminalrð   rB   rC   Úlabel_titlerŽ   rù   r¢   r   ró   r   Úkonsole_frame_layoutÚsetMinimumSizeri   r  Ú	addWidgetr
   Ú
singleShotÚexitMainLoopMidFlightrô   )
r@   ÚdatadirÚlogdirÚloggerÚ	localedirrã   Ú
translatorÚmessageIconr9   Útitle_stringr*   r*   r+   rJ   2  s|   

€ÿ






ÿÿ





zDistUpgradeViewKDE.__init__c                 C   s   t dƒ | j ¡  d S )Nr\  )r1   rI  Úexitr?   r*   r*   r+   r\  ’  s   z(DistUpgradeViewKDE.exitMainLoopMidFlightc                 C   s’   |d kr| j }t|tƒst|tƒr.t| ¡ ƒdkr#| t dd¡¡ n| t	t| ¡ ƒƒ¡ | 
¡ d krE| 
¡ D ]}|  |¡ |  |¡ q8d S d S )NÚErrorÚkdelibs)rœ   r%   r   r   r_   ÚwindowTitleÚsetWindowTitler    rï   r¹   ÚchildrenÚtranslate_widgetrð   )r@   ÚparentWidgetÚwidgetr*   r*   r+   rð   —  s   
ýz,DistUpgradeViewKDE.translate_widget_childrenc                 C   sÂ   t |tƒs
t |tƒr]t| ¡ ƒdkr'tjdt d¡dd�}| t	|dƒ¡ d S t| ¡ ƒdkrDtjdt d¡dd�}| t	|dƒ¡ d S t| ¡ ƒdkr_| t
t| ¡ ƒƒ dd¡¡ d S d S d S )	Nz&Cancelrf  T)Úfallbackú&Closerj   r¹   ú&)r%   r   r   r_   rŽ   r    ÚtranslationrH  r¢   r!   r¹   rù   )r@   rl  rf  r*   r*   r+   rj  ¥  s   ÿÿ"ö	z#DistUpgradeViewKDE.translate_widgetc                 C   sª   t |tƒs
t |tƒrdS t |||¡}t dd |¡ ¡ t|||ƒ t	ƒ sNd t |||¡¡}t
| jƒ}td|ƒ |  | j¡ |j |¡ | ¡  | ¡  t d¡ dS )zCrash handler.Nz)not handled exception in KDE frontend:
%sÚ
rj   rî   r   )Ú
issubclassÚKeyboardInterruptÚ
SystemExitÚ	tracebackÚformat_exceptionrÛ   rÜ   rE  r   r   r   rœ   r0   rð   ÚdialogÚcrash_detailr¢   rA   rô   rÝ   rd  )r@   ÚexctypeÚexcvalueÚexctbÚlinesÚtbtextrw  r*   r*   r+   rT  ²  s    
ÿ

z#DistUpgradeViewKDE._handleExceptionc                 C   sX   | j j ¡ r| j j ¡  | j j tdƒ¡ n| j j ¡  | j j tdƒ¡ | j  ¡  d S )NzShow Terminal >>>z<<< Hide Terminal)	rœ   r   r  ró   rê   r¢   r¹   rÃ   rA   r?   r*   r*   r+   rV  Í  s   zDistUpgradeViewKDE.showTerminalc                 C   ó   | j S r4   )rQ  r?   r*   r*   r+   ÚgetAcquireProgressÖ  ó   z%DistUpgradeViewKDE.getAcquireProgressc                 C   s   || j _| j S r4   )rS  rØ   )r@   Úcacher*   r*   r+   ÚgetInstallProgressÙ  s   z%DistUpgradeViewKDE.getInstallProgressc                 C   r~  r4   )rP  r?   r*   r*   r+   ÚgetOpCacheProgressÝ  r€  z%DistUpgradeViewKDE.getOpCacheProgressc                 C   r~  r4   )rR  r?   r*   r*   r+   ÚgetCdromProgressà  r€  z#DistUpgradeViewKDE.getCdromProgressc                 C   s   | j j |¡ d S r4   )rœ   r�   r¢   )r@   r¿   r*   r*   r+   Úupdate_statusã  s   z DistUpgradeViewKDE.update_statusc                 C   s8   t | jd|j ƒ}t | jd|j ƒ}| ¡  | ¡  d S )Núimage_step%iúlabel_step%i)Úgetattrrœ   ra   ró   )r@   r¦   ÚimageÚlabelr*   r*   r+   ÚhideStepæ  s   zDistUpgradeViewKDE.hideStepc                 C   sN   | j }|r%t| jd|j ƒ}tdg d¢d�}| | dd¡¡ | ¡  d S d S )Nr†  zdialog-cancel)z7/usr/share/icons/oxygen/16x16/actions/dialog-cancel.pngz@/usr/lib/kde4/share/icons/oxygen/16x16/actions/dialog-cancel.pngz4/usr/share/icons/crystalsvg/16x16/actions/cancel.pngr<  é   )rO  rˆ  rœ   ra   r<   Ú	setPixmapr;   rÃ   )r@   r¦   r‰  Ú
cancelIconr*   r*   r+   Úabortì  s   ÿùzDistUpgradeViewKDE.abortc                    sÖ   t t| ƒ |¡ tdg d¢d�}tdg d¢d�}| jr<t| jd| jj ƒ}t| jd| jj ƒ}| | 	dd¡¡ | 
¡  || _t| jd|j ƒ}t| jd|j ƒ}| | 	dd¡¡ | 
¡  | d	| ¡  d
 ¡ d S )Nz	dialog-ok)z3/usr/share/icons/oxygen/16x16/actions/dialog-ok.pngz</usr/lib/kde4/share/icons/oxygen/16x16/actions/dialog-ok.pngz0/usr/share/icons/crystalsvg/16x16/actions/ok.pngr<  zarrow-right)z5/usr/share/icons/oxygen/16x16/actions/arrow-right.pngz>/usr/lib/kde4/share/icons/oxygen/16x16/actions/arrow-right.pngz9/usr/share/icons/crystalsvg/16x16/actions/1rightarrow.pngr†  r‡  rŒ  z<b>z</b>)r®   r/  ÚsetStepr<   rO  rˆ  rœ   ra   r�  r;   rÃ   r¢   rŽ   )r@   r¦   ÚokIconÚ	arrowIconr‰  rŠ  r°   r*   r+   r�  ÷  s$   ÿÿzDistUpgradeViewKDE.setStepc                 C   s¦   d||f }t | jƒ}td|ƒ |  |¡ |j |¡ |d kr+|j |¡ |j ¡  n|j ¡  | 	t
dƒ¡ tdg d¢d�}|j | dd¡¡ | ¡  | ¡  d S )Nrí   rî   ÚInformationzdialog-information)z;/usr/share/icons/oxygen/48x48/status/dialog-information.pngzD/usr/lib/kde4/share/icons/oxygen/48x48/status/dialog-information.pngz=/usr/share/icons/crystalsvg/32x32/actions/messagebox_info.pngr<  é0   )r   rœ   r0   rð   rñ   r¢   rò   rÃ   ró   rh  r¹   r<   r‰  r�  r;   rA   rô   ©r@   r÷   r¿   Úextended_msgrø   rb  r*   r*   r+   Úinformation  s    



ÿzDistUpgradeViewKDE.informationc                 C   s˜   d||f }t | jƒ}td|ƒ |  |¡ |j |¡ |d kr+|j |¡ |j ¡  n|j ¡  t	dg d¢d�}|j
 | dd¡¡ | ¡  | ¡  dS )Nrí   rî   zdialog-error)z5/usr/share/icons/oxygen/48x48/status/dialog-error.pngz>/usr/lib/kde4/share/icons/oxygen/48x48/status/dialog-error.pngzA/usr/share/icons/crystalsvg/32x32/actions/messagebox_critical.pngr<  r”  F)r   rœ   r0   rð   rñ   r¢   rò   rÃ   ró   r<   r‰  r�  r;   rA   rô   r•  r*   r*   r+   rÜ   '  s    



ÿzDistUpgradeViewKDE.errorTc                 C   s–  t  | ||||¡ t| jƒ| _td| jƒ | jj ¡  | jjj	 
| j¡ |  | j¡ | jj tj¡ tdƒ¡ | jj tj¡ tƒ ¡ | jj tj¡ tdƒd ¡ tdg d¢d�}| jj | dd¡¡ |d	kr�|d
  dd¡}| jj tj¡ |¡ |d  dd¡}	| jj tj¡ |	¡ d| }
| jj |
¡ | jj | j¡ | jj ¡  | jj dg¡ | jj  ¡  ¡  | j!D ]}| jj "d
t#| jjtdƒ|j$ gƒ¡ q»| j%D ]}| jj "d
t#| jjtdƒ|j$ gƒ¡ qÔ| j&D ]}| jj "d
t#| jjtdƒ|j$ gƒ¡ qí| j'D ]}| jj "d
t#| jjtdƒ|j$ gƒ¡ �q| j(D ]}| jj "d
t#| jjtdƒ|j$ gƒ¡ �q | j )¡  | j *¡ }|tj+k�rIdS dS )zshow the changes dialoguezdialog_changes.uiz&Start UpgradeÚDetailsú >>>zdialog-warning)z7/usr/share/icons/oxygen/48x48/status/dialog-warning.pngz@/usr/lib/kde4/share/icons/oxygen/48x48/status/dialog-warning.pngz@/usr/share/icons/crystalsvg/32x32/actions/messagebox_warning.pngr<  r”  Nr   r¹   rj   r   z<big><b>%s</b></big>ÚPackageszNo longer supported %sz	Remove %szRemove (was auto installed) %sz
Install %sz
Upgrade %sTF),r   ÚconfirmChangesr   rœ   ÚchangesDialoguer0   Útreeview_detailsró   Ú	buttonBoxÚhelpRequestedr  ÚshowChangesDialogueDetailsrð   Úbuttonr   r»   r¢   r¹   ÚHelpÚsetIconr   r<   Úquestion_pixmapr�  r;   rù   r¼   Úlabel_summaryÚlabel_changesÚconfirmChangesMessageÚclearÚsetHeaderLabelsÚheaderÚ	demotionsÚinsertTopLevelItemr   r9   ÚtoRemoveÚtoRemoveAutoÚ	toInstallÚ	toUpgraderA   rô   r  )r@   r÷   Úchangesr«  ÚdownloadSizeÚactionsÚremoval_boldrb  ÚcancelÚconfirmÚsummaryTextÚdemotedÚrmÚinstÚupr%  r*   r*   r+   r›  ?  sR   ÿÿ
(
(
(
*
*

z!DistUpgradeViewKDE.confirmChangesc                 C   sp   | j j ¡ r| j j ¡  | j j tj¡ t	dƒd ¡ n| j j 
¡  | j j tj¡ dt	dƒ ¡ | j  ¡  d S )Nr˜  r™  z<<< )rœ  r�  r  ró   rž  r¡  r   r¢  r¢   r¹   rÃ   rA   r?   r*   r*   r+   r   w  s    z-DistUpgradeViewKDE.showChangesDialogueDetailsÚNoc                 C   s4   t  | j|d| t jt jB t j¡}|t jkrdS dS )Nz<font>TF)r   rº   rœ   ÚYesr¼  )r@   r÷   r¿   ÚdefaultÚanswerr*   r*   r+   ÚaskYesNoQuestion€  s   "
z#DistUpgradeViewKDE.askYesNoQuestionr¼   c           	      C   s”   t t j||t j| jƒ}| t j¡}| t j¡}| tdƒ¡ |dkr(| 	|¡ n| 	|¡ |d u r=| 
¡ }| |tjB ¡ | ¡ }|t jkrHdS dS )NÚContinuer¼   TF)r   ÚWarningÚNoButtonrœ   Ú	addButtonÚApplyr¼   r¢   r¹   ÚsetDefaultButtonÚwindowFlagsÚsetWindowFlagsr   ÚFramelessWindowHintrô   )	r@   r÷   r¿   r¾  Ú
messageBoxÚcontinueButtonÚcancelButtonÚflagsr¿  r*   r*   r+   ÚaskCancelContinueQuestion†  s   

z,DistUpgradeViewKDE.askCancelContinueQuestionc                 C   sx   t t jtdƒtdƒt j| jƒ}| t j¡}| t j¡}| tdƒ 	dd¡¡ | t
 dd¡¡ | ¡ }|t jkr:dS d	S )
NzRestart requiredz<<b><big>Restart the system to complete the upgrade</big></b>z_Restart Nowr¹   ro  rf  rn  TF)r   ÚQuestionr¹   rÃ  rœ   rÄ  r½  r¼  r¢   rù   r    rï   rô   )r@   rÊ  Ú	yesButtonÚnoButtonr¿  r*   r*   r+   ÚconfirmRestartš  s   
z!DistUpgradeViewKDE.confirmRestartc                 C   s   t  ¡  d S r4   )r   r‚   r?   r*   r*   r+   r‚   ¥  s   z DistUpgradeViewKDE.processEventsFc                 C   s   d S r4   r*   )r@   ræ   r*   r*   r+   ÚpulseProgress¨  s   z DistUpgradeViewKDE.pulseProgressc                 C   sB   t dƒ}| dd¡}t | jt dƒ|tjtj¡}|tjkrdS dS )Nz¢<b><big>Cancel the running upgrade?</big></b>

The system could be in an unusable state if you cancel the upgrade. You are strongly advised to resume the upgrade.rq  z<br />zCancel Upgrade?TF)r¹   rù   r   r  rœ   r½  r¼  )r@   rŽ   rµ  r*   r*   r+   r*  ®  s   
z.DistUpgradeViewKDE.on_window_main_delete_event)NNr4   )NT)r¼  )r¼   )F)re   rf   rg   rš   rJ   r\  rð   rj  rT  rV  r  r‚  rƒ  r„  r…  r‹  r�  r�  r—  rÜ   r›  r   rÀ  rÎ  rÒ  r‚   rÓ  r*  r¶   r*   r*   r°   r+   r/  0  s6    
`
	


ÿ8
	

r/  Ú__main__zinput box testzôbar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar z--test-termÚbashTg{®Gáz„?z--show-in-terminalé   gš™™™™™©?)Úpurge)r#   )gÚutilsr   ÚImportErrorÚPyQt5r   ÚPyQt5.QtCorer   r   r   r	   r
   ÚPyQt5.QtWidgetsr   r   r   r   r   r   r   r   r   r   ÚPyQt5.QtGuir   r   r   r   r1  ÚPyQt4.QtCoreÚPyQt4.QtGuirÝ   rÎ   rÛ   rû   r  ru  ÚaptrÌ   rb   r-   ry   ÚDistUpgradeApportr   r   r   r   r   r   Ú	telemetryr   r@  r   r    ÚDistUpgradeGettextr¹   r!   r"   r,   r0   r5   r<   rA   r>   rB   ri   r¸   ÚbaseÚCdromProgressr›   Ú
OpProgressr¬   r·   rÓ   r'  r/  re   ÚviewrÀ  Úargvr  rz   r$  Úcallrd  r†   r‚   r!  rU   rZ   r€   Úcharsr�   r�   ÚCacher�  rõ   Úis_installedÚis_upgradableÚmark_deleteÚmark_installÚcommitrQ  rS  r*   r*   r*   r+   Ú<module>   sª   
0Dý
4K5 K   




ý
ÿÿÿÝ