a
    B^iM$                     @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZg ai ae	 Z
ejrvd dlZd dlZed G dd deZn>ejddrd 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G dd dZdd Zdd ZdS )    )print_functionNaO  RenPyWeb = {
    xhr_id: 0,
    xhrs: {},

    dl_new: function(path) {
        var xhr = new XMLHttpRequest();
        xhr.responseType = 'arraybuffer';
        xhr.onerror = function() {
            console.log("Network error", xhr);
        };
        xhr.onload = function() {
            if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) {
                // Create file reusing XHR's buffer (no-copy)
                try { FS.unlink(path); } catch(error) {}
                FS.writeFile(path, new Uint8Array(xhr.response), {canOwn:true});
            } else {
                console.log("Download error", xhr);
            }
        };
        xhr.open('GET', path);
        xhr.send();
        RenPyWeb.xhrs[RenPyWeb.xhr_id] = xhr;
        var ret = RenPyWeb.xhr_id;
        RenPyWeb.xhr_id++;
        return ret;
    },

    dl_get: function(xhr_id) {
        return RenPyWeb.xhrs[xhr_id];
    },

    dl_free: function(xhr_id) {
        delete RenPyWeb.xhrs[xhr_id];
        // Note: xhr.response kept alive until file is unlinked
    },
};
c                   @   s@   e Zd Zdd Zdd Zedd Zedd Zed	d
 ZdS )XMLHttpRequestc                 C   s$   d| }t dt|| _d S )Nzgame/zRenPyWeb.dl_new({}))
emscriptenrun_script_intformatjsondumpsid)selffilenameurl r   5C:\Users\PahaGest\Downloads\Selene\renpy\webloader.py__init__[   s    XMLHttpRequest.__init__c                 C   s   t d| j d S )NzRenPyWeb.dl_free({});)r   
run_scriptr   r	   r
   r   r   r   __del__`   s    zXMLHttpRequest.__del__c                 C   s   t d| jS )NzRenPyWeb.dl_get({}).readyStater   r   r   r	   r   r   r   r   
readyStatec   s    XMLHttpRequest.readyStatec                 C   s   t d| jS )NzRenPyWeb.dl_get({}).statusr   r   r   r   r   statusg   s    XMLHttpRequest.statusc                 C   s   t d| jS )NzRenPyWeb.dl_get({}).statusText)r   Zrun_script_stringr   r	   r   r   r   r   
statusTextk   s    XMLHttpRequest.statusTextN)	__name__
__module____qualname__r   r   propertyr   r   r   r   r   r   r   r   Z   s   

r   RENPY_SIMULATE_DOWNLOADFc                   @   s8   e Zd Zdd Zedd Zedd Zedd Zd	S )
r   c                    sB   d_ d _dtj   fdd}tj|dd  d S )NFzhttp://127.0.0.1:8042/game/c               
      s   zt t d  t} tjtj	j
 }tF t|d}|| j W d    n1 sb0    Y  W d    n1 s0    Y  W n` tjy } zt|_W Y d }~n:d }~0  ty } zdt| _W Y d }~n
d }~0 0 d_d S )Ng      ?wbzError: T)timesleeprandomrequestsgetospathjoinrenpyconfiggamedir
queue_lockopenwritecontentZRequestExceptionreprerror	Exceptionstrdone)rfullpathfer   r
   r   r   r   thread_mainy   s    
L$z,XMLHttpRequest.__init__.<locals>.thread_mainr   )targetname)r4   r1   urllibparsequote	threadingThreadstart)r
   r   r:   r   r9   r   r   u   s
    r   c                 C   s   | j r
dS dS d S )N   r   )r4   r   r   r   r   r      s    r   c                 C   s   | j r
dS dS )Nr      r1   r   r   r   r   r      s    r   c                 C   s
   | j pdS )NZOKrE   r   r   r   r   r      s    r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   t   s   

c                   @   s   e Zd Zdd ZdS )DownloadNeededc                 C   s   || _ || _|| _d S )N)relpathrtypesize)r
   rG   rH   rI   r   r   r   r      s    zDownloadNeeded.__init__N)r   r   r   r   r   r   r   r   rF      s   rF   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ReloadRequestc                 C   s(   || _ || _|| _d| _t| j | _d S )Nr   )rG   rH   dataZgc_genr   xhr)r
   rG   rH   rK   r   r   r   r      s
    zReloadRequest.__init__c                 C   s   | j jdkS )NrC   )rL   r   r   r   r   r   download_completed   s    z ReloadRequest.download_completedc                 C   s   d | j| j|  S )Nz<ReloadRequest {} '{}' {}>)r   rH   rG   rM   r   r   r   r   __repr__   s    zReloadRequest.__repr__N)r   r   r   r   rM   rN   r   r   r   r   rJ      s   rJ   c                 C   s  t   tD ]}|j|  kr&dkrLn n"|}|j|kr W d    d S q|j|  krbdkrn n|j| kr W d    d S |j|  krdkrn q|j| kr W d    d S tdd tD tjjkr W d    d S qt	t
| || W d    n1 s0    Y  d S )Nimagemusicvoicec                 S   s   g | ]}|j d krdqS )rQ   T)type).0rrr   r   r   
<listcomp>       zenqueue.<locals>.<listcomp>)r,   queuerH   rK   rG   lenr)   r*   predict_statementsappendrJ   )rG   rH   rK   rT   image_filenamer   r   r   enqueue   s    
$
r\   c               	   C   sp  t sd S t t d d  } g }z| r|  }| sB|| q"|jdkrtjt	j
j|j}tj|std|jjp|d|j||j}t	j| tjt	j
j|j}t t|< q"|jdkrq"|jdkr"tjt	j
j|j}t d t|< q"W ||  a n
||  a 0 W d    n1 s$0    Y  d}t D ]0}t t|  }||kr:t| t|= q:d S )NrO   z Download error: {} ('{}' > '{}')znetwork errorrP   rQ   x   <   )rW   r,   poprM   rZ   rH   r&   r'   r(   r)   r*   r+   rG   existsIOErrorr   rL   r   rK   exportsflush_cache_filer!   	to_unlinkkeysunlink)todoZ	postponedrT   r6   r[   ZttlZdeltar   r   r   process_downloaded_resources   sB    



4

rh   )
__future__r   r)   r&   renpy.displayr@   r!   rW   rd   RLockr,   r   r   r   objectr   environr%   r=   Zurllib.parser#   r$   r2   rF   rJ   r\   rh   r   r   r   r   <module>   s&   
& &