Ë
    QKf0B  ã                   óB  — d Z ddlZ ej                  dd«        ej                  dd«       ddlmZmZmZ ddlmZ ddl	Z	ddl
Z
ddlZddlZddlZdd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZ  G d„ de«      Zej4                  j7                  d«      rdej8                  vr	 ddlmZ ej4                  j7                  d«      rdej8                  vr	 ddl m Z  d„ Z!yd„ Z!y# e$ r  e
j>                  d«       Y ŒQw xY w# e$ r  e
j>                  d«       Y d„ Z!yw xY w)z2Integration of package managers into UpdateManageré    NÚGtkz3.0ÚSnapdÚ2)ÚGLibr   r   )ÚCache)Úgettext)ÚThread)ÚMyCache)Úinhibit_sleepÚget_dist_version)ÚDialogc                   ó^   — e 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y)ÚInstallBackendr   é   é   c                 óL   — t        j                  | |«       || _        d | _        y ©N)r   Ú__init__ÚactionÚsleep_cookie)ÚselfÚwindow_mainr   s      ú@/usr/lib/python3/dist-packages/UpdateManager/backend/__init__.pyr   zInstallBackend.__init__    s   € Ü�‰˜˜kÔ*ØˆŒØ ˆÕó    c                 óú  — dt         j                  d<   t        «       | _        | j                  | j
                  k(  rÑ| j                  j                  }t        | j                  j                  j                  ¬«      }g }g }| j                  j                  D ]a  }||   }||   }|j                  r|j                  s|j                  |«       Œ7|j                  sŒD|j                  sŒQ|j                  |«       Œc | j!                  ||«       y | j                  | j"                  k(  �r5g }g }	g }
