
    ܖi(                    0   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	e      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	gZy)zAndroid.    )annotationsN)	lru_cache)TYPE_CHECKINGcast   )PlatformDirsABCc                     e Zd ZdZedd       Zedd       Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd	       Zedd
       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zy)Androida  Platform directories for Android.

    Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_. Directories are typically located
    under the app's private storage (``/data/user/<userid>/<packagename>/``).

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

    c                J    | j                  t        dt                     d      S )ze:returns: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``strfiles_append_app_name_and_versionr   _android_folderselfs    X/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/platformdirs/android.pyuser_data_dirzAndroid.user_data_dir   "     00e_=N1OQXYY    c                    | j                   S )zA:returns: data directory shared by users, same as `user_data_dir`r   r   s    r   site_data_dirzAndroid.site_data_dir        !!!r   c                J    | j                  t        dt                     d      S )zn:returns: config directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>``r   shared_prefsr   r   s    r   user_config_dirzAndroid.user_config_dir$   s"     00e_=N1OQ_``r   c                    | j                   S )zE:returns: config directory shared by users, same as `user_config_dir`)r   r   s    r   site_config_dirzAndroid.site_config_dir)   s     ###r   c                J    | j                  t        dt                     d      S )zf:returns: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``r   cacher   r   s    r   user_cache_dirzAndroid.user_cache_dir.   r   r   c                    | j                   S )zC:returns: cache directory shared by users, same as `user_cache_dir`)r"   r   s    r   site_cache_dirzAndroid.site_cache_dir3        """r   c                    | j                   S )zC:returns: state directory tied to the user, same as `user_data_dir`r   r   s    r   user_state_dirzAndroid.user_state_dir8   r   r   c                    | j                   S )zC:returns: state directory shared by users, same as `user_state_dir`)r'   r   s    r   site_state_dirzAndroid.site_state_dir=   r%   r   c                v    | j                   }| j                  r t        j                  j	                  |d      }|S )z:returns: 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/   s     r   user_log_dirzAndroid.user_log_dirB   /     ""<<77<<e,Dr   c                    | j                   S )z?:returns: log directory shared by users, same as `user_log_dir`)r2   r   s    r   site_log_dirzAndroid.site_log_dirJ           r   c                    t               S )zU:returns: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``)_android_documents_folderr   s    r   user_documents_dirzAndroid.user_documents_dirO        )**r   c                    t               S )zU:returns: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``)_android_downloads_folderr   s    r   user_downloads_dirzAndroid.user_downloads_dirT   r:   r   c                    t               S )zS:returns: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``)_android_pictures_folderr   s    r   user_pictures_dirzAndroid.user_pictures_dirY   s     ())r   c                    t               S )zT:returns: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``)_android_videos_folderr   s    r   user_videos_dirzAndroid.user_videos_dir^   s     &''r   c                    t               S )zM:returns: music directory tied to the user e.g. ``/storage/emulated/0/Music``)_android_music_folderr   s    r   user_music_dirzAndroid.user_music_dirc   s     %&&r   c                     y)zQ:returns: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``z/storage/emulated/0/Desktop r   s    r   user_desktop_dirzAndroid.user_desktop_dirh   s     -r   c                h    t         j                  j                  t        dt	                     dd      S )z^:returns: bin directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/bin``r   r   bin)r.   r/   r0   r   r   r   s    r   user_bin_dirzAndroid.user_bin_dirm   s%     ww||D(9:GUKKr   c                    | j                   S )z?:returns: bin directory shared by users, same as `user_bin_dir`)rL   r   s    r   site_bin_dirzAndroid.site_bin_dirr   r6   r   c                    | j                   S )zJ:returns: applications directory tied to the user, same as `user_data_dir`r   r   s    r   user_applications_dirzAndroid.user_applications_dirw   r   r   c                    | j                   S )zQ:returns: applications directory shared by users, same as `user_applications_dir`)rP   r   s    r   site_applications_dirzAndroid.site_applications_dir|   s     )))r   c                v    | j                   }| j                  r t        j                  j	                  |d      }|S )z:returns: 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,   r1   s     r   user_runtime_dirzAndroid.user_runtime_dir   r3   r   c                    | j                   S )zG:returns: runtime directory shared by users, same as `user_runtime_dir`)rU   r   s    r   site_runtime_dirzAndroid.site_runtime_dir   s     $$$r   Nreturnr   )__name__
__module____qualname____doc__propertyr   r   r   r   r"   r$   r'   r)   r2   r5   r9   r=   r@   rC   rF   rI   rL   rN   rP   rR   rU   rW   rH   r   r   r
   r
      s   	 Z Z " " a a $ $ Z Z # # " " # #   ! ! + + + + * * ( ( ' ' - - L L ! ! " " * *   % %r   r
   )maxsizec                    d} t         sM	 ddlm} t        d|j	                               }|j                         j                         j                         } | ;	 ddl	m
}  |d      }|j                         j                         j                         } | St        j                  d      }t        j                  D ])  }|j                  |      s|j!                  d      d   }  n d} | Tt        j                  d      }t        j                  D ]*  }|j                  |      s|j!                  d      d   }  | S  d} | S # t        $ r d} Y w xY w# t        $ r d} Y w xY w)	zF:returns: 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   androidra   r   getApplicationContextgetFilesDirgetParentFilegetAbsolutePath	Exceptionjniusrd   recompilesysr/   matchsplit)resultra   contextrd   patternr/   s         r   r   r      sf    F 	)4i6U6U6WXG((*88:JJLF ~	 ( 9:G((*88:JJLF ~ **@AHH 	D}}T"H-a0	
 F~ **WXHH 	D}}T"H-a0 M	
 FMA  	F	  	F	s$   AE  :E  EEEEc                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z-:returns: documents folder for the Android OSr   rc   rb   android.os.Environmentz/storage/emulated/0/Documents)rk   rd   getExternalFilesDirDIRECTORY_DOCUMENTSri   rj   )rd   rr   environmentdocuments_dirs       r   r8   r8      c    8#56 89$889X9XYiik   878   ?A AAc                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z-:returns: downloads folder for the Android OSr   rc   rb   ru   z/storage/emulated/0/Downloads)rk   rd   rv   DIRECTORY_DOWNLOADSri   rj   )rd   rr   rx   downloads_dirs       r   r<   r<      rz   r{   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z,:returns: pictures folder for the Android OSr   rc   rb   ru   z/storage/emulated/0/Pictures)rk   rd   rv   DIRECTORY_PICTURESri   rj   )rd   rr   rx   pictures_dirs       r   r?   r?      sc    6#56 89#778V8VWggi   656r{   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z*:returns: videos folder for the Android OSr   rc   rb   ru   z/storage/emulated/0/DCIM/Camera)rk   rd   rv   DIRECTORY_DCIMri   rj   )rd   rr   rx   
videos_dirs       r   rB   rB      sc    7#56 89!55k6P6PQaac
   76
7r{   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z):returns: music folder for the Android OSr   rc   rb   ru   z/storage/emulated/0/Music)rk   rd   rv   DIRECTORY_MUSICri   rj   )rd   rr   rx   	music_dirs       r   rE   rE      sc    0#56 89 44[5P5PQaac	   0/	0r{   )rY   z
str | NonerX   )r]   
__future__r   r.   rl   rn   	functoolsr   typingr   r   apir   r
   r   r8   r<   r?   rB   rE   __all__rH   r   r   <module>r      s     " 	 	 
  &  ~%o ~%B 1, ,^ 1  1  1  1  1   r   