
Y]ߔ                 @   s  y d  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 Wn e k
 rs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 Yn Xd 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	 l/ Z/ d d	 l0 Z0 d  d l1 m0 Z2 d  d l1 m3 Z3 d  d l4 m4 Z4 d d d  Z5 d d   Z6 Gd d   d e  Z7 Gd d   d e$ j8 j9 j:  Z; Gd d   d e$ j8 j9 j<  Z= Gd d   d e.  Z> Gd d   d e-  Z? Gd d   d e  Z@ Gd  d!   d! e+  ZA eB d" k reA   ZC eC jD d# d$  e jE d  d% k reC jF jG   ZH eH d k re" jI d& g  e jJ   x( eC jF jK   e jL   e! jM d'  qWe jE d  d( k rPeN e jE d)   ZO eO jP   ZQ Wd	 QRXx5 eQ D]- ZR eC jF jS eR  e jL   e! jM d*  qWx e jL   qBWe$ jT   ZU x[ e jE d  d	  D]F ZV eU eV jW oeU eV jX reU eV jY d+ d,  n eU eV jZ   qpWeU j[ eC j\ eC j]  x e jL   qWd	 S)-   )get_distZ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)gettext)unicode_gettext)
QUrlOpenerstrictc             C   s'   t  |  t  r |  j d |  S|  Sd  S)NzUTF-8)
isinstancebytesdecode)serrors r'   @/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewKDE.pyutf8I   s    r)   c             C   s7   t  j j |   r% t j |  |  n t d |   d  S)Nzerror, can't find file: )ospathexistsr   loadUiprint)fileparentr'   r'   r(   r-   P   s    r-   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   sm   t  j |  d |  | |  _ |  j d  |  j d  |  j t j  |  j d  |  j	 d  d |  _
 d S)z2 really dumb terminal with simple editing support  Z	Monospace   FTN)r
   __init__installProgressZsetFontFamilyZsetFontPointSizeZsetWordWrapModer   ZNoWrapZsetUndoRedoEnabledZsetOverwriteMode_block)selfr5   Zparent_framer'   r'   r(   r4   Z   s    	zDumbTerminal.__init__c             C   s>   t  j   \ |  _ |  j _ |  j d k r7 d t j d <|  j S)z
pty voodoor   dumbTERM)ptyfork	child_pidr5   	master_fdr*   environ)r7   r'   r'   r(   r;   h   s    zDumbTerminal.forkc             C   su   t  j  |  j j g g  g  d  \ } } } t |  d k rg t j |  j j d  } |  j t |   t j	   d  S)Nr      )
selectr5   r=   lenr*   readinsertWithTermCodesr)   r   processEvents)r7   rlistwlistxlistliner'   r'   r(   update_interfaceo   s
    *zDumbTerminal.update_interfacec             C   s   d } xz | D]r } t  |  d k rK |  j |  |  j   j   d } q | t d  k r` q | t d  k ru q | | 7} q W|  j |  d S)z support basic terminal codes r2   r3         N)ordZinsertPlainTextZ
textCursorZdeletePreviousCharchr)r7   textZdisplay_textcr'   r'   r(   rC   v   s    	z DumbTerminal.insertWithTermCodesc             C   s   t  |  j d  s d S| j   t j k rK t j |  j j t d   d S| j	   s[ d St j |  j j | j	   j
    d S)z$ send (ascii) key events to the pty r=   Nr3   )hasattrr5   keyr   ZKey_Backspacer*   writer=   rM   rN   ZtoUtf8)r7   Zevr'   r'   r(   keyPressEvent   s    zDumbTerminal.keyPressEventc             C   s3   |  j  r d Sd |  _  |  j t j  d |  _  d S)z: helper that ensures that the cursor is always at the end NTF)r6   Z
moveCursorr   ZEnd)r7   r'   r'   r(   onCursorPositionChanged   s
    		z$DumbTerminal.onCursorPositionChangedN)
__name__
__module____qualname____doc__r4   r;   rI   rC   rS   rT   r'   r'   r'   r(   r1   X   s   r1   c               @   sF   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)N)window_mainlabel_statusstatusprogressbar_cacheprogressbarr0   )r7   r0   r'   r'   r(   r4      s    z KDECdromProgressAdapter.__init__c             C   sA   | r |  j  j |  |  j j | t |  j   t j   d S)z; update is called regularly so that the gui can be redrawn N)r\   setTextr^   setValuefloatZ
totalStepsr   rD   )r7   rN   stepr'   r'   r(   update   s    zKDECdromProgressAdapter.updatec             C   s   d S)NFr2   )Fr2   r'   )r7   r'   r'   r(   ask_cdrom_name   s    z&KDECdromProgressAdapter.ask_cdrom_namec             C   s   d S)NFr'   )r7   r'   r'   r(   change_cdrom   s    z$KDECdromProgressAdapter.change_cdromN)rU   rV   rW   rX   r4   rc   rd   re   r'   r'   r'   r(   rY      s
   rY   c                   sC   e  Z d  Z d Z d d   Z d   f d d  Z d d   Z   S)	KDEOpProgressz methods on the progress bar c             C   s   | |  _  | |  _ d  S)N)r^   progressbar_label)r7   r^   rg   r'   r'   r(   r4      s    	zKDEOpProgress.__init__Nc                s7   t  t |   j |  |  j j |  j  t j   d  S)N)superrf   rc   r^   r`   percentr   rD   )r7   ri   )	__class__r'   r(   rc      s    zKDEOpProgress.updatec             C   s   |  j  j d  d  S)Nr2   )rg   r_   )r7   r'   r'   r(   done   s    zKDEOpProgress.done)rU   rV   rW   rX   r4   rc   rk   r'   r'   )rj   r(   rf      s   