t        | j                  j                  j                  ¬«      }| j                  j                  D ]Ø  }	 |j                  rH||j$                     j                  s/|j$                  }|j&                  r|dz  }|j                  |«       n�|j                  r5||j$                     j                  r|	j                  |j$                  «       n@|j(                  r4||j$                     j                  r|
j                  |j$                  «       ŒÚ | j-                  ||	|
«       y | j/                  «        y # t*        $ r Y �Œw xY w)NÚnoneÚAPT_LISTCHANGES_FRONTEND)Úrootdirz#auto)ÚosÚenvironr   r   r   ÚACTION_PRE_INSTALLr   Úcacher   r   Úoem_metapackagesÚmarked_installÚis_installedÚappendÚmarked_upgradeÚis_upgradableÚ
commit_oemÚACTION_INSTALLÚnameÚis_auto_installedÚmarked_deleteÚKeyErrorÚcommitÚupdate)r   Úunfresh_cacheÚfresh_cacheÚpkgs_install_oemÚpkgs_upgrade_oemÚpkgÚunfresh_pkgÚ	fresh_pkgÚpkgs_installÚpkgs_upgradeÚpkgs_removeÚpkgnames               r   ÚstartzInstallBackend.start%   s  € Ø17Œ�
‰
Ð-Ñ.ô *›OˆÔà�;‰;˜$×1Ñ1Ò1Ø ×,Ñ,×2Ñ2ˆMÜ¨×(8Ñ(8×(>Ñ(>×(FÑ(FÔGˆKà!ÐØ!ÐØ×'Ñ'×8Ñ8ò 1�Ø+¨CÑ0�Ø'¨Ñ,�	à×-Ò-°i×6LÒ6LØ$×+Ñ+¨CÕ0Ø ×/Ó/°I×4KÓ4KØ$×+Ñ+¨CÕ0ð1ð �O‰OÐ,Ð.>Õ?Ø�[‰[˜D×/Ñ/Ó/àˆLØˆLØˆKô  ¨×(8Ñ(8×(>Ñ(>×(FÑ(FÔGˆKØ×'Ñ'×-Ñ-ò �ðà×*Ò*Ø +¨C¯H©HÑ 5× BÒ Bà"%§(¡(˜Ø×0Ò0Ø# wÑ.˜GØ$×+Ñ+¨GÕ4à×*Ò*Ø'¨¯©Ñ1×?Ò?à$×+Ñ+¨C¯H©HÕ5à×)Ò)Ø'¨¯©Ñ1×>Ò>à#×*Ñ*¨3¯8©8Ô4øð'ð. �K‰K˜ l°KÕ@à�K‰K�Møô  ò âðús   Å1CI-É-	I:É9I:c                 ó   — t         ‚)z(Run a update to refresh the package list©ÚNotImplementedError)r   s    r   r0   zInstallBackend.update]   ó   € ä!Ð!r   c                 óF   — | j                  | j                  ddddd¬«       y)zInstall these OEM packagesTN)Ú
authorizedÚsuccessÚerror_stringÚ
error_descÚtrans_failed)Ú_action_doner!   )r   r3   r4   s      r   r)   zInstallBackend.commit_oema   s-   € à×ÑØ×#Ñ#ØØØØØð 	õ 	
r   c                 ó   — t         ‚)zCommit the cache changesr>   )r   r8   r9   r:   s       r   r/   zInstallBackend.commitl   r@   r   c                 ó˜  — i }i }dt        «       z   }| j                  j                  }	 t        dd«      }t	        j
                  |«      }|j                  «        |d   D ]`  }|d   |   }|j                  dd «      }	|j                  d|«      }
|j                  dd «      }||vrŒF|r||   j                  du rŒZ|	|
f||<   Œb |d	   D ]L  }|d	   |   }|j                  d
|«      }j                  dd «      }||vrŒ4|r||   j                  du rŒH|||<   ŒN 	 ||fS # t        $ r%}t        j                  d|z  «       Y d }~||fS d }~ww xY w)Nzstable/ubuntu-z0/usr/share/ubuntu-release-upgrader/deb2snap.jsonÚrÚseededÚdebÚ
to_channelÚmetapkgFÚunseededÚfrom_channelz%error reading deb2snap.json file (%s))r   r   r"   ÚopenÚjsonÚloadÚcloseÚgetr%   Ú	ExceptionÚloggingÚdebug)r   Úseeded_snapsÚunseeded_snapsÚcurr_channelr"   Úd2s_fileÚd2sÚsnapÚseedrL   rM   rN   ÚunseedrP   Úes                  r   Úget_snap_seedszInstallBackend.get_snap_seedsp   sŒ  € ØˆØˆà'Ô*:Ó*<Ñ<ˆØ× Ñ ×&Ñ&ˆð	GÜØBÀCóˆHô —)‘)˜HÓ%ˆCØ�N‰NÔà˜H™ò 	7�Ø˜8‘} TÑ*�Ø—h‘h˜u dÓ+�Ø!ŸX™X l°LÓA�
ØŸ(™( 9¨dÓ3�Ø %Ñ'ØÙ˜u W™~×:Ñ:¸eÑCØØ&)¨:Ð%6�˜TÒ"ð	7ð ˜J™ò 4�Ø˜Z™¨Ñ.�Ø%Ÿz™z¨.¸,ÓG�ØŸ(™( 9¨dÓ3�Ø %Ñ'ØÙ˜u W™~×:Ñ:¸eÑCØØ'3�˜tÒ$ñ4ð ˜^Ð+Ð+øô ò 	GÜ�M‰MÐAÀAÑE×FÐFà˜^Ð+Ð+ûð	Gús   ©C-D Ä	E	Ä$EÅE	c                 ó  — 	 | j                   j                  €t        d «      | j                   _        nI| j                   j                  j                  d «       | j                   j                  j	                  «        | j                   j                  }g }| j                  «       \  }}|j                  «       D ]•  \  }\  }}||v sŒ||   j                  sŒd}||   j                  «        |j                  «       D ],  }	|	j                  sŒ|	j                  sŒ|	j                  rŒ*d} n |j                  «        |sŒ…|j!                  |«       Œ— |S # t
        $ r$}t        j                  d|z  «       g cY d }~S d }~ww xY w)Nzerror reading cache (%s)TF)r   r"   r
   rQ   Ú_initDepCacherV   rW   rX   rb   Úitemsr%   Úmark_deleteÚget_changesr-   r,   Úclearr&   )
r   r"   ra   Ú
duplicatesrY   Ú_r^   rL   Údeb_is_autor5   s
             r   Úget_deb2snap_dupsz InstallBackend.get_deb2snap_dups—   s[  € ð	Ø×Ñ×%Ñ%Ð-Ü)0°«�× Ñ Õ&à× Ñ ×&Ñ&×+Ñ+¨DÔ1Ø× Ñ ×&Ñ&×4Ñ4Ô6Ø×$Ñ$×*Ñ*ˆEð ˆ
Ø×-Ñ-Ó/‰ˆ�aà*×0Ñ0Ó2ò 	+‰NˆD‘(�3˜ð �eŠ|  c¡
× 7Ó 7Ø"�Ø�c‘
×&Ñ&Ô(à ×,Ñ,Ó.ò �Cà×(Ó(Ø×-Ó-Ø #× 5Ó 5à&+˜Ùðð —‘”âØ×%Ñ% cÕ*ð'	+ð* Ðøô= ò 	ô �M‰MÐ4°qÑ8Ô9Ø�Iûð		ús   ‚BE Å	E>ÅE9Å3E>Å9E>c           	      ó  — i }| j                  «       \  }}|j                  «       D ]ª  \  }\  }}i }t        j                  dd|gdt        j                  ¬«      j                  «       }t        j                  d|d   t        j                  «      rt        j                  d|z  «       Œƒ|| j                  j                  v sŒœd|d	<   ||d
<   |||<   Œ¬ |j                  «       D �]¤  \  }}	i }t        j                  dd|gdt        j                  ¬«      j                  «       }t        j                  d|d   t        j                  «      sŒit        j                  d|z  «       d}
t        j                  d|
z  |d   t        j                  «      st        j                  d|z  «       ŒÇd|d	<   t        j                  dd|gdt        j                  ¬«      j                  «       }|d   j                  d«      D ]†  }|j                  «       }t        |«      dk7  rŒ"|d   }|d   }|j                  |dz   «      sŒA|j                  d«      d   }|dk7  sŒ[||vsŒ`t        j                  d|›d|›d�«       d|d	<   d|d
<    n |||<   �Œ§ |S )Nr^   ÚinfoT)Úuniversal_newlinesÚstdoutz^installed: r   zSnap %s is installedÚinstallÚcommandÚchannelz#stable/ubuntu-[0-9][0-9].[0-9][0-9]z^tracking:.*%sz+Snap %s is not tracking the release channelÚremoveÚconnectionsú
é   r   r   ú:ú-zSnap z is being used by z. Switching it to stable trackÚrefreshÚstable)rb   re   Ú
subprocessÚPopenÚPIPEÚcommunicateÚreÚsearchÚ	MULTILINErW   rX   r   Úduplicate_packagesÚsplitÚlenÚ
startswith)r   Ú	snap_listrY   rZ   r^   rL   rM   Úsnap_objectÚ	snap_inforP   Ú
re_channelÚconnsÚconnÚ	conn_colsÚplugÚslotÚ	plug_snaps                    r   Úget_snap_transitionsz#InstallBackend.get_snap_transitionsÀ   s�  € àˆ	Ø'+×':Ñ':Ó'<Ñ$ˆ�nà'3×'9Ñ'9Ó';ò 	.Ñ#ˆDÑ#�3˜
ØˆKä"×(Ñ(Ø˜ Ð&Ø#'Ü!—‘ô÷ ‰k‹mð	 ô
 �y‰y˜¨°1©´r·|±|ÔDÜ—‘Ð4°tÑ;Ô<ØØ˜×(Ñ(×;Ñ;Ò;à)2�˜IÑ&Ø)3�˜IÑ&Ø"-�	˜$’ð	.ð" %3×$8Ñ$8Ó$:ó 3	.Ñ ˆD�<ØˆKä"×(Ñ(Ø˜ Ð&Ø#'Ü!—‘ô÷ ‰k‹mð	 ô
 �y‰y˜¨°1©´r·|±|ÕDÜ—‘Ð4°tÑ;Ô<àB�
