
    8f                     t   d dl Z d dlZd dlmZ d dlmZmZ d dlZ G d d      Z G d de      Z	 G d d	e      Z
 G d
 de      Z G d ded      Z G d d      Zdedee   fdZdedz  fdZdeeef   fdZedk(  r8 e       Zej-                         D ]  \  ZZ edj5                  ee              yy)    N)Path)	TypedDictcastc                   (    e Zd ZdedefdZd Zd Zy)	SteamGameappid
installdirc                      || _         || _        y N)r   r	   )selfr   r	   s      kC:\Program Files (x86)/Steam/steamapps/common/Skyrim Special Edition/MO2/plugins\basic_games\steam_utils.py__init__zSteamGame.__init__   s    
$    c                     t        |       S r   strr   s    r   __repr__zSteamGame.__repr__       4yr   c                 N    dj                  | j                  | j                        S )Nz{} ({}))formatr   r	   r   s    r   __str__zSteamGame.__str__   s    

DOO<<r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      s    %c %s %=r   r   c                   "    e Zd ZU eed<   eed<   y)	_AppStater   r	   Nr   r   r   r   __annotations__r   r   r   r   r      s    JOr   r   c                       e Zd ZU eed<   y)_AppManifestAppStateN)r   r   r   r   r    r   r   r   r"   r"      s    r   r"   c                       e Zd ZU eed<   y)_LibraryFolderpathNr   r   r   r   r%   r%       s    
Ir   r%   c                   6    e Zd ZU eeef   ed<   eeef   ed<   y)_LibraryFolderslibraryfoldersLibraryFoldersN)r   r   r   dictr   r%   r    r   r   r   r(   r(   $   s     n,--cN"r   r(   F)totalc                   $    e Zd ZdefdZd Zd Zy)LibraryFolderr&   c                    || _         g | _        |j                  d      j                  d      D ]r  }	 t	        |dd      5 }t        t        t        j                  |            }|d   }d d d        	 d   }|d   }| j                  j                  t        ||             t y # 1 sw Y   <xY w# t        $ r" t        d| dt        j                  	       Y t        $ r+}t        d
| d| t        j                  	       Y d }~d }~ww xY w# t        $ r# t        d| dt        j                  	       Y w xY w)N	steamappszappmanifest_*.acfrutf-8encodingr#   z'Unable to read application state from ""filezUnable to parse file "z": r   r	   z;Unable to read application ID or installation folder from ")r&   gamesjoinpathglobopenr   r"   vdfloadKeyErrorprintsysstderr	Exceptionappendr   )	r   r&   filepathfpinfo	app_stateeapp_idinstall_dirs	            r   r   zLibraryFolder.__init__*   s?   	&(
k2778KL 	H(C': 1b$D !%Z 0I1 
"7+'5

!!)FK"@A+	1 1  =hZqI  .xjA3?cjjQ  %Ja)
 sG   B1)B%*B13/D%B.	*B11(DD#!D		D(D=<D=c                     t        |       S r   r   r   s    r   r   zLibraryFolder.__repr__L   r   r   c                 N    dj                  | j                  | j                        S )NzLibraryFolder at {}: {})r   r&   r8   r   s    r   r   zLibraryFolder.__str__O   s    (//		4::FFr   N)r   r   r   r   r   r   r   r   r   r   r.   r.   )   s     T  DGr   r.   library_vdf_pathreturnc           
      P   	 t        | dd      5 }t        t        t        j                  |            }d d d        dv r|d   }nd|v r|d   }nt        d|  d      g }|j                         D ]M  \  }}	 t        |       t        |t              r|}n|d   }	 |j                  t        t        |                   O |S # 1 sw Y   xY w# t
        $ r Y iw xY w# t        $ r>}t        d	j                  |t!        |            t"        j$                  
       Y d }~d }~ww xY w)Nr1   r2   r3   r)   r*   zUnknown file format from "r5   r&   z*Failed to read steam library from "{}", {}r6   )r;   r   r(   r<   r=   
ValueErroritemsint
isinstancer   rC   r.   r   rB   r?   r   reprr@   rA   )	rM   frF   info_folderslibrary_folderskeyvaluer&   rH   s	            r   parse_library_inforZ   S   s>   	 
g	6 
!HHQK

 4,-	T	!,- 56F5GqIJJ+-O"((* 
U	H eS!D=D	""=d#<=( S
 
2  		  	<CCD$q'RZZ 	s5   $C8C#CC	CC	D%'4D  D%c                     	 	 t        j                  t         j                  d      5 } t        j                  | d      }t	        |d   j                  dd            j                  cd d d        S # 1 sw Y   y xY w# t        $ r Y y w xY w)NzSoftware\Valve\SteamSteamExer   /\)winregOpenKeyHKEY_CURRENT_USERQueryValueExr   replaceparentFileNotFoundError)rX   rY   s     r   find_steam_pathrf      s}    ^^F446NO 	<SV''Z8Ea((d34;;	< 	< 	<  s.   $A; >A/%	A; /A84A; 8A; ;	BBc                  d   	 t               } | si S | j                  dd      }	 t        |      }|j                  t	        |              i }|D ]P  }|j                  D ]?  }t        |j                        j                  dd|j                        ||j                  <   A R |S # t
        $ r i cY S w xY w)Nr0   zlibraryfolders.vdfcommon)rf   r9   rZ   rC   r.   re   r8   r   r&   r	   r   )
steam_pathrM   rW   r8   librarygames         r   
find_gamesrl      s     !"J	!**;8LM,-=>}Z89  E" MM 	D $W\\ 2 ; ;Xt!E$**	 L  	s   %B! !B/.B/__main__zFound game with id {} at {}.)r@   r_   pathlibr   typingr   r   r<   r   r   r"   r%   r(   r.   listrZ   rf   r+   r   rl   r   r8   rQ   kvr?   r   r   r   r   <module>rs      s       " 
	= 	=	 
9 Y #iu #
'G 'GT5 5$}2E 5p DdO < zLE ;1,33Aq9:; r   