
    XRg                     ~   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl	Z	d dl
Z
 e
j                  dd        e
j                  dd       d dlmZmZmZmZmZm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mZ ddlmZmZmZ ddlmZ  G d d      Zda d Z!i Z"i a#d Z$d Z%d Z&d Z'd Z(d Z)d8dZ*d8dZ+d Z,d Z-d Z.d Z/d  Z0d! Z1d" Z2d# Z3d$ Z4d% Z5 G d& d'      Z6d( Z7d) Z8d8d*Z9d+ Z:d, Z;d- Z<d. Z=d/ Z>d0 Z?d1 Z@d2 ZAd3 ZBd4 ZC	 d5ZD ej                  eD      ZFd6 ZGd7 ZHy#  Y xY w)9    N)PathGtkz3.0Xmlbz2.0)GLibGObjectr   GioGdkr   Flatpakz1.0)r
      )FlatpakPkgInfo)dialogs)ChangesConfirmDialogFlatpakProgressWindow)debugwarnprint_timing)appstream_poolc                   0    e Zd ZddZedefd       Zd Zy)FlatpakRemoteInfoNc                 R   |r|j                         | _        |j                         | _        |j	                         | _        |j                         | _        |j                         | _	        |j                         | _        | j                  r| j                  dk(  r=dj                  | j                  j                  d      D cg c]  }| c}      | _        | j                  j                         | _        y d | _        d | _        d | _        d | _        d| _	        d| _        y c c}w )N  -F)get_namename	get_titletitleget_commentsummaryget_urlurlget_disableddisabledget_noenumeratenoenumeratejoinsplit)selfremotewords      ?/usr/lib/python3/dist-packages/mintcommon/installer/_flatpak.py__init__zFlatpakRemoteInfo.__init__   s    )DI))+DJ!--/DL~~'DH"//1DM%557D::r!1 XX9M'N'NO
))+DJDIDJDLDH!DM$D (Os   	D$	json_datac                 x     |        }|d   |_         |d   |_        |d   |_        |d   |_        |d   |_        |S )Nr   r   r!   r#   r%   )r   r   r!   r#   r%   )clsr-   insts      r+   	from_jsonzFlatpakRemoteInfo.from_json1   sK    uf%	w'
U#!*-$]3    c                     | j                   S N)__dict__r(   s    r+   to_jsonzFlatpakRemoteInfo.to_json=   s    }}r2   r4   )__name__
__module____qualname__r,   classmethoddictr1   r7    r2   r+   r   r      s'    %( 	 	 	r2   r   c                  X    t         t        j                  j                  d       a t         S r4   )_fp_sysr
   Installation
new_systemr=   r2   r+   
get_fp_sysrB   B   s$     &&11$7Nr2   c                    t        | t        j                        st        dt	        |       z        d| j                         d| j                         S # t        $ r' d| j                         d| j                         cY S w xY w)Nz7flatpak.make_pkg_hash() must receive FlatpakRef, not %szfp::)	
isinstancer
   Ref	TypeErrortype
get_origin
format_ref	Exceptionget_remote_namerefs    r+   make_pkg_hashrO   O   ss    c7;;'QTXY\T]]^^F ^^-s~~/?@@ F 002CNN4DEEFs   #A -BBc                    d }	 | j                         }|D ]K  }|j                         }| |S |j	                  d      |j	                  d      k(  s<|j                         }M |S # t        j                  $ r g }Y iw xY w)N/)list_remotesr   Errorr    rstripr   )fp_sysr!   r   remotesr)   
remote_urls         r+   _get_remote_name_by_urlrX   X   s    D%%'  %^^%

 K S!SZZ_4??$D% K :: s   A& &A>=A>c                 &   | j                         t        j                  j                  k(  ry| j	                         j                  d      ry| j	                         j                  d      ry| j                         |k7  ry| j                         yy)NFBaseAppBaseExtensionT)get_kindr
   RefKindRUNTIMEr   endswithget_archget_eol)rN   archs     r+   _should_cache_refrc   k   sn    
||~000
||~y)
||~/
||~
{{} r2   c                    |j                         }|j                         rt        d|z         y |j                         rt        d|z         y |j	                         }	 |j                  |d       D ]  }t        ||      st        | |||d         y # t        j                  $ r }t        d|j                         Y d }~y d }~ww xY w)Nz6Installer: flatpak - remote '%s' is disabled, skippingzSInstaller: flatpak - remote '%s' is marked as no-enumerate skipping package listingFzProcess remote:)r   r"   r   r$   r    list_remote_refs_syncrc   _add_package_to_cacher   rS   r   message)	cacherpoolrU   r)   rb   remote_namerW   rN   es	            r+   _process_remoterl   }   s    //#KFTU cfqqr!J+//TB 	HC$S$/!%ZG	H :: +		**+s    3B C'CCc                 j   t        |      }	 |j                         }	 | |   }|r||_        |S # t        $ r |j                         }Y ,w xY w# t
        $ r\ t        |||||      }d }||j                  |      }|t        d|j                         z         |j                  |       || |<   Y |S w xY w)NzHave as package: %s)rO   rL   rK   rI   	installedKeyErrorr   lookup_appstream_packager   get_bundle_idadd_cached_appstream_data)	rh   ri   rN   rW   rn   pkg_hashrj   pkginfo
as_packages	            r+   rf   rf      s    S!H'))+"/ )G N+  'nn&'  " ;ZS
77@J!'**B*B*DDE))*5!hN"s!   . A A
	A