rf   c               @   sR   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   s8   t  j |   | j j |  _ | j j |  _ | |  _ d  S)N)r   r4   rZ   r[   r\   r]   progressr0   )r7   r0   r'   r'   r(   r4      s    z"KDEAcquireProgressAdapter.__init__c             C   sZ   t  d  | | f } t j |  j j t  d  | t j t j  } | t j k rV d Sd S)Nz&Please insert '%s' into the drive '%s'zMedia ChangeTF)_r   questionr0   rZ   OkCancel)r7   ZmediumZdrivemsgZchanger'   r'   r(   media_change   s
    -z&KDEAcquireProgressAdapter.media_changec             C   s.   t  j |   |  j j d  |  j j   d  S)Nr   )r   startrm   r`   r\   show)r7   r'   r'   r(   rt      s    zKDEAcquireProgressAdapter.startc             C   s0   |  j  j j j d  |  j j t d   d  S)Nz  zFetching is complete)r0   rZ   progress_textr_   r\   rn   )r7   r'   r'   r(   stop   s    zKDEAcquireProgressAdapter.stopc             C   s.  t  j |  |  |  j j |  j  |  j d } | |  j k rH |  j } |  j d k r t j	 |  j  } t
 | t  r | j t j    } |  j j t d  | |  j | f  |  j j j j d t d  t |  j  d  n9 |  j j t d  | |  j f  |  j j j j d  t j   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>zAbout %s remainingz</i>zFetching file %li of %liz  T)r   pulserm   r`   ri   Zcurrent_itemsZtotal_itemscurrent_cpsapt_pkgZsize_to_strr"   r#   r$   localegetpreferredencodingr\   r_   rn   r0   rZ   rv   r   etar   rD   )r7   ownerZcurrent_itemry   r'   r'   r(   rx      s    	&4#
