+
    Ki#  c                   s    R t ^ RIt^ RIHt ^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt RtRtR	 tR
 tR tR tR R ltR tR R ltR R ltR R ltR tR tR tR tR tR tR# )zHandle Steam configurationNOrderedDict)settings)system)logger)SteamID)	vdf_parseZactive_steam_accountc                 sJ    \        R4      p V '       d   V R\        R4      )  # R# )z%Main installation directory for Steam	steamappsN)search_in_steam_dirslen)	steam_dirs    =/usr/lib/python3.14/site-packages/lutris/util/steam/config.pyget_steam_dirr      s*    $[1I,C,,--     c                s   \          F~  p\        P                  ! \        P                  P                  \        P                  P                  V4      V 4      4      pV'       g   K^  \        P                  ! V4      '       g   K|  Vu # 	  R# )z5Find the (last) file/dir in all the Steam directoriesN)STEAM_DATA_DIRSr   fix_path_caseospathjoin
expanduserpath_exists)ZfileZ	candidater   s   &  r   r   r   $   sU    $	##BGGLL1C1CI1NPT$UV4F&&t,,K %r   c                sn    \        4       pWR&   WR&   \        4       pWR&   RVR&   RVR&   WR&   W#R	&   R
V/# )zHReturn a default configuration usable to
create a runnable game in SteamnameZgameidZappID1ZUniverseZ1026Z
StateFlagsZ
installdirZ
UserConfigZAppStater    )Zappidr   Z
userconfigZappstate   &&  r   get_default_acfr   ,   sY     Jv x}HWHZ#H\!\'\!!r   c                  s    \        R 4      p \        P                  ! V 4      '       g   R# \        V RRR7      ;_uu_ 4       p\	        V/ 4      pRRR4       V#   + '       g   i     X# ; i)zconfig/loginusers.vdfNrutf-8Zencoding)r   r   r   openr   )config_filenamesteam_config_fileconfig      r   read_user_configr!   =   sX    *+BCOo..	osW	5	59J,b1 
6M 
6	5Ms    AA(	c                s0    V ^8  d   QhR\         R\        /# )   r   key)Zdictstrformat   "r   __annotate__r(   F   s     ' 'T ' 'r   c           
     s,   V P                  4        Uu/ uF  q"P                  4       VbK  	  ppW9  dA   \        P                  ! RVRP	                  \        V P                  4       4      4      4       R# WVP                  4       ,          ,          # u upi )z<Fetch a value from a configuration in a case insensitive wayzConfig key %s not found in %sz, N)Zkeyslowerr   Zwarningr   list)r   r#   ZkZkeymapr   r   get_config_valuer+   F   sk    $*KKM2MqggilMF2
6TYYtFKKMGZ=[\%&&	 3s   Bc                 s   \          F  p \        P                  P                  \        P                  P	                  V 4      R4      p\        P                  P                  V4      '       g   Kg  \        P                  ! V4       Uu. uF  q"P                  4       '       g   K  VNK  	  ppV'       g   K  W3u # 	  R. 3# u upi )zReturn the list of available Steam user config directories (using a SteamID32)
and the base path where the settings are located (Returns the 1st location found)
Zuserdata )r   r   r   r   r   ZexistsZlistdir	isnumeric)r
   Zuserdata_pathZfZuser_idss       r   get_user_data_dirsr.   O   s     %	RWW%7%7	%BJOww~~m,,!zz-8J8!KKMAA8J8 ** % r6M Ks   B?"B?c                $    V ^8  d   QhR\         /# r"   return)r*   r%   r'   r   r(   r(   ]   s       r   c                 s    . p \        4       pV'       d   RV9  d   . # RpVR,          P                  4        F/  w  r4W4R&   \        VR4      R8X  d   TpK  V P                  V4       K1  	  V'       d   V.V ,           p V # )zVReturn a list of available Steam users.