A!B21B2c           	         t        j                          }t        j                         }t               }i }	 |j	                         D ]  }|j                         }t        d|z         	 |j                  ||d       }t        j                  |      }	t        | |	|||       	 |j                  d       D ]@  }
|
j!                         |k(  st#        |
|      s$t%        | |	|
|j'                         d       B 	 t)        |      ||<    	 t        dt        j                          |z
  dz  z         | |fS # t        j                  $ r%}t        d|d|j                         Y d }~d }~ww xY w# t        j                  $ r }t        d|j                         Y d }~d }~ww xY w# t        j                  $ r"}t        d|j                         i } Y d }~d }~ww xY w)	Nz?Installer: flatpak - updating appstream data for remote '%s'...zCould not update appstream for : Tzadding packages:z.Installer: flatpak - could not get remote listz6Installer: Processing Flatpaks for cache took %0.3f msg     @@)timer
   get_default_archrB   rR   r   r   update_appstream_syncr   rS   r   rg   r   Poolrl   list_installed_refsrI   rc   rf   r    r   )rh   fp_timerb   rU   flatpak_remote_infosr)   rj   successrk   ri   rN   s              r+   !process_full_flatpak_installationr      s   iikG##%D\F))+ 	JF //+KSVaabY 66{D$O #''/EE5&&$?4!55d; YC ~~';6;LSRV;W-eUCAQSWX	Y 1B&0I -+	J6 

Btyy{U\G\`fFf
gh&&&/ :: YQYYWXXY :: 4'334
 :: =qyyIsw   1F! (D0;$F!  'E+E+E+4F! 0E(E#F! #E((F! +F>FF! FF! !G4GGc                 \    t        j                  t        | f      }|j                          y N)targetargs)	threadingThread_initialize_appstream_threadstart)cbthreads     r+   initialize_appstreamr      s     %ANF
LLNr2   c                 .   t               }i a	 |j                         D ]P  }	 |j                  |j	                         d d        t        j                  |      }|t        |j	                         <   R 	 | t        j                  |        y y # t
        j                  $ r"}t        d|j                  z         Y d }~xd }~ww xY w# t
        j                  t        f$ r8}	 |j                  }n#  t        |      }Y nxY wt        d|z         Y d }~d }~ww xY w)NzOProblem checking for updated appstream, using existing (may be out of date): %szEInstaller: Could not initialize appstream components for flatpaks: %s)rB   poolsrR   rz   r   r   rS   r   rg   r   r{   rK   strr   idle_add)r   rU   r)   rk   poolmsgs         r+   r   r      s   \FE\))+ 	,Fu ,,V__->dK "&&v.D'+E&//#$	,& 
~b  :: ugjkjsjssttu JJ	" \	))C	a&CTWZZ[[\sR   C !B.C C B;6C ;C  C DC*)D*C97DDc                    t               }	 |j                  | j                         | j                         | j	                         | j                         d       }|r|S 	 	 |j                  || j                         | j                         | j	                         | j                         d       }|r|S 	 y # t        j                  $ rI}|j                  t        j                  j                  k7  rt        d|j                  z         Y d }~d }~ww xY w# t        j                  $ rL}|j                  t        j                  j                  k7  rt        d|d|j                         Y d }~y d }~ww xY w)Nz,Installer: Couldn't look up InstalledRef: %sz'Installer: Couldn't look up RemoteRef (z): )rB   get_installed_refr\   r   r`   
get_branchr   rS   coder
   NOT_INSTALLEDr   rg   fetch_remote_ref_syncALREADY_INSTALLED)rN   rj   rU   irefrk   rrefs         r+   get_remote_or_installed_refr      s/   \FM''(+(+(+(8(,	. K ^++K,/LLN,/LLN,/LLN,/NN,<,02 K  # :: M66W]]000?!))KLM :: ^66W]]444[RSR[R[\]	^s2   AB3 AD 3D?D

DE1%AE,,E1c                    | j                         }t        j                  j                  |      }t	        ||      }|y t        |      }t        ||||      }|j                  |        t        |t        j                        |_
        |S r4   )rq   r
   rF   parser   rO   r   rr   rE   InstalledRefrn   )as_pkgrj   rW   	bundle_idshallow_refrN   rs   rt   s           r+   create_pkginfo_from_as_pkgr     sz    $$&I++##I.K
%k;
?C
{S!HX{CDG%%f-"3(<(<=GNr2   c                 j    	 t         | j                     j                  |       }|S # t        $ r Y y w xY wr4   )r   r)   rp   ro   )rt   packages     r+   $search_for_pkginfo_appstream_packager   '  s7    '@@I s   #& 	22c            	      L   t               } t        j                         }g }t        j                  j                         }d|j                  j                  z  }d|j                  j                  z  }d }||fD ]  }d }| j                         D ]  }	|	j                         r|	j                         }
	 t        d|d|
       | j                  |
d       }g }|D ]'  }|j                         |k(  s|j                  |       ) |syt        ||d      }|D ]8  }|j!                         |k7  r|}t        d|j#                         d	|
        n  |s|j                  |        |S # t$        j&                  $ r%}d }t)        d
|j*                  z         Y d }~d }~ww xY w)Nz%org.freedesktop.Platform.Icontheme.%szorg.gtk.Gtk3theme.%sc                 ^    	 t        | j                               }|S # t        $ r d}Y |S w xY w)Ng#@)floatr   
ValueError)rN   vals     r+   sortrefz*_get_system_theme_matches.<locals>.sortref9  s:    	()C 
  	C
	s    ,,zLooking for theme z in T)keyreversezFound theme ref 'z' in remote z$Error finding themes for flatpak: %s)rB   r
   ry   r   Settingsget_defaultpropsgtk_icon_theme_namegtk_theme_namerR   