zKDEAcquireProgressAdapter.pulseN)	rU   rV   rW   rX   r4   rs   rt   rw   rx   r'   r'   r'   r(   rl      s   rl   c               @   s   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  j |   d  |  _ | j j |  _ | j j |  _ | j j |  _ | |  _ y t	 d d  |  _
 Wnc t k
 r } zC t j d |  t j d k r t j j |  _
 n t j |  _
 WYd  d  } ~ Xn Xt j j d d  d  S)Nz/var/log/dist-upgrade/term.logwbzCan not open terminal log: '%s'3zDPkg::StopOnErrorFalse)r   r4   _cacherZ   r[   r]   rm   rv   r0   open_terminal_log	Exceptionloggingerrorsysversionstdoutbufferrz   configset)r7   r0   er'   r'   r(   r4   	  s    		z"KDEInstallProgressAdapter.__init__c             C   s   t  j |   d |  _ |  j j t d   |  j j d  |  j j d  d |  _	 d |  _
 d |  _ |  j j j j d  d  S)NFzApplying changesr    g        T)r   start_updatefinishedr[   r_   rn   rm   r`   rv   
start_timetime_uilast_activityr0   rZ   showTerminalButton
setEnabled)r7   r'   r'   r(   r     s    				z&KDEInstallProgressAdapter.start_updatec             C   s  t  j |  | |  t j d | | f  t j d d  | k rF d St d  | } t d  | } d | | f } t |  j j  } t	 d |  |  j j
 |  | j j |  | d  k r | j j |  | j j   n | 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.z<big><b>%s</b></big><br />%szdialog_error.ui)r   r   r   r   dgettextrn   r   r0   rZ   r-   translate_widget_childrenlabel_errorr_   textview_errorru   hide
adjustSizeexec_)r7   pkgZerrormsgsummaryrr   dialoguer'   r'   r(   r   +  s$    	
zKDEInstallProgressAdapter.errorc       
      C   s  t  j d |  t j   } t d  | } t d  } d | | f } t |  j j  |  _ t d |  j  |  j j	 j
 |  |  j j j   |  j j j j |  j  t j j |  s | d } t j j d  r4d d | | g } t j | d	 t j j   d
 } | j d d  } |  j j j
 |  n |  j j j
 t d   |  j j   }	 |  j t j   | 7_ |	 t j k rt j |  j d  n t j |  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-ur   r   zUTF-8replacez The 'diff' command was not founds   y
s   n
N)r   debugtimern   r   r0   rZ   confDialoguer-   Zlabel_conffiler_   textview_conffiler   show_difference_buttonclickedconnectshowConffiler*   r+   r,   
subprocessPopenPIPEZcommunicater$   r   r   AcceptedrR   r=   )
r7   Zcurrentnewrt   ZprimZsecZmarkupcmdZdiffresultr'   r'   r(   conffileD  s.    
"z"KDEInstallProgressAdapter.conffilec             C   sk   |  j  j j   r> |  j  j j   |  j  j j t d   n) |  j  j j   |  j  j j t d   d  S)NzShow Difference >>>z<<< Hide Difference)r   r   	isVisibler   r   r_   rn   ru   )r7   r'   r'   r(   r   i  s
    z&KDEInstallProgressAdapter.showConffilec             C   s   t  j   \ |  _ |  _ |  j d k rp d t j d <d t j k sV t j d d k rc d t j d <d t j d <t j d	 |  j  |  j S)
z
pty voodoor   r8   r9   ZDEBIAN_FRONTENDZkdeZnoninteractiveZnoneZAPT_LISTCHANGES_FRONTENDz fork pid is: %s)r:   r;   r<   r=   r*   r>   r   r   )r7   r'   r'   r(   r;   q  s    zKDEInstallProgressAdapter.forkc             C   s   |  j  d k r t j   |  _  |  j j |  j  |  j j t | j     | d k r t j   |  _	 d |  _
 |  j	 |  j  } | |  j 8} t |  | } d |  j | } | d k r | d k  r |  j j t d	  t |   n |  j j d
  d S)zupdate progress bar and labelg        g      ?Fg      Y@g     N@<         zAbout %s remainingr   Ni  iQ i  )r   r   rm   r`   ri   r[   r_   r)   stripr   activity_timeout_reportedr   ra   rv   rn   r   )r7   r   ri   r\   ZdeltaZtime_per_percentr}   r'   r'   r(   status_change}  s    	#z'KDEInstallProgressAdapter.status_changec             C   s   |  j  j d  d  S)Nr2   )r[   r_   )r7   r'   r'   r(   finish_update  s    z'KDEInstallProgressAdapter.finish_updatec             C   s  x y t  j  |  j g g  g  d  \ } } } t |  d k r t j |  j d  } |  j j |  |  j j j	 t
 | d d  n PWq t k
 r } z! t |  t j d |  PWYd d } ~ Xq Xq Wy t j |   WnH t k
 r+} z( t j d |  j | f  d |  _ WYd d } ~ Xn X|  j d k r|  j |  j t j   k  r|  j sy' t j d	 |  j |  j j   f  Wn& t k
 rt j d
 |  j  Yn Xd |  _ |  j j j j   t j   t j  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
        r   r?   r&   r   z&error reading from self.master_fd '%s'NzHgot ValueError from InstallProgress.update_interface. Line was '%s' (%s)r2   z+no activity on terminal for %s seconds (%s)z&no activity on terminal for %s secondsTg{Gz?)!r@   r=   rA   r*   rB   r   rR   r0   terminal_textrC   r)   r   r.   r   r   r   rI   
