
    Uj.-                       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dS )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ed d            Zed d            Zed d            Zed d            Zed d            ZdS )!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>`.

    returnstrc                b    |                      t          dt                                d          S )ze:returns: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``r   files_append_app_name_and_versionr   _android_folderselfs    X/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/platformdirs/android.pyuser_data_dirzAndroid.user_data_dir   +     00e_=N=N1O1OQXY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                b    |                      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_=N=N1O1OQ_```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)        ##r   c                b    |                      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        r5t          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_optionally_create_directoryr   r2   s     r   user_log_dirzAndroid.user_log_dirB   D     "< 	47<<e,,D--d333r   c                    | j         S )z?:returns: log directory shared by users, same as `user_log_dir`)r6   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                    dS )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                    dS )zS:returns: projects directory tied to the user e.g. ``/storage/emulated/0/Projects``z/storage/emulated/0/ProjectsrL   r   s    r   user_projects_dirzAndroid.user_projects_dirn   s
     .-r   c                    dS )zU:returns: public share directory tied to the user e.g. ``/storage/emulated/0/Public``z/storage/emulated/0/PublicrL   r   s    r   user_publicshare_dirzAndroid.user_publicshare_dirs   s
     ,+r   c                    dS )zU:returns: templates directory tied to the user e.g. ``/storage/emulated/0/Templates``z/storage/emulated/0/TemplatesrL   r   s    r   user_templates_dirzAndroid.user_templates_dirx   s
     /.r   c                    dS )zM:returns: fonts directory tied to the user e.g. ``/storage/emulated/0/fonts``z/storage/emulated/0/fontsrL   r   s    r   user_fonts_dirzAndroid.user_fonts_dir}   s
     +*r   c                    | j         S )zL:returns: preference directory tied to the user, same as ``user_config_dir``r    r   s    r   user_preference_dirzAndroid.user_preference_dir   r"   r   c                x    t           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)r1   r2   r3   r   r   r   s    r   user_bin_dirzAndroid.user_bin_dir   s,     w||D(9(9::GUKKKr   c                    | j         S )z?:returns: bin directory shared by users, same as `user_bin_dir`)rZ   r   s    r   site_bin_dirzAndroid.site_bin_dir   r:   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_dir   r   r   c                    | j         S )zQ:returns: applications directory shared by users, same as `user_applications_dir`)r^   r   s    r   site_applications_dirzAndroid.site_applications_dir   s     ))r   c                    | j         }| j        r5t          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/   r5   s     r   user_runtime_dirzAndroid.user_runtime_dir   r7   r   c                    | j         S )zG:returns: runtime directory shared by users, same as `user_runtime_dir`)rc   r   s    r   site_runtime_dirzAndroid.site_runtime_dir   s     $$r   Nr   r   ) __name__
__module____qualname____doc__propertyr   r   r   r!   r%   r'   r*   r,   r6   r9   r=   rA   rD   rG   rJ   rM   rO   rQ   rS   rU   rW   rZ   r\   r^   r`   rc   re   rL   r   r   r
   r
      s       	 	 Z Z Z XZ " " " X" a a a Xa $ $ $ X$ Z Z Z XZ # # # X# " " " X" # # # X#    X ! ! ! X! + + + X+ + + + X+ * * * X* ( ( ( X( ' ' ' X' - - - X- . . . X. , , , X, / / / X/ + + + X+ $ $ $ X$ L L L XL ! ! ! X! " " " X" * * * X*    X % % % X% % %r   r
   )maxsizer   
str | Nonec                 "   d} t           st	 ddlm} t          d|                                          }|                                                                                                } n# t          $ r d} Y nw xY w| ]	 ddl	m
}  |d          }|                                                                                                } n# t          $ r d} Y nw xY w| Wt          j        d          }t          j        D ]4}|                    |          r|                    d          d         }  n5d} | Wt          j        d          }t          j        D ]4}|                    |          r|                    d          d         }  n5d} | S )	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   androidro   r   getApplicationContextgetFilesDirgetParentFilegetAbsolutePath	Exceptionjniusrr   recompilesysr2   matchsplit)resultro   contextrr   patternr2   s         r   r   r      s    F  	))))))4i6U6U6W6WXXG((**88::JJLLFF 	 	 	FFF	~	 ('''''i 9::G((**88::JJLLFF 	 	 	FFF	~ *@AAH 	 	D}}T"" H--a0 F~ *WXXH 	 	D}}T"" H--a0 FMs%   A A, ,A;:A;A	C CCr   c                     	 ddl m}   | d          } | d          }|                    |j                                                  }n# t
          $ r d}Y nw xY w|S )z-:returns: documents folder for the Android OSr   rq   rp   android.os.Environmentz/storage/emulated/0/Documents)ry   rr   getExternalFilesDirDIRECTORY_DOCUMENTSrw   rx   )rr   r   environmentdocuments_dirs       r   r<   r<          8######)566i 899$889XYYiikk 8 8 878    AA AAc                     	 ddl m}   | d          } | d          }|                    |j                                                  }n# t
          $ r d}Y nw xY w|S )z-:returns: downloads folder for the Android OSr   rq   rp   r   z/storage/emulated/0/Downloads)ry   rr   r   DIRECTORY_DOWNLOADSrw   rx   )rr   r   r   downloads_dirs       r   r@   r@      r   r   c                     	 ddl m}   | d          } | d          }|                    |j                                                  }n# t
          $ r d}Y nw xY w|S )z,:returns: pictures folder for the Android OSr   rq   rp   r   z/storage/emulated/0/Pictures)ry   rr   r   DIRECTORY_PICTURESrw   rx   )rr   r   r   pictures_dirs       r   rC   rC      s    6######)566i 899#778VWWggii 6 6 656 r   c                     	 ddl m}   | d          } | d          }|                    |j                                                  }n# t
          $ r d}Y nw xY w|S )z*:returns: videos folder for the Android OSr   rq   rp   r   z/storage/emulated/0/DCIM/Camera)ry   rr   r   DIRECTORY_DCIMrw   rx   )rr   r   r   
videos_dirs       r   rF   rF   
  s    7######)566i 899!55k6PQQaacc

 7 7 76


7 r   c                     	 ddl m}   | d          } | d          }|                    |j                                                  }n# t
          $ r d}Y nw xY w|S )z):returns: music folder for the Android OSr   rq   rp   r   z/storage/emulated/0/Music)ry   rr   r   DIRECTORY_MUSICrw   rx   )rr   r   r   	music_dirs       r   rI   rI     s    0######)566i 899 44[5PQQaacc		 0 0 0/			0 r   )r   rm   rf   )rj   
__future__r   r1   rz   r|   	functoolsr   typingr   r   apir   r
   r   r<   r@   rC   rF   rI   __all__rL   r   r   <module>r      s    " " " " " " 				 				 



       & & & & & & & &            Y% Y% Y% Y% Y%o Y% Y% Y%x 1, , , ,^ 1    1    1    1    1     r   