
    .e1                         d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ dd	lmZmZ d
dlmZmZmZ  ee          Z G d de          Z G d de          ZdddZdS )
    N)sha1)	getLogger)Path)DictOptionalTuple   )data)UnixLex
logged_run   )MenuMenuItemmenuitem_defaultsc                   h     e Zd ZdefdZdefdZedeeef         f fd            Z	defdZ
 xZS )	MacOSMenureturnc                 *    |                                  S N_pathsselfs    6lib/python3.11/site-packages/menuinst/platforms/osx.pycreatezMacOSMenu.create       {{}}    c                 *    |                                  S r   r   r   s    r   removezMacOSMenu.remove   r   r   c                     t                      j        }|                    t          |                                           dt          | j        dz  dz  dz  dz            d           |S )Nicnsz
python.appContentsMacOSpython)SP_DIRICON_EXT	PYTHONAPP)superplaceholdersupdatestr_site_packagesprefix)r   r*   	__class__s     r   r*   zMacOSMenu.placeholders   su    ww+d113344" |!;j!H7!RU]!]^^ 	
 	
 	
 r   c                     dS )N r1   r   s    r   r   zMacOSMenu._paths&   s    rr   )__name__
__module____qualname__r	   r   r    propertyr   r,   r*   r   __classcell__r/   s   @r   r   r      s                 	d38n 	 	 	 	 	 X	        r   r   c                   4    e Zd Zedefd            Zedefd            Zedefd            ZdefdZ	 fdZ
dee         fdZdee         fdZdee         fd	Zd
 Zd Zd ZdefdZd deej                 dej        fdZd deej                 dej        fdZd deej                 dej        fdZd deej                 dej        fdZdeej                 fdZdefdZdefdZd!dedefdZd!dedefdZd"dZd Z ede!fd            Z" xZ#S )#MacOSMenuItemr   c                 @    |                                  dz  | j        z  S )z1Path to the .app directory defining the menu itemApplications)_base_location_bundle_namer   s    r   locationzMacOSMenuItem.location+   s#     ""$$~58IIIr   c                 6    |                      di            dS )Nname)extraz.app)
render_keyr   s    r   r=   zMacOSMenuItem._bundle_name0   s!    //&/339999r   c                 ,    | j         dz  dz  | j        z  S )zAPath to the nested .app directory defining the menu item main appr#   	Resources)r>   r=   r   s    r   _nested_locationzMacOSMenuItem._nested_location4   s     }z)K7$:KKKr   c                     | j         j        dk    r!t          d                                          S t          d          S )Nuser~/)menumoder   
expanduserr   s    r   r<   zMacOSMenuItem._base_location9   s5    9>V##99'')))Cyyr   c                    t                                                       | j        d         pi                                 D ]\  }}| j        |                     |          z                                  }t          |                              t          | j                            st          d| j         d| d          |j
                            dd           t          j        |                     |          |           d S )Nlink_in_bundlezF'link_in_bundle' destinations MUST be created inside the .app bundle (z), but it points to '.Tparentsexist_ok)r)   
_precreatemetadataitemsr>   renderresolver,   
startswith
ValueErrorparentmkdirossymlink)r   srcdestrendered_destr/   s       r   rS   zMacOSMenuItem._precreate>   s   -(89?RFFHH 		8 		8IC#'=4;;t3D3D#D"M"M"O"OM}%%00T]1C1CDD  d/3}d dS`d d d    &&td&CCCJt{{3''7777		8 		8r   c                 
   t                               d| j                   |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 | 
                                 |                                  |                                  |                                  | j        fS )NzCreating %s)logdebugr>   _create_application_treerS   
_copy_icon_write_pkginfo_write_plistinfo_write_appkit_launcher_write_launcher_write_script_write_event_handler#_maybe_register_with_launchservices_sign_with_entitlementsr   s    r   r   zMacOSMenuItem.createK   s    		-///%%'''##%%%!!###00222$$&&&r   c                     t                               d| j                   |                     d           t	          j        | j        d           | j        fS )NzRemoving %sF)registerT)ignore_errors)rb   rc   r>   rl   shutilrmtreer   s    r   r    zMacOSMenuItem.removeZ   sQ    		-///00%0@@@dm48888r   c                     | j         dz  dz  | j         dz  dz  g}| j        r|| j        dz  dz  | j        dz  dz  gz  }|D ]}|                    dd           t	          |          S )Nr#   rD   r$   TFrP   )r>   _needs_appkit_launcherrE   r[   tuple)r   pathspaths      r   rd   z&MacOSMenuItem._create_application_tree`   s    MJ&4MJ&0
 & 	%