ValueErrorr   r   TIMEOUT_TERMINAL_ACTIVITYr   r   warningr[   rN   UnicodeEncodeErrorrZ   konsole_frameru   r   rD   sleep)r7   rE   rF   rG   rH   r   r'   r'   r(   rI     s:    '
	'	
z*KDEInstallProgressAdapter.update_interfacec             C   sC   x< |  j    t j |  j t j  \ } } | |  j k r Pq W| S)N)rI   r*   waitpidr<   WNOHANG)r7   pidresr'   r'   r(   
wait_child  s    
z$KDEInstallProgressAdapter.wait_childN)rU   rV   rW   rX   r   r4   r   r   r   r   r;   r   r   rI   r   r'   r'   r'   r(   r     s   %*r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)UpgraderMainWindowc             C   s   t  j |   t d |   d  S)Nzwindow_main.ui)r   r4   r-   )r7   r'   r'   r(   r4     s    zUpgraderMainWindow.__init__c             C   s   | |  _  d  S)N)r0   )r7   Z	parentRefr'   r'   r(   	setParent  s    zUpgraderMainWindow.setParentc             C   s0   |  j  j   } | r" | j   n
 | j   d  S)N)r0   on_window_main_delete_eventZacceptignore)r7   Zeventcloser'   r'   r(   
closeEvent  s    zUpgraderMainWindow.closeEventN)rU   rV   rW   r4   r   r   r'   r'   r'   r(   r     s   r   c               @   sE  e  Z d  Z d Z d d d d  Z 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 d   Z d d   Z d d d   Z d d! d"  Z d d# d$ d%  Z d& d'   Z d( d) d*  Z d+ d,   Z d- d.   Z d/ d0 d1  Z d2 d3   Z d S)4DistUpgradeViewKDEz$KDE frontend of the distUpgrade toolNc             C   sG  t  j |   t j d  } | j t j  | s? | d k r] t j j t j	   d  } n d } y! t
 j d |  t
 j d  Wn6 t k
 r } z t j d |  WYd  d  } ~ Xn Xd t j k r t d   t d g  |  _ t |  j  } t t  t k r*| j t j   d	 d
 d  n | j t j   d	 d
 d  |  j j |  t   j   t j j d  rt d  } n t d  } |  j j t |   t    |  _! |  j! j" |   |  j! j#   d |  _$ t% |  j! j& |  j! j'  |  _( t) |   |  _* t+ |   |  _, t- |   |  _. |  j/ t0 _1 |  j! j2 j3 d  |  j! j2 j4 j5 |  j6  t
 j d |  t
 j d  |  j7   |  j! j8 j9 |  j! j8 j:   j; d d   |  j! j< j=   t> |  j! j<  |  _? |  j! j< j@ d d  tA |  j. |  j! j<  |  _B |  j? jC |  jB  |  jB j#   tD jE d |  jF  |  j jG   d  S)NPyQt4.Zmoz)/usr/share/locale/ubuntu-release-upgraderzubuntu-release-upgraderzError setting locales (%s)ZDISPLAYzNo DISPLAY in os.environ foundZqtrn   z/usr/share/qt5/translationsz/usr/share/qt4/translationsz=/usr/share/icons/oxygen/48x48/apps/system-software-update.pngz5/usr/share/icons/hicolor/48x48/apps/adept_manager.pngr   FZUbuntuZKubuntuiX  i  
   )Hr   r4   r   Z	getLoggerZsetLevelINFOr*   r+   joingetcwdr   bindtextdomain
