§
   Ý½º¢¶üÈã                   ó¦   — d Z 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„Zdd„Zdd„Z	dd„Z
d„ Zdd	„Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„ZdS )u'  
SprÃ¡va historie sledovÃ¡nÃ­ pro jednotlivÃ© MyTV/MyCinema kanÃ¡ly.
KaÅ¾dÃ½ kanÃ¡l mÃ¡ vlastnÃ­ JSON soubor s progressem seriÃ¡lÅ¯/filmÅ¯.

Supported channel_type values:
- 'tv' (default): MyTV channels with series (episodes progress)
- 'cinema': MyCinema channels with movies (watched status)
é    NÚtvc                 ój  — t          j        t          j        ¦   «                              d¦  «        ¦  «        }| dk    r!t
          j                             |d¦  «        }n t
          j                             |d¦  «        }t
          j                             |¦  «        st          j	        |¦  «         |S )u…   
    VrÃ¡tÃ­ cestu k adresÃ¡Å™i s historiemi kanÃ¡lÅ¯.
    
    Args:
        channel_type: 'tv' pro MyTV, 'cinema' pro MyCinema
    ÚprofileÚcinemaÚmycinema_historyÚmytv_history)
ÚxbmcvfsÚtranslatePathÚ	xbmcaddonÚAddonÚgetAddonInfoÚosÚpathÚjoinÚexistsÚmkdirs)Úchannel_typer   Úhistory_dirs      úc/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/ChannelHistory.pyÚ_get_history_dirr      sŽ   € õ Ô#¥I¤OÑ$5Ô$5×$BÒ$BÀ9Ñ$MÔ$MÑNÔN€GØ�xÒÐÝ”g—l’l 7Ð,>Ñ?Ô?ˆˆå”g—l’l 7¨NÑ;Ô;ˆÝŒ7�>Š>˜+Ñ&Ô&ð $ÝŒ�{Ñ#Ô#Ð#ØÐó    c                 ób   — t           j                             t          |¦  «        | › d�¦  «        S )u7   VrÃ¡tÃ­ cestu k JSON souboru historie pro danÃ½ kanÃ¡l.z.json)r   r   r   r   )Ú
channel_idr   s     r   Ú_get_history_filer   $   s*   € åŒ7�<Š<Õ(¨Ñ6Ô6¸:Ð8LÐ8LÐ8LÑMÔMÐMr   c                 óÆ   — 	 ddl m} |                     | dk    rdnd¦  «        r|ndS # t          $ r-}t	          j        d|› �t          j        ¦  «         Y d}~dS d}~ww xY w)z^wcs/library2/shared.py when the library store speaks for the channels of this type, else None.r   )Úsharedr   r   Nz$[MyTV] Shared progress unavailable: )Úwcs.library2r   ÚactiveÚ	ExceptionÚxbmcÚlogÚ
LOGWARNING)r   r   Úexcs      r   Ú_sharedr$   )   s�   € ðØ'Ð'Ð'Ð'Ð'Ð'ØŸš°<À8Ò3KÐ3K x xÐQUÑVÔVÐ`ˆvˆvÐ\`Ð`øÝð ð ð ÝŒÐ=¸Ð=Ð=½t¼ÑOÔOÐOØˆtˆtˆtˆtˆtøøøøðøøøs   ‚&) ©
A ³"AÁA c                 ó’  — t          | |¦  «        }t          j                             |¦  «        si S 	 t	          |dd¬¦  «        5 }t          j        |¦  «        cddd¦  «         S # 1 swxY w Y   dS # t          t
          j        f$ r=}|dk    rdnd}t          j
        |› d| › d	|› �t          j        ¦  «         i cY d}~S d}~ww xY w)
u^  
    NaÄ�te historii sledovÃ¡nÃ­ pro danÃ½ kanÃ¡l (vÅ¾dy soubor kanÃ¡lu, i ve spoleÄ�nÃ©m reÅ¾imu).
    
    Args:
        channel_id: ID kanÃ¡lu
        channel_type: 'tv' pro MyTV, 'cinema' pro MyCinema
    
    Returns:
        dict: Pro TV: {series_id: {"season": int, "episode": int}}
              Pro Cinema: {movie_id: {"watched": bool}}
    Úrúutf-8)ÚencodingNr   ú