2[@%
2W< E  	5 	5DJJteJ4444U||r   c                     |                      d          }|rIt          j        || j        dz  dz             | j        r$t          j        || j        dz  dz             d S d S d S )Niconr#   rD   )rB   rq   copyr>   rt   rE   )r   ry   s     r   re   zMacOSMenuItem._copy_iconn   s    v&& 	TKdmj8;FGGG* TD$"7*"D{"RSSSSS	T 	TT Tr   c           	      (   | j         g}| j        r|                    | j                   |D ]e}t	          |dz  dz  d          5 }|                    d|                     dd          d d                     d d d            n# 1 swxY w Y   fd S )	Nr#   PkgInfowAPPLr@   Tslug   )r>   rt   appendrE   openwriterB   )r   app_bundlesappfs       r   rf   zMacOSMenuItem._write_pkginfou   s    }o& 	6t4555 	I 	ICcJ&2C88 IAGtvDAA"1"EGGHHHI I I I I I I I I I I I I I I	I 	Is   6BB
	B
	c           	         |                      d          }|                      dd          }t          |          dk    rG|d d         t          |                                                                          d d         z   }n|}|||| dd| d	d
d
d}|                      d          }|rt          |          j        |d<   | j        rVt          | j	        dz  dz  d          5 }t          j        ||           d d d            n# 1 swxY w Y   d|d<   d| d|d<   g t          ddR }t          d         d         D ]9}||v r|                      |          }	|	|dk    r|	|d<   | d|	 |d<   |	||<   :t          | j        dz  dz  d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr@   Tr      
      z-1.0.0com.r~   z1.0.0)CFBundleNameCFBundleDisplayNameCFBundleExecutableCFBundleGetInfoStringCFBundleIdentifierCFBundlePackageTypeCFBundleVersionCFBundleShortVersionStringry   CFBundleIconFiler#   z
Info.plistwbLSBackgroundOnlyz-appkit-launcherr   entitlementsrN   	platformsosxr   r   -r   )rB   lenr   encode	hexdigestr   r@   rt   r   rE   plistlibdumpr   r>   )
r   r@   slugname	shortnameplry   r   ignore_keyskeyvalues
             r   rg   zMacOSMenuItem._write_plistinfo}   s   v&&??6?55x==2 "X__->->(?(?(I(I(K(KBQB(OOII I%#'"*(0%8%8%8"3"3"3#)&*1	
 	
 v&& 	5%)$ZZ_B!"& 	Id+j8<GNN %RSb!$$$% % % % % % % % % % % % % % % &*B!"'Hh'H'H'HB#$ M)L>L;KLL$[1%8 
	 
	Ck!!OOC((E}'''38/019.C.CE.C.C*+BsGG$-*,|;TBB 	!aM"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   *DDDF>>GGc           	         dg}|                      d          r|                    g d           |                      d          }|r=t          |                              dd           |                    d| d           |                      d	          }|r|                    |           | j        d
         rT| j        j        }| j                            |          rd}nd}|                    d| d| d| j        j	         d           |                    d
                    t          j        |                      d                                         d
                    |          S )Nz	#!/bin/shterminal)z@if [ "${__CFBundleIdentifier:-}" != "com.apple.Terminal" ]; thenz#    open -b com.apple.terminal "$0"z    exit $?fiworking_dirTrP   zcd ""
precommandactivatezshell activatezshell.bash activatez	eval "$("z" z "z")" commandr   )rB   extendr   r[   r   rT   rJ   	conda_exe_is_micromambar.   joinr   
quote_args)r   linesr   r   r   r   s         r   _commandzMacOSMenuItem._command   s   ??:&& 
	 LL     oom44 	0##D4#@@@LL....///__\22
 	%LL$$$=$ 	U	+Iy''	22 1+0LLSYSS(SSdi>NSSSTTTSXXg01K1KLLMMNNNyyr   Nlauncher_pathc                     ||                                  }t          j        |                                 |           t	          j        |d           |S N  )_default_appkit_launcher_pathrq   rz   _find_appkit_launcherr\   chmodr   r   s     r   rh   z$MacOSMenuItem._write_appkit_launcher   sO      >>@@MD..00-@@@
&&&r   c                     ||                                  }t          j        |                                 |           t	          j        |d           |S r   )_default_launcher_pathrq   rz   _find_launcherr\   r   r   s     r   ri   zMacOSMenuItem._write_launcher   sO      7799MD''))=999
&&&r   script_pathc                     ||                      d          }t          |d          5 }|                    |                                            d d d            n# 1 swxY w Y   t	          j        |d           |S )Nz-script)suffixr}   r   )r   r   r   r   r\   r   )r   r   r   s      r   rj   zMacOSMenuItem._write_script   s    55Y5GGK+s## 	%qGGDMMOO$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%
e$$$s   (AA!$A!c                    | j         sd S |                     d          }|d S || j        dz  dz  dz  }t          |d          5 }|                    d| d           d d d            n# 1 swxY w Y   t          j        |d           |S )	Nevent_handlerr#   rD   zhandle-eventr}   z#!/bin/bash
r   r   )rt   rB   r>   r   r   r\   r   )r   r   event_handler_logicr   s       r   rk   z"MacOSMenuItem._write_event_handler   s    * 	F"ooo>>&F-*4{B^SK+s## 	=qGG;$7;;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=
e$$$s   A++A/2A/c                     | j         fS r   )r>   r   s    r   r   zMacOSMenuItem._paths   s    r   c                 $   dt          j                     }t          j        D ]K}t	          |          |z  }|                                r#t          j        |t          j                  r|c S Lt          dt          j                               )Nappkit_launcher_'Could not find executable launcher for 
platformmachine_menuinst_data__path__r   is_filer\   accessX_OKrY   r   launcher_namedatapathr   s       r   r   z#MacOSMenuItem._find_appkit_launcher   s    ?8+;+=+=??&/ 	% 	%H NN]:M$$&& %29]BG+L+L %$$$$W8CSCUCUWWXXXr   c                 $   dt          j                     }t          j        D ]K}t	          |          |z  }|                                r#t          j        |t          j                  r|c S Lt          dt          j                               )Nosx_launcher_r   r   r   s       r   r   zMacOSMenuItem._find_launcher   s    <(8(:(:<<&/ 	% 	%H NN]:M$$&& %29]BG+L+L %$$$$W8CSCUCUWWXXXr    r   c                 X    |                      dd          }| j        dz  dz  | | z  S Nr@   Tr   r#   r$   )rB   r>   r   r   r@   s      r   r   z+MacOSMenuItem._default_appkit_launcher_path  s9    vD11}z)G36Gv6G6GGGr   c                     |                      dd          }| j        r| j        dz  dz  | | z  S | j        dz  dz  | | z  S r   )rB   rt   rE   r>   r   s      r   r   z$MacOSMenuItem._default_launcher_path  sh    vD11& 	T(:5?TBS6BSBSSS}z)G36Gv6G6GGGr   Tc                     | j         sd S |r$t          dt          | j                             d S t          dddt          | j                             d S )Nz-Rz-uz-all)rt   _lsregisterr,   r>   )r   ro   s     r   rl   z1MacOSMenuItem._maybe_register_with_launchservices  s_    * 	F 	@c$-0011111dFC,>,>?????r   c                 ^   |                      d          }|sdS |                      dd          }d |D             }| j        dz  dz  }t          |d	          5 }t          j        ||           ddd           n# 1 swxY w Y   t          d
ddddd| ddddd|| j        gd           dS )z1Self-sign shortcut to apply required entitlementsr   Nr@   Tr   c                     i | ]}|d S Tr1   ).0r   s     r   
<dictcomp>z9MacOSMenuItem._sign_with_entitlements.<locals>.<dictcomp>  s    777sd777r   r#   zEntitlements.plistr   z/usr/bin/codesignz	--verbosez--signr   z--prefixr   z	--optionsruntimez--forcez--deepz--entitlementscheck)rB   r>   r   r   r   r   )r   entitlement_keysr   plistentitlements_pathr   s         r   rm   z%MacOSMenuItem._sign_with_entitlements  s0   ??>:: 	F??6?5577&6777 MJ69MM#T** 	$aM%###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ $!x!! !  #	
 	
 	
 	
 	
 	
s   A<<B B c                 >     d}t           fd|D                       S )a[  
        In macOS, file type and URL protocol associations are handled by the
        Apple Events system. When the user opens on a file or URL, the system
        will send an Apple Event to the application that was registered as a handler.
        We need a special launcher to handle these events and pass them to the
        wrapped application in the shortcut.

        See:
        - https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCConcepts/LSCConcepts.html  # noqa
        - The source code at /src/appkit-launcher in this repository
        )CFBundleURLTypesCFBundleDocumentTypesc                 D    g | ]}j                             |          S r1   )rT   get)r   kr   s     r   
<listcomp>z8MacOSMenuItem._needs_appkit_launcher.<locals>.<listcomp>C  s)    >>>QDM%%a((>>>r   )any)r   needed_keyss   ` r   rt   z$MacOSMenuItem._needs_appkit_launcher5  s.     D>>>>+>>>???r   r   )r   r   )$r2   r3   r4   r5   r   r>   r,   r=   rE   r<   rS   r	   r   r    rd   re   rf   rg   r   r   r\   PathLikerh   ri   rj   rk   r   r   r   r   r   rl   rm   boolrt   r6   r7   s   @r   r9   r9   *   sV       J$ J J J XJ :c : : : X: L$ L L L XL    
8 8 8 8 8 d         d        %+    T T TI I I,! ,! ,!\! # !  !  !  ! F HR[4I UWU`     Xbk-B bk     "+)> "+     0E QSQ\     bk*        Yt Y Y Y YY Y Y Y YH HC H H H H HH HS H$ H H H H@ @ @ @
 
 
< @ @ @ @ X@ @ @ @ @r   r9   Tr   c                 *    d}t          |g|fd| i|S )Nzh/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregisterr   )r   )r   argskwargsexes       r   r   r   F  s0    	B  slTl::%:6:::r   )__doc__r\   r   r   rq   hashlibr   loggingr   pathlibr   typingr   r   r	   r   r   r   utilsr   r   baser   r   r   r2   rb   r   r9   r   r1   r   r   <module>r     sk    				                      ( ( ( ( ( ( ( ( ( ( % % % % % % ' ' ' ' ' ' ' ' 3 3 3 3 3 3 3 3 3 3i       .Y@ Y@ Y@ Y@ Y@H Y@ Y@ Y@x " ; ; ; ; ; ; ;r   