textdomainr   r   r>   r   appr   typer   intloadr   systemZinstallTranslatorr    ZsetupUrlHandlesr,   r   ZsetWindowIconr   r   rZ   r   ru   	prev_steprf   r]   rv   _opCacheProgressrl   _acquireProgressrY   _cdromProgressr   _installProgress_handleExceptionr   
excepthookr   r   r   r   showTerminalr   Zlabel_titler_   rN   r   r   r   r   Zkonsole_frame_layoutZsetMinimumSizer1   r   Z	addWidgetr	   Z
singleShotexitMainLoopr   )r7   ZdatadirZlogdirZloggerZ	localedirr   Z
translatormessageIconr'   r'   r(   r4     s^    $	
+zDistUpgradeViewKDE.__init__c             C   s   t  d  |  j j   d  S)Nr   )r.   r   exit)r7   r'   r'   r(   r   .  s    
zDistUpgradeViewKDE.exitMainLoopc             C   s   | d  k r |  j  } t | t  s3 t | t  r t | j    d k rg | j t j d d   n | j t	 t | j      | j
   d  k r x. | j
   D]  } |  j |  |  j |  q Wd  S)NErrorkdelibs)rZ   r"   r   r   strZwindowTitlesetWindowTitler   r   rn   Zchildrentranslate_widgetr   )r7   ZparentWidgetwidgetr'   r'   r(   r   2  s    	z,DistUpgradeViewKDE.translate_widget_childrenc             C   s	  t  | t  s t  | t  rt | j    d k rp t j d t j d  d d } | j t	 | d   n t | j    d k r t j d t j d  d d } | j t	 | d   nC t | j    d k r| j t
 t | j     j d d   d  S)	Nz&Cancelr   ZfallbackTz&Closer2   rn   &)r"   r   r   r   rN   r   Ztranslationr   r_   r   rn   r   )r7   r   r   r'   r'   r(   r   @  s    z#DistUpgradeViewKDE.translate_widgetc             C   s   t  | t  s t  | t  r" d St j | | |  } t j d d j |   t | | |  t	   s d j t j | | |   } t
 |  j  } t d |  |  j |  j  | j j |  | j   | j   t j d  d S)zCrash handler.Nz)not handled exception in KDE frontend:
