
    h                        d dl Z  e j                  dd       d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d dl	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mZ 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Z ddl m Z  ddl!m!Z!  e"d      \  Z#Z$Z%Z&Z'ddl(m)Z)  G d d      Z* G d dejV                        Z, G d de      Z-y)    NGtkz3.0)GLib)r   )Gdk)GObject)Gio)PangoignorezAccessed deprecated property)gettext)ngettext   )humanize_sizeSoftwarePropertiesPage)AlertWatcher)UpdateSystemGroup)InternalDialog)NotEnoughFreeSpaceError)ChangelogViewer)UnitySupport   )NetworkManagerHelperc                       e Zd Zd Zy)
UpdateDatac                 6    |r|ng | _         || _        || _        y N)groupsgroupitem)selfr   r   r   s       @/usr/lib/python3/dist-packages/UpdateManager/UpdatesAvailable.py__init__zUpdateData.__init__[   s     &fB
	    N)__name__
__module____qualname__r     r!   r   r   r   Z   s    r!   r   c                   *    e Zd ZdZddZd Zd Zd Zy)CellAreaPackagea  This CellArea lays our package cells side by side, without allocating
    width for a cell if it isn't present (like icons for header labels).
    We assume that the last cell should be expanded to fill remaining space,
    and other cells have a fixed width.
    c                 l    t         j                  j                  |        || _        d | _        i | _        y r   )r   CellAreaBoxr    indent_toplevelcolumncached_cell_size)r   r*   s     r   r    zCellAreaPackage.__init__h   s+      &. "r!   c                    g fd}| j                  |d        i }t              D ]q  \  }}	t        |	t        j                        r|	j                  d      }
|
d u }nd}|||<   |r@|| j                  vsO|	j                  |      \  }}|| j                  |<   s |j                         }|j                         }| j                  d      }| j                  |      }|j                  |j                  z   }| j                         }t        j                  j                  |      j                         }d}||_        d|_
        t!              dz
  }t              D ]"  \  }}	||k(  }| j                  j#                  |d      }|j                  dkD  r'|dk(  r"|xj                  |j                  |z   z  c_        |dk(  r_|d   s| j$                  r|dz  }|dkD  rDt'        d|dz
        }||z  }|dk(  r|}n|dk(  r|dz   }n||z  }|xj                  ||z   z  c_        |rt'        |||j                  z
        }||   s||z   |_
        d}nd|_
        ||z   } ||	|j                         |j                               s# y  y )	Nc                 (    j                  |        y r   )append)celldatacellss     r   gatherz0CellAreaPackage.do_foreach_alloc.<locals>.gathers   s    LLr!   giconFspacingr   r         )foreach	enumerate
isinstancer   CellRendererPixbufget_propertyr,   get_preferred_widthcopyget_cell_startwidthxget_current_path_stringTreePathnew_from_string	get_depthlengetr*   max)r   contextwidgetcell_area_in
bg_area_incallbackr3   cell_is_hiddencell_numberr0   r4   	hide_cellmin_sizenatural_size	cell_areabg_arear5   
cell_startorig_endcur_pathdepthextra_cell_widthlast_cell_numberis_last_cell	cell_sizeindentindent_sizeindent_extrar2   s                               @r   do_foreach_allocz CellAreaPackage.do_foreach_allocn   s    	 	VT" "+5!1 	BK$ 6 67))'2!TM	!	*3N;'D4I4I!I)-)A)A&)I&,5A%%k2	B !%%'	//###I.((0
??Y[[0//1,,X6@@B  		u:>!*5!1 !	K&*::L--11+qAI"'71'<y88a%a(T-A-AQJE19 EAI.F"+f"4Kz'.!'.{'.'7KK;#==K	8ikk+AB	!+."+.>">	#$ "#	#,w#6 inn.?C!	r!   c                     | j                  |      }|j                  |j                  z   |z
  |_        ||_        t        j                  j                  | |||||      S r   )r?   r@   rA   r   r)   do_event)r   rI   rJ   eventrS   flagsrU   s          r   rb   zCellAreaPackage.do_event   sX    
 ((0
#//IKK7*D	 	'''65)U
 	
r!   c                    | j                   syt        j                         }|j                  t               |j                  d|       |j                         }|j                  d|       |j                         }| j                   j                         |z
  |z
  }| j                  s<|j                  d|       | j                  d      }||j                         z   dz   |z   }|S )Nr   zhorizontal-separatorzgrid-line-widthzexpander-sizer5      )
r+   r   Valueinitintstyle_get_propertyget_intget_x_offsetr*   r<   )r   rJ   valh_sep
line_widthrU   r5   s          r   r?   zCellAreaPackage.get_cell_start   s    {{--/CHHSM%%&<cBKKME%%&7=J113e;jHJ''))/3?++I6'#++-7!;gE
r!   N)F)r"   r#   r$   __doc__r    r`   rb   r?   r%   r!   r   r'   r'   a   s    #IV

