
    Sizg3                        d dl Z d dlZd dlZd dlZ ej                  dd        ej                  dd        ej                  dd       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mZmZ d
dlmZ g dZd Zda ej0                         adZddZd Zd Zd Zd Zd Z d Z!d Z"d Z# G d de	jH                        Z%y)    NGtkz3.0GdkPackageKitGlibz1.0)r   GLib)r   )AptProgressDialog   )
AptPkgInfo)ChangesConfirmDialog)check_mlwarndebug)dialogs)zmint-commonzmint-translationszmint-meta-coremintdesktoppython3perlc                 T    t        |       dkD  r| d   j                         | dd  z   S | S )Nr   r   )lenupper)strings    ;/usr/lib/python3/dist-packages/mintcommon/installer/_apt.py
capitalizer      s.    
6{Qq	!F12J./O    c                     | st         s)t        5  t        j                         a d d d        t         S t         S # 1 sw Y   t         S xY wN)
_apt_cache_apt_cache_lockaptCachefulls    r   get_apt_cacher!   "   s<     J 	%J	% :	% s	   8Ac                     d| z  S )Nzapt:%s )names    r   
add_prefixr%   +   s    tr   c                 |    t        |       }|dkD  rt        j                  |dz
        S t        j                  |      S )N   )int
packagekit	ErrorEnumClientError)codens     r   get_real_errorr.   .   s8    D	A3w##AG,,%%a((r   c                     t        | t        j                        st        dt	        |       z        t        | j                        S )Nz7apt.make_pkg_hash_make must receive apt.Package, not %s)
isinstancer   Package	TypeErrortyper%   r$   )apt_pkgs    r   make_pkg_hashr5   5   s7    gs{{+QTXY`Taabbgll##r   c                    t        j                          }t               }i }|j                         }|D ]  }||   j                  }||   }|j	                  d      r|j	                  d      s;|j                  d      r|dk7  rR|j                  d      rd|j                  d      rv|j                  d      r|j                  d      r|j                  d	      rd
|v rd|v r|j                  d      r|j                  d      r|j                  d      r|dk(  r|dk(  r|j                  |j                  j                  j                  d      r-|j	                  d      r@d|v r|j                  d      d   |v r\	 d|j                  j                  j                         v r	 t        |      }	|j                  j                  }
d|
v r|
j                  d      d   }n|
}|j                  |g       j                  |	       t!        |	|      | |	<    t#        dt        j                          |z
  dz  z         | |fS # t        $ r}t        d|d|       Y d }~?d }~ww xY w)Nlib)libreofficelibrecadlibk3b7zlibimage-exiftool-perlz:i386z
steam:i386z-devz-dbgz-docz-commonz-dataz-locale-z-l10n-z-dbgsyml10nz-perlsnapdzpepperflashplugin-nonfreekernel)zlinux-headers-zlinux-tools-:r   transitionalz.Problem parsing package (maybe it's virtual): z: /r   z:Installer: Processing APT packages for cache took %0.3f msg     @@)timer!   keysr$   
startswithendswith	candidatesectionsplitsummarylower	Exceptionr   r5   
setdefaultappendr	   r   )cacheapt_time	apt_cachesectionsrB   keyr$   pkgepkg_hashsection_stringrF   s               r   process_full_apt_cacherV   ;   sX   yy{HIH>>D <4~""n??5!$//:z*{==!dl&:== == == ==#==!t==#== ==!7?..== ==  ))(3??=>$;4::c?1-5	!6!6!<!<!>> ? !%... $**3/2G$GGR(//9$Xs3hy<4| 

F499;YaKaekJk
lm(?)  	4QRST	s   &I	I7I22I7c                 H    | j                   }t               }	 ||   S #  Y y xY wr   )r$   r!   )pkginfor$   rO   s      r   search_for_pkginfo_apt_pkgrY      s+    <<DIs    !c                     t               }t        5  	 || j                     j                  d ucd d d        S #  Y d d d        yxY w# 1 sw Y   y xY w)NF)r!   r   r$   	installed)rX   rO   s     r   pkginfo_is_installedr\      sV    I	 	W\\*44D@ 		   s   A7AAAAc                      t        d       y )NTr   )r!   r#   r   r   sync_cache_installed_statesr^      s
    tr   c                 h    t        |       | _        t        d| j                  j                  z         y )Nz;Installer: Calculating changes required for APT package: %s)MetaTransactiontransactionr   rX   r$   )tasks    r   select_packagesrc      s'    &t,D	
G$,,J[J[
[\r   c                   J    e Zd Zd Zd Zd Zd ZddZd Zd Z	d	 Z
d
 Zd Zy)r`   c                     t         j                  j                  |        || _        d| _        t        j                  | j                        }|j                          y )Nr   )target)	r)   Task__init__rb   simulated_download_size	threadingThread_calculate_apt_changesstart)selfrb   threads      r   rh   zMetaTransaction.__init__   sB      &	'($!!)D)DEr   c                 T   t               }t        5  |j                          || j                  j                  j
                     }d }t        j                  j                  |j                  d|j                         d      }d d d        | j                  d       	 | j                  j                  dk(  r6| j                  gdd| j                  j                  | j                  d       }nq| j                  j                  dk(  r4| j!                  g| j                  j                  | j                  d       }n$| j                  j                  dk(  rt#        d       | j+                         y # 1 sw Y   xY w# t$        j&                  $ r}| j)                  |       Y d }~Gd }~ww xY w)N Tremoveinstallupdateztodo update)r!   r   clearrb   rX   r$   r)   r1   id_build	shortnamearchitectureset_simulater3   remove_packages_synccancellableon_transaction_progressinstall_packages_syncr   r   Erroron_transaction_erroron_transaction_finished)rn   rO   r4   resultspkg_idrS   s         r   rl   z&MetaTransaction._calculate_apt_changes   sb   !O	 	dOO		 1 1 6 67GG''001B1BBH\H\H^`bcF	d 	$	)yy~~)33H$II))00 9,44HII))00	 8+m$ 	$$W-=	d 	d6 zz 	)%%a((	)s%   A0E-C E9 -E69F'F""F'c                 ~   |j                   t        j                  j                  k(  ry |j                   }|j                   dk\  r-|j                   dz
  }|t        j                  j
                  k(  ry | j                  j                  j                         ry |t        j                  j                  k(  s&| j                  j                  j                  t        v r%| j                  j                  | j                  _        | j                  j                  | j                  j                  k(  rh|t        j                  j                   k(  r&| j                  j"                  | j                  _        n%| j                  j$                  | j                  _        | j                  j'                  || j)                                y )Nr'   )
info_stage)r,   r)   r+   DECLINED_SIMULATIONr*   NOT_AUTHORIZEDrb   r{   is_cancelledCANNOT_REMOVE_SYSTEM_PACKAGErX   r$   CRITICAL_PACKAGESSTATUS_FORBIDDENinfo_ready_statusSTATUS_NONEDEP_RESOLUTION_FAILEDSTATUS_BROKENSTATUS_UNKNOWNhandle_errorget_simulate)rn   error	real_codes      r   r   z$MetaTransaction.on_transaction_error   s2    :://CCC JJ	::

T)IJ00???99  --/
,,IIITYYM^M^McMcgxMx*.))*D*DDII'99&&$))*?*??J00FFF.2ii.E.E		+.2ii.F.F		+		u43D3D3FGr   c                 L   |rW|j                         }|j                         }|r)t        d|j                         |j	                                t        d|       | j                  j                  r| j                  j                          y | j                  j                          y )NzFinished code: z
Exit code:)
get_exit_codeget_error_coder   get_codeget_detailsr   rb   error_messagecall_error_cleanup_callbackcall_finished_cleanup_callback)rn   r   	exit_codepkerrors       r   r   z'MetaTransaction.on_transaction_finished   sz    --/I,,.G&(8(8(:G<O<O<QR,	*99""II113II446r   Nc                 *   |j                         t        j                  j                  k(  ry | j	                         rD|t        j
                  j                  k(  r&|j                         }|| j                  kD  r|| _        y |t        j
                  j                  k(  rv| j                  j                  r_t        j                  | j                  j                  | j                  j                  |j                         dt        j                          y y y )NF)priority)