get_nodepsr   r   re   appendsortedr`   rJ   r   rS   r   rg   )rU   rb   
theme_refsgtksettings
icon_theme	gtk_themer   r   	theme_refr)   rj   all_refsmatching_refs
listed_refmatching_refrk   s                   r+   _get_system_theme_matchesr   .  s   \F##%DJ,,**,K8;;L;L;`;``J&):):)I)III Y' %)	))+ 	IF  " //+KIdKHI!77TJ ""* 9J!**,4%,,Z89 % !'}'4 P$1 L#,,.$6  ,IAUAUAWYdef+	IB i(K%)N  :: I 	;aiiGHHIs%   2=E+0E+AE++F#>FF#c                 h    g }t               j                  | j                  | j                  d       }|S r4   )rB    list_installed_related_refs_syncr)   refid)parent_pkginforeturn_refsrelated_refss      r+   _get_related_refs_for_removalr   j  s8    K <@@AVAVAOAUAUAEGL r2   c                 f   g }	 t         | j                     }|j                  |       }|Y|j                         }|D ]D  }t	        || j                  | j
                        }|s't        | |      s4|j                  |       F |S # t        $ r"}t        dt        |      z         Y d }~|S d }~ww xY w)Nz"Could not get a list of addons: %s)r   r)   rp   
get_addonsr   rW   _addon_is_compatibler   rK   r   r   )r   matched_addonsaspoolr   addonsaddoninfork   s           r+   _get_addons_for_pkginfor   s  s     N<~,,-00@&&(F 41%9N9NP^PiPij+NDA&--d3	4   <1CF:;;<s$   AB #B 0B 	B0B++B0c                 \   	 |j                         }|j	                         j                         }t        j                  j                         }|j                  |t        |      t        j                  j                         |S # t        $ r t               j                  | |d       }Y w xY wr4   )get_metadataAttributeErrorrB   fetch_remote_metadata_syncget_datadecoder   KeyFilenewload_from_datalenKeyFileFlagsNONE)rj   rN   metadatakeyfiles        r+   _get_metadatar     s    O! ==?!!#Dll G4TD,=,=,B,BCN  O|66{CNOs   B $B+*B+c                    t        | j                  t        j                  j	                  | j
                              }t        |j                  t        j                  j	                  |j
                              }|j                  j                  d      d   }d| }	 |j                  dd      }|| j
                  k7  ry	 |j                         \  }}|D ]  }	|	j                  d      s|	|d|j                   fvr)g }
	 |j                  |	d      }
t        |
      dkD  r|j                  |
v c S 	 |j                  dd	      }|j                  d
d	      }||k7  r y y#  Y xY w# t        j                  $ r&}	 |j                  |	d      g}
n#  Y nxY wY d }~d }~ww xY w# t        j                  $ r
}Y d }~d }~ww xY w)N.r   z
Extension ExtensionOfrN   FversionsversionruntimeApplicationT)r   r)   r
   rF   r   r   r   
