
    hoM                     (   d dl mZ d dl mZmZ d dl mZ d dl mZ d dl mZ d dlmc m	c m
c mc mc mZ e d dlZ ej                   dde       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 d dlZd dlZd d
lmZ  ed       ddl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, ddl-m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< dZ= G d dej|                        Z? G d dej                  j                        ZBy)    )Gtk)GdkGdkX11)Gio)GLib)GObjectNignorezAccessed deprecated property)gettext)DBusGMainLoopT)set_as_default   )UnitySupport)
DistUpgradeDialogErrorDialogHWEUpgradeDialogNeedRestartDialogNoUpdatesDialogNoUpgradeForYouDialogPartialUpgradeDialogStoppedUpdatesDialogUnsupportedDialogUpdateErrorDialog)MetaRelease)UpdatesAvailable)AlertWatcher)MyCache)NetworkManagerHelper)
UpdateList)get_archget_distSoftwarePropertiesPage)InstallBackendget_backendz/var/run/reboot-requiredc                       e Zd ZdZd ZddZd Zd Zd Zd Z	dd	Z
d
 Zd Zej                  fdZd ZddZd dZd Zd Zd Z	 	 	 d!dZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)"UpdateManagerz|This class is the main window and work flow controller. The main
    window will show panes, and it will morph between them.c                     t         j                  j                          | _        | _        t                _        d  _        d  _        g  _	        d  _
        d  _        d  _        t                _        g  _        t!                _         j%                  t'        d              j)                  d        j+                  t         j,                  j.                          j1                         }|j3                  d fd       _         j3                  d j6                          j9                           j                  r j                  j:                  r~ j=                  d        j?                           jA                           jC                  d        j                  jE                  d        j3                  d jF                         _$        tK         j                  xr  j                  jL                   j                  xr  j                  jN                   j                  xr  j                  jP                         _        y )	NzSoftware Updaterzsystem-software-updatechangedc                 $    j                         S N)resize_to_standard_width)ctxselfs    =/usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py<lambda>z(UpdateManager.__init__.<locals>.<lambda>l   s    4#@#@#B     zdelete-eventFTzfocus-in-event))r   Window__init__datadiroptionsr   unity
controllercacheua_security_packagesupdate_listmeta_releasehwe_replacement_packagessetoem_metapackagesduplicate_packagesr   arch	set_title_set_icon_nameset_positionWindowPositionCENTERget_style_contextconnectstyle_changed	_on_close_setup_dbusno_focus_on_mapset_focus_on_mapiconifystickset_urgency_hintset_urgencyon_initial_focus_ininitial_focus_idr   devel_releaseuse_proposeddebug)r,   r2   r3   r+   s   `   r-   r1   zUpdateManager.__init__S   s   

D! !^

$&! (,% #"$J	 	q+,-34#,,334 $$& [[B

 	^T^^4 <<DLL88!!%(LLNJJL!!$'JJ""4($(LL $":":%D!
 (LL7T\\77LL6T\\66LL/T\\//
r/   c                 x      j                  d       dkD  r!dkD  rt        j                   fd       y y y )NTr   c                  (     j                        S r)   )resize)r,   stored_heightstored_widths   r-   r.   z4UpdateManager.begin_user_resizable.<locals>.<lambda>   s    $++lM"J r/   )set_resizabler   idle_add)r,   rY   rX   s   ```r-   begin_user_resizablez"UpdateManager.begin_user_resizable   s7    4 ! 1 MMJK	 !2r/   c                 &    | j                  d       y NF)rZ   r,   s    r-   end_user_resizablez UpdateManager.end_user_resizable   s    5!r/   c                    | j                         ry d}| j                         j                         }|dk  rd}| j                         }t	        j
                  || j                         |j                  dt        j                  j                        }|dz  |z  |z  }| j                  |d       t	        j                  || j                         y )N!   r   `   z	font-sizeH   )get_resizable
get_screenget_resolutionrE   r   signal_handler_blockrG   get_propertyr   
StateFlagsNORMALset_size_requestsignal_handler_unblock)r,   num_emdpir+   sizewidths         r-   r*   z&UpdateManager.resize_to_standard_width   s    oo..0!8C$$&$$S$*<*<=S^^-B-BCb4&(eR(&&sD,>,>?r/   c                     | j                          | j                  d       | j                  j                  d       | j	                  | j
                         y)z6callback run on initial focus-in (if started unmapped)F)unstickrN   r4   rO   
disconnectrQ   )r,   widgetevents      r-   rP   z!UpdateManager.on_initial_focus_in   s@    e$

u%--.r/   c                    | j                   X| j                   j                          t        | j                   t        j                        r| j                   j                          || _         | j                          | j                          |y t        |t        j                        r2| j                  |       |j                          | j                          y |j                          | j                          y r)   )r5   stop
isinstancer   Widgetdestroy_look_readyr`   addstartshow_allhide)r,   panes     r-   _start_panezUpdateManager._start_pane   s    ??&OO  "$//3::6'')!<dCJJ'HHTNJJLMMOJJLIIKr/   Nc                 "    | j                         S r)   )close)r,   rv   datas      r-   rH   zUpdateManager._on_close   s    zz|r/   c                     | j                         sy| j                  r| j                  j                         }|r|S | j                          y NT)get_sensitiver5   r   exit)r,   controller_closes     r-   r   zUpdateManager.close   s=    !!#??#446''		r/   c                 P    | j                  d       t        j                  d       y)z$exit the application, save the stateNr   )r   sysr   r_   s    r-   r   zUpdateManager.exit   s    r/   c                 ,   ddt        |      g}dt        j                  vr&|dd| j                         j	                         z  gz  }| j                          	 t        j                  |      }|j                         dt        j                         r)t        j                          t        j                         r)t        j                  d       |j                         c	 | j                          y # t        $ r Y w xY w# | j                          w xY w)Nz /usr/bin/software-properties-gtkz
--open-tabWAYLAND_DISPLAYz
--toplevelz%s皙?)strosenviron
get_windowget_xid
_look_busy
subprocessPopenpollr   events_pendingmain_iterationtimesleepOSErrorstart_available)r,   page_numbercmdps       r-   show_settingszUpdateManager.show_settings   s    1S-/ BJJ.L$):)B)B)D"DEEC
	#  %A &&("((*&&( ((*