r!   r'   c                      e 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d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d.d*Z+d+ Z,d, Z-y)/UpdatesAvailablez/usr/share/app-install/iconsNc                     t        j                   |       | _        |j                   _        |j                   _        | _        | _        | _        t        j                  j                   j                  d      } j                  |d        j                   j                         d _        d _        d  _        t"        j$                  j'                  d       _        t*        j,                  j/                          _         j0                  j3                   j4                         t7                _         j;                           j=                  t*        j>                   j                  j@                         _!         j=                  tE        d       jF                         _$         j=                  tE        d       jJ                         _&         jL                   _'        tQ                _)         jR                  jU                  t*        jV                  jX                          jR                  j[                           j\                  j_                   jR                          jR                  ja                         }|jc                  d	td        jf                  jh                  
       |jc                  dtd        jf                  jh                  
       |jc                  dtd        jf                  jh                  
       t+        jj                  tl        tn        jp                  tl        tr        tr               _:         jv                  jy                  d         jz                  j}                   j                         t*        j                  j                         t+        j                         }|j                  dd       |j                  dd       |j                  dt*        j                  j                         |j                  dd       t+        j                  d |      }|j                  t*        j                  j                         |j                  d        jv                  j                  |       |j                  | j                         t        d       _N        t*        j                  j                   j                        }	|	 j                  _P        |	j                  tE        d             |	j                  dd       |	j                  d        jv                  j                  |	       t+        j                         }
|
j                  dd       |
j                  d j                   jv                         |	j                  |
d       |	j                  |
dt               |	j                  |
dt               |	j                  |
 j                         t+        j                         }|j                  dd       |j                  dt*        j                  j                         |	j                  |d       |	j                  | j                         t+        j                         }|j                  dd       |j                  dtd        j                  j                         |	j                  |d       |	j                  | j                         t+        j                         }|j                  dd       |j                  dd       |j                  dd       |j                  dd       t+        j                  tE        d       |t        !      }|j                  t*        j                  j                         |j                  |dt                jv                  j                  |        jv                  j                  d        jv                  j                  d        jv                  j                  t*        j                  j                          jv                  j                  d        jv                  j                  |	        jv                  j                  t                jv                  j                  d" j                          j(                  j                  d#       _m         j(                  j                  d$       _n         j                  j                   j(                  j                  d%              j                  j                  d& j                          j                  j                  d' j                         t"        j$                  j'                  d(       _s         j                  j                  d) fd*        j                          t                _v         j                  j                  d+ j                          j                  j                  d, j                          j                  j                  d- j                         	 dd.lzm{}  |       j                  }|rI j                   ja                         j                  |        j                  j                  d       y y # t        $ r  j                  d/      }Y ht        $ r}t        d0|       d1}Y d }~d }~ww xY w)2Nzgtkbuilder/UpdateManager.uipane_updates_availabler   Tzcom.ubuntu.update-manager)parentzEnable Ubuntu Pro...zInstall Now