rpartition
get_string
get_groups
startswithget_string_listr   rS   r   branch)parentr   parent_meta
child_metaaddon_prefix	ext_pointeo_refgroupslgroupr   rk   child_runtimeparent_runtimes                 r+   r   r     s   w{{/@/@/NOKu||W[[->->u{{-KLJ ::((-a0L\N+I&&}e<V\\! "
 &&(IFA -j$=>> 	"225*EH x=1<<8++
	&11-KM(33M9MN. /5@ K zz 	'225)DE		" zz 		sH   !E" E)4)F%"E&)F"=FFFFF"%G=Gc                 h    t        |       | _        t        d| j                  j                  z         y )Nz?Installer: Calculating changes required for Flatpak package: %s)FlatpakTransactiontransactionr   rt   r   tasks    r+   select_packagesr     s'    )$/D	
KdllN_N_
_`r2   c                 :    t        |       | _        t        d       y )Nz'Installer: Calculating Flatpak updates.)r   r   r   r   s    r+   select_updatesr     s    )$/D	
34r2   c                       e 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dZd Zd Zd Zd Zd Zd Zd Zd ZddZy	)r   c                    || _         t        j                  j                  t	               |j
                        | _        d| _        d| _        d| _	        d | _
        d | _        t        j                         | _        | j                  j                  d| j                          | j                  j                  d| j"                         | j                  j                  d| j$                         | j                  j                  d| j&                         | j                  j                  d| j(                         | j                  j                  d| j*                         | j                  j                  d	| j,                         | j                   j.                  r| j                  j1                  d
       t        j2                  | j4                  d      }|j7                          y )Nr   Freadyznew-operationzoperation-donezoperation-errorzadd-new-remotezend-of-lifedzend-of-lifed-with-rebaseTzflatpak-transaction-thread)r   r   )r   r
   Transactionnew_for_installationrB   cancellabler   
item_countcurrent_counttransaction_readycurrent_fp_progressop_errorr   Eventstart_transactionconnecton_transaction_ready_new_operation_operation_done_operation_error_transaction_add_new_remote
_ref_eoled_ref_eoled_with_rebaseis_addon_taskset_disable_auto_pinr   _transaction_threadr   )r(   r   r   s      r+   r,   zFlatpakTransaction.__init__  sm   	"..CCJLRVRbRbc!&#' !*!2  $*C*CD  $2E2EF  !143G3GH  !2D4I4IJ  !143S3ST  A  !;T=X=XY
 99""11$7!!)A)AHder2   c                 
   	 | j                   j                  dk(  r[| j                  j                  | j                   j                  j
                  | j                   j                  j                  d        nu| j                   j                  dk(  r| j                  j                  | j                   j                  j                         | j                   j                  st        | j                   j                        D ]+  }| j                  j                  |j                                - t        | j                   j                        D ](  }	 | j                  j                  |j                         * ns	 t)               j+                  | j                   j,                        }| j                   j.                  g k7  r| j                   j.                  D ]  }t1        t        j2                  j5                  |            s|D ]  }t)               j7                  |j9                         |j                         | j                   j,                        }|D ]A  }|j                         |k(  s| j                  j                  |j9                         |d        C  | j                  j;                  |d d         n2|D ]-  }| j                  j;                  |j                         d d        / | j                   j                  dk7  r| j                   j<                  l| j                   j<                  j>                  dk7  rItA               D ]<  }	 | j                  j                  |jC                         |j                         d        > 	 | j                  jI                  | j                   j,                         | jK                          y # t        j                  $ rQ}|j                  t        j                  j                   k7  rt#        dt$        d|j&                         Y d }~d }~ww xY w# t        j                  $ r}t#        d|j&                  z          d }~ww xY w# t        j                  $ r3}|j                  t        j                  jD                  k(  rY d }~[ d }~ww xY w# t        j                  $ r}| jG                  |       Y d }~Od }~ww xY w# t        j                  $ r}| jG                  |       Y d }~Qd }~ww xY w)Ninstallremovez#Could not add uninstall for addon 'z': z/Problem checking installed flatpaks updates: %sr   )&r   rH   r   add_installrt   r)   r   add_uninstallr  r   rJ   r   r   rS   r   r
   r   r   addon_formatted_refrg   rB   list_installed_refs_for_updater  initial_refs_to_updateref_is_installedrF   r   list_remote_related_refs_syncrI   
add_updater   kindr   rL   r   on_transaction_errorrunon_transaction_finished)	r(   related_ref
addon_infork   all_updatesrN   installed_refr   r   s	            r+   r  z&FlatpakTransaction._transaction_thread  s   D	)yy~~*  ,,TYY->->-E-E-1YY->->-D-D-13 8+  ..tyy/@/@/F/FGyy..'DTYYEVEV'W Q((66{7M7M7OPQ&=dii>O>O&P %
% ,,:::;K;KL%",,"M"MdiiNcNc"dKyy772=#'99#C#C MC $4GKK4E4Ec4J#K5@ !pM3=<3]3]^k^v^v^x^k^v^v^x^b^g^g^s^s4uL 8D %p+6+A+A+Cs+J,0,<,<,H,HIaIaIcehjn,o%p	!p !% 0 0 ; ;Ct L#M( $/ VC ,,778H$PTUV yy~~)99##/DII4D4D4I4IW4T%>%@ 	&	& ,,889R9R9T9B9M9M9O9=?	& 	)  !6!67 	$$&{  $zz % vv)D)DD $Uhjkjsjs%t u$%> zz JQYYVW  $zz & vv)H)HH ( %	& zz 	)%%a((	)
 zz 	)%%a((	)s   ER+ %O4R+ 9C/P. )BP. +AR+ 9Q"R+ /S P+AP& R+ &P++R+ .QQQR+ "R(5'R#R+ "R##R((R+ +S>SST0TTc                     d}	 |j                         }||j                         }t        d|j                         d|       || j                  j
                  |j                         <   y #  d}Y MxY w)Nz	<unknown>
installingzAdding prior ref version for rw   )get_appdata_versionget_latest_commitr   rJ   r   ref_prior_versions_dict)r(   rN   r   s      r+   save_ref_current_versionz+FlatpakTransaction.save_ref_current_versionF  sm    	--/G//1 	s~~7GQR>E		))#..*:;	"Gs   "A- -A3c                 0   | j                   sA|j                  t        j                  j                  t
        j                  j                  fv ry | j                  j                  | j                  j                  k(  r%| j                  j                  | j                  _	        | j                  s| j                  j                  |d       y | j                   r&| j                  j                  | j                          y | j                  j                  |       y )NT
info_stage)r
  r   r
   rS   ABORTEDr   IOErrorEnum	CANCELLEDr   info_ready_statusSTATUS_NONESTATUS_UNKNOWNr  handle_error)r(   errors     r+   r$  z'FlatpakTransaction.on_transaction_errorV  s    }}zzgmm33S__5N5NOO99&&$))*?*??*.))*B*BDII'%%II""5T":}}		&&t}}5		&&u-r2   c                 t   t               j                  d        | j                  j                  | j                  j                  k(  r'| j
                  r| j                  | j
                         | j                  j                  r| j                  j                          y | j                  j                          y r4   )
rB   drop_cachesr   rH   UPDATE_TASKr
  r$  error_messagecall_error_cleanup_callbackcall_finished_cleanup_callbackr6   s    r+   r&  z*FlatpakTransaction.on_transaction_finishedf  ss      & 99>>TYY222t}}%%dmm499""II113II446r2   c           	         d| j                   z  }|j                         dz  |z  }t        j                  | j                  |z  |z   dz        }| j
                  j                  rmt        j                  t        j                  | j
                  j                  | j
                  j                  ||j                         |j                                y y )Ng      ?g      Y@)r  get_progressmathfloorr  r   client_progress_cbr	   threads_add_idler   PRIORITY_DEFAULTrt   get_is_estimating
get_status)r(   progresspackage_chunk_sizepartial_chunkactual_progresss        r+   on_transaction_progressz*FlatpakTransaction.on_transaction_progressr  s     4??2!..058<NN**t'9'9<N'NR_&_ch%hi99''  !6!6!%!=!=!%!2!2!0!)!;!;!=!)!4!4!68 (r2   c                 ^    |j                  d       |j                  d| j                         y )Ni  changed)set_update_frequencyr  rO  )r(   r   oprK  s       r+   r  z!FlatpakTransaction._new_operation~  s&    %%c*D$@$@Ar2   c                    |j                   t        j                  j                  k(  ry| j                  j
                  | j                  j                  k(  r(|j                   t        j                  j                  k(  ry|| _
        | j                  |d |       | j                  j
                  | j                  j                  k(  S )NFT)r   r   r5  r6  r   rH   UNINSTALL_TASKr
   rS   r   r
  log_operation_resultr>  )r(   r   	operationr;  detailss        r+   r  z#FlatpakTransaction._operation_error  s     ::22299>>TYY555%**HcHc:c!!)T59 yy~~!6!666r2   Nc                     | j                  ||       | xj                  dz  c_        | j                  | j                  k  ry y )Nr   )rV  r  r  )r(   r   rW  commitresultr   s         r+   r  z"FlatpakTransaction._operation_done  s=    !!)V4a/ 0r2   c                 
   d| _         	 t               }d}d}| j                  j                         D ]0  }t        j
                  j                  |j                               }|j                         }|t        j                  j                  k(  r^||j                         z  }||j                         z  }| j                  |       | j                  | j                  j                   |       |t        j                  j"                  k(  r|j%                  |j'                         |j)                         |j+                         |j-                         d       }||j                         z  }| j                  |       | j                  | j                  j.                  |       r|j%                  |j'                         |j)                         |j+                         |j-                         d       }|j                         }	|j                         }
||j                         z  }||
|	z
  z  }| j                  |       | j                  | j                  j0                  |       3 || j                  _        |dkD  r|| j                  _        nt7        |      | j                  _        tC        | j                  j                         dkD  r?tE        d       | j                  j                   D ]  }tE        |jG                                 tC        | j                  j.                        dkD  r?tE        d       | j                  j.                  D ]  }tE        |jG                                 tC        | j                  j0                        dkD  r?tE        d       | j                  j0                  D ]  }tE        |jG                                 tC        | j                  j                   | j                  j.                  z   | j                  j0                  z         | _$        | j                  jJ                  | j                  _        | jL                  | j                  _'        | jP                  | j                  _)        | jT                  | j                  _+        | j                  jY                          | jZ                  j]                          | j                  j^                  ja                         ryy# t:        $ rL}| j                  j<                  | j                  _        | j                  jA                  |d       Y d }~yd }~ww xY w)NTr   r2  FzFor install:zFor removal:zFor updating:)1r  rB   r   get_operationsr
   rF   r   get_refget_operation_typeTransactionOperationTypeINSTALLget_download_sizeget_installed_sizer0  _add_to_listr   
to_install	UNINSTALLr   r\   r   r`   r   	to_remove	to_updatedownload_sizeinstall_sizeabs
freed_sizerK   STATUS_BROKENr7  r:  r   r   rJ   r  	STATUS_OK_confirm_transactionconfirm_cancel_transactioncancel_execute_transactionexecutecall_info_ready_callbackr  waitr  is_cancelled)r(   r   rU   dl_size	disk_sizerS  rN   op_typer   current_installed_sizenew_installed_sizerk   s               r+   r  z'FlatpakTransaction.on_transaction_ready  s   !%3	\FGI&&557 !@kk''

5//1g>>FFFr3355G!6!6!88I11#6%%dii&:&:C@ @ @ J JJ!33CLLN47LLN47LLN47NN4D48	:D
 !8!8!::I11$7%%dii&9&93?!33CLLN47LLN47LLN47NN4D48	:D .2-D-D-F*)+)>)>)@&r3355G!36L!LLI11$7%%dii&9&93?C!@F '.DII#1})2		&'*9~		$ tyy##$q(.!yy++ (cnn&'(tyy""#a'.!yy** (cnn&'(tyy""#a'/"yy** (cnn&'( dii22TYY5H5HH499K^K^^_&*ii&9&9		# 55		33		 55				**,##%99  --/A  	*.))*A*ADII'II""1"6		s   JS, ,	U5AT<<Uc           
          |t         j                  j                  k(  rd}n"|t         j                  j                  k(  rd}nd}t	        d|d|d|d|       y)	NzThe remote has additional apps.z3The remote has runtimes needed for the application.zReason unknownzAdding new remote 'z' (z) for rw   T)r
   TransactionRemoteReasonGENERIC_REPORUNTIME_DEPSr   )r(   r   reason_codefrom_idsuggested_remote_namer!   r   reasons           r+   r  z.FlatpakTransaction._transaction_add_new_remote  sQ    '99FFF6FG;;HHHJF%F:OQTV]_efgr2   c                 &    t        |d|d       y )Nz is end-of-life (EOL) ())r   )r(   r   rN   r  rebases        r+   r  zFlatpakTransaction._ref_eoled  s    sF;<r2   c                    t        |d|d       |5	 t        d|z         |j                  ||d |       |j                  |       yt        d       y# t        j                  $ r"}t        d|j                  z         Y d }~yd }~ww xY w)Nz is end-of-life (EOL): (r  zReplacing with %sTz"Problem adding replacement ref: %sFz+No updated ref to use, using the EOL'd one.)r   
add_rebaser  r   rS   r   rg   )r(   r   r)   rN   r  rebased_to_refprev_idsrk   s           r+   r  z)FlatpakTransaction._ref_eoled_with_rebase  s    V<=%(>9:&&v~tXN))#.
 	:; :: :QYYFGs   3A B
