a
    6i4                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ ee	e	ddddZ
e	ed	d
dZee	e	e	gdf ddddZeeee	e	e	gdf ddddZeeddddZdS )z6Various utility functions for use in the proton script    N)Callable   )log)envwine_binwineserver_binreturnc                 C   s   |  dr|  dddr|  ddkrdtjdd	 dd	 }|| d
< || d< || d< d| d< d| d< td|  tjtjdd	 d| dj}t	| d	S )zHandle winetricksUMU_IDZEXE 
winetricksZPROTON_VERBwaitforexitandrun    NWINE
WINELOADER
WINESERVERdisabledWINETRICKS_LATEST_VERSION_CHECK
LD_PRELOADz$Running winetricks verbs in prefix: F)checkr   )
getendswithjoinsysargvr   
subprocessrun
returncodeexit)r   r   r   Zwt_verbsrc r    b/home/james-whalen/.local/share/Steam/compatibilitytools.d/GE-Proton10-32/protonfixes/utilities.pyr      s    r   )dir_pathr   c                 C   s   t t|  S )z Check if the directory is empty.)anyosscandir)r"   r    r    r!   _is_directory_empty   s    r&   )funcr   c              	   C   sb   t jddr^ddddddt jd	d
i}| D ]*}t |t jr2t|s2| d|| | q2dS )z%Set up mount point drives for proton.r	   r
   z/mediazu:z
/run/mediazv:z/mntzw:~zx:	gamedriveN)	r$   environr   path
expanduserkeysaccessR_OKr&   )r'   Z	drive_map	directoryr    r    r!   setup_mount_drives$   s    r1   )r   r'   r   c              
   C   sP   |  d|  d|  dd}|durL|| dd| d || dd| d dS )	z|Emulate DXVK/VKD3D_FRAME_RATE options using DXVK_CONFIG

    usage: setup_frame_rate(g_session,env. prepend_to_env_str)
    ZDXVK_FRAME_RATEZVKD3D_FRAME_RATEZPROTON_FRAME_RATENZDXVK_CONFIGzdxgi.maxFrameRate=;zd3d9.maxFrameRate=)pop)r   r'   Z
frame_rater    r    r!   setup_frame_rate3   s    r4   )compat_configr   r   c                 C   s   d| vrdS t jdd}|s"dS d}|t j|dddd	d
|d|d|t j|dd
t j|dt j|dd}| D ]*\}}|dv rt j|dd ||| qzdS )zvSetup per-game shader cache if shader pre-caching is disabled

    usage: setup_local_shader_cache(g_session.env)
    ZlocalshadercacheNZSTEAM_COMPAT_SHADER_PATHr
   Zsteamapp_shader_cacheZnvidiav1z/steam_shader_cache;steamapp_merged_shader_cacheZ10737418240zsteam_cache,steam_precompiled1Z10GZAMDv1ZDXVK_state_cacheZVKD3D_shader_cache)Z__GL_SHADER_DISK_CACHE_APP_NAME__GL_SHADER_DISK_CACHE_PATHZ)__GL_SHADER_DISK_CACHE_READ_ONLY_APP_NAMEZ__GL_SHADER_DISK_CACHE_SIZEZ!MESA_DISK_CACHE_READ_ONLY_FOZ_DBSZMESA_DISK_CACHE_SINGLE_FILEMESA_GLSL_CACHE_DIRZMESA_GLSL_CACHE_MAX_SIZEMESA_SHADER_CACHE_DIRZMESA_SHADER_CACHE_MAX_SIZEZAMD_VK_PIPELINE_CACHE_FILENAMEAMD_VK_PIPELINE_CACHE_PATHZAMD_VK_USE_PIPELINE_CACHEDXVK_STATE_CACHE_PATHVKD3D_SHADER_CACHE_PATH>   r9   r;   r7   r<   r8   r:   T)exist_ok)r$   r*   r   r+   r   itemsmakedirs
setdefault)r5   r   r+   Zshader_cache_nameZshader_cache_varsvarvalr    r    r!   setup_local_shader_cacheA   s4    rC   )__doc__r$   r   r   typingr   loggerr   dictstrr   boolr&   r1   r4   setrC   r    r    r    r!   <module>   s   "