versiontag)weight
changestagdescriptiontagxpadrf   ypadr6   z
stock-sizezfollow-state   FzInstall or remover5   toggledactive	sensitive	ellipsize   xalignr   scaleg?Download)textzbutton-press-eventzshow-versionszsummary-before-nameshow-detailsactivateznotify::expandedzcom.ubuntu.update-notifierzchanged::auto-launchc                 $    j                         S r   )update_close_button)spr   s     r   <lambda>z+UpdatesAvailable.__init__.<locals>.<lambda>  s    1I1I1K r!   znetwork-alertzbattery-alertznetwork-3g-alert)current_newsz+/var/lib/ubuntu-advantage/messages/apt-newsz&Error running current_news end-point:  )r   r    window_maindatadircachecustom_headercustom_descneed_rebootospathjoin_load_uiset_content_widgetrt   dl_size	connectedsleep_cookier   Settingsnewsettingsr   	IconThemeget_default	app_iconsappend_search_pathAPP_INSTALL_ICONS_PATHr   unityadd_settings_button
add_buttonSTOCK_CANCELclosebutton_close_on_button_pro_clicked
button_proon_button_install_clickedbutton_installfocus_buttonr   textview_changesset_wrap_modeWrapModeWORDshowscrolledwindow_changesadd
get_buffer
create_tagr   WeightBOLD	TreeStorestrr   TYPE_PYOBJECTboolstoretreeview_update	set_modelimage_restartset_from_giconget_restart_iconIconSizeBUTTONr;   set_propertyMENUTreeViewColumn
set_sizingTreeViewColumnSizingFIXEDset_fixed_widthappend_columnset_cell_data_funcrestart_icon_renderer_data_funcr'   pkg_cell_areanew_with_arear+   	set_title
set_expandCellRendererToggleconnecton_update_toggled
pack_startadd_attributeLIST_TOGGLE_ACTIVELIST_SENSITIVEpkg_toggle_renderer_data_funcpkg_icon_renderer_data_funcCellRendererTextEllipsizeModeENDpkg_label_renderer_data_func	LIST_SIZEAUTOSIZEset_headers_visibleset_headers_clickableset_directionTextDirectionLTRset_fixed_height_modeset_expander_columnset_search_column	LIST_NAMEon_treeview_button_pressget_booleanshow_versionssummary_before_nameexpander_detailsset_expandedpre_activate_detailsactivate_detailsnotifier_settingsr   r   alert_watcher_on_network_alert_on_battery_alert_on_network_3g_alert'uaclient.api.u.apt_news.current_news.v1r   ImportError_get_apt_news	Exceptionprintnewsset_textexpander_newsset_visible)r   r   headerdescr   content_ui_pathchanges_bufferrestart_icon_rendererrestart_column
pkg_columnpkg_toggle_rendererpkg_icon_rendererpkg_label_renderersize_renderersize_columnr   apt_newses   `                 r   r    zUpdatesAvailable.__init__   sk   k2&"** &&
#&'',,LL7
 	o'?@ ; ;< !(()DE 224))$*E*EF ".
 	  " OOd..44
 //$%t'A'A
 #oomd<<
 !// !0 1++CLL,=,=>""$##''(=(=>..99;!!,u||7H7H!I!!,u||7H7H!I!!"25<<;L;L!M ]]3(=(=sD$O
&&t,))!!#S\\%8%8	
 !$ 6 6 8**615**615**<9J9JK**>4@++D2GH!!#":":"@"@A&&r***>:))!4#G#G	
 -U3''55d6H6HI
$.!Q234	1-d#**:6!446((3##t--t/C/C	
 	159  +=	
 	  n	
 	%%!C!C	
  224&&vq1&&|S\\5F5FG/7%%t??	
 !113''2''U5H5H5L5LM0$7%% A A	
 ,,.""61-""61-""8Q/""7I6((jM=y
 	s77@@A!!-nM**;70062259**3+<+<+@+@A225900<..y9$$ $"?"?	

 "]]66G#'==#<#<!$
 
 	**MM%%n5	
 	%%j$2K2KL%% 5 5	

 "%!1!12N!O&&"$K	
 	  " *^""?D4J4JK""?D4J4JK"" 9 9	
		L#~22H II  "++H5**40   	))=H  	:A>H	s   9j k8k kkc                 N    t        j                  |        | j                          y r   )r   stop_save_stater   s    r   r  zUpdatesAvailable.stop  s    D!r!   c                     t        j                  |        | j                  | j                  j                         | j
                  j                          | j                          y r   )r   startset_update_listr   update_listr   check_alert_state_restore_stater  s    r   r  zUpdatesAvailable.start  sH    T"T--99:,,.r!   c                 J    t         j                  j                  d      }|dk\  S )Nz#APT::Periodic::Update-Package-Listsr   )apt_pkgconfigfind_i)r   update_dayss     r   is_auto_updatezUpdatesAvailable.is_auto_update  s&    nn++1
 ar!   c                    | j                         r[| j                  j                  t        d             | j                  j	                  d       | j                  j                  d       y | j                  j                  t        j                         | j                  j	                  d       | j                  j                  d       y )Nz_Remind Me LaterFT)r!  r   	set_labelr   set_use_stockset_use_underliner   r   r  s    r   r   z$UpdatesAvailable.update_close_button  s     ''*<(=>++E2//5''(8(89++D1//6r!   c                 F    | j                  d        | j                          y r   )select_all_upgradesr   )r   menumenuitemr1   s       r   install_all_updatesz$UpdatesAvailable.install_all_updates  s      &&&(r!   c                 t    ||j                   y|j                   j                  j                  d      }|dk(  S )NFzRestart-Requiredsystem)	candidaterecordrG   )r   pkgrestart_conditions      r   pkg_requires_restartz%UpdatesAvailable.pkg_requires_restart  s:    ;#--/MM00445GH H,,r!   c                 H    g d}t         j                  j                  |      S )N)zview-refresh-symboliczsystem-restartzsystem-reboot)r   
ThemedIconnew_from_names)r   restart_icon_namess     r   r   z!UpdatesAvailable.get_restart_icon  s"    

 ~~,,-?@@r!   c                 ^   |j                  |t              }|j                  |t              }|j                  |      }|j	                  |       d}	|j
                  r<|j
                  j                  r&| j                  |j
                  j                        }	nn|j                  rb| j                  j                  |      sG|j                  j                  D ].  }
|
j                  s| j                  |
j                        s,d}	 n |	r| j                         }nd }|j                  d|       y )NFTr4   )	get_valueLIST_UPDATE_DATAr   get_pathset_sensitiver   r/  r1  r   r   row_expandeditemsr   r   )r   cell_layoutrenderermodeliter	user_datar1   r   r   requires_restart
group_itemr4   s               r   r   z0UpdatesAvailable.restart_icon_renderer_data_func  s     t%56OOD.9	~~d#y) 99#88GZZ''44T:"&**"2"2 J!~~$*C*C"+ ,0( ))+EEgu-r!   c                 P   |j                  |t              }d}d}|j                  r^|j                  j                  j                  | j
                  j                  v}d}|j                  |j                  j                         n~|j                  rd}|j                  j                         }nU|j                  rId}d}d }	|j                  D ]4  }
|
j                  D ]  }|j                         }|		|	|k7  rd} n|}	! |s4 n |j                  d|       |j                  d|       y )NFTactivatableinconsistent)r7  r8  r   r/  namelist	held_backr:  r   r   selection_is_inconsistentr   r<  is_selectedr   )r   r=  r>  r?  r@  rA  r1   rE  rF  saw_installr   r   this_installs                r   r   z.UpdatesAvailable.pkg_toggle_renderer_data_func  s    t%5699))--,,DII4G4GGK L""499#6#67ZZK::??AL[[K LK !KK /D#'#3#3#5L".;,3N'+".K/   	m[9nl;r!   c                    |j                  |t              }d }|j                  r&| j                  |j                  j                        }n1|j
                  r%| j                  |j
                  j                        }|j                  d|       y )Nr4   )r7  r8  r   get_app_install_iconiconr   r   )r   r=  r>  r?  r@  rA  r1   r4   s           r   r   z,UpdatesAvailable.pkg_icon_renderer_data_func  sh     t%56::--djjoo>EYY--diinn=Egu-r!   c                 \   t        |t        j                        s|S | j                  j	                  |j                         dt        j                  j                        }|Jt        j                  j                  t        j                  j                  |j                                     S |S )zAny application icon is coming from app-install-data's desktop
        files, which refer to icons from app-install-data's icon directory.
        So we look them up here.   )r:   r   r3  r   choose_icon	get_namesr   IconLookupFlags
FORCE_SIZEFileIconr   Filenew_for_pathget_filename)r   rP  infos      r   rO  z%UpdatesAvailable.get_app_install_icon  s    
 $/K~~))NNb#"5"5"@"@
 <<##CHH$9$9$:K:K:M$NOOKr!   c                 :   |j                  |t              }|j                  |t              }t        j                  |j                  |t
                    }|j                  |       |j                  r|}	n|j                  r|}	nd|z  }	|j                  d|	       y )Nz	<b>%s</b>markup)
r7  r8  r   r   markup_escape_textr   r:  r   r   r   )
r   r=  r>  r?  r@  rA  r1   r   rG  r]  s
             r   r   z-UpdatesAvailable.pkg_label_renderer_data_func!  s     t%56OOD.9	&&utY'GHy)::FYYF 4'Fh/r!   c                    |j                  d       |j                  |j                         dd       |j                  |j                         |dz          |j	                  d      }t        |      dk(  r|j                  |       y |D ]  }|j                         }t        j                  dt        j                  |      z  |      }	t        j                  d|      }
t        j                  d	|      }|	r3|	j                  d      }t        d
      |z  }|j                  ||d       |r|j                  ||dz   d       |
r|j                  ||dz           y )Nr   zTechnical description
ry   z


r   z^%s \((.*)\)(.*)\;.*$z^.*--.*<.*@.*>.*$z^Changes for [^ ]+ versions:$zVersion %s: 
rv   rx   )r  insert_with_tags_by_nameget_end_iterinsertsplitrF   rematchescaper   r   )r   r  	long_descr   rG  srcpkglineslineend_iterversion_matchauthor_matchchanges_matchversionversion_texts                 r   set_changes_bufferz#UpdatesAvailable.set_changes_buffer3  sU   # 	//0K0K0M0I0@	B 	n99;'&0	2 

4 u:?##D) 	=D%224HHH(299V+<<dM 88$7>LHH%EtLM'--a0 !12W<77lL 77dTk< %%ht<-	=r!   c                    |j                         d   }|y |j                         }|j                  |      }|j                         }|j	                  |t
              r|j                  dt        d      d       n|j                  dt        d      d       |j	                  |t              }|j                  }|8|j                  ,|j                  j                  |j                  j                  }|B|j                  6|j                  j                   |j                  j                  j                  ,| j                  j!                         }|j#                  d       y |j                  j                  j                  }	t%        j&                  dt$        j(                        }
|
j+                  d|	      }	t%        j&                  dt$        j(                        }
|
j+                  d	|	      }	t%        j&                  d
t$        j(                        }
|
j+                  d|	      }	d|j                  j,                  d|	}	|j                  j,                  }|y | j                  j!                         }|| j.                  j0                  v rS| j.                  j0                  |   }| j.                  |   j                  j2                  }| j5                  ||	|||       n| j6                  s|j#                  t        d             n| j8                  j;                         rt=        j>                         }|jA                          t=        jB                  | j.                  jD                  ||f      }|jG                          |j#                  dt        d      z         |jI                  d      }|jK                  |      }tM        jN                  d      }| j                  jQ                  ||       |jS                          |jU                  dd |      }|jW                         rctY        jZ                  d       tM        j\                         r)tM        j^                          tM        j\                         r)|jW                         rc|ja                          |jc                  |      r|je                  |       |j                         d   }|y ||k7  ry d}| j.                  |   j                  j2                  }|| j.                  jf                  v r|| j.                  jf                  |   z  }|| j.                  j0                  v r|| j.                  j0                  |   z  }|s|	r| j5                  ||	|||       y y )Nr   notificationSelected
Unselectedr   z^(\s|\t)*(\*|0|-)z
*z\n z\s\s+r`  z	Package: zKNo network connection detected, you can not download changelog information.)targetargsz%s
zDownloading list of changes...r   z
gtk-cancel)stockclickedc                 "    |j                         S r   )release)wlocks     r   r   zDUpdatesAvailable.on_treeview_update_cursor_changed.<locals>.<lambda>  s    4<<> r!   g{Gz?)4
get_cursor	get_modelget_iterget_accessibler7  r   emitr   r8  r   r   	core_itemr/  r-  descriptionr   r   r  re  compile	MULTILINEsubrG  r   all_changessource_namerr  r   r   get_expanded	threadingLockacquireThreadget_news_and_changelogr  get_iter_at_linecreate_child_anchorr   Buttonadd_child_at_anchorr   r   lockedtimesleepevents_pendingmain_iterationhidehandler_is_connected
disconnectall_news)r   rJ   r   r?  r@  acr1   r   r  rh  r   rG  changesri  r  changelog_threadanchorbuttonidnow_paths                       r   !on_treeview_update_cursor_changedz2UpdatesAvailable.on_treeview_update_cursor_changed\  sp     "1%<  "~~d# ""$??4!34GGNAjM15GGNAlOQ7 t%56yyL