4  &&("
   "  		   "s7   C2 -AD :%D  D 2	C>;D =C>>D Dc                     | j                   j                  r| j                          y t        | t        j
                        }| j                  |       y r)   )r3   	no_updater   r#   r"   ACTION_UPDATEr   )r,   update_backends     r-   start_updatezUpdateManager.start_update   s>    <<!!  "$T>+G+GH(r/   c                     t        | t        j                        }|r/| j                  D ]   }	 | j                  |   j                          " | j                  |       y # t        $ r Y @w xY wr)   )r#   r"   ACTION_PRE_INSTALLr:   r6   mark_installSystemErrorr   )r,   hwe_upgradeinstall_backendpkgnames       r-   start_installzUpdateManager.start_install   sj    %dN,M,MN88 JJw'446
 	) # s   A	A*)A*c                 @   | j                          | j                          | j                  y | j                  | j                  j                  | j                  j
                  z   t        j                  j                  t              ||      }| j                  |       y r)   )r   refresh_cacher6   _make_available_paneinstall_count	del_countr   pathexistsREBOOT_REQUIRED_FILEr   )r,   cancelled_updateerror_occurredr   s       r-   r   zUpdateManager.start_available   sx    ::((JJ$$tzz';';;GGNN/0	
 	r/   c                 v   t        j                         }t               }|j                  |      }|sy t        j
                  j                  t        j                         d      }t        j
                  j                  |      sy t        |d      5 }| xj                  t        |j                         j                               z  c_        d d d        | j                  D ]K  }t!        j                   |j"                  d      s$|j$                  s1| j                  j'                  |       M y # 1 sw Y   dxY w)Nzubuntu-drivers-oem.package-listrz
oem-*-meta)distro_infoUbuntuDistroInfor    is_ltsr   r   joinr   get_user_runtime_dirr   openr<   r;   read
splitlinesr6   fnmatchname	installedr~   )r,   dicodenameltsOEM_PATHfpkgs          r-   _check_oem_metapackagesz%UpdateManager._check_oem_metapackages  s    ))+:ii!77<<%%')J
 ww~~h' (C  	@A!!S)<)<)>%??!	@ :: 	/Csxx63==%%))#.	/		@ 	@s   ;D//D8c                     	 t        j                         j                  | _        y # t        $ r}t	        d|       g | _        Y d }~y d }~ww xY w)Nz!Error running updates end-point: )uaupdates
ua_updates	Exceptionprint)r,   es     r-   _fetch_ua_updateszUpdateManager._fetch_ua_updates  s>    	! jjl22DO 	!5q9 DOO	!s   #& 	AAAc                    g | _         g | _        t        j                  | j                  d      }|j                          |j                         rct        j                         r)t        j                          t        j                         r)t        j                  d       |j                         rc| j                  D ]  }|j                  dk(  s|j                  dk(  r"|j                  }|dk(  s|dk(  s|dk(  s>|j                  }|j                  }|j                   }|dk(  }| j                   j#                  ||||f        | j$                  j'                  | j                          y )	NT)targetdaemonr   zstandard-securityzstandard-updatespending_attachpending_enableupgrade_available)r7   r   	threadingThreadr   r   is_aliver   r   r   r   r   provided_bystatuspackageversiondownload_sizeappendr6   create_pro_cache)r,   tr   r   r   r   rq   downloadables           r-   _get_ua_security_statusz%UpdateManager._get_ua_security_status  s4   $&!D$:$:4H		jjl$$&""$ $$&JJt jjl  	G##'::&&*<<^^F**--00!//,,%)<<))007D,7!	& 	