(BB
c                     |j                         }|D ]%  }||j                         k(  st        d|z          y  |j                  |       y )Nz"Skipping %s, already added to task)rJ   r   r   )r(   ref_listrN   ref_strexisting_refs        r+   rd  zFlatpakTransaction._add_to_list  sM    .."$ 	L,1133:WDE	
 	r2   c                 :   t        | j                  j                  | j                  j                  z   | j                  j                  z         }d}|dk(  rt        d       y| j                  j                  | j                  j                  | j                  j                  fv r|dkD  rd}nv| j                  j                  | j                  j                  k(  rIt        | j                  j                        dk(  s%|t        | j                  j                        z
  dkD  rd}|ryt        d | j                  | j                  j                        }|j                         }|j                          |j                          |t         j"                  j$                  k(  S y)NFr   z.No work to perform now - are you online still?r   T)r   )r   r   re  rg  rh  r   rH   INSTALL_TASKrU  r>  r  r   parent_windowr%  hidedestroyr   ResponseTypeOK)r(   total_count
additionaldiaress        r+   ro  z'FlatpakTransaction._confirm_transaction  s3   
 $))..1D1DDtyyGZGZZ[
!BC 99>>dii44dii6N6NOOT_bcTcJYY^^tyy4444993349kCPTPYPYPpPpLq>quv=v!
&tTYYtyy?V?VWC'')CHHJKKM#**----r2   c                     | j                   j                  j                          | j                  j	                          y r4   )r   r  rr  r  setr6   s    r+   rq  z&FlatpakTransaction._cancel_transaction4  s*    		$$&""$r2   c                    | j                   j                  j                         ry| j                   j                  Sd| j                   _        t        j                  | j                   j                  | j                   j                  ddd       n*t        j                  | j                  | j                          | j                  j                          y )NFTr   z : )r   r  rw  rF  
has_windowr   r   rt   _show_progress_windowr  r  r6   s    r+   rs  z'FlatpakTransaction._execute_transaction8  s    99  --/99''3#'DII MM$))66		8I8I1dTYZMM$44dii@""$r2   c                 N    t        | j                        }|j                          y r4   )r   r   present)r(   r   progress_windows      r+   r  z(FlatpakTransaction._show_progress_windowD  s    /		:!r2   c                 6    | j                   j                         S r4   )r   r]  r6   s    r+   r]  z!FlatpakTransaction.get_operationsH  s    ..00r2   c                    t         j                   j                         j                  d      }t        j                  j                  |j                               }| j                  j                  |j                            }d}|j                         t        j                  j                  t        j                  j                  fv ry	 t               j                  |j!                         |j#                         |j%                         |j'                         d       }|j)                         }||j+                         }nd}|[|d|j!                         j.                  dt        j0                  |j                               d|j#                         d|d|}
ngd||j!                         j.                  t        j0                  |j                               |j#                         ||j2                  |j4                  fz  }
t7        d|
z         | j                  j8                  j;                  |
       y # t,        $ r}	Y d }	~	d }	~	ww xY w)Nz%F::%Tz<none>removedz::z$%s::%s::%s::%s::%s::FAILED: (%d): %szLogging: %s)datetimenowstrftimer
   rF   r   r^  r   r/  rJ   r_  r`  ra  UPDATErB   r   r\   r   r`   r   r-  r.  rK   