&

$$0::''DLxxxx!!)xx!!--5!22==?N##B'HH&&22	 JJ+R\\:EE%+	JJubll+EE#y)	JJx.EE$	*	)-	B	 xx}}<..99; 4::)))jj,,T2GZZ%//;;F##NIw$*, ##- ""//1>>#DLLN(//zz88d|  ""$##;<< "2215D#77=FZZl3F!!55ffEKKM94B ++-

4 ((*&&( ((* ++-
 KKM**2.!!"% $$&q)8D!++774::&&&tzz**400G4::)))tzz--d33Gi##NIw$*,  r!   c           	          |j                   t        j                  j                  k(  rf|j                  dk(  rUt        j                         x| _        }t
        j                  j                  t        d            }|j                  d| j                         |j                  |       | j                  j                  | j                  j                   z   }|dk(  r|j#                  dd       t
        j                  j                  t        d            }|j                  d| j$                         |j                  |       |j'                          |j)                  ddddd|j                  |j*                         |j-                          y	yy)
zW
        Show a context menu if a right click was performed on an update entry
        r7   z_Deselect Allr   r   r   FzSelect _AllNT)typer   	EventTypeBUTTON_PRESSr  r   Menur(  MenuItemnew_with_mnemonicr   r   select_none_upgradesr/   r   install_count	del_countr   r'  show_allpopup_for_devicer  r   )r   rJ   rc   r(  item_select_nonenum_updatesitem_select_alls          r   r   z)UpdatesAvailable.on_treeview_button_press  s1    ::3338I  #xxz)DI"||==/"  $$Z1J1JKKK()**22TZZ5I5IIKa --k5A!ll<<Q}=MNO##J0H0HIKK(MMO!!dD$ellEJJ IIK+ 9J3r!   c                     t        j                  |t         j                        r%t        |      5 }|j	                         cd d d        S y # 1 sw Y   y xY wr   )r   accessR_OKopenread)r   apt_news_filefs      r   r   zUpdatesAvailable._get_apt_news  sF    99]BGG,m$  vvx    -   s   AAc                     | j                   j                         }|D ]\  }|j                  |j                  t              }|j
                  |j                  <|j                  |j                  t        |       ^ y)z2small helper that will set/unset the group headersN)	r   r  r7  r@  r8  r   r   	set_valuer   )r   new_selection_valuer?  rowr1   s        r   _toggle_group_headersz&UpdatesAvailable._toggle_group_headers  sf    $$..0 	C??388-=>D{{&$***@HH02E	r!   c                     | j                  d       | j                  j                          | j                  d       | j                  j                          | j                          | j                  d       y)z$
        Select all updates
        TFN)setBusyr   saveDistUpgrader  r   