##D$=$=>r/   c                 p   | j                          |dk7  rPd }d }|rt        d      }n0|rt        d      }t        d      }n| j                  rt        |       S t	        | |||      S |rt        |       S | j                         }|r|S |rt        |       S | j                  rt        |       S t        | |      S )Nr   u0   Some software couldn’t be checked for updates.z"You stopped the check for updates.z4Updated software is available from a previous check.)r   )	_check_hwe_support_statusr@   r:   r   r   r   _check_meta_releaser   r   )r,   r   need_rebootr   r   headerdescdist_upgrades           r-   r   z"UpdateManager._make_available_pane=  s     	&&(AFDKL!?@J ..'--#D&$DD (..335L##!+D11..'--&tNKKr/   c                 z    |r| j                  t        | ||             y | j                  t        | ||             y r)   )r   r   r   )r,   update_and_retryr   r   s       r-   start_errorzUpdateManager.start_errora  s4    .tVTBC[vt<=r/   c                     | j                  d       | j                         U| j                         j                  t        j                  j                  t        j                  j                               y y r^   )set_sensitiver   
set_cursorr   Cursornew
CursorTypeWATCHr_   s    r-   r   zUpdateManager._look_busyg  sN    5!??(OO((8L8L)MN )r/   c                     | j                  d       | j                         W| j                         j                  d        | j                         j                  t        j
                  j                         y y r   )r   r   r   set_functionsr   
WMFunctionALLr_   s    r-   r}   zUpdateManager._look_readyl  sV    4 ??(OO((.OO++CNN,>,>? )r/   c                    | j                   y | j                   j                  r3t        j                  | j                         t        j                          | j                   j                  }|r|j                  ry | j                   j                  rt        | | j                         S t        j                  j                  d      }| j                   j                  rm| j                  j                   s|j#                  d      rF| j$                  dk(  r!t'        | | j                   | j$                        S t)        | | j                         S y )Nzcom.ubuntu.update-managerzcheck-dist-upgradesi386)r9   downloadingr   r[   _meta_release_wait_idler   mainupgradable_toupgrade_brokenno_longer_supportedr   r   Settingsr   new_distr3   check_dist_upgradesget_booleanr>   r   r   )r,   nextsettingss      r-   r   z!UpdateManager._check_meta_releaser  s   $((MM$667HHJ   ..t** 00$T4+<+<== <<##$?@%%LL,,##$9:yyF",$++TYY  %T4+<+<==r/   c                     | j                   j                  st        j                          y| j                   j	                  dt        j                         y)Ndone_downloadingF)r9   r  r   	main_quitrF   r_   s    r-   r  z%UpdateManager._meta_release_wait_idle  sA       ,,MMO  %%&8#--Hr/   c                     t        j                         }t               }|j                  |      }|sy d}t        j
                  j                  |      sy |dg}| j                  |       y )Nz/usr/bin/hwe-support-statusz--show-replacements)r   r   r    r   r   r   r   _parse_hwe_support_status)r,   r   r   r   HWEr   s         r-   r   z'UpdateManager._check_hwe_support_status  s\    ))+:ii!+ww~~c")*&&s+r/   c                    	 t        j                  |       y # t         j                  $ r}|j                  dk(  r|j                  j                         j                         }g | _        |D ]W  }|j                  d      }|| j                  v s#| j                  |   j                  r=| j                  j                  |       Y Y d }~y Y d }~y d }~ww xY w)N
   zutf-8)r   check_outputCalledProcessError
returncodeoutputstripsplitr:   decoder6   is_installedr   )r,   r   r   packagesr   s        r-   r  z'UpdateManager._parse_hwe_support_status  s    	F##C( ,, 
	F||r!88>>+11302-' FG%nnW5G4::- $

7 3 @ @55<<WEF "
	Fs!    CA"CC(CCc                 z   	 | j                   t        d       | _         n5| j                   j                  d        | j                   j                          d } |        | j                          | j                          | j                  D ]9  }	 | j                   |   j                  s| j                   |   j                          ; t!        |       | _        	 | j"                  j%                  | j                   || j&                  | j(                         | j"                  j*                  dkD  r| j                  t        |              y y # t        $ rF | j                  t        |              t        d      }t        d      }| j                  d||       Y y t        $ r?}t        d      }t        d      t        |      z   }| j                  d||       Y d }~y d }~ww xY w# t        $ r Y cw xY w# t        $ r@}t        d      }t        d	      t        |      z   }| j                  d
||       Y d }~!d }~ww xY w)NzSoftware index is brokenzIt is impossible to install or remove any software. Please use the package manager "Synaptic" or run "sudo apt-get install -f" in a terminal to fix this issue at first.Fz,Could not initialize the package informationzAn unresolvable problem occurred while initializing the package information.