%s
r2   zdialog_error.uir   )
issubclassKeyboardInterrupt
SystemExit	tracebackformat_exceptionr   r   r   r   r   r   rZ   r-   r   dialogZcrash_detailr_   r   r   r   r   )r7   exctypeZexcvalueexctblinestbtextr   r'   r'   r(   r   M  s    	

z#DistUpgradeViewKDE._handleExceptionc             C   s   |  j  j j   r> |  j  j j   |  j  j j t d   n) |  j  j j   |  j  j j t d   |  j  j |  j  j	    d  S)NzShow Terminal >>>z<<< Hide Terminal)
rZ   r   r   r   r   r_   rn   ru   resizesizeHint)r7   r'   r'   r(   r   h  s    zDistUpgradeViewKDE.showTerminalc             C   s   |  j  S)N)r   )r7   r'   r'   r(   getAcquireProgressq  s    z%DistUpgradeViewKDE.getAcquireProgressc             C   s   | |  j  _ |  j  S)N)r   r   )r7   cacher'   r'   r(   getInstallProgresst  s    z%DistUpgradeViewKDE.getInstallProgressc             C   s   |  j  S)N)r   )r7   r'   r'   r(   getOpCacheProgressx  s    z%DistUpgradeViewKDE.getOpCacheProgressc             C   s   |  j  S)N)r   )r7   r'   r'   r(   getCdromProgress{  s    z#DistUpgradeViewKDE.getCdromProgressc             C   s   |  j  j j |  d  S)N)rZ   r[   r_   )r7   rr   r'   r'   r(   update_status~  s    z DistUpgradeViewKDE.update_statusc             C   sD   t  |  j d |  } t  |  j d |  } | j   | j   d  S)Nzimage_step%izlabel_step%i)getattrrZ   r   )r7   rb   imagelabelr'   r'   r(   hideStep  s    
zDistUpgradeViewKDE.hideStepc             C   s   |  j  } | d k r t |  j d |  } t j j d  rL t d  } n- t j j d  rm t d  } n t d  } | j |  | j   d  S)Nr   zimage_step%iz7/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.png)	r   r  rZ   r*   r+   r,   r   	setPixmapru   )r7   rb   r  Z
cancelIconr'   r'   r(   abort  s    	zDistUpgradeViewKDE.abortc             C   sY  t  j j d  r! t d  } n- t  j j d  rB t d  } n t d  } t  j j d  ro t d  } n- t  j j d  r t d  } n t d  } |  j r t |  j d |  j  } t |  j d |  j  } | j |  | j   | |  _ t |  j d |  } t |  j d |  } | j |  | j   | j	 d	 | j
   d
  d  S)Nz3/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.pngz5/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.pngzimage_step%izlabel_step%iz<b>z</b>)r*   r+   r,   r   r   r  rZ   r  ru   r_   rN   )r7   rb   ZokIconZ	arrowIconr  r  r'   r'   r(   setStep  s*    	
	
zDistUpgradeViewKDE.setStepc             C   s  d | | f } t  |  j  } t d |  |  j |  | j j |  | d  k ru | j j |  | j j   n | j j   | j	 t
 d   t j j d  r t d  } n- t j j d  r t d  } n t d  } | j j |  | j   | j   d  S)Nz<big><b>%s</b></big><br />%szdialog_error.uiZInformationz;/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.png)r   rZ   r-   r   r   r_   r   ru   r   r   rn   r*   r+   r,   r   r  r  r   r   )r7   r   rr   extended_msgr   r   r'   r'   r(   information  s$    
zDistUpgradeViewKDE.informationc             C   s   d | | f } t  |  j  } t d |  |  j |  | j j |  | d  k ru | j j |  | j j   n | j j   t	 j
 j d  r t d  } n- t	 j
 j d  r t d  } n t d  } | j j |  | j   | j   d S)Nz<big><b>%s</b></big><br />%szdialog_error.uiz5/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.pngF)r   rZ   r-   r   r   r_   r   ru   r   r*   r+   r,   r   r  r  r   r   )r7   r   rr   r  r   r   r'   r'   r(   r     s$    

zDistUpgradeViewKDE.errorTc             C   s  t  j |  | | | |  t |  j  |  _ t d |  j  |  j j j   |  j j j	 j
 |  j  |  j |  j  |  j j j t j  j t d   |  j j j t j  j t    |  j j j t j  j t d  d  |  j j |  j j    t j j d  rt d  } n- t j j d  r?t d  } n t d  } |  j j j |  | d k r| d	 j d
 d  } |  j j j t j  j |  | d j d
 d  }	 |  j j j t j  j |	  d | }
 |  j j j |
  |  j j  j |  j!  |  j j j"   |  j j j# d g  |  j j j$   j   xF |  j% D]; } |  j j j& d	 t' |  j j t d  | j( g   qMWxF |  j) D]; } |  j j j& d	 t' |  j j t d  | j( g   qWxF |  j* D]; } |  j j j& d	 t' |  j j t d  | j( g   qWxF |  j+ D]; } |  j j j& d	 t' |  j j t d  | j( g   q(WxF |  j, D]; } |  j j j& d	 t' |  j j t d  | j( g   qqW|  j j-   } | t j. k rd Sd S)zshow the changes dialoguezdialog_changes.uiz&Start UpgradeDetailsz >>>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.pngNr   rn   r2   r   z<big><b>%s</b></big>ZPackageszNo longer supported %sz	Remove %szRemove (was auto installed) %sz