queue_drawupdates_changedr   rJ   s     r   r'  z$UpdatesAvailable.select_all_upgrades  sX     	T

""$""4('')Ur!   c                     | j                  d       | j                  j                          | j                  d       | j                  j                          | j                          | j                  d       y)z%
        Select none updates
        TFN)r  r   clearr  r   r  r  r  s     r   r  z%UpdatesAvailable.select_none_upgrades  sX     	T

""5)'')Ur!   c                 N   | j                   j                         y|r_| j                   j                         j                  t        j                  j                  t        j                  j                               y| j                   j                         j                  d       y)zShow a watch cursor if the app is busy for more than 0.3 sec.
        Furthermore provide a loop to handle user interface eventsN)r   
get_window
set_cursorr   Cursorr   
CursorTypeWATCH)r   flags     r   r  zUpdatesAvailable.setBusy  su     &&(0'')44

s~~334 '')44T:r!   c                 B    d }| j                   j                  |d        y )Nc                    | j                  |t              }d}|j                  r|j                  j                         }nd|j                  r|j                  j                         }n=|j                  r1t        |j                  D cg c]  }|j                          c}      }| j                  |t        |       y c c}w )NF)
r7  r8  r   rK  r   packages_are_selectedr   anyr  r   )r?  r   r@  r1   r~   gs         r   
foreach_cbz;UpdatesAvailable._mark_selected_updates.<locals>.foreach_cb  s    ??4)9:DFyy..099;MAa557MNOOD"4f= Ns   B<)r   r8   )r   r  s     r   _mark_selected_updatesz'UpdatesAvailable._mark_selected_updates  s    		> 	