Please report this bug against the 'update-manager' package and include the following error message:
c                      t        j                         r*t        j                          t        j                         r)y y r)   )r   r   r    r/   r-   iteratez,UpdateManager.refresh_cache.<locals>.iterate  s(    $$&""$ $$&r/   )eventloop_callbackr=   r7   zCould not calculate the upgradezAn unresolvable problem occurred while calculating the upgrade.

Please report this bug against the 'update-manager' package and include the following error message:
Tr   )r6   r   r   _initDepCacheAssertionErrorr   r   r@   r   r   r   r   r   r<   r  r   r   r8   updater=   r7   distUpgradeWouldDelete)r,   r   r   r   r!  r   s         r-   r   zUpdateManager.refresh_cache  s    	zz!$T]


%

((*8	% 		$$&$$&,, 	Gzz'*77JJw'446	 &d+	1##

#*#'#:#:%)%>%>	 $   22Q61$78 7}  	 1$7812F'D UFD1 		EFFE
 AD UFD1		4    	189FE
 AD T6400	1sI   AE	 6G!=G1 	AGG5GG!	G.-G.1	H::5H55H:c                    	 t        j                         }	 |j	                  dd      }t        j
                  |d      }|j                          t        j                  d       y# t        $ r t        d       Y yw xY w# t         j                  $ r4 t         j                  j                  d|      }t        | |      | _        Y yw xY w)z9this sets up a dbus listener if none is installed alreadyz warning: could not initiate dbusNzorg.freedesktop.UpdateManager$/org/freedesktop/UpdateManagerObject"org.freedesktop.UpdateManagerIFacer   )dbus
SessionBusr   r   
get_object	InterfacebringToFrontr   r   DBusExceptionserviceBusNameUpdateManagerDbusControllerdbusController)r,   bus	proxy_objifacebus_names        r-   rI   zUpdateManager._setup_dbus  s    	//#C	N/6I NN?E  HHQK  	45	 !! 	N||++/H #>dH"MD	Ns$   A% AA? %A<;A<?ACC)r   r   r)   )F)FF)FFF) __name__
__module____qualname____doc__r1   r\   r`   r*   rP   r   rH   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r}   r   r  r   r  r   rI   r   r/   r-   r%   r%   O   s    ?1
fL"@*
 )?(F(F #()*/*!?B "LH>O
@@
,F(F9PNr/   r%   c                       e Zd ZdZ	 ddZej                  j                  d      d        Zej                  j                  d      d        Z	d Z
y)	r2  z2this is a helper to provide the UpdateManagerIFacec                     t         j                  j                  j                  | ||       || _        t               | _        | j                  j                  d| j                         d| _	        y )Nznetwork-alertF)
r*  r0  Objectr1   parentr   alert_watcherrF   _on_network_alert	connected)r,   r?  r7  object_paths       r-   r1   z$UpdateManagerDbusController.__init__#  sT     	$$T8[A)^""?D4J4JKr/   r)  c                 8    | j                   j                          yr   )r?  presentr_   s    r-   r.  z(UpdateManagerDbusController.bringToFront/  s    r/   c                 X    	 | j                   j                          y# t        $ r Y yw xY wNTF)r?  r   r   r_   s    r-   upgradez#UpdateManagerDbusController.upgrade4  s,    	KK%%' 		s    	))c                 F    |t         j                  v rd| _        y d| _        y rG  )r   NM_STATE_CONNECTED_LISTrB  )r,   watcherstates      r-   rA  z-UpdateManagerDbusController._on_network_alert<  s    (@@@!DN"DNr/   N)r(  )r8  r9  r:  r;  r1   r*  r0  methodr.  rH  rA  r   r/   r-   r2  r2     s\    < ;	
 
\\=> ? 
\\=> ?#r/   r2  )Cgi.repositoryr   r   r   r   r   r   &uaclient.api.u.pro.packages.updates.v1apiupror  r   v1r   warningsfilterwarningsDeprecationWarningr   r   r   r   r   r   r   r
   r@   r*  dbus.servicedbus.mainloop.glibr   r   Dialogsr   r   r   r   r   r   r   r   r   r   MetaReleaseGObjectr   r   Core.AlertWatcherr   Core.MyCacher   	Core.roamr   Core.UpdateListr   
Core.utilsr   r    r!   backendr"   r#   r   r0   r%   r0  r>  r2  r   r/   r-   <module>ra     s   .  %   ! 3 3 3     ,.@   	  
       , T " &   , . + ! + ' B B 0 2 NNCJJ NNb #$,,"5"5  #r/   