get_statusr)   
StatusEnumUNKNOWNr   ProgressTypeDOWNLOAD_SIZE_REMAININGget_download_size_remainingri   
PERCENTAGErb   client_progress_cbr   idle_addrX   get_percentagePRIORITY_DEFAULT)rn   progressptypedatanew_sizes        r   r|   z'MetaTransaction.on_transaction_progress   s     J$9$9$A$AA
//GGG#??Ad:::3;D0J++666yy++dii::"ii//&557#'+'<'<	> , 7r   c           
         | j                   j                  j                         r| j                          y || j                   _        |j                         }g }g }g }d}d}t               t        5  |j                         D ]  }	|	j                         }
dfd	}|
t        j                  j                  k(  ru| j                   j                  j                  |	       | ||	      z  }|j                  |	j                         d|	j!                         d|	j#                         d       |
t        j                  j$                  k(  rx| j                   j&                  j                  |	       | ||	d      z  }|j                  |	j                         d|	j!                         d|	j#                         d       A|
t        j                  j(                  k(  s`| j                   j*                  j                  |	       | ||	      z  }|j                  |	j                         d|	j!                         d|	j#                         d        t-        d|       t-        d	|       t-        d
|       | j.                  | j                   _        ||z
  }|dk  r&|dz  | j                   _        d| j                   _        n"d| j                   _        || j                   _        | j                   j*                  D ]p  }	|	j                         d|	j!                            }| j7                  |         s>t9        d|z         | j                   j:                  | j                   _        r | j                   j<                  | j                   j:                  | j                   j>                  fvrv| j                   j@                  | j                   _        | jB                  | j                   _"        | jF                  | j                   _$        | jJ                  | j                   _&        | j                   jO                          d d d        y # 1 sw Y   y xY w)Nr   c                     | j                         d| j                            }|j                  }|r8|j                  D ])  }|j                  s|j
                  |j
                  z
  c S  |j
                  S )Nr>   )get_nameget_archrE   versionsis_installedinstalled_size)rR   	is_updater4   rE   versionrO   s        r   
calc_spacez8MetaTransaction.do_simulate_question.<locals>.calc_space%  sq    '3<<>3<<>(RSG ' 1 1I '.'7'7 YG&33'0'?'?'BXBX'X XY %333r   r>   z ()T)r   zFor install:zFor removal:zFor upgrade:z3Installer: apt - cannot remove critical package: %sF)(rb   r{   r   user_declinedpkit_request_idget_package_sackr!   r   	get_arrayget_infor)   InfoEnum
INSTALLING
to_installrL   r   r   get_versionUPDATING	to_updateREMOVING	to_remover   ri   download_size
freed_sizeinstall_size_is_critical_packager   r   r   r   	STATUS_OK_confirm_transactionconfirm_cancel_transactioncancel_execute_transactionexecutecall_info_ready_callback)rn   requestr   sackinstall_dbginforemove_dbginfoupdate_dbginfo
added_sizer   rR   infor   spaceapt_pkg_namerO   s                 @r   do_simulate_questionz$MetaTransaction.do_simulate_question  sG   99  --/ $+		!'')

 "O	 9	1~~' n||~
4 :..999II((//4*S/1J#**3<<>3<<>[^[j[j[l+mnZ00999II''..s3*SD"AAJ"))#,,.#,,.Z]ZiZiZk*lmZ00999II''..s3*S/1J"))#,,.#,,.Z]ZiZiZk*lm5n8 ./2..1..1&*&B&BDII#+Eqy',rz		$)*		&'(		$).		&yy** M(CLLNCLLN)ST,,Y|-DENQ]]^26))2L2LDII/M yy**4993M3MtyyOfOf2gg.2ii.A.A		+$($=$=		!#'#;#;		 $($=$=		!II..0s9	1 9	1 9	1s   2E/Q#EQ?DQQc                     	 |j                   d   j                  dk(  s|j                  t        v ryy# t        $ r Y yw xY w)Nr   requiredTF)r   r   r$   r   rJ   )rn   rR   s     r   r   z$MetaTransaction._is_critical_package\  sA    	||A'':5EV9V 		s   .2 	>>c                    t        | j                  j                        dkD  sDt        | j                  j                        dkD  s"t        | j                  j                        dkD  ryt        | | j                  | j                  j                        }|j                         }|j                          |j                          |t        j                  j                  k(  S y)Nr   r   )parentT)r   rb   r   r   r   r
   parent_windowrunhidedestroyr   ResponseTypeOK)rn   diaress      r   r   z$MetaTransaction._confirm_transactione  s    tyy##$q(C		0C0C,Dq,HCPTPYPYPcPcLdghLh&tTYYtyy?V?VWC'')CHHJKKM#**----r   c                     | j                   j                  j                          | j                   j                  dkD  r7| j	                  | j                   j                         d| j                   _        y y )Nr   )rb   r{   r   r   r   )rn   s    r   r   z#MetaTransaction._cancel_transactionp  sS    		$$&99$$q(tyy889()DII% )r   c                    | j                  d       | j                  j                  j                         ry | j                  j                  d| j                  _        | j                  j
                  r&| j                  | j                  j                         y t        |       }|j                  d| j                         y )NFT)
show_errorerror_handler)ry   rb   r{   r   r   
has_windowuser_acceptedr   r   r   	_on_error)rn   progress_windows     r   r   z$MetaTransaction._execute_transactionw  s    % 99  --/99''3#'DII 99tyy889/5O5Or   r   )__name__
__module____qualname__rh   rl   r   r   r|   r   r   r   r   r   r#   r   r   r`   r`      s:    !.FH@7>(J1X	*Pr   r`   r   )&rA   rj   r   girequire_versiongi.repositoryr   r   r   r)   aptdaemon.gtk3widgetsr   pkgInfor	   r   r
   miscr   r   r   rq   r   r   r   Lockr   _as_poolr!   r%   r.   r5   rV   rY   r\   r^   rc   rg   r`   r#   r   r   <module>r      s      
 	   5%     5%     #U + # 6 3  ) ' '  m  
 )..")$HT]
cPjoo cPr   