:t,r!   c                      d fd} j                   j                  |d         j                  j                         y )NFc                 `   | j                  |t              }| j                  |t              }|sy d }|j                  r|j                  j                  }nB|j
                  r6|j
                  j                  r |j
                  j                  j                  }|rj                  |      rdy y y )NT)r7  r8  r   r   r/  r   r  r1  )r?  r   r@  r1   r~   r/  rB  r   s         r   r  z@UpdatesAvailable._check_for_required_restart.<locals>.foreach_cb-  s    ??4)9:D__T+=>FCyyiimm

 4 4jj**..t005#'  6sr!   )r   r8   hbox_restartr  )r   r  rB  s   ` @r   _check_for_required_restartz,UpdatesAvailable._check_for_required_restart*  s9     	( 	

:t,%%&67r!   c                    | j                   j                          | j                   j                  | j                  j                  | j                  j
                  z          	 | j                  j                  | j                  j
                  z   }| j                  j                  | _        d}| j                  dk7  rt        d      t        | j                        z  }| j                  j                  d       | j                   j                  d       | j                  j                  d       | j                  j                          n+|dkD  r^t        dd|      }| j                   j                  d       | j                  j                  d       | j                  j                          n| j                   j"                  r<| j                   j$                  s&t        d      }| j                   j'                          n[t        d      }| j                   j                  d	       | j                  j                  d	       | j                  j                          | j                  j                  d	       | j(                  j+                  |       | j,                  j                          | j.                  j                          y # t0        $ r}t3        d
|z         | j(                  j5                  t        d             | j                  j                  d	       | j,                  j                          | j.                  j                          Y d }~y d }~ww xY w)Nr   r   z%s will be downloaded.Tz'The update has already been downloaded.z)The updates have already been downloaded.z7You need to enable Ubuntu Pro to install these updates.z There are no updates to install.Fz-required_download could not be calculated: %szUnknown download size.)r   r   r:  r   r  r  required_downloadr   r   r   image_downsizer   set_install_menuitem_visibler   destroyr   rH  ubuntu_pro_fake_groupsubuntu_pro_groupsr  label_downsizer  hbox_downsizevbox_alertsSystemErrorr   
set_markup)r   
inst_countdownload_strr  s       r   _refresh_updates_countz'UpdatesAvailable._refresh_updates_count>  s     "))JJ$$tzz';';;	
/	$11DJJ4H4HHJ::77DLL||q  !9:!$,,/  ##11$7 ##11$7

77='')>#+AC"$L
 ''55d;JJ;;DAOO++-ii66"ii99#$ &7 $8L'',,.#$%G#HL''55e<JJ;;EBOO++-##11%8((6##%!!# 	$AAEF**1-E+FG--e4##%!!##	$s   "I!K 	MBMMc                 d    | j                          | j                          | j                          y r   )r  r  r  r  s    r   r  z UpdatesAvailable.updates_changedt  s&    ##%((*##%r!   c                    | j                          d}d}| j                  | j                  }| j                  | j                  }n| j                  j	                  d      rm| j
                  j                  j                  }| j
                  j                  j                  }t        d      ||fz  }| j                  j                  dd       n<t        d      }| j                  j                         s| j                  rt        d      }| j                  j                  d       | j!                  |       | j#                  |       y)zjactivate or disable widgets and show dialog texts corresponding to
        the number of available updatesNz	first-runzYUpdated software has been issued since %s %s was released. Do you want to install it now?FzOUpdated software is available for this computer. Do you want to install it now?zIThe computer also needs to restart to finish installing previous updates.T)r  r   r   r   r   r   meta_releaseflavor_namecurrent_dist_versionr   set_booleanr  get_visibler   r   r:  
set_headerset_desc)r   text_header	text_descflavorrp  s        r   update_countzUpdatesAvailable.update_county  s)    		),,K'((I ]]&&{3%%22>>F&&33HHG? !"K MM%%k59;K $$002t7G7G=	
 	**40$i r!   c                 ^    | j                   j                         }|r| j                          y y r   )r   r  r  )r   expanderexpandeds      r   r   z%UpdatesAvailable.pre_activate_details  s*    ((557 r!   c                     | j                   j                         }| j                  j                  d|       |r| j	                  | j
                         | j                          y )Nr   )r   r  r   r  r  r   r  )r   r  r1   r  s       r   r   z!UpdatesAvailable.activate_details  sM    ((557!!.(;2243G3GHr!   c                      y r   r%   )r   r  r1   s      r   activate_desczUpdatesAvailable.activate_desc  s    r!   c                 V    | j                   j                  t        j                         y r   )r   show_settingsr   
ubuntu_pror  s    r   r   z&UpdatesAvailable.on_button_pro_clicked  s    &&'='H'HIr!   c           	         | j                   j                  d       t        d      }t        d      }t        d      }t        d      }t        d      }t        d      }t        d      }	 | j                  j	                          | j                  j%                          y # t
        $ r}t        j                  j                  d	      }	d}