[MyCinema]ú[MyTV]z Error loading channel history ú: )r   r   r   r   ÚopenÚjsonÚloadÚIOErrorÚJSONDecodeErrorr    r!   r"   )r   r   Ú	file_pathÚfÚeÚ
log_prefixs         r   Úload_channel_historyr5   3   s)  € õ " *¨lÑ;Ô;€IÝŒ7�>Š>˜)Ñ$Ô$ð Øˆ	ðÝ�)˜S¨7Ð3Ñ3Ô3ð 	 °qÝ”9˜Q‘<”<ð	 ð 	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øå•TÔ)Ð*ð ð ð Ø%1°XÒ%=Ð%=�\�\À8ˆ
ÝŒ�JÐPÐP¸zÐPÐPÈQÐPÐPÕRVÔRaÑbÔbÐbØˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøsA   ³A3 ÁA&ÁA3 Á&A*Á*A3 Á-A*Á.A3 Á3CÂ	2CÂ;CÃCc                 ó´   — 	 ddl m}  || dk    rdhnddh¦  «         dS # t          $ r-}t          j        d|› �t          j        ¦  «         Y d}~dS d}~ww xY w)	zJHistory affects local channel rows, not the cinema recommendation sources.r   )Úchangedr   Úwidget_mycinema_channelsÚwidget_mytv_channelsÚwidget_mytv_nextu2   [MilionÃ¡Å™ Skin] Channel history refresh failed: N)Úwcs.skin.refreshr7   r   r    r!   r"   )r   r7   r#   s      r   Ú_history_changedr<   L   s©   € ð^Ø,Ð,Ð,Ð,Ð,Ð,Øˆ°ÀÒ0HÐ0HÐ+Ð,Ð,Ø"Ð$6ðO8ñ 	9ô 	9ð 	9ð 	9ð 	9øåð ^ð ^ð ^ÝŒÐKÀcÐKÐKÍTÌ_Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]øøøøð^øøøs   ‚   
Aª"AÁAc                 óx  — t          | |¦  «        }t          | |¦  «        |k    rdS d}	 t          j        ddt          j                             |¦  «        dd¬¦  «        5 }|j        }t          j	        ||dd¬¦  «         ddd¦  «         n# 1 swxY w Y   t	          j
        ||¦  «         d}t          |¦  «         nH# t          $ r;}|d	k    rd
nd}t          j        |› d| › d|› �t          j        ¦  «         Y d}~nd}~ww xY w|rt	          j        |¦  «         dS dS # |rt	          j        |¦  «         w w xY w)uÃ   
    UloÅ¾Ã­ historii sledovÃ¡nÃ­ pro danÃ½ kanÃ¡l.
    
    Args:
        channel_id: ID kanÃ¡lu
        history: dict s historiÃ­
        channel_type: 'tv' pro MyTV, 'cinema' pro MyCinema
    NÚwr'   z.tmpF)Úmoder(   ÚdirÚsuffixÚdeleteé   )Úensure_asciiÚindentr   r)   r*   z Error saving channel history r+   )r   r5   ÚtempfileÚNamedTemporaryFiler   r   ÚdirnameÚnamer-   ÚdumpÚreplacer<   r/   r    r!   ÚLOGERRORÚremove)r   Úhistoryr   r1   Ú	temporaryr2   r3   r4   s           r   Úsave_channel_historyrP   V   s×  € õ " *¨lÑ;Ô;€IÝ˜J¨Ñ5Ô5¸Ò@Ð@ØˆØ€Ið!ÝÔ(¨c¸GÍÌÏÊÐYbÑIcÔIcØ06¸uðFñ Fô Fð 	@ØIJØœˆIÝŒI�g˜q¨u¸QÐ?Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@õ 	Œ
�9˜iÑ(Ô(Ð(Øˆ	Ý˜Ñ&Ô&Ð&Ð&øÝð `ð `ð `Ø%1°XÒ%=Ð%=�\�\À8ˆ
ÝŒ�JÐOÐO¸jÐOÐOÈAÐOÐOÕQUÔQ^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_øøøøð`øøøð ð 	!ÝŒI�iÑ Ô Ð Ð Ð ð	!ð 	!øˆ9ð 	!ÝŒI�iÑ Ô Ð Ð ð	!øøøsS   ª6B> Á  BÂ B> ÂBÂB> ÂBÂ)B> Â=D  Â>
DÃ1C>Ã9D  Ã>DÄD  Ä D9Fc                 óš  — |rKt          |¦  «        }|r:|                     |||¦  «        s#t          j        d|› d�t          j        ¦  «         t          | |¦  «        }t          |¦  «        t          |¦  «        dœ|t          |¦  «        <   t          | ||¦  «         t          j        d| › d|› d|d›d|d›�t          j	        ¦  «         d	S )
u¸  
    Aktualizuje progress seriÃ¡lu v kanÃ¡lu (pouze pro MyTV).
    
    Args:
        channel_id: ID kanÃ¡lu
        series_id: TMDb ID seriÃ¡lu (bude pÅ™evedeno na string)
        season: ÄŒÃ­slo sezÃ³ny
        episode: ÄŒÃ­slo epizody
        channel_type: 'tv' pro MyTV (default)
        manual: ruÄ�nÃ­ Ãºprava postupu (ve spoleÄ�nÃ©m reÅ¾imu se zapÃ­Å¡e i do knihovny;
                pÅ™ehrÃ¡vÃ¡nÃ­ tam zapisuje tracker sluÅ¾by)
    z![MyTV] Shared progress of series z not set: no episode list©ÚseasonÚepisodez![MyTV] Updated progress: channel=z	, series=z, SÚ02dÚEN)
r$   Úset_pointerr    r!   r"   r5   ÚintÚstrrP   ÚLOGINFO)r   Ú	series_idrS   rT   r   Úmanualr   rN   s           r   Úupdate_series_progressr]   s   sð   € ð ð pÝ˜Ñ&Ô&ˆØð 	p˜&×,Ò,¨Y¸ÀÑHÔHð 	pÝŒHÐ]¸Ð]Ð]Ð]Õ_cÔ_nÑoÔoÐoÝ" :¨|Ñ<Ô<€Gå�f‘+”+Ý�w‘<”<ðð €G�C�	‰NŒNÑõ ˜ W¨lÑ;Ô;Ð;Ý„HÐn°ÐnÐnÀiÐnÐnÐTZÐnÐnÐnÐahÐnÐnÐnÕptÔp|Ñ}Ô}Ð}Ð}Ð}r   Tc                 óº   — t          | d¦  «        }d|i|t          |¦  «        <   t          | |d¦  «         t          j        d|› d| › �t          j        ¦  «         dS )u¶   
    OznaÄ�Ã­ film jako zhlÃ©dnutÃ½ v MyCinema kanÃ¡lu.
    
    Args:
        channel_id: ID kanÃ¡lu/kina
        movie_id: TMDb ID filmu
        watched: True pokud zhlÃ©dnuto
    r   Úwatchedz[MyCinema] Marked movie z as watched in channel N)r5   rY   rP   r    r!   rZ   )r   Úmovie_idr_   rN   s       r   Úmark_movie_watchedra   �   sg   € õ # :¨xÑ8Ô8€GØ'¨Ð1€G�C�‰MŒMÑÝ˜ W¨hÑ7Ô7Ð7Ý„HÐU¨ÐUÐUÈÐUÐUÕW[ÔWcÑdÔdÐdÐdÐdr   c                 óà   — t          d¦  «        }|r|                     |¦  «        S t          | d¦  «        }|                     t	          |¦  «        i ¦  «        }|                     dd¦  «        S )uÕ   
    ZjistÃ­, zda byl film zhlÃ©dnut v danÃ©m MyCinema kanÃ¡lu.
    
    Args:
        channel_id: ID kanÃ¡lu/kina
        movie_id: TMDb ID filmu
    
    Returns:
        bool: True pokud byl film zhlÃ©dnut
    r   r_   F)r$   Úmovie_watchedr5   ÚgetrY   )r   r`   r   rN   Ú
movie_datas        r   Úis_movie_watchedrf   œ   si   € õ �XÑÔ€FØð .Ø×#Ò# HÑ-Ô-Ð-Ý" :¨xÑ8Ô8€GØ—’�S ™]œ]¨BÑ/Ô/€JØ�>Š>˜) UÑ+Ô+Ð+r   c                 ó  — t          |¦  «        }|r|                     |¦  «        S t          | |¦  «        }|                     t	          |¦  «        i ¦  «        }|                     dd¦  «        |                     dd¦  «        fS )u	  
    VrÃ¡tÃ­ aktuÃ¡lnÃ­ progress seriÃ¡lu v kanÃ¡lu.
    
    Args:
        channel_id: ID kanÃ¡lu
        series_id: TMDb ID seriÃ¡lu
        channel_type: 'tv' pro MyTV (default)
    
    Returns:
        tuple: (season, episode) nebo (1, 0) pokud neexistuje
    rS   é   rT   r   )r$   Úpointerr5   rd   rY   )r   r[   r   r   rN   Úprogresss         r   Úget_series_progressrk   ¯   s   € õ �\Ñ"Ô"€FØð )Ø�~Š~˜iÑ(Ô(Ð(Ý" :¨|Ñ<Ô<€GØ�{Š{�3˜y™>œ>¨2Ñ.Ô.€Hà�Š�X˜qÑ!Ô!Ø�Š�Y Ñ"Ô"ðð r   c                 óÔ  — t          | ¦  «        }t          |¦  «        }||vrdddœ||<   t          t          |¦  «        d¦  «        ||         d<   t          t          |¦  «        d¦  «        ||         d<   t	          |¦  «        ||         d<   t	          |¦  «        ||         d<   t          | |¦  «         t          j        d| › d	|› d
|› d|› d|› d|› �t          j        ¦  «         dS )a4  
    Ulozi resume pozici rozkoukane epizody.
    
    Args:
        channel_id: ID kanalu
        series_id: TMDb ID serialu
        season: Sezona rozkoukane epizody
        episode: Cislo rozkoukane epizody
        position: Aktualni pozice v sekundach
        total: Celkova delka epizody v sekundach
    rh   r   rR   Úresume_positionÚresume_totalÚresume_sÚresume_ez,[DEBUG] ChannelHistory.set_resume_point: ch=z tmdb=z SrV   z pos=z total=N)	r5   rY   ÚroundÚfloatrX   rP   r    r!   rZ   )r   r[   rS   rT   ÚpositionÚtotalrN   Úsids           r   Úset_resume_pointrv   Æ   s@  € õ # :Ñ.Ô.€GÝ
ˆi‰.Œ.€CØ
�'ÐÐØ"#°Ð2Ð2ˆ�‰Ý&+­E°(©O¬O¸QÑ&?Ô&?€GˆC„LÐ"Ñ#Ý#(­¨u©¬°qÑ#9Ô#9€GˆC„L�Ñ Ý" 6™{œ{€GˆC„L�ÑÝ" 7™|œ|€GˆC„L�ÑÝ˜ WÑ-Ô-Ð-å„Hð  K¸Jð  Kð  KÈið  Kð  KÐ[að  Kð  KÐdkð  Kð  KÐrzð  Kð  Kð  DIð  Kð  Kõ  MQô  MYñ  Zô  Zð  Zð  Zð  Zr   c                 ój  — t          ¦   «         }|r|                     |¦  «        S t          | ¦  «        }|                     t	          |¦  «        i ¦  «        }d|vrdS |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        dœS )	zÙ
    Vrati resume data rozkoukane epizody.
    
    Args:
        channel_id: ID kanalu
        series_id: TMDb ID serialu
    
    Returns:
        dict s klici 'season', 'episode', 'position', 'total' nebo None
    rm   Nro   rh   rp   r   rn   ©rS   rT   rs   rt   )r$   Úresumer5   rd   rY   )r   r[   r   rN   Údatas        r   Úget_resume_pointr{   ß   s±   € õ ‰YŒY€FØð (Ø�}Š}˜YÑ'Ô'Ð'Ý" :Ñ.Ô.€GØ�;Š;•s˜9‘~”~ rÑ*Ô*€DØ Ð$Ð$Øˆtà—(’(˜: qÑ)Ô)Ø—8’8˜J¨Ñ*Ô*Ø—H’HÐ.°Ñ2Ô2Ø—’˜.¨!Ñ,Ô,ð	ð ð r   c                 óh  — t          d¦  «        }|r|                     |¦  «        S t          | ¦  «                             t	          |¦  «        i ¦  «        }d|vrdS |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        d	œS )
z�
    Vrati resume data rozkoukaneho filmu v MyCinema: ve spolecnem rezimu z knihovny,
    jinak ze souboru kanalu (jako get_resume_point).
    r   rm   Nro   rh   rp   r   rn   rx   )r$   Úmovie_resumer5   rd   rY   )r   r`   r   rz   s       r   Úget_movie_resume_pointr~   ù   s¶   € õ
 �XÑÔ€FØð -Ø×"Ò" 8Ñ,Ô,Ð,Ý 
Ñ+Ô+×/Ò/µ°H±´¸rÑBÔB€DØ Ð$Ð$ØˆtØ—h’h˜z¨1Ñ-Ô-¸$¿(º(À:ÈqÑ:QÔ:QØŸšÐ!2°AÑ6Ô6ÀÇÂÈ.ÐZ[ÑA\ÔA\ð^ð ^ð ^r   c                 ó°   — t          | ¦  «        }t          |¦  «        }||v r3dD ]}||                              |d¦  «         Œt          | |¦  «         dS dS )z‚
    Smaze resume pozici (epizoda shlednuta).
    
    Args:
        channel_id: ID kanalu
        series_id: TMDb ID serialu
    )rm   rn   ro   rp   N)r5   rY   ÚpoprP   )r   r[   rN   ru   Úkeys        r   Úclear_resume_pointr‚     sn   € õ # :Ñ.Ô.€GÝ
ˆi‰.Œ.€CØ
ˆg€~€~ØNð 	(ð 	(ˆCØ�CŒL×Ò˜S $Ñ'Ô'Ð'Ð'Ý˜Z¨Ñ1Ô1Ð1Ð1Ð1ð €~r   c                 ó¬  — t          | |¦  «        }|dk    rdnd}t          j                             |¦  «        rš	 t	          | |¦  «        }t          j        |¦  «         |rt          |¦  «         t          j        |› d| › �t          j	        ¦  «         dS # t          $ r1}t          j        |› d| › d|› �t          j        ¦  «         Y d}~nd}~ww xY wd	S )
u©   
    SmaÅ¾e historii kanÃ¡lu (volat pÅ™i mazÃ¡nÃ­ kanÃ¡lu).
    
    Args:
        channel_id: ID kanÃ¡lu
        channel_type: 'tv' pro MyTV, 'cinema' pro MyCinema
    r   r)   r*   z Deleted channel history: Tz  Error deleting channel history r+   NF)r   r   r   r   r5   rM   r<   r    r!   rZ   ÚOSErrorrL   )r   r   r1   r4   rN   r3   s         r   Údelete_channel_historyr…     s  € õ " *¨lÑ;Ô;€IØ!-°Ò!9Ð!9��¸x€JÝ	„w‡~‚~�iÑ Ô ð 	fð	fÝ*¨:°|ÑDÔDˆGÝŒI�iÑ Ô Ð Øð /Ý  Ñ.Ô.Ð.ÝŒH˜
ÐJÐJ¸jÐJÐJÍDÌLÑYÔYÐYØ�4øÝð 	fð 	fð 	fÝŒH˜
ÐUÐUÀJÐUÐUÐRSÐUÐUÕW[ÔWdÑeÔeÐeÐeÐeÐeÐeÐeøøøøð	føøøàˆ5s   »AB Â
CÂ 'CÃC)r   )r   F)T)Ú__doc__r   r-   rF   r    r	   r   r   r   r$   r5   r<   rP   r]   ra   rf   rk   rv   r{   r~   r‚   r…   © r   r   ú<module>rˆ      sw  ððð ð 
€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð ðð ð ð ð"Nð Nð Nð Nð
ð ð ð ðð ð ð ð2^ð ^ð ^ð!ð !ð !ð !ð:~ð ~ð ~ð ~ð4eð eð eð eð,ð ,ð ,ð&ð ð ð ð.Zð Zð Zð2ð ð ð4^ð ^ð ^ð2ð 2ð 2ð ð ð ð ð ð r   