a
    Ϣc                     @   sT   d dl mZmZ d dlZd dlZd dlZd dlZG dd deZG dd deZ	dS )    )print_functionunicode_literalsNc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd(ddZdd Z	d)ddZ
d*ddZdd Zdd Zdd Zdd Zdd ZeZdd Zd+d d!Zd"d# Zd$d% Zd&d' Zd
S ),SubFileFc                 C   s"   d | _ || _d| _|| _|| _d S Nr   )fbaseoffsetlengthname)selfr
   r   r	    r   \/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/android/apk.py__init__   s
    zSubFile.__init__c                 C   s*   | j d u r&t| jd| _ | j | j d S )Nrb)r   openr
   seekr   r   r   r   r   r      s    
zSubFile.openc                 C   s   | S Nr   r   r   r   r   	__enter__   s    zSubFile.__enter__c                 C   s   |    dS NF)close)r   Z_typevaluetbr   r   r   __exit__   s    zSubFile.__exit__Nc                 C   sb   | j d u r|   | j| j }|d ur2t||}n|}|rZ| j |}|  jt|7  _nd}|S )N    )r   r   r	   r   minreadlen)r   r	   	maxlengthZrv2r   r   r   r      s    
zSubFile.readc                 C   s   dS NTr   r   r   r   r   readable3   s    zSubFile.readablec                 C   sX   | j d u r|   | j| j }|d ur2t||}n|}| j |}|  jt|7  _|S r   )r   r   r	   r   r   readliner   )r   r	   r   rvr   r   r   r!   6   s    
zSubFile.readlinec                 C   sB   g }|  |}|sq>|d ur2|t|8 }|dk r2q>|| q|S r   )r!   r   append)r   r	   r"   lr   r   r   	readlinesG   s    
zSubFile.readlinesc                 C   s   dS r   r   r   r   r   r   seekableY   s    zSubFile.seekablec                 C   s   dS r   r   r   r   r   r   writable\   s    zSubFile.writablec                 C   s   | S r   r   r   r   r   r   
xreadlines_   s    zSubFile.xreadlinesc                 C   s   | S r   r   r   r   r   r   __iter__b   s    zSubFile.__iter__c                 C   s   |   }|st |S r   )r!   StopIteration)r   r"   r   r   r   __next__e   s    zSubFile.__next__c                 C   s   d S r   r   r   r   r   r   flusho   s    zSubFile.flushr   c                 C   s~   | j d u r|   |dkr |}n&|dkr4| j| }n|dkrF| j| }|| jkrV| j}|| _|dk rhd}| j || j  d S )Nr         )r   r   r   r	   r   r   )r   r   whencer   r   r   r   r   s    


zSubFile.seekc                 C   s   | j S r   )r   r   r   r   r   tell   s    zSubFile.tellc                 C   s   | j d ur| j   d | _ d S r   )r   r   r   r   r   r   r      s    

zSubFile.closec                 C   s   t dd S )NzWrite not supported by SubFile)	Exception)r   sr   r   r   write   s    zSubFile.write)N)N)N)r   )__name__
__module____qualname__closedr   r   r   r   r   r    r!   r%   r&   r'   r(   r)   r+   nextr,   r   r0   r   r3   r   r   r   r   r      s(   



r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
APKNassets/c           
      C   s   |du rt jd }td|  || _t|d| _i | _| j D ]0}|j	}|
|sXqB|t|d }|| j|< qBt| jd}i | _ddl}| }| j D ]P\}}||j ttj|tj}	|jtj |	tj  |	tj  | j|< q|  dS )a  
        Opens an apk file, and lets you read the assets out of it.

        `apk`
            The path to the file to open. If this is None, it defaults to the
            apk file we are run out of.

        `prefix`
            The prefix inside the apk file to read.
        NZANDROID_APKzOpening APK %rrr   r   )osenvironprintapkzipfileZipFilezfinfoinfolistfilename
startswithr   r   r   timeitemsr   header_offsetstructunpackZstructFileHeaderr   ZsizeFileHeaderZ_FH_FILENAME_LENGTHZ_FH_EXTRA_FIELD_LENGTHr   )
r   r?   prefixifnr   rG   startrC   hr   r   r   r      s8    


zAPK.__init__c                 C   s
   t | jS r   )sortedrC   r   r   r   r   list   s    zAPK.listc                 C   sV   || j vrtd|| j | }|jtjkrDt| j| j| |j	S t
| j|S )Nz{0} not found in apk.)rC   IOErrorformatZcompress_typer@   Z
ZIP_STOREDr   r?   r   	file_sizeioBytesIOrB   r   )r   rN   rC   r   r   r   r      s    

zAPK.open)Nr:   )r4   r5   r6   r   rR   r   r   r   r   r   r9      s   
4r9   )
Z
__future__r   r   r<   rJ   r@   rV   objectr   r9   r   r   r   r   <module>   s    