Most recently used account is 1st in the list.ZusersN	steamid64Z
mostrecentr   )r!   itemsr+   append)Zsteam_usersZuser_configZmost_recentsteam_idZaccounts        r   get_steam_usersr6   ]   s     K"$K'4	K(1779'G\2c9!Kw' : "mk1r   c                r/   r0   r$   r%   r'   r   r(   r(   p   s      c r   c                 s    \        4        U u. uF  q R,          NK  	  pp \        P                  ! \        4      pW!9   d   V# V'       d
   V^ ,          # R# u up i )z$Return the currently active Steam IDr2   r,   )r6   r   Zread_settingSTEAM_ACCOUNT_SETTING)ZuZ	steam_idsZactive_steam_idr    r   get_active_steamid64r9   p   sQ    )8):;):A;):I;++,ABO#| <s   Ac                s0    V ^8  d   QhR\         R\         /# )r"   r2   r1   r7   r%   r'   r   r(   r(   {   s     3 3c 3c 3r   c                s    V P                  4       '       g   R# \        P                  ! \        V 4      4      p\	        VP                  4       4      # )zHReturn the 32-bit variant of SteamIDs, used for folder names in userdatar,   )r-   r   Zfrom_steamid64Zintr$   Zget_32_bit_community_id)r2   r5   s   & r   convert_steamid64_to_steamid32r:   {   s<      %%c)n5Hx//122r   c                s   V '       g   \        R4      hRP                  \        P                  V 4      p\        P
                  ! V^R7      pVP                  R8  d   \        P                  ! RV4       . # VP                  4       pVR,          pV'       g   \        P                  ! RV4       . # RV9   d
   VR,          # R	V9   d   VR	,          ^ 8X  d   . # \        P                  ! R