Ü—y‘yØ%¨
Ñ2°I¸a±LÄ"Ç,Á,ôô —M‘MØEÈÑLôð à)1�˜IÑ&ô #×(Ñ(Ø˜]¨DÐ1Ø'+Ü%Ÿ?™?ô÷ ‘+“-ð	 ð " !™HŸN™N¨4Ó0ò "�DØ $§
¡
£�IÜ˜9“~¨Ò*Ø Ø$ Q™<�DØ$ Q™<�Dà—‘ t¨c¡zÕ2Ø$(§J¡J¨s£O°AÑ$6˜	à%¨Ó,Ø )°Ò ?ä#ŸMšMò $(ªð!4ôð
 6?˜K¨	Ñ2Ø5=˜K¨	Ñ2Ù!ð)"ð, #.�	˜$“ðg3	.ðj Ðr   c                 ó  — |\  }}}|sy d}d}	|j                  «       D ](  }
||
j                  «       z  }|	|
j                  «       z  }	Œ* |	|z  }||z  ||z  z   }||j                  «       kD  r!t	        j
                  |j                  |«       y y )Nr   )Ú	get_tasksÚget_progress_totalÚget_progress_doneÚget_fractionr   Úidle_addÚset_fraction)r   ÚclientÚchangerj   Ú	user_dataÚindexÚcountÚprogress_barÚ