|j                  D ]h  }|
dk7  r|
d
z  }
|j                  |	k(  r6|
||j                  |j                  |j                  |j                  |fz  z  }
S|j                  dk(  r6|
||j                  |j                  |j                  |j                  |fz  z  }
|j                  dk(  r6|
||j                  |j                  |j                  |j                  |fz  z  }
|j                  dk(  r7|
||j                  |j                  |j                  |j                  |fz  z  }
#|j                  dk(  s4|
||j                  |j                  |j                  |j                  |fz  z  }
k | j                  j                  d||
       Y d }~y d }~wt        $ r t!        j"                  d       Y w xY w)NFzNot enough free disk spacezxThe upgrade needs a total of %s free space on disk '%s'. Please free at least an additional %s of disk space on '%s'. %szIRemove temporary packages of former installations using 'sudo apt clean'.zYou can remove old kernels using 'sudo apt autoremove', and you could also set COMPRESS=xz in /etc/initramfs-tools/initramfs.conf to reduce the size of your initramfs.z^Empty your trash and remove temporary packages of former installations using 'sudo apt clean'.z!Reboot to clean up files in /tmp.r   zDir::Cache::archivesrw  z/boot/z/tmpz/usrzfree space check failed)r   r  r   r   checkFreeSpacer   r  r  find_dirfree_space_required_listdir
size_totalsize_neededr   start_errorr  logging	exceptionstart_install)r   err_sumerr_msgremedy_archivedirremedy_bootremedy_root
remedy_tmp
remedy_usrr  
archivedirerr_longreqs               r   r   z*UpdatesAvailable.on_button_install_clicked  sw   

//601N

 4
 5

 >
 :;