V4       . # )z+Return the list of games owned by a SteamIDzMissing SteamIDzhttps://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={}&steamid={}&format=json&include_appinfo=1&include_played_free_games=1)Ztimeouti  zInvalid response from steam: %sresponsezNo games in response of %sZgamesZ
game_countzWeird response: %s)Z
ValueErrorr&   r   ZSTEAM_API_KEYrequestsgetZstatus_coder   errorZjsonZinfo)ZsteamidZsteam_games_urlr;   Z	json_datas   &   r   get_steam_libraryr?      s    *++	' (.vh.D.Dg'N	  ||OR8Hc!6A	I$H0/B	(  xH\$:a$?	
LL%y1Ir   c                s  a V3R loV '       g   R# \         P                  P                  V R4      p\        P                  ! V4      '       g   R# \        VRRR7      ;_uu_ 4       p\        V/ 4      pRRR4        S! X. RO4      #   + '       g   i     L; i  \         d#   p\        P                  ! RY4        Rp?R# Rp?ii ; i)	z7Read the Steam configuration and return it as an objectc                 s  < V P                  4        Fa  w  r#VP                  4       V^ ,          P                  4       8X  g   K1  \        V4      ^8:  d   W,          u # S! W,          VR,          4      u # 	  \        V^ ,          4      h)    i   NNr3   r)   r	   KeyError)Zconfig_dictr   r#   Z_valueget_entry_case_insensitive   &&  r   rD   Z/read_config.<locals>.get_entry_case_insensitive   si    &,,.KCyy{d1gmmo-t9>&++1+2BDHMM / tAwr   Nzconfig/config.vdfr   r   r   zSteam config %s is empty: %s)ZInstallConfigStoreZSoftwareZValveZSteam)
r   r   r   r   r   r   r   rC   r   r>   )steam_data_dirr   r   r   exrD      &    @r   read_configrI      s      ggll>3FGOo..	osW	5	59J,b1 
6J)&2fgg 
6	5  J3_IIJs$   &B<
B B	C%CCc                s  a V3R loV '       g   R# \         P                  P                  V R4      p\        P                  ! V4      '       g   R# \        VRRR7      ;_uu_ 4       p\        V/ 4      pVR,          P                  RR4       RRR4        S! XR.4      #   + '       g   i     L; i  \         d#   p\        P                  ! R	Y4        Rp?R# Rp?ii ; i)
z@Read the Steam Library Folders config and return it as an objectc                 s  < V P                  4        Fk  w  r#VP                  4       V^ ,          P                  4       8X  d-   \        V4      ^8:  d   Vu # S! W,          VR,          4      u # \        V^ ,          4      h	  R# )r@   rA   NrB   )Zlibrary_dictr   r#   ZvaluerD   rE   r   rD   Z8read_library_folders.<locals>.get_entry_case_insensitive   sc    &,,.JCyy{d1gmmo-t9> L1,2CT"XNN47## /r   Nzconfig/libraryfolders.vdfr   r   r   ZlibraryfoldersZcontentstatsidz$Steam libraryfolders %s is empty: %s)r   r   r   r   r   r   r   ZpoprC   r   r>   )rF   Zlibrary_filenameZsteam_library_fileZlibraryrG   rD   rH   r   read_library_foldersrJ      s    $ ww||N4OP.//	g	6	6:L.3 !%%&6= 
7S)'4D3EFF 
7	6  S;=MRRSs$   &&B	B2 B/	2C=CCc                 (    \        \        4       4      # )z8Return the "Steam" part of Steam's config.vdf as a dict.)rI   r    r   r   get_steam_configrM      s    }''r   c                 rK   )zHReturn the "libraryfolders" part of Steam's libraryfolders.vdf as a dict)rJ   r   rL   r   r   get_library_configrN      s    00r   c                 s   . p R\         P                  9   d-   V \         P                  ! R4      P                  R4      ,          p \         F  pR F  p\         P
                  P                  \         P
                  P                  V4      V4      p\        P                  ! V4      pV'       g   K`  \         P
                  P                  V4      '       g   K  V P                  V4       K  	  K  	  \        4       pV'       d   ^pRV,          V9   dw   VRV,          ,          R,           p\        P                  ! V4      pV'       d7   \         P
                  P                  V4      '       d   V P                  V4       V^,          pK  \        4       pV'       Ed   . pVP                  4        F  p	RV	9   dq   V	P                  R4      '       dX   V	P                  R4      R8X  d@   \        P                  ! V	P                  R4      R,           4      pVP                  V4       Kv  Kx  Kz  \        P                  ! V	P                  R4      R,           4      pVP                  V4       K  	  V FE  pV'       g   K  \         P
                  P                  V4      '       g   K4  V P                  V4       KG  	  \        P                   ! V 4      # )	z9Return a list of the Steam library main + custom folders.ZSTEAM_EXTRA_COMPAT_TOOLS_PATHSZ:zBaseInstallFolder_%sz
/steamappsZmountedr   r   )r   zcompatibilitytools.d)r   ZenvironZgetenvZsplitr   r   r   r   r   r   Zisdirr4   rM   rN   Zvaluesr=   Zlist_unique_folders)
ZdirsZdata_dirZ_dirZabs_dirZsteam_configZir   Zlibrary_configZpathsZentrys
             r   get_steamapps_dirsrO      s   D'2::5		:;AA#FF#9Dggll277#5#5h#?FG**73Gw277==11G$	 : $ $%L$q(L8 6 :;lJD''-Dd++D!FA ()N~#**,EE!99V$$9)=)D!//		&0AL0PQDLL& *E$ ++EIIf,=,LMT" - Dtd++D!  %%d++r   )
z~/.steam/debian-installationz~/.steamz~/.local/share/steamz~/.local/share/Steamz&~/snap/steam/common/.local/share/Steamz~/.steam/steamz-~/.var/app/com.valvesoftware.Steam/data/steamz-~/.var/app/com.valvesoftware.Steam/data/Steamz/usr/share/steamz/usr/local/share/steam) Z__doc__r   Zcollectionsr   r<   Zlutrisr   Zlutris.utilr   Zlutris.util.logr   Zlutris.util.steam.steamidr   Zlutris.util.steam.vdfutilsr   r   r8   r   r   r   r!   r+   r.   r6   r9   r:   r?   rI   rJ   rM   rN   rO   rL   r   r   <module>rP      s|      	 #    " - 0 / .""'&36J2S4(
1
(,r   