
    9qf0B                     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2M(8(8(>(>(F(FGK!!''88 1+C0',	--i6L6L$++C0 //I4K4K$++C01 OO,.>?[[D///LLK  (8(8(>(>(F(FGK''-- ** +CHH 5 B B"%((00#w.G$++G4**'1??$++CHH5))'1>>#**3884'. KKlK@KKM   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BCH ))H%CNNH 	78}T*hhud+!XXlLA
((9d3%'uW~::eC&):%6T"	7 J 4Z.%zz.,G((9d3%'uW~::eC'3t$4 ^++  	GMMAA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 	+ND(3 e|c
 7 7"c
&&( ,,. C((-- # 5 5&+ %%c*'	+* =  	 MM4q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"((&#'! km	 
 yy1r||D4t;<((;;;)2I&)3I&"-	$	." %3$8$8$: 3	. D<K"((&#'! km	 
 yy1r||D4t;<B
yy%
2IaL",, MMEL )1I& #((]D1'+%?? +-	  "!HNN40 "D $

I9~* $Q<D$Q<Dtcz2$(JJsOA$6	%, ) ?#MM $(!4
 6?K	25=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    %."ul 
	$$& 	2D$1133J//11I	2 "J. (%/EEMB L5577MM,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    MM$,,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	NE%.__%6 !k%i0i'!!$84$?"@A''#I.++05ul/K	 (  (!!$6$=">?&&++05ul/K '  "!$84$?"@A''#I.++05ul/K	 (  
3P 	d&&667 zz 	MM59:MM  ,,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,,,--DKJJLt***GGNN?3D"89d//0668  002  ,, ,
   D$4$4$9$9:  ,,T<LGGNN?3D"896:6L6L6N  3  002*1k#  001D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8f 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     	'(32::E	8*D;F;;
 	+,4BJJ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%     7C   * *    	 	     . D (FFV FFV GGNN#$/rzzA1D
 GGNN'(0

B0B
  1/01  0./	0s$   &C$ D $C>=C>DD