Install %sz
Upgrade %sTF)/r   confirmChangesr   rZ   changesDialoguer-   treeview_detailsr   	buttonBoxZhelpRequestedr   showChangesDialogueDetailsr   buttonr   rp   r_   rn   HelpZsetIconr   r   r   r*   r+   r,   r   Zquestion_pixmapr  r   rq   Zlabel_summaryZlabel_changesZconfirmChangesMessageclearZsetHeaderLabelsheader	demotionsZinsertTopLevelItemr   nameZtoRemoveZtoRemoveAutoZ	toInstallZ	toUpgrader   r   )r7   r   Zchangesr  ZdownloadSizeZactionsZremoval_boldZwarningIconcancelZconfirmZsummaryTextZdemotedZrmZinstZupr   r'   r'   r(   r    sT    %")
99999z!DistUpgradeViewKDE.confirmChangesc             C   s   |  j  j j   r[ |  j  j j   |  j  j j t j  j t	 d  d  |  j  j
   n9 |  j  j j   |  j  j j t j  j d t	 d   |  j  j |  j  j    d  S)Nr
  z >>>z<<< )r  r  r   r   r  r  r   r  r_   rn   r   ru   r   r   )r7   r'   r'   r(   r    s    ))z-DistUpgradeViewKDE.showChangesDialogueDetailsNoc             C   sF   t  j |  j | d | t  j t  j Bt  j  } | t  j k rB d Sd S)Nz<font>TF)r   ro   rZ   Yesr  )r7   r   rr   defaultanswerr'   r'   r(   askYesNoQuestion(  s    /z#DistUpgradeViewKDE.askYesNoQuestionc             C   s   t  t  j t d  t d  t  j |  j  } | j t  j  } | j t  j  } | j t d  j	 d d   | j t
 j d d   | j   } | t  j k r d Sd	 S)
NzRestart requiredz<<b><big>Restart the system to complete the upgrade</big></b>z_Restart Nowrn   r   r   z&CloseTF)r   ZQuestionrn   ZNoButtonrZ   Z	addButtonr  r  r_   r   r   r   r   )r7   Z
messageBoxZ	yesButtonZnoButtonr  r'   r'   r(   confirmRestart.  s    -z!DistUpgradeViewKDE.confirmRestartc             C   s   t  j   d  S)N)r   rD   )r7   r'   r'   r(   rD   9  s    z DistUpgradeViewKDE.processEventsFc             C   s   d  S)Nr'   )r7   r   r'   r'   r(   pulseProgress<  s    z DistUpgradeViewKDE.pulseProgressc             C   s_   t  d  } | j d d  } t j |  j t  d  | t j t j  } | t j k r[ d Sd 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.r   z<br />zCancel Upgrade?TF)rn   r   r   r   rZ   r  r  )r7   rN   r  r'   r'   r(   r   B  s    	*z.DistUpgradeViewKDE.on_window_main_delete_event)rU   rV   rW   rX   r4   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r   r  r  r  r  rD   r  r   r'   r'   r'   r(   r     s0   M	8r   __main__zinput box testzbar 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-termZbashg{Gz?z--show-in-terminalr   g?purgeT)^Zutilsr   ImportErrorZPyQt5r   ZPyQt5.QtCorer   r   r   r   r	   ZPyQt5.QtWidgetsr
   r   r   r   r   r   r   r   r   r   ZPyQt5.QtGuir   r   r   r   r   ZPyQt4.QtCoreZPyQt4.QtGuir   r{   r   r   r   r   Zaptrz   r*   r:   ZDistUpgradeApportr   r   r   r   r   r   r@   r   ZDistUpgradeGettextrn   r   r    r)   r-   r1   rm   baseZCdromProgressrY   Z
OpProgressrf   rl   r   r   r   rU   Zviewr  argvr   r;   r   callr   rI   rD   r   r   frB   charsrO   rC   ZCacher   r   Zis_installedZis_upgradableZmark_deleteZmark_installZcommitr   r   r'   r'   r'   r(   <module>   s   (F&(c"K5 p	


