
    ,j                     t    d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZ  G d d      Zy)    N)download_fileget_download_dirhost)	container)Loggerc                       e Zd Zg Zed        Zed        Zed        Zed        Zd Z	d Z
d Zd Zd	 Zd
 ZddZd Zd Zd Zd Zd Zd Zd Zy)Generalc                     t               S N)r   selfs    -/home/ubuntu/waydroid_script/stuff/general.pyarchzGeneral.arch   s	    v    c                      y)NF r   s    r   skip_extractzGeneral.skip_extract   s    r   c                 f    t         j                  j                  t               | j                        S r   )ospathjoinr   dl_file_namer   s    r   download_loczGeneral.download_loc   s!    ww||,.0A0ABBr   c                 .    t        j                         ryy)Nz/var/lib/waydroid/overlayz/tmp/waydroid)r   use_overlayfsr   s    r   copy_dirzGeneral.copy_dir   s    ""$."r   c                 h   t        j                  dj                  | j                  | j                               d}t
        j                  j                  | j                        rRt        | j                  d      5 }|j                         }t        j                  |      j                         }d d d        t
        j                  j                  | j                        r|| j                  k7  rt
        j                  j                  | j                        r4t        j                  | j                         t        j                  d       t!        | j"                  | j                        }t
        j                  j                  | j                        s|| j                  k7  ry y # 1 sw Y   xY w)NzDownloading {} now to {} ..... rbz&md5 mismatches, redownloading now ....)r   infoformatr   r   r   r   isfileopenreadhashlibmd5	hexdigestact_md5removewarningr   dl_link)r   loc_md5fbytess       r   downloadzGeneral.download"   s$   4;;t002 	377>>$++,d''. 9!!++e,6689 ''..!2!23w$,,7Nww~~d//0		$++,<>#DLL$2C2CDG ''..!2!23w$,,7N9 9s   ;4F((F1c                 |   | j                   D ],  }t        j                  j                  | j                  | j
                  |      }d|v rt        j                  |      D ]l  }t        j                  j                  |      rt        j                  |       8t        j                  j                  |      sXt        j                  |       n t        j                  j                  |      rt        j                  |       t        j                  j                  |      st        j                  |       / y )N*)filesr   r   r   r   	partitionglobisdirshutilrmtreer"   r)   )r   r-   filewildcard_files       r   r)   zGeneral.remove1   s     	$A77<<t~~qADd{%)YYt_ 1Mww}}]3m46		-0	1 77==&MM$'WW^^D)IIdO	$r   c                     t        j                  d| j                   d| j                          t	        j
                  | j                        5 }|j                  | j                         d d d        y # 1 sw Y   y xY w)NzExtracting z to )r   r    r   
extract_tozipfileZipFile
extractall)r   zs     r   extractzGeneral.extract@   s`    k$"3"3!4D8IJK__T../ 	*1LL)	* 	* 	*s   A44A=c                    t         j                  j                  | j                  dd      }t         j                  j                  | j                  d      }t         j                  j	                  t         j                  j                  |d            st         j                  j                  |      st        j                  |       t        j                  t         j                  j                  t         j                  j                  t         j                  j                  t              dd| j                  d   d            |       t        j                  t         j                  j                  |d      d       t         j                  j	                  t         j                  j                  |d	            st        t         j                  j                  |d	      d
      5 }|j                  d       |j                  d       d d d        t        j                  t         j                  j                  |d	      d       t         j                  j	                  |      st         j                  j                  t         j                  j                  |            s2t        j                  t         j                  j                  |             t        |d
      5 }|j                  d       d d d        t        j                  |d       t        j                          }|j#                  d       | j$                  j'                         D ]2  }| j$                  |   s|j)                  d|| j$                  |          4 t        dd
      5 }|j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nsystemetczsystem/etc/init/resetprop.rc	resetpropz..binr     zresetprop.shwz#!/system/bin/sh
z^while read line; do /system/etc/resetprop ${line%=*} ${line#*=}; done < /vendor/waydroid.prop
zWon post-fs-data
    exec u:r:su:s0 root root -- /system/bin/sh /system/bin/resetprop.sh  /var/lib/waydroid/waydroid.cfg
properties)r   r   r   r   r"   existsmakedirsr6   copydirname__file__r   chmodr#   writeconfigparserConfigParserr$   apply_propskeysset)r   bin_dirresetprop_rcr-   cfgkeys         r   	add_propszGeneral.add_propsE   s   '',,t}}h>ww||MM9;ww~~bggll7K@A77>>'*G$KKRWW\\"''//(2KTSX		!k&3 45<>HHRWW\\';7?ww~~bggll7NCDbggll7N;SA wQ,-uww HHRWW\\'>:EBww~~l+77>>"''//,"?@BGGOOL9:lC( pAnpp HH\5)'')12##((* 	BC$c4+;+;C+@A	B 2C8 	AIIaL	 	)w wp p	 	s$   $#N'N4O 'N14N= O	c           	         t         j                  j                  |      }t        j                  |d      5 }|j                         D ]  }|j                  }t         j                  j                  ||      }|j                  j                  d| j                  d    d      s\|j                  d      snt        j                  t         j                  j                  |      d       |j                  |j                        5 }t        |d      5 }t        j                  ||       d d d        d d d         	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nrzlib/r   /z.soT)exist_okwb)r   r   rN   r<   r=   infolistfilenamer   
startswithr   endswithrL   r#   r6   copyfileobj)	r   apk_file_pathlib_dest_dirapk	file_info	file_name	file_pathsrc_file	dest_files	            r   extract_app_libzGeneral.extract_app_libg   s6   ww}5__]C0 		@C \\^ @	%..	GGLLyA	%%004		!~Q1GHYM_M_`eMfKK!!#-13)"4"45 @4	SWCX @\e**8Y?@ @ @@		@ 		@@ @ @ @		@ 		@sI   A,E#E5AEEE	(E0
EE	EEEE&c                 @   d|j                  d      v rg d}ng d}t        j                  |      j                  }t        j                  j                  |      r	||d   z  }n||d   z  }t        j                  ||d   |d          t        j                  ||       y )	NrE   r^   )r   i  rF   i  )r   r   rF   rH         r      )splitr   statst_moder   r5   chownrP   )r   r   permsmodes       r   set_path_permzGeneral.set_path_permt   s    DJJsO#+E(Ewwt}$$77==E!HDE!HD
uQxq*
tr   c                    t         j                  j                  |      sy |rt         j                  j                  |      rt        j                  |      D ]r  \  }}}|D ]1  }| j                  t         j                  j                  ||             3 |D ]1  }| j                  t         j                  j                  ||             3 t y | j                  |       y r   )r   r   rK   r5   walkry   r   )r   r   	recursiverootdirsr2   dirr8   s           r   	set_perm2zGeneral.set_perm2   s    ww~~d#t,%'WWT] A!dE @C&&rww||D#'>?@! AD&&rww||D$'?@AA t$r   c                    | j                   D ]|  }t        j                  j                  | j                  | j
                  |      }d|v r.t        j                  |      D ]  }| j                  |d        j| j                  |d       ~ y )Nr1   T)r|   )r2   r   r   r   r   r3   r4   r   )r   r-   r   r9   s       r   set_permzGeneral.set_perm   su     	5A77<<t~~qADd{%)YYt_ BMNN=DNAB tt4	5r   c                    t        j                         }|j                  d       | j                  j	                         D ]  }|j                  d|        t        dd      5 }|j                  |       d d d        y # 1 sw Y   y xY w)NrI   rJ   rG   )rR   rS   r$   rT   rU   remove_optionr#   rQ   )r   rY   rZ   r-   s       r   remove_propszGeneral.remove_props   sz    '')12##((* 	1ClC0	1 2C8 	AIIaL	 	 	s   #A>>Bc                      y r   r   r   s    r   rM   zGeneral.copy       r   c                      y r   r   r   s    r   extra1zGeneral.extra1   r   r   c                      y r   r   r   s    r   extra2zGeneral.extra2   r   r   c                 8   | j                          | j                  s| j                          | j                          | j	                          t        | d      r| j                          | j                          t        j                  | j                   d       y )NrT   z installation finished)r/   r   r@   rM   r   hasattrr[   r   r   r    idr   s    r   installzGeneral.install   sd      LLN		4'NNtwwi567r   c                     | j                          t        | d      r| j                          | j                          | j	                          t        j                  d       y )NrT   zUninstallation finished)r)   r   r   r   r   r   r    r   s    r   	uninstallzGeneral.uninstall   s@    4'-.r   N)F)__name__
__module____qualname__r2   propertyr   r   r   r   r/   r)   r@   r[   rn   ry   r   r   r   rM   r   r   r   r   r   r   r   r	   r	      s    E    C C # #E$*
 D@ %5	8/r   r	   )rR   r4   r   r6   r<   r%   tools.helperr   r   r   toolsr   tools.loggerr   r	   r   r   r   <module>r      s/      	    > >  r/ r/r   