o
    n~bb                     @   s@   d Z ddlZddlmZ edZedZdd Zdd	 ZdS )
a  
Appache file parsing examples:

.. code:: python

    >>> from steam.utils.appcache import parse_appinfo, parse_packageinfo

    >>> header, apps = parse_appinfo(open('/d/Steam/appcache/appinfo.vdf', 'rb'))
    >>> header
    {'magic': b"'DV\x07", 'universe': 1}
    >>> next(apps)
    {'appid': 5,
     'size': 79,
     'info_state': 1,
     'last_updated': 1484735377,
     'access_token': 0,
     'sha1': b'\x87\xfaCg\x85\x80\r\xb4\x90Im\xdc}\xb4\x81\xeeQ\x8b\x825',
     'change_number': 4603827,
     'data': {'appinfo': {'appid': 5, 'public_only': 1}}}

    >>> header, pkgs = parse_packageinfo(open('/d/Steam/appcache/packageinfo.vdf', 'rb'))
    >>> header
    {'magic': b"'UV\x06", 'universe': 1}

    >>> next(pkgs)
    {'packageid': 7,
     'sha1': b's\x8b\xf7n\t\xe5 k#\xb6-\x82\xd2 \x14k@\xfeDQ',
     'change_number': 7469765,
     'data': {'7': {'packageid': 7,
       'billingtype': 1,
       'licensetype': 1,
       'status': 0,
       'extended': {'requirespreapproval': 'WithRedFlag'},
       'appids': {'0': 10, '1': 80, '2': 100, '3': 254430},
       'depotids': {'0': 0, '1': 95, '2': 101, '3': 102, '4': 103, '5': 254431},
       'appitems': {}}}}

    N)binary_loadz<Iz<Qc                    sR     d}|dkrtdt| t  dd } fdd}||d| fS )zParse appinfo.vdf from the Steam appcache folder

    :param fp: file-like object
    :raises: SyntaxError
    :rtype: (:class:`dict`, :class:`Generator`)
    :return: (header, apps iterator)
       s   'DVInvalid magic, got %sr   c                  3   s    	 t  dd } | dkrd S | t  dd t  dd t  dd t dd  dt  dd t d}|V  q)NTr   r         )appidsizeZ
info_stateZlast_updatedZaccess_tokensha1change_numberdatauint32unpackreaduint64r   )r   Zappfp ?/usr/local/lib/python3.10/dist-packages/steam/utils/appcache.py	apps_iterK   s    z parse_appinfo.<locals>.apps_itermagicuniverser   SyntaxErrorreprr   r   )r   r   r   r   r   r   r   parse_appinfo.   s   
r   c                    sT     ddvrtdt t  dd } fdd}|d| fS )zParse packageinfo.vdf from the Steam appcache folder

    :param fp: file-like object
    :raises: SyntaxError
    :rtype: (:class:`dict`, :class:`Generator`)
    :return: (header, packages iterator)
    r   )s   'UV   (UVr   r   c                  3   sz    	 t  dd } | dkrd S |  dt  dd d}dkr3t dd |d	< t |d
< |V  q)NTr   r   l    r   )	packageidr	   r
   r   r   tokenr   r   )r   pkgr   r   r   r   	pkgs_iter   s   z$parse_packageinfo.<locals>.pkgs_iterr   r   )r   r   r"   r   r!   r   parse_packageinfog   s   
r#   )	__doc__structZvdfr   Structr   r   r   r#   r   r   r   r   <module>   s    '

9