task_totalÚ	task_doneÚtaskÚtask_fractionÚtotal_fractions                r   Úupdate_snap_cbzInstallBackend.update_snap_cb  s«   € Ø%.Ñ"ˆˆu�lÙØð ˆ
Øˆ	Ø×$Ñ$Ó&ò 	2ˆDØ˜$×1Ñ1Ó3Ñ3ˆJØ˜×/Ñ/Ó1Ñ1‰Ið	2ð " JÑ.ˆð (¨%Ñ/°E¸E±MÑBˆð ˜L×5Ñ5Ó7Ò7Ü�M‰M˜,×3Ñ3°^ÕDð 8r   c           	      ó¨  ‡ — ˆ fd„}d„ } |t        d«      «       d }d }‰ j                  j                  «       }|r9t        |d   t        j
                  «      r|d   }t        j                  d||«      }‰ j                  «       }|r&t        j                  |«       |j                  d«       	 t        j                  «       }|j                  «        d}t        |«      }	|j                  «       D ]Â  \  }
}|d   }|dk(  r: |t        d|
z  «      «       |j!                  |
|d	   ‰ j"                  ||	|f¬
«       nt|dk(  r6 |t        d|
z  «      «       |j%                  |
‰ j"                  ||	|f¬
«       n9 |t        d|
z  «      «       |j'                  |
|d	   ‰ j"                  ||	|f¬
«       |dz  }ŒÄ 	 t        j.                  ‰ j0                  j4                  «       y # t        j(                  $ r`}t+        j,                  d|z  «       t        j.                  ‰ j0                  j2                  dt        d«      t        d«      «       Y d }~y d }~ww xY w)Nc                 óZ   •— t        j                  ‰j                  j                  | «       y r   )r   r—   Úlabel_detailsÚ	set_label)Ústatusr   s    €r   Úupdate_statusz2InstallBackend.update_snaps.<locals>.update_status%  s   ø€ Ü�M‰M˜$×,Ñ,×6Ñ6¸Õ?r   c                 ó$   — | j                  «        y)NT)Úpulse)rž   s    r   Úupdate_progressz4InstallBackend.update_snaps.<locals>.update_progress(  s   € Ø×ÑÔ Ør   zUpdating snapsr   éd   rr   rz   zRefreshing %s snaprs   )Úprogress_callback_datart   zRemoving %s snapzInstalling %s snapr   zerror updating snaps (%s)Fz!Upgrade only partially completed.zMAn error occurred while updating snaps. Please check your network connection.)rj   Úprogressbar_slotÚget_childrenÚ
isinstancer   ÚProgressBarr   Útimeout_addr‘   Úsource_remover˜   r   ÚClientÚconnect_syncr…   re   Úrefresh_syncr¤   Úremove_syncÚinstall_syncÚErrorrW   rX   r—   r   Ústart_errorÚstart_available)r   rª   r­   rž   Úprogress_timerÚprogress_barsr‡   r™   rœ   r�   r^   rˆ   rr   ra   s   `             r   Úupdate_snapszInstallBackend.update_snaps#  sO  ø€ ô	@ò	ñ 	”aÐ(Ó)Ô*àˆØˆà×-Ñ-×:Ñ:Ó<ˆÙœZ¨°aÑ(8¼#¿/¹/ÔJØ(¨Ñ+ˆLÜ!×-Ñ-Ø�_ lóˆNð
 ×-Ñ-Ó/ˆ	áÜ×Ñ˜~Ô.Ø×%Ñ% aÔ(ð*	Ü—\‘\“^ˆFØ×ÑÔ!ØˆEÜ˜	“NˆEØ%.§_¡_Ó%6ò Ñ!��kØ% iÑ0�Ø˜iÒ'Ù!¤!Ð$8¸4Ñ$?Ó"@ÔAØ×'Ñ'ØØ# IÑ.Ø×+Ñ+Ø05°u¸lÐ/Kð	 (õ ð  Ò(Ù!¤!Ð$6¸Ñ$=Ó">Ô?Ø×&Ñ&ØØ×+Ñ+Ø05°u¸lÐ/Kð 'õ ñ "¤!Ð$8¸4Ñ$?Ó"@ÔAØ×'Ñ'ØØ# IÑ.Ø×+Ñ+Ø05°u¸lÐ/Kð	 (ô ð ˜‘
‘ñ3ôP 	�‰�d×&Ñ&×6Ñ6Õ7øô �z‰zò 	Ü�M‰MÐ5¸Ñ9Ô:Ü�M‰MØ× Ñ ×,Ñ,ØÜÐ5Ó6Üð<óô	ô ûð	ús   Â-DG ÇIÇ1AIÉIc                 óF  — || j                   k(  r$|r"| j                  | _        | j                  «        y || j                  k(  rº|rPt        j
                  j                  d«      r1t        | d«      r%t        | j                  ¬«      j                  «        y |r| j                  j                  «        y |r| j                  j                  |||«       y t        j                  d| j                  j                  «       y |r| j                  j                  d||«       y |ret        j
                  j                  d«      rFt        | d«      r:| j!                  «       | j                  _        | j                  j                  «        y | }| j                  j                  |«       y )Nz/usr/bin/snapÚpane_update_progress)Útargetr   T)r!   r*   r   r<   r   ÚpathÚexistsÚhasattrr	   rÀ   r   r½   r¼   r   r´   Úexitrl   rƒ   )r   r   rB   rC   rD   rE   rF   Úis_cancelled_updates           r   rG   zInstallBackend._action_doneo  s=  € ð" �T×,Ñ,Ò,±à×-Ñ-ˆDŒKØ�J‰J�LØ�t×*Ñ*Ò*áÜ—G‘G—N‘N ?Ô3Ü˜DÐ"8Ô9ä˜d×/Ñ/Ô0×6Ñ6Õ8ÙØ× Ñ ×0Ñ0Õ2ÙØ× Ñ ×,Ñ,Ø  ,°
õô × Ñ   D×$4Ñ$4×$9Ñ$9Õ:áØ× Ñ ×,Ñ,¨T°<ÀÕLáÜ—G‘G—N‘N ?Ô3Ü˜DÐ"8Ô9à6:×6LÑ6LÓ6N�× Ñ Ô3Ø× Ñ ×0Ñ0Õ2à*1 kÐ#Ø× Ñ ×0Ñ0Ð1DÕEr   N)F)Ú__name__Ú
__module__Ú__qualname__ÚACTION_UPDATEr!   r*   r   r<   r0   r)   r/   rb   rl   r‘   r¤   rÀ   rG   © r   r   r   r      sW   „ Ø€MØÐØ€Nò!ò
6òp"ò	
ò"ò%,òN'òRKòZEò,J8ðf ô2Fr   r   ú/usr/sbin/aptdÚ%UPDATE_MANAGER_FORCE_BACKEND_SYNAPTICr   )ÚInstallBackendAptdaemonzimporting aptdaemonú/usr/sbin/synapticÚ&UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON)ÚInstallBackendSynapticzimporting synapticc                  ó†  — t         j                  j                  d«      rdt         j                  vr	 t	        | i |¤ŽS t         j                  j                  d«      rdt         j                  vr	 t        | i |¤ŽS t        d«      ‚# t
        $ r t        j                  d«       Y Œhw xY w# t
        $ r Y t        d«      ‚w xY w)z,Select and return a package manager backend.rÎ   rÏ   zusing aptdaemon failedrÑ   rÒ   zENo working backend found, please try installing aptdaemon or synaptic)
r   rÄ   rÅ   r    rÐ   Ú	NameErrorrW   Ú	exceptionrÓ   rV   )ÚargsÚkwargss     r   Úget_backendrÙ   ¹  sÃ   € ô 	�‰�‰Ð'Ô(Ø3¼2¿:¹:ÑEð	8Ü*¨DÐ;°FÑ;Ð;ô
 	�‰�‰Ð+Ô,Ø4¼B¿J¹JÑFð	Ü)¨4Ð:°6Ñ:Ð:ô ð	 óð øô ò 	8Ü×ÑÐ6Ö7ð	8ûô ò 	Øä
ð	 óð ð	ús#   ³
B Á0
B* ÂB'Â&B'Â*	C Â?C )"Ú__doc__ÚgiÚrequire_versionÚgi.repositoryr   r   r   Úaptr   rR   rW   r   r€   r|   r   rj   Ú	threadingr	   ÚUpdateManager.Core.MyCacher
   ÚUpdateManager.Core.utilsr   r   ÚUpdateManager.Dialogsr   r   rÄ   rÅ   r    rÐ   ÚImportErrorrÖ   rÓ   rÙ   rÍ   r   r   ú<module>rä      s  ðñ 9ó 
à €× Ñ �5˜%Ô  Ø €× Ñ �7˜CÔ  ß *Ñ *å Û Û Û 	Û 	Û Ý  Ý å .ß DÝ (ôFF�Vô FFðV ‡G�G‡N�NÐ#Ô$Ø/°r·z±zÑAð1ÝDð
 ‡G�G‡N�NÐ'Ô(Ø0¸¿
¹
ÑBð0ÝB÷
øð ò 1Øˆ×ÑÐ/Ö0ð1ûð ò 0Øˆ×ÑÐ.Õ/óð	0ús$   Â&C$ ÃD Ã$C>Ã=C>ÄDÄD