rU
4	9JJ%%'h 	&&(g ' 0	 001GHJH11 *r>OH77j()+ ! H WW'#+ ! H WW^#+ ! H WW&"+ ! H WW&"+ ! HI*V ((B 	978	9s&   *B 
J	)EI$
AI$$!J	J	c                    |t         j                  v rp| j                  j                  t	        d             | j                          | j                  j                          | j                  j                          d| _	        y |t         j                  v s|t         j                  k(  rM| j                          | j                  j                          d| _	        | j                  | j                         y d| _	        | j                  j                  t	        d             | j                          | j                  j                          | j                  j                          y )NzConnecting...FTzAYou may not be able to check for updates or download new updates.)r   NM_STATE_CONNECTING_LISTlabel_offliner  r   r  hbox_offliner   r  r   NM_STATE_CONNECTED_LISTNM_STATE_UNKNOWNr  r  r   )r   watcherstates      r   r   z"UpdatesAvailable._on_network_alert  s    (AAA''/(:;  """$!!#"DN )AAA,===  """$!DN 2243G3GH"DN''7   """$!!#r!   c                     |r5| j                   j                          | j                  j                          y | j                   j                          y r   )hbox_batteryr   r  r  )r   r  
on_batterys      r   r   z"UpdatesAvailable._on_battery_alert#  s;    ""$!!#""$r!   c                 H   |r5| j                   j                          | j                  j                          y |r5| j                  j                          | j                   j                          y | j                  j                          | j                   j                          y r   )hbox_roamingr   
hbox_on_3gr  )r   r  on_3g
is_roamings       r   r   z%UpdatesAvailable._on_network_3g_alert*  sn    ""$OO  "OO  """$OO  """$r!   c                    | j                   j                  |      }| j                   j                  |t              }|j                  r=| j                  |j                  D cg c]  }|j                  D ]  }|  c}}       nN|j                  r&| j                  |j                  j                         n| j                  |j                  g       |j                         }| j                   j                  |t              r|j                  dt        d      d       y|j                  dt        d      d       yc c}}w )z+a toggle button in the listview was toggledrt  ru  r   rv  N)r   r  r7  r8  r   toggle_from_itemsr<  r   r   r  r   r  r   )	r   r>  r   treeviewr@  r1   r   r   r  s	            r   r   z"UpdatesAvailable.on_update_toggled6  s    zz""4(zz##D*:; ;;""#';;G%5;;G4GG ZZ""4::#3#34""DII;/ $$&::&89GGNAjM15GGNAlOQ7 Hs   "D=
c                 *    | j                  d||       y)zj
        If an update row was activated (by pressing space), toggle the
        install check box
        N)r   )r   r)  r   r+   ry  s        r    on_treeview_update_row_activatedz1UpdatesAvailable.on_treeview_update_row_activatedL  s    
 	tT84r!   c                 >   | j                  d       t        j                  | j                  j                        }t        |D cg c]  }|j                          c}      }|D ]  }	 |r|j                  j                          nm|j                  j                  | j                  j                  vrA|j                  s|j                  j                          n|j                  j                           | j                  j                  j                   r9t        j"                  | j                  j                        }|j%                          | j'                          | j(                  j+                          ~| j                  d       y c c}w # t        $ r Y 7w xY w)NTF)r  r  ActionGroupr   	_depcacher  rK  r/  	mark_keeprG  rH  rI  	to_removemark_installmark_deleter  broken_countProblemResolverresolve_by_keepr  r   r  )r   r<  actiongroupr   keep_packagesFixs         r   r(  z"UpdatesAvailable.toggle_from_itemsS  s3   T))$***>*>? EBDT--/BC 
	D	 HH&&(XX]]$))*=*==>>--/,,.
	 ::,,))$***>*>?C!'')U) C  s   F
(B
F	FFc                     | j                   j                         rV| j                  j                         \  }}| j                  j                  d|       | j                  j                  d|       yy)z%save the state  (window-size for now)window-widthwindow-heightN)r   r  r   get_sizer   set_int)r   r~  hs      r   r  zUpdatesAvailable._save_staten  sY      --/%%..0FQMM!!.!4MM!!/15 0r!   c                    | j                   j                  d      }| j                   j                  d      }| j                  j                         }|r| j                  j                  ||       y| j                  j                          y)z'restore the state (window-size for now)r:  r;  F)r   rk   r   r  r   begin_user_resizableend_user_resizable)r   r~  r>  r  s       r   r  zUpdatesAvailable._restore_stateu  ss    MM!!.1MM!!/2((55711!Q7  //1r!   c                     d}|D ]  }||j                         z   } |t        |d d       t        |      d|g}| j                  j	                  d |      S )Nr   T)get_total_sizer   r   r   r/   )r   rG  r   r   
total_sizer   
header_rows          r   _add_headerzUpdatesAvailable._add_header  sh    
 	=E#e&:&:&<<J	= vtT**%

 zz  z22r!   c                    |D ]t  }|j                   sd }t        |t              s't        |j                         dk(  r|j                   d   }|j                  dk(  rd|_        |j                  }t        |j                         dkD  r$d|j                  t        |j                         fz  }|t        d ||      t        |j                               d|j                  g}| j                  j                  d |      }|r|j                   D ]l  }|j                  t        d d |      t        t        |j                  j                  dd            d|j                  g}| j                  j                  ||       n w y )Nr   r   zUbuntu basezSystem componentsz%s (%d)Tsize)r<  r:   r   rF   rG  r   r   rC  r   r   r/   getattrr/  r-  )	r   r   r   group_is_itemrG  	group_row
group_iterr   item_rows	            r   _add_groupszUpdatesAvailable._add_groups  sM     $	8E;; Mu&78$) %Azz]*0
::D5;;!# EJJEKK0@#AA 46e2245I **4;J 8IItT40!'$((*<*<fa"HIOO 

!!*h789$	8r!   c                 &	   || _         | j                  d       | j                  j                  d        | j                  j                          d| _        | j                  j                          | j                   j                  rT| j                  t        d      | j                   j                         | j                  | j                   j                         | j                   j                  rT| j                  t        d      | j                   j                         | j                  | j                   j                         | j                   j                  rT| j                  t        d      | j                   j                         | j                  | j                   j                         | j                   j                  rT| j                  t        d      | j                   j                         | j                  | j                   j                         | j                   j                   rT| j                  t        d      | j                   j                          | j                  | j                   j                          | j                   j"                  rV| j                  t        d      | j                   j"                  d	       | j                  | j                   j"                         | j                   j$                  rV| j                  t        d
      | j                   j$                  d	       | j                  | j                   j$                         | j                  j                  | j                         t'        | j                   j$                        xs t'        | j                   j"                        xs t'        | j                   j                        xsa t'        | j                   j                        xs@ t'        | j                   j                        xs t'        | j                   j                         | j(                  _        | j-                          | j/                          | j                  d       | j1                          y)NTr   zImproved hardware supportzSecurity updateszOther updatesz#Unused kernel updates to be removedz Duplicate packages to be removedzUbuntu Pro security updates)r   u3   Ubuntu Pro security updates (enable in Settings…)F)rH  r  r   r   r   r  r   scrolledwindow_updater   
oem_groupsrF  r   rN  security_groupsupdate_groupskernel_autoremove_groupsduplicate_groupsr  r  r   r   r*   r   r  r  )r   r  s     r   r  z UpdatesAvailable.set_update_list  sK   	 	T&&t,

""'') 99-.		0D0D TYY11299$$Q12DII4M4MNTYY66799""Q/1H1HITYY44599--78		22 TYY??@99%%45		** TYY77899&&/0		++  
 TYY88999++GH		00  
 TYY==>&&tzz2112 0DII//00DII++,0 DII--.0 DII667	0
 DII../ 	* 	  "Ur!   )NNF)T).r"   r#   r$   r   r    r  r  r!  r   r*  r1  r   r   r   r   rO  r   rr  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  rF  rN  r  r%   r!   r   rr   rr      s    ;|1| 7)-A.8<B. 0$'=Rq,f6 		
;-8(4$l&
%P
JN)`$@%
%8,566	3*8XAr!   rr   ).girequire_versiongi.repositoryr   r   r   r   r   r   warningsfilterwarningsDeprecationWarningr  r   re  r
  r  r  r
   r   r   
Core.utilsr   r   Core.AlertWatcherr   Core.UpdateListr   Dialogsr   DistUpgrade.DistUpgradeCacher   r   r   ranger   r8  r   r   r   	Core.roamr   r   r)   r'   rr   r%   r!   r   <module>rc     s   @ 
   5%      !      ,.@  	 	       = + . # @ , &" 
!H , tcoo tnb~ br!   