value_nick$transaction_operation_type_to_stringr   rg   r   transaction_logr   )r(   rW  r[  r;  log_timestamp	basic_refold_versionnew_versionr   rk   	log_entrys              r+   rV  z'FlatpakTransaction.log_operation_resultK  s    ))--/88BKK%%i&7&7&9:	ii77	8L8L8NO'')g.N.N.V.VX_XxXxXX  .A  A!|55i6H6H6J6?6H6H6J6?6H6H6J6?6J6J6L6:	<
 #668&"&"8"8":K $K=4A/8/A/A/C/N/N/6/[/[\e\x\x\z/{/8/A/A/C/:/:<I ?-/8/A/A/C/N/N/6/[/[\e\x\x\z/{/8/A/A/C/:/4zz/4}}B> >I 	mi'(		!!((3-  s   	A7H; ;	I
Ir4   )r8   r9   r:   r,   r  r0  r$  r&  rO  r  r  r  r  r  r  r  rd  ro  rq  rs  r  r]  rV  r=   r2   r+   r   r     sl    :L'\F . 
7
8B7$Rh	= :%
%"1(4r2   r   c                    t               }g }	 |j                  d       }|D ]"  }t        |      }	 |j                  | |          $ |S # t        j                  $ r}t	        d       g cY d }~S d }~ww xY w# t        $ r Y _w xY w)Nz7Installer: flatpak - could not get updated flatpak refs)rB   r  r   rS   r   rO   r   ro   )rh   rU   updatedupdatesrk   rN   rs   s          r+   list_updated_pkginfosr  u  s    \FG77=
   %	NN5?+	 N :: FG	  		s.   A A5A2A-'A2-A25	B Bc                      t               } | j                  t        j                  j                  d       sg S t               S r4   )rB   list_installed_refs_by_kindr
   r]   APPr   )rU   s    r+   get_updated_theme_refsr    s1    \F--goo.A.A4H	$&&r2   c                    | j                  d      j                         D ]h  }| |   }|j                  d      d   dv r&||j                  k(  s.||j                  |k(  s@|c S ||j
                  k(  sT||j                  |k(  sf|c S  y )NfrQ   r   )r   app)get_subset_of_typekeys	partitionr   r)   r   )rh   stringr)   r   	candidates        r+   find_pkginfor    s    '',113 !#J	C #'99(>Y%5%5%?$$y~~%~!1!1V!;  ! r2   c           	         t               }	 |j                         D ]  }|j                         }|j                  d       D ]Y  }|j	                         |k(  s	 t
        |   }t        d|j                         z         t        | |||j                         d       [  y #  d }Y DxY w# t        j                  $ r }t        d|j                         Y d }~y d }~ww xY w)NzGenerate uncached for: %sTz:Installer: flatpak - could not check for uncached pkginfos)rB   rR   r   r|   rI   r   r   rJ   rf   r    r   rS   r   rg   )rh   rU   r)   rj   rN   r   rk   s          r+   generate_uncached_pkginfosr    s    \FV))+ 	TF //+K11$7 
T >>#{2$$[1 58HHI)%sFNN<LdS
T	T$# :: VI199UUVs0   A
B( 	B!=B( B%#B( (C;CCc                 ~    t               }	 |j                  | |||d       }|ry	 y# t        j                  $ r Y yw xY w)NTF)rB   r   r   rS   )r#  r   rb   r   rU   r   s         r+   _ref_is_installedr    sY    \F
''(,(,(.(,	.  
  :: s   & <<c                     t        | j                         | j                         | j                         | j	                               S r4   )r  r\   r   r`   r   rM   s    r+   r   r     s3    S\\^ \\^ \\^ ^^-/ /r2   c                 n    t        | j                  | j                  | j                  | j                        S r4   )r  r#  r   rb   r   )rt   s    r+   pkginfo_is_installedr    s*    W\\$\\$\\$^^- -r2   c                      t               } g }	 | j                         D ]  }|j                  t        |              	 |S # t        j
                  $ r#}t        d|j                         g }Y d }~|S d }~ww xY w)Nz0Installer: flatpak - could not fetch remote list)rB   rR   r   r   r   rS   r   rg   )rU   rV   r)   rk   s       r+   rR   rR     ss    \FG))+ 	6FNN,V45	6 N	 :: ?KN	s   /A   A6A11A6c                 `    t        j                  t        | ||f      }|j                          y r   )r   r   _pkginfo_from_file_threadr   rh   filecallbackr   s       r+   get_pkginfo_from_filer    s&    %>eTS[E\]F
LLNr2   c           
         t               }|j                         }|t        d       y d }d }d }t        |      5 }|j	                         }	|	j                  d      }
t        j                  |
      }d}	 t        j                         }|j                  |t        j                  j                        r|j                  dd      }|j                  dd      }	 |j                  dd      }t#        ||      }|rU|rSt%        j&                  |t$        j(                  j*                  t%        j,                         |	      }t        d
|z         nO	 t        d       |j/                  |d       }|j1                  d        |j3                         }d}t        d|z         |r	 |jA                  |d       }	 tB        |jE                            }tM        | |||jO                         d      }t        j                         }|j                  |t        j                  j                        r	 |j                  dd      }|rjtQ        jR                  |d      }tU        jV                  d      }|5 }|jY                  d      D ]  }|j[                  |        	 d d d        t]        |j^                        }|rd}ta        |j^                        }ta        |      jb                  }|je                  d       D ]8  }|jO                         |k(  s|jg                         r(t        d|z         d} n |sYt        d|d|d       ddd||j^                  g}ti        jj                  |      }|jm                         }|j1                  d        to        jp                  |j^                         d d d        t        jr                  ||t        jt                         y # t        j                  $ r?}|j                  t        j                  j                   k(  rt        d       d }Y d }~8d }~ww xY w# t        j                  $ r}|j                  t4        j6                  j8                  k7  r8t        d|j:                  z         t=        j>                  |j:                         nt        d|j:                  z         Y d }~d }~ww xY w# t        j                  $ rB}t        d|j:                  z         t=        j>                  |j:                         Y d }~vd }~ww xY w# tF        $ r0 tI        |      }tK        | |||t%        j,                                Y w xY w# t        j                  $ r d }Y 5w xY w# 1 sw Y   xY w# t        j                  $ rB}t        d|j:                  z         t=        j>                  |j:                         Y d }~)d }~ww xY w# 1 sw Y   3xY w)Nz7Installer: flatpak - no valid .flatpakref path providedzutf-8FzFlatpak RefNameUrlBranchzYInstaller: flatpak - flatpakref file doesn't have a Branch key, maybe nightly or testing.)rj   r#  rb   r   r   zKInstaller: flatpak - using existing remote '%s' for flatpakref file installzEInstaller: flatpak - trying to install new remote for flatpakref fileTz&Installer: flatpak - added remote '%s'z1Installer: could not add new remote to system: %szInstaller: %sz8Installer: flatpak - could not parse flatpakref file: %sRuntimeRepo)stream)delete   )
chunk_sizezDInstaller: flatpak - runtime remote '%s' already in system, skippingz3Installer: Adding additional runtime remote named 'z' at ''flatpak
remote-add--fromz1Installer: could not process .flatpakref file: %s)priority);rB   get_pathr   openreadencoder   Bytesr   load_from_filer   r   r   rS   r   KeyFileErrorKEY_NOT_FOUNDrX   r
   	RemoteRefr]   r  ry   install_ref_filer=  rL   r   	DBusErrorACCESS_DENIEDrg   r   show_flatpak_errorget_remote_by_namer   r   ro   r{   rl   rf   r    requestsgettempfileNamedTemporaryFileiter_contentwrite_get_repofile_repo_urlr   r   stemrR   r$   
subprocessPopenrv  osunlinkr   rH  )rh   r  r  rU   pathrN   rt   rj   r  contentsbgb
new_remotekfr   r!   r   rk   r)   ri   rfdchunkruntime_repo_urlexistingruntime_remote_namecmd_vadd_repo_procretcodes                                r+   r  r    s   \F==?D|FG
CGK	d t6q668OOG$ZZ]
'	2B  t'8'8'='=>}}]F;mmM59&]]=(CF 6fcBK!++181D1D181I1I1K3915	7C
 fittu>de$55b$?**40&)&9&9&;%)
EST B622;E^!&//"34E 0uc6>>CSUZ[
 \\^$$T4+<+<+A+AB# mmM=I $LLT:'::%H! 0R)*3)G 0 "00
 ,B$))+L(+',H#'		?D26s)../ +1*=*=d*C *#)>>#37G#GPVPfPfPh$()o  sF  *F  %G/3H$)* $, $i|  O  &P  !Q)2)5)1)<)-	)4 1;0@0@0G*7*<*<*> & 2 24 8		$)),ct6l 	MM(Gd.C.CDM zz &vv!2!2!@!@@xy!%&.  :: >66S]]%@%@@ !TWXW`W`!`a#66qyyA 199!<=> zz 	2KaiiWX&&qyy11	2   ^ LE#E5&&'BZBZB\]^  :: #"#0 0F :: 6H199TU**199556et6 t6s  9W4A"SO)A#SAP)WU>2T	AU>&U82U>*)U1A2U>U>BU>P&'4P!S!P&&S)R><A7R93S9R>>ST7TWTW5UU>UU>U.*U>-U..U>1U;	6U>>W7WWWWW c                 `    t        j                  t        | ||f      }|j                          y r   )r   r   _remote_from_repo_file_threadr   r  s       r+   add_remote_from_repo_filer
  j  s'    %B%QUW_I`aF
LLNr2   c                    	 t        |j                               }t	               }d}t        |      }|r>|j                  d       D ]*  }|j                         |k(  s|j                         r(d} n |rt        j                  ||d       y ddd|j                  |g}t        j                  |t        j                        }	|	j                         \  }
}d	|j!                         v rt        j                  ||d
       y |	j"                  dk7  r*d|j!                         vrt        j                  ||d       y 	 |j%                  d        | j+                  |       y # t        $ r t        d       Y y w xY w# t&        j(                  $ r Y Aw xY w)Nz8Installer: flatpak - no valid .flatpakrepo path providedFTexistsr  r  r  )stderrzError.AccessDeniedrr  r   zalready existsr;  )r   r  rG   r   rB   r  rR   r    r$   r   r   r  r  r  PIPEcommunicater   
returncoder=  r   rS   force_new_cache_async)rh   r  r  r  rU   r  r!   r)   r  r  stdoutr  s               r+   r	  r	  n  s{   DMMO$
 \F H
 
&C
))$/ 	F~~3&v/E/E/G	
 42YY	E $$U:??CM"..0NFFv}}.421$)9)P414  
)e  GH^ :: s#   E 9E6 E32E36FFc                 (   t        j                         }	 |j                  t        |       t         j                  j
                        r|j                  dd      }|S 	 y # t         j                  $ r}t        |j                         Y d }~y d }~ww xY w)NzFlatpak Repor  )
r   r   r  r   r   r   r   rS   r   rg   )r  r  r!   rk   s       r+   r  r    sx    	BSY(9(9(>(>?--6CJ @  :: QYYs   AA B2BBz(ssasta{sv})c                 f   t         j                  j                  | j                               }|j	                  d      }	 |j                  d       \  }}t        j                  j                  t        |d      }|S # t        j                  $ r"}t        d|j                  z         Y d }~y d }~ww xY w)NdeployzCould not load deploy data: %sF)r   Filenew_for_pathget_deploy_dir	get_child
load_bytesr   rS   r   rg   Variantnew_from_bytes#FLATPAK_DEPLOY_DATA_GVARIANT_FORMAT)r*  
deploy_dir	data_filer  etagrk   deploy_datas          r+   _load_deploy_datar"    s    &&}'C'C'EFJ$$X.I"--d3$
 ,,--.QS[]bcK :: -		9:s    A; ;B0B++B0c                     t               j                  | j                  | j                  | j                  | j
                  d       }|sy |j                         S r4   )rB   r   r#  r   rb   r   r-  )rt   r   s     r+   _get_deployed_versionr$    sI    <))',,*1,,*1,,*1..*.	0D ##%%r2   r4   )Irx   r   r  rD  pathlibr   r  r  r  r  girequire_versiongi.repositoryr   r   r   r   r	   r   r
   pkgInfor   r   r   r   r   miscr   r   r   r   r   r?   rB   ALIASESr   rO   rX   rc   rl   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r  rR   r  r  r
  r	  r  #FLATPAK_DEPLOY_DATA_GVARIANT_STRINGVariantTyper  r"  r$  r=   r2   r+   <module>r.     s           	 	   5%     65 ! < <	By%(% $  @ + + " "H  	F&$+.8&'P8> :x*8ta
5
Y4 Y4v*'V,"/-CEJ5*n 
 '5 #&6d&6&67Z&[ #
&%	s   "D8 8D<