o
    6‘ði5#  ã                   @  sâ   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZ G dd	„ d	eƒZedd
�ddd„ƒZedd
�ddd„ƒZedd
�ddd„ƒZedd
�ddd„ƒZedd
�ddd„ƒZedd
�ddd„ƒZd	gZdS )zAndroid.é    )ÚannotationsN)Ú	lru_cache)ÚTYPE_CHECKINGÚcasté   )ÚPlatformDirsABCc                   @  sð   e Zd ZdZed%dd„ƒZed%dd„ƒZed%dd	„ƒZed%d
d„ƒZed%dd„ƒZ	ed%dd„ƒZ
ed%dd„ƒZed%dd„ƒZed%dd„ƒZed%dd„ƒZed%dd„ƒZed%dd„ƒZed%dd„ƒZed%dd„ƒZed%d d!„ƒZed%d"d#„ƒZd$S )&ÚAndroida"  
    Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_.

    Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, `version
    <platformdirs.api.PlatformDirsABC.version>`, `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`.

    ÚreturnÚstrc                 C  ó   |   tdtƒ ƒd¡S )zd:return: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``r
   Úfiles©Ú_append_app_name_and_versionr   Ú_android_folder©Úself© r   ú_/root/parts/websockify/install/lib/python3.10/site-packages/pip/_vendor/platformdirs/android.pyÚuser_data_dir   ó   zAndroid.user_data_dirc                 C  ó   | j S )z@:return: data directory shared by users, same as `user_data_dir`©r   r   r   r   r   Úsite_data_dir   ó   zAndroid.site_data_dirc                 C  r   )z‡
        :return: config directory tied to the user, e.g.         ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>``
        r
   Úshared_prefsr   r   r   r   r   Úuser_config_dir!   s   zAndroid.user_config_dirc                 C  r   )zH:return: config directory shared by the users, same as `user_config_dir`)r   r   r   r   r   Úsite_config_dir)   r   zAndroid.site_config_dirc                 C  r   )ze:return: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``r
   Úcacher   r   r   r   r   Úuser_cache_dir.   r   zAndroid.user_cache_dirc                 C  r   )zB:return: cache directory shared by users, same as `user_cache_dir`)r   r   r   r   r   Úsite_cache_dir3   r   zAndroid.site_cache_dirc                 C  r   )zB:return: state directory tied to the user, same as `user_data_dir`r   r   r   r   r   Úuser_state_dir8   r   zAndroid.user_state_dirc                 C  ó   | j }| jrtj |d¡}|S )zÃ
        :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it,
          e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/log``
        Úlog©r   ÚopinionÚosÚpathÚjoin©r   r&   r   r   r   Úuser_log_dir=   ó   zAndroid.user_log_dirc                 C  ó   t ƒ S )zT:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``)Ú_android_documents_folderr   r   r   r   Úuser_documents_dirH   r   zAndroid.user_documents_dirc                 C  r+   )zT:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``)Ú_android_downloads_folderr   r   r   r   Úuser_downloads_dirM   r   zAndroid.user_downloads_dirc                 C  r+   )zR:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``)Ú_android_pictures_folderr   r   r   r   Úuser_pictures_dirR   r   zAndroid.user_pictures_dirc                 C  r+   )zS:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``)Ú_android_videos_folderr   r   r   r   Úuser_videos_dirW   r   zAndroid.user_videos_dirc                 C  r+   )zL:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``)Ú_android_music_folderr   r   r   r   Úuser_music_dir\   r   zAndroid.user_music_dirc                 C  s   dS )zP:return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``z/storage/emulated/0/Desktopr   r   r   r   r   Úuser_desktop_dira   s   zAndroid.user_desktop_dirc                 C  r!   )zÇ
        :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it,
          e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/tmp``
        Útmpr#   r(   r   r   r   Úuser_runtime_dirf   r*   zAndroid.user_runtime_dirc                 C  r   )zF:return: runtime directory shared by users, same as `user_runtime_dir`)r8   r   r   r   r   Úsite_runtime_dirq   r   zAndroid.site_runtime_dirN©r	   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r   r   r   r    r)   r-   r/   r1   r3   r5   r6   r8   r9   r   r   r   r   r      sD    

r   )Úmaxsizer	   ú
str | Nonec                  C  s  d} t s'zddlm} td| ¡ ƒ}| ¡  ¡  ¡ } W n ty&   d} Y nw | du rKzddl	m
} |dƒ}| ¡  ¡  ¡ } W n tyJ   d} Y nw | du rjt d¡}tjD ]}| |¡rg| d¡d }  nqWd} | du rŠt d¡}tjD ]}| |¡r‡| d¡d }  | S qvd} | S )	zE:return: base folder for the Android OS or None if it cannot be foundNr   )Ú	mActivityúandroid.content.Context©Ú	autoclassz /data/(data|user/\d+)/(.+)/filesz/filesz7/mnt/expand/[a-fA-F0-9-]{36}/(data|user/\d+)/(.+)/files)r   ÚandroidrB   r   ÚgetApplicationContextÚgetFilesDirÚgetParentFileÚgetAbsolutePathÚ	ExceptionÚjniusrE   ÚreÚcompileÚsysr&   ÚmatchÚsplit)ÚresultrB   ÚcontextrE   Úpatternr&   r   r   r   r   w   sF   ÿÿ


þ


ûr   r
   c                  C  óL   zddl m}  | dƒ}| dƒ}| |j¡ ¡ }W |S  ty%   d}Y |S w )z,:return: documents folder for the Android OSr   rD   rC   úandroid.os.Environmentz/storage/emulated/0/Documents)rL   rE   ÚgetExternalFilesDirÚDIRECTORY_DOCUMENTSrJ   rK   )rE   rS   ÚenvironmentÚdocuments_dirr   r   r   r,   §   ó   ýýr,   c                  C  rU   )z,:return: downloads folder for the Android OSr   rD   rC   rV   z/storage/emulated/0/Downloads)rL   rE   rW   ÚDIRECTORY_DOWNLOADSrJ   rK   )rE   rS   rY   Údownloads_dirr   r   r   r.   ·   r[   r.   c                  C  rU   )z+:return: pictures folder for the Android OSr   rD   rC   rV   z/storage/emulated/0/Pictures)rL   rE   rW   ÚDIRECTORY_PICTURESrJ   rK   )rE   rS   rY   Úpictures_dirr   r   r   r0   Ç   r[   r0   c                  C  rU   )z):return: videos folder for the Android OSr   rD   rC   rV   z/storage/emulated/0/DCIM/Camera)rL   rE   rW   ÚDIRECTORY_DCIMrJ   rK   )rE   rS   rY   Ú
videos_dirr   r   r   r2   ×   r[   r2   c                  C  rU   )z(:return: music folder for the Android OSr   rD   rC   rV   z/storage/emulated/0/Music)rL   rE   rW   ÚDIRECTORY_MUSICrJ   rK   )rE   rS   rY   Ú	music_dirr   r   r   r4   ç   r[   r4   )r	   rA   r:   )r>   Ú
__future__r   r%   rM   rO   Ú	functoolsr   Útypingr   r   Úapir   r   r   r,   r.   r0   r2   r4   Ú__all__r   r   r   r   Ú<module>   s.    i/ÿ