
    Sizg:                         d dl Z d dlZd dlZ ej                  dd       d dlmZmZ ddlmZm	Z	m
Z
mZ d ZdZd Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Zy)    NXmlbz2.0)GLibr      )debug_querydebugwarnprint_timingc                     d}| d k(  ry | }d|v rQ|j                  d      \  }}|dk(  r|dz  }|S |dk(  r|dz  }|S |dk(  r|dz  }|S |d	k(  r|d
z  }|S |dk7  r|d|z   z  }|S )NF@cyrillicz-Cyrl
devanagariz-Devalatinz-Latnshawz-Shaweuro-)split)localehas_variantretvariants       E/usr/lib/python3/dist-packages/mintcommon/installer/appstream_pool.pylocale_to_bcp47r      s    K~
C
czyy~Wj 7NC J $7NC J 7NC J 7NC J 3= CJ    c                       e Zd Zd Zy)Iconc                      y N )self	icon_nodes     r   __init__zIcon.__init__&   s    r   N)__name__
__module____qualname__r!   r   r   r   r   r   %   s    r   r   c                       e Zd ZdZd Zy)Image)widthheightscaleurl	is_sourcec                 t   	 t        |j                  d            | _        t        |j                  d            | _        	 t        |j                  d            | _        |j                  d      dk(  | _        |j                         | _        y # t        $ r d| _        d| _        Y hw xY w#  d| _        Y WxY w)Nr(   r'   r   r)   r   typesource)	intget_attrr(   r'   	TypeErrorr)   r+   get_textr*   )r   img_nodes     r   r!   zImage.__init__2   s    	h//9:DKX..w78DJ	X..w78DJ "**62h>$$&  	DKDJ		DJs   >B B, B)(B),	B7N)r"   r#   r$   	__slots__r!   r   r   r   r&   r&   )   s    I'r   r&   c                   0    e Zd ZdZd Zd ZddZd Zd Zy)	
Screenshot)captionimagessource_imagess_nodec                    || _         i | _        d | _        || _        |j	                  dd      }|D ]V  }t        |      }|j                  r|| _        "| j                  |j                  |j                        }|| j                  |<   X y )Nimager   )
r7   r8   r9   r:   queryr&   r+   make_keyr'   r)   )r   r:   r7   r8   r<   imgkeys          r   r!   zScreenshot.__init__L   s     w* 	#E,C}}$'!--		3995C"DKK	#r   c                     | d| S )Nxr   )r   r'   r)   s      r   r>   zScreenshot.make_key[   s    %!!r   c                     | j                  ||      }	 | j                  |   S # t        $ r | j                  |||      cY S w xY wr   )r>   r8   KeyError_get_closest_image)r   r'   r(   r)   r@   s        r   	get_imagezScreenshot.get_image^   sM    mmE5)	A;;s## 	A**5&%@@	As   # AAc                     d }d}| j                   j                         D ]'  \  }}t        |j                  |z
        }||k  s$|}|}) |S )Ni?B )r8   itemsabsr'   )	r   r'   r(   r)   closestclosest_diffr@   r?   w_diffs	            r   rE   zScreenshot._get_closest_imagee   sX    ))+ 	&HCU*+F$%	& r   c                     | j                   S r   )r9   r   s    r   get_source_imagezScreenshot.get_source_imager   s       r   N)r   )	r"   r#   r$   r4   r!   r>   rF   rE   rO   r   r   r   r6   r6   D   s#    I#"A!r   r6   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 Zd Zd Zd Zd Zd Zd Zd Zd ZddZy	)Package)	nameremote_nameremoteappstream_dirxbnodekindverified	bundle_idkeywordsc                     || _         || _        |j                         | _        |j	                         | _        || _        | j                  j                  d      | _        d | _	        d | _
        g | _        y )Nr-   )rR   rT   get_namerS   get_appstream_dirrU   rV   r0   rW   rX   rY   rZ   )r   rR   rT   rV   s       r   r!   zPackage.__init__   sb    	!??,#557KK((0	r   c                     | j                   S r   )rR   rN   s    r   r\   zPackage.get_name   s    yyr   c                     d }	 |j                  |      }|S # t        j                  $ r&}t        d| d|j                          Y d }~|S d }~ww xY w)NzCould not make query:  - )query_firstr   Errorr   message)r   nodexpathresultes        r   query_for_nodezPackage.query_for_node   s^    	H%%e,F  zz 	H0s199+FGG	Hs    AAAc                 N    | j                  ||      }||j                         S d S r   )rh   r2   )r   rd   re   str_nodes       r   query_stringzPackage.query_string   s-    &&tU3&.&:x  "DDr   c                 Z    | j                  | j                  d      }|| j                  }|S )NrR   )rk   rV   rR   )r   rR   s     r   get_display_namezPackage.get_display_name   s+      f5<99Dr   c                 :    | j                  | j                  d      S )Nsummaryrk   rV   rN   s    r   get_summaryzPackage.get_summary   s      i88r   c                 @   | j                  | j                  d      }|`	 |j                  t        j                  j
                  t        j                  j                  z  t        j                  j                  z        S y # t        j                  $ r
}Y d }~y d }~ww xY w)Ndescription)
rh   rV   exportr   NodeExportFlagsFORMAT_MULTILINEFORMAT_INDENTONLY_CHILDRENr   rb   )r   	desc_noderg   s      r   get_descriptionzPackage.get_description   s    '']C	  ''((99((667((6678 8  :: s   AB   BBNc                 B    | j                  | j                  d| d      S )Nzurl[@type='z']rp   )r   urlkinds     r   get_urlzPackage.get_url   s"      G9B.GHHr   c                 $    | j                  d      S )Nhomepager}   rN   s    r   get_homepage_urlzPackage.get_homepage_url   s    ||J''r   c                 $    | j                  d      S )Nhelpr   rN   s    r   get_help_urlzPackage.get_help_url   s    ||F##r   c                     | j                  | j                  d      }|y |j                  dd      }d}d }|D ]5  }t        |j	                  d            }||kD  s#|}|j	                  d      }7 |S )Nreleasesreleaser   	timestampversion)rh   rV   r=   r/   r0   )r   releases_noder   newest_timestampnewest_versionr   r   s          r   get_versionzPackage.get_version   s    ++DKKD  &&y!4 	=GG,,[9:I++#, !(!1!1)!<		= r   c                     d }| j                   H| j                  | j                  d      }|!| j                  | j                  d      | _         ||| _         | j                   S )Nbundle[@type='flatpak']zcustom/bundle[@type='flatpak'])rY   rk   rV   )r   rY   s     r   get_bundle_idzPackage.get_bundle_id   s^    	>>!))$++7PQI !%!2!24;;@`!a$!*~~r   c                    | j                   /	 | j                  j                  d      d u| _         | j                   S | j                   S #  	 | j                  j                  d      d u| _         n#  d| _         Y nxY wY | j                   S xY w)NzJcustom/value[(@key='flathub::verification::verified') and (text()='true')]zLmetadata/value[(@key='flathub::verification::verified') and (text()='true')]F)rX   rV   ra   rN   s    r   get_verifiedzPackage.get_verified   s    == 
* $ 7 7`!! }}t}}**$(KK$;$;f%!%"DM*$)DM}}s#   "A B	"A.-B	.	A97B	c                    d }	 | j                   j                  d      }| j                  |d      }|	 | j                  | j                   d      }|	 | j                  | j                   d      }|S |S #  Y FxY w#  Y .xY w#  Y |S xY w)N	developerrR   developer_nameproject_group)rV   ra   rk   )r   dev_namedeveloper_nodes      r   get_developerzPackage.get_developer   s     	![[44[AN((@H ,,T[[:JK ,,T[[/J x	

s"   -A3 A: B 3A7:A>Bc                    t        | j                        dk(  rb| j                  | j                  d      }|g S |j	                  dd      }|D ]+  }| j                  j                  |j                                - | j                  S )Nr   rZ   keyword)lenrZ   rh   rV   r=   appendr2   )r   kw_noderZ   r   s       r   get_keywordszPackage.get_keywords	  sy    t}}"))$++zBG	}}Y2H# 9$$W%5%5%789 }}r   c                     | j                  | j                  d      }|g S |j                  dd      }g }|D ]/  }| j                  |d      }|j	                  t        ||             1 |S )Nscreenshots
screenshotr   r7   )rh   rV   r=   rk   r   r6   )r   r:   r   r   screenshot_noder7   s         r   get_screenshotszPackage.get_screenshots  sr    %%dkk=A?ImmL!4* 	=O''CGJJz/7;<	= 
r   c                    | j                  | j                  d      }g }	 |j                  d| j                   dd      }g }|D ]<  }| j                  |d      }t        || j                  |      }|j                  |       > |S # t        j
                  $ r1}t        d| j                   d|j                          g cY d }~S d }~ww xY w)Nz..z5component[@type='addon']/extends[starts-with(text(),'')]/..r   z.Could not query for addons or there are none: r`   id)rh   rV   r=   rR   r   rb   r   rc   rk   rQ   rT   r   )r   	root_nodeaddon_nodesrg   addons
addon_noderR   	addon_pkgs           r   
get_addonszPackage.get_addons%  s    ''T:		#//G		{RXY[\K % 	%J$$Z6Ddkk:>IMM)$	%
  zz 	HSVWXW`W`VabcI	s    B C	&C>C	C	c                 "   d }	 | j                   j                  dd      }g }|D ]!  }|j                  |j                                # 	 |S # t        j
                  $ r0}t        d| j                   d|j                          Y d }~|S d }~ww xY w)Nzlaunchable[@type='desktop-id']r   z3Could not query for launchables or there are none: r`   )	rV   r=   r   r2   r   rb   r   rR   rc   )r   launchablesl_nodesrd   rg   s        r   get_launchableszPackage.get_launchables9  s    
	ikk''0!G K 4""4==?34
  zz 	iMdii[X[\]\e\e[fghh	is   AA B%B		Bc           	      2   d }d }d }d }	 | j                   j                  dd      }d }t        ||d      }|D ]  }	|	j                  d	      }
|
d
}
|	j                  d      }|dk(  r|	j                         }n|dv r|	j                         }|j                  d      r"t        j                  j                  |      r_|}n\| j                  j                          d|
 d|
 d| }t        j                  j                  |      r|}n|dk(  r|	j                         }|xs |xs |}|s|
st!        |
      |k\  s|c S  |xs | j
                  S # t        j                  $ r2}t	        d| d| j
                   d|j                          Y d }~y d }~ww xY w)Niconr   zNo icon size z found or unable to query: r`   c                 @    | j                  d      }|t        |      S y)Nr(   i  )r0   r/   )ir(   s     r   
get_heightz$Package.get_icon.<locals>.get_heightW  s#    ZZ)F!6{"r   F)r@   reverser(   @   r-   rT   )cachedlocal/z/icons/rB   stock)rV   r=   r   rb   r   rR   rc   sortedr0   r2   
startswithospathexistsrU   get_pathr/   )r   sizeicon_to_useremote_iconlocal_exists_icon
theme_iconiconsrg   r   r   test_heightrW   text	icon_paths                 r   get_iconzPackage.get_iconJ  s    
	KK%%E	
 u*e< 	'D--1K" ==(D x"mmo,,}}??3'ww~~d+,0)#'#5#5#>#>#@"AUVWbVccdeidj kIww~~i0%.
!]]_
$H(9H[K3{#3t#;&&3	': 'dii'O zz 	-v-HSVWXW`W`Vabc	s   E F$(FFr   )r   )r"   r#   r$   r4   r!   r\   rh   rk   rm   rq   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   rQ   u   sj    
I	E
9I($" 4("0(r   rQ   c                   (    e Zd Zd Zd Zed        Zy)Poolc                 d   || _         | j                   j                         | _        d | _        i | _        d | _        g | _        t               }t        dt        t        j                               z         t        j                         D ]  }d|v r|dk(  r|j                  |       |j                  |j                  dd             |j                  |j                  dd      j                                |j                  |j                  dd             |j                  |j                  dd      j                                 t        |      dk(  rg d}|D cg c]  }t!        |       c}| _        t        dt        | j                        z         | j#                          y c c}w )	NzReported languages: %s.C_r   r   )zen-usenen_USen_uszen-USzAppstream languages: %s)rT   r]   rU   as_poolpkg_hash_to_as_pkg_dict	xmlb_silolocale_variantssetr   strr   get_language_namesaddreplacelowerr   r   _load_xmlb_silo)r   rT   tmprR   vs        r   r!   zPool.__init__}  s[   ![[::<')$!e 	&T-D-D-F)GGH++- 
	4Dd{s{GGDMGGDLLc*+GGDLLc*0023GGDLLc*+GGDLLc*0023
	4 s8q=<C<?@q 2@'#d.B.B*CCD  As   !F-c                    t        d|j                  z         | j                  y d }	 | j                  |j                     }t        d       |S # t
        $ r[ d }|j                  }	 |t        k(  rt	 | j                  j                  d|j                   d      }n# t        j                  $ r3}| j                  j                  d|j                   d      }Y d }~nmd }~ww xY w| j                  j                  d|j                   dd      }|9|D ]4  }|j                  d	      }|j                         |j                  k(  s2|} n n+# t        j                  $ r}t        d
       Y d }~nd }~ww xY w|9t        d|j                  z         t        |j                  | j                  |      }Y nw xY w||| j                  |j                  <   |S )NzLookup appstream package for %sz Found existing appstream packagez components/component/id[text()='z']/..z.desktop']/..z,components/component/id[starts-with(text(),'r   r   r   z Could not find appstream packagez$Found matching appstream package: %s)r   refidr   r   pkg_hashrD   rW   KIND_APPra   rR   r   rb   r=   r2   rQ   rT   )	r   pkginfopackage	base_noderW   rg   
base_nodesrd   rY   s	            r   lookup_appstream_packagezPool.lookup_appstream_package  s   5EF>>!"	H2273C3CDG:;N 	HI<<D@8#$(NN$>$>>w||nER%	  :: $(NN$>$>>w||nMZ%	
 "&!5!5Fw||nTZ["J "-$. &D(,(8(89R(SI(113w}}D,0	 %	&
 :: @>??@ $BW]]RS!',,YG=	H@ =DD(()9)9:sl   %A F4(	E2)BEC"/)CEC""A"EE
F4E3E.)F4.E33>F43F4c                    | j                   j                  d      }t        j                         }	 |j	                  |t        j
                  j                  d       }t        j                         }| j                  D ]  }|j                  |        |j                  |       |j                  t        j                  j                  t        j                  j                  z  d       | _        y # t         j"                  $ rD}t%        d| j&                  j)                         d|j*                         d | _        Y d }~y d }~ww xY w)Nzappstream.xmlz.Could not mmap appstream xml file for remote 'z': )rU   	get_childr   BuilderSource	load_fileBuilderSourceFlagsNONEBuilderr   
add_localeimport_sourcecompileBuilderCompileFlagsSINGLE_LANGSINGLE_ROOTr   r   rb   r   rT   r\   rc   )r   xml_filer.   r   builderr   rg   s          r   r   zPool._load_xmlb_silo  s    %%//@##%	"""8T-D-D-I-I4PCllnG.. +""6*+!!&)$__((44t7O7O7[7[[DN zz 	"DKKL`L`Lbdedmdmno!DNN	"s   B<C. .E:E  EN)r"   r#   r$   r!   r   r	   r   r   r   r   r   r   |  s"    !F.` " "r   r   )r   r   girequire_versiongi.repositoryr   r   miscr   r   r   r	   r   KIND_RUNTIMEr   r   r&   r6   rQ   r   r   r   r   <module>r      sr     	 	   65 ! $ 8 8* ' '6/! /!bE( E(Nd" d"r   