
    3i_)                    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    G/var/www/opsc/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                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |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_optionally_create_directoryr   r/   s     r   user_log_dirzAndroid.user_log_dirB   =     ""<<77<<e,D--d3r   c                    | j                   S )z?:returns: log directory shared by users, same as `user_log_dir`)r3   r   s    r   site_log_dirzAndroid.site_log_dirK           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_dirP        )**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_dirU   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_dirZ   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_dird   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_diri   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_dirn   s%     ww||D(9:GUKKr   c                    | j                   S )z?:returns: bin directory shared by users, same as `user_bin_dir`)rM   r   s    r   site_bin_dirzAndroid.site_bin_dirs   r7   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_dirx   r   r   c                    | j                   S )zQ:returns: applications directory shared by users, same as `user_applications_dir`)rQ   r   s    r   site_applications_dirzAndroid.site_applications_dir}   s     )))r   c                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |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,   r2   s     r   user_runtime_dirzAndroid.user_runtime_dir   r4   r   c                    | j                   S )zG:returns: runtime directory shared by users, same as `user_runtime_dir`)rV   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)   r3   r6   r:   r>   rA   rD   rG   rJ   rM   rO   rQ   rS   rV   rX   rI   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   androidrb   r   getApplicationContextgetFilesDirgetParentFilegetAbsolutePath	Exceptionjniusre   recompilesysr/   matchsplit)resultrb   contextre   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   rd   rc   android.os.Environmentz/storage/emulated/0/Documents)rl   re   getExternalFilesDirDIRECTORY_DOCUMENTSrj   rk   )re   rs   environmentdocuments_dirs       r   r9   r9      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   rd   rc   rv   z/storage/emulated/0/Downloads)rl   re   rw   DIRECTORY_DOWNLOADSrj   rk   )re   rs   ry   downloads_dirs       r   r=   r=      r{   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   rd   rc   rv   z/storage/emulated/0/Pictures)rl   re   rw   DIRECTORY_PICTURESrj   rk   )re   rs   ry   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   rd   rc   rv   z/storage/emulated/0/DCIM/Camera)rl   re   rw   DIRECTORY_DCIMrj   rk   )re   rs   ry   
videos_dirs       r   rC   rC      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   rd   rc   rv   z/storage/emulated/0/Music)rl   re   rw   DIRECTORY_MUSICrj   rk   )re   rs   ry   	music_dirs       r   rF   rF     sc    0#56 89 44[5P5PQaac	   0/	0r|   )rZ   z
str | NonerY   )r^   
__future__r   r.   rm   ro   	functoolsr   typingr   r   apir   r
   r   r9   r=   r@   rC   rF   __all__rI   r   r   <module>r      s     " 	 	 
  &  @%o @%F 1, ,^ 1  1  1  1  1   r   