§
   qþb†¡=ã                   óX   — d Z ddlZddlZddlZddlmZ d„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )u¤   
CentrÃ¡lnÃ­ modul pro sprÃ¡vu progressu sledovÃ¡nÃ­ v MyTV.
ZapouzdÅ™uje Ä�tenÃ­/zÃ¡pis progressu a inteligentnÃ­ cache invalidaci
pomocÃ­ fingerprint mechanismu.
é    N)ÚChannelHistoryc                 ó,   — t          j        | |¦  «        S )uÖ   VrÃ¡tÃ­ aktuÃ¡lnÃ­ progress seriÃ¡lu v kanÃ¡lu.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_id: TMDb ID seriÃ¡lu
    
    Returns:
        tuple: (season, episode) nebo (1, 0) pokud neexistuje
    )r   Úget_series_progress)Ú
channel_idÚ	series_ids     úd/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/ProgressManager.pyÚget_progressr	      s   € õ Ô-¨j¸)ÑDÔDÐDó    c                 ó8   — t          j        | |||d¬¦  «         dS )uÀ   Aktualizuje progress seriÃ¡lu v kanÃ¡lu.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_id: TMDb ID seriÃ¡lu
        season: ÄŒÃ­slo sezÃ³ny
        episode: ÄŒÃ­slo epizody
    T)ÚmanualN)r   Úupdate_series_progress)r   r   ÚseasonÚepisodes       r   Úupdate_progressr      s'   € õ Ô)¨*°iÀÈÐY]Ð^Ñ^Ô^Ð^Ð^Ð^r
   c                 óx  — i }|D ]F}t          |                     dd¦  «        ¦  «        }|rt          j        | |¦  «        \  }}||f||<   ŒGt	          |                     ¦   «         ¦  «        }t          j        |d¬¦  «        }t          j	        | 
                    d¦  «        ¦  «                             ¦   «         S )u‚  VypoÄ�Ã­tÃ¡ fingerprint aktuÃ¡lnÃ­ho progressu vÅ¡ech seriÃ¡lÅ¯ v kanÃ¡lu.
    
    Fingerprint je MD5 hash seÅ™azenÃ½ch progress dat. Pokud se progress
    zmÄ›nÃ­ (sledovÃ¡nÃ­, editace), zmÄ›nÃ­ se i fingerprint.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_list: Seznam seriÃ¡lÅ¯ v kanÃ¡lu (list of dicts s 'id')
    
    Returns:
        str: MD5 hash progressu
    ÚidÚ T)Ú	sort_keyszutf-8)ÚstrÚgetr   r   ÚsortedÚitemsÚjsonÚdumpsÚhashlibÚmd5ÚencodeÚ	hexdigest)	r   Úseries_listÚprogress_dataÚseriesr   r   r   Úsorted_dataÚfingerprint_strs	            r   Úcompute_progress_fingerprintr$   ,   sº   € ð €MØð 9ð 9ˆÝ˜Ÿ
š
 4¨Ñ,Ô,Ñ-Ô-ˆ	Øð 	9Ý,Ô@ÀÈYÑWÔW‰OˆF�GØ(.°Ð'8ˆM˜)Ñ$øõ ˜×,Ò,Ñ.Ô.Ñ/Ô/€KÝ”j ¸Ð=Ñ=Ô=€OÝŒ;�×-Ò-¨gÑ6Ô6Ñ7Ô7×AÒAÑCÔCÐCr
   c                 ó`   — t          | |¦  «        }d| › �}|                     ||d¬¦  «         dS )uï   VypoÄ�Ã­tÃ¡ a uloÅ¾Ã­ fingerprint progressu pro kanÃ¡l.
    
    Volat po uloÅ¾enÃ­ program list cache.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_list: Seznam seriÃ¡lÅ¯ v kanÃ¡lu
        cache: CacheManager instance
    Úprogress_fp_i �' )Úttl_secondsN)r$   Úset)r   r   ÚcacheÚfingerprintÚ	cache_keys        r   Úsave_progress_fingerprintr,   F   s>   € õ /¨z¸;ÑGÔG€KØ+˜zÐ+Ð+€Ià	‡I‚Iˆi˜°.€IÑAÔAÐAÐAÐAr
   c                 ó¢   — d| › �}|                      |¦  «        sdS d| › �}|                      |¦  «        }|sdS t          | |¦  «        }||k    S )u¢  ZjistÃ­, zda je program list cache zastaralÃ¡ (progress se zmÄ›nil).
    
    PorovnÃ¡ uloÅ¾enÃ½ fingerprint s aktuÃ¡lnÃ­m. Pokud se liÅ¡Ã­,
    cache je zastaralÃ¡ a mÄ›la by se invalidovat.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_list: Seznam seriÃ¡lÅ¯ v kanÃ¡lu
        cache: CacheManager instance
    
    Returns:
        bool: True pokud je cache zastaralÃ¡ nebo neexistuje fingerprint
    Úprogram_list_Fr&   T)r   r$   )r   r   r)   Úprogram_cache_keyÚfp_keyÚsaved_fpÚ
current_fps          r   Úis_cache_staler3   V   su   € ð 5¨
Ð4Ð4ÐØ�9Š9Ð&Ñ'Ô'ð Øˆuð )˜JÐ(Ð(€FØ�yŠy˜Ñ Ô €HØð Øˆtõ .¨j¸+ÑFÔF€JØ˜Ò!Ð!r
   c                 ó~  — d}| D ]’}|j         }t          |d¦  «        r|j        ng }|sŒ%t          |||¦  «        r\d|› �}|                     |¦  «         d|› �}|                     |¦  «         |dz  }t          j        d|› d�t
          j        ¦  «         Œ“|dk    rt          j        dt
          j        ¦  «         |S )	u¶  Invaliduje program list cache jen pro kanÃ¡ly kde se progress zmÄ›nil.
    
    Pro kaÅ¾dÃ½ kanÃ¡l porovnÃ¡ fingerprint -- pokud se progress nezmÄ›nil,
    cache zÅ¯stane (rychlÃ½ start). Pokud se zmÄ›nil, cache se invaliduje
    (sprÃ¡vnÃ½ program list).
    
    Args:
        channels: Seznam kanÃ¡lÅ¯ (objekty s .id a .series_list)
        cache: CacheManager instance
    
    Returns:
        int: PoÄ�et invalidovanÃ½ch caches
    r   r   r.   r&   é   z$[MyTV] Progress changed for channel z - cache invalidatedz9[MyTV] All program caches are fresh (no progress changes))r   Úhasattrr   r3   ÚdeleteÚxbmcÚlogÚLOGINFO)Úchannelsr)   ÚinvalidatedÚchannelr   r   Úprogram_keyr0   s           r   Úinvalidate_stale_cachesr?   t   só   € ð €Kàð ð ˆØ”Zˆ
Ý-4°W¸mÑ-LÔ-LÐT�gÔ)Ð)ÐRTˆàð 	Øå˜* k°5Ñ9Ô9ð 
	Ø6¨*Ð6Ð6ˆKØ�LŠL˜Ñ%Ô%Ð%à0 JÐ0Ð0ˆFØ�LŠL˜Ñ Ô Ð Ø˜1ÑˆKÝŒHØW°zÐWÐWÐWÝ”ñô ð øð
 �aÒÐÝŒÐLÍdÌlÑ[Ô[Ð[àÐr
   c                 ó²   — d| › �}d| › �}|                      |¦  «         |                      |¦  «         t          j        d| › �t          j        ¦  «         dS )uÖ   VynutÃ­ invalidaci program list cache pro konkrÃ©tnÃ­ kanÃ¡l.
    
    PouÅ¾Ã­vat po editaci progressu (edit progress dialog).
    
    Args:
        channel_id: ID kanÃ¡lu
        cache: CacheManager instance
    r.   r&   z+[MyTV] Force-invalidated cache for channel N)r7   r8   r9   r:   )r   r)   r>   r0   s       r   Úinvalidate_program_cacherA   �   se   € ð / *Ð.Ð.€KØ(˜JÐ(Ð(€FØ	‡L‚L�ÑÔÐØ	‡L‚L�ÑÔÐÝ„HÐG¸:ÐGÐGÍÌÑVÔVÐVÐVÐVr
   )Ú__doc__r   r   r8   Úwcs.air   r	   r   r$   r,   r3   r?   rA   © r
   r   ú<module>rE      sÃ   ððð ð €€€Ø €€€Ø €€€à !Ð !Ð !Ð !Ð !Ð !ð
Eð 
Eð 
Eð	_ð 	_ð 	_ð Dð Dð Dð4Bð Bð Bð "ð "ð "ð<&ð &ð &ðRWð Wð Wð Wð Wr
   