§
   k¿³’’ã                   ó~   — d Z ddlZddlmZ dZdZdd„Zdd„Zdd	„Zdd
„Z	dd„Z
dd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )u  TMDb data for the library through the meta cache (docs/plan/milionar-library/030 Â§3).

Reads serve a stale entry; only a never-seen key is fetched inline (the user explicitly started a play or opened a
listing). Network code is imported lazily so the offline tests never touch it.
é    N)Úmetazhttps://image.tmdb.org/t/p/w500z https://image.tmdb.org/t/p/w1280c                 óÌ   — dd l }ddlm} |                     d¦  «        }t	          |pi ¦  «        }|                      d¦  «        \  }}}|                     ||||¦  «        }|pd S )Nr   )Ú
TMDbClientzplugin.video.milionarú/)Ú	xbmcaddonÚwcs.metadatar   ÚAddonÚdictÚ	partitionÚfetch_tmdb_item_detail)	ÚpathÚparamsr   r   ÚaddonÚmediaÚ_slashÚrestÚdatas	            ú_/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/tmdb.pyÚ_fetchr      s~   € ØÐÐÐØ'Ð'Ð'Ð'Ð'Ð'Ø�OŠOÐ3Ñ4Ô4€EÝ�&�,˜BÑÔ€FØŸ.š.¨Ñ-Ô-Ñ€Eˆ6�4Ø×,Ò,¨U°D¸&À%ÑHÔH€DØˆ<�4Ðó    Fc           	      óÐ  — t          j        | ¦  «        \  }}|�|� ||¦  «        r|S 	  |pt          ||¦  «        }|r$|s"t          d                     |¦  «        ¦  «        ‚na# t
          $ rT}	|r‚ t          j        d                     |t          |	¦  «        j	        |	¦  «        t          j
        ¦  «         Y d}	~	dS d}	~	ww xY w|rt          j        | | ||¦  «        ¦  «         |S )a5  Cached TMDb data; an entry that lacks what `complete(data)` demands counts as missing (and is refetched).

    `strict` (listings the user opened) raises on a failed download so the caller can show the usual TMDb error
    dialog; otherwise failures give None (playback and background code cope with it).
    Nu   TMDb nevrÃ¡tilo data ({})u+   [MilionÃ¡Å™ Library] TMDb {} failed: {}: {})r   Úgetr   ÚRuntimeErrorÚformatÚ	ExceptionÚxbmcÚlogÚtypeÚ__name__Ú
LOGWARNINGÚput)
Úkeyr   Úttl_ofr   ÚfetchÚcompleteÚstrictr   Ú_staleÚexcs
             r   Ú_cachedr)      s  € õ ”8˜C‘=”=�L€Dˆ&ØÐ˜XÐ-°°¸$±´Ð-ØˆðØ���  vÑ.Ô.ˆØð 	I˜$ð 	IÝÐ:×AÒAÀ$ÑGÔGÑHÔHÐHøøÝð ð ð Øð 	ØÝŒÐ>×EÒEÀdÍDÐQTÉIÌIÔL^Ð`cÑdÔdÕfjÔfuÑvÔvÐvØˆtˆtˆtˆtˆtøøøøð	øøøð
 ð *ÝŒ��d˜F˜F 4™LœLÑ)Ô)Ð)Ø€Ks   ª9A$ Á$
CÁ.A	B=Â=Cc                 ó–   — t          t          j        | ¦  «        d                     t	          | ¦  «        ¦  «        d„ ddi|d„ ¦  «        S )Númovie/{}c                 ó   — t           j        S ©N)r   Ú	TTL_MOVIE©Úds    r   ú<lambda>zmovie.<locals>.<lambda>1   s
   € ÕW[ÔWe€ r   Úappend_to_responseÚcreditsc                 ó
   — d| v S )NÚgenres© r/   s    r   r1   zmovie.<locals>.<lambda>2   s   € ÀxÐSTÀ}€ r   )r)   r   Ú	key_movier   Úint)Útmdb_idr$   s     r   Úmovier:   0   sO   € Ý•4”> 'Ñ*Ô*¨J×,=Ò,=½cÀ'¹l¼lÑ,KÔ,KÐMeÐMeØ(¨)Ð4°eÐ=TÐ=TñVô Vð Vr   c           	      ó”   — t          t          j        | ¦  «        d                     t	          | ¦  «        ¦  «        d„ d |d„ |¦  «        S )Nútv/{}c                 óP   — t          j        |                      d¦  «        ¦  «        S ©NÚstatus©r   Úttl_for_statusr   r/   s    r   r1   zshow.<locals>.<lambda>7   s   € �TÔ0°·²°x±´ÑAÔA€ r   c                 ó
   — d| v S )NÚseasonsr6   r/   s    r   r1   zshow.<locals>.<lambda>7   s   € ÐZcÐghÐZh€ r   )r)   r   Úkey_tvr   r8   )r9   r$   r&   s      r   ÚshowrE   5   sJ   € Ý•4”;˜wÑ'Ô'¨¯ª½¸G¹¼Ñ)EÔ)EØAÐAÀ4ÈÐPhÐPhÐjpñrô rð rr   c           	      ó
  ‡ ‡— ‰ dk    rt          j        |¦  «        nt          j        |¦  «        }dŠt          |d                     ‰ t          |¦  «        ¦  «        ˆ fd„dd                     ‰¦  «        i|ˆfd„d¬	¦  «        S )
zNFull skin detail in the same canonical cache as playback; rows never fetch it.r:   )r3   ÚvideosÚrecommendationsÚsimilarz{}/{}c                 óv   •— ‰dk    rt           j        n&t          j        |                      d¦  «        ¦  «        S )Nr:   r?   )r   r.   rA   r   )r0   r   s    €r   r1   zdetail.<locals>.<lambda>?   s2   ø€ ¨u¸Ò/?Ð/?�Tœ^˜^ÅTÔEXÐYZ×Y^ÒY^Ð_gÑYhÔYhÑEiÔEi€ r   r2   ú,c                 ó<   •‡ — t          ˆ fd„‰D ¦   «         ¦  «        S )Nc              3   óh   •K  — | ],}t          ‰                     |¦  «        t          ¦  «        V — Œ-d S r-   )Ú
isinstancer   r
   )Ú.0Úfieldr0   s     €r   ú	<genexpr>z+detail.<locals>.<lambda>.<locals>.<genexpr>A   s7   øè è € Ð TÐ TÀE¥¨A¯EªE°%©L¬L½$Ñ!?Ô!?Ð TÐ TÐ TÐ TÐ TÐ Tr   )Úall)r0   Úfieldss   `€r   r1   zdetail.<locals>.<lambda>A   s%   øø€ �SÐ TÐ TÐ TÐ TÈVÐ TÑ TÔ TÑTÔT€ r   T)r&   )r   r7   rD   r)   r   r8   Újoin)r   r9   r$   r"   rS   s   `   @r   ÚdetailrU   :   s•   øø€ à%*¨gÒ%5Ð%5�$Œ.˜Ñ
!Ô
!Ð
!½4¼;ÀwÑ;OÔ;O€CØ@€FÝ�3˜Ÿš u­c°'©l¬lÑ;Ô;ØiÐiÐiÐiØ(¨#¯(ª(°6Ñ*:Ô*:Ð;¸UØTÐTÐTÐTÐ]aðcñ cô cð cr   c           	      ó  ‡— t          j        t          j        | ¦  «        ¦  «        d         pi Št          t          j        | |¦  «        d                     t          | ¦  «        t          |¦  «        ¦  «        ˆfd„d |d„ |¦  «        S )Nr   útv/{}/season/{}c                 óR   •— t          j        ‰                     d¦  «        ¦  «        S r>   r@   )r0   Ú	show_datas    €r   r1   zseason.<locals>.<lambda>G   s   ø€ �TÔ0°·²¸xÑ1HÔ1HÑIÔI€ r   c                 ó
   — d| v S )NÚepisodesr6   r/   s    r   r1   zseason.<locals>.<lambda>G   s   € ÐblÐpqÐbq€ r   )r   r   rD   r)   Ú
key_seasonr   r8   )r9   Únumberr$   r&   rY   s       @r   Úseasonr^   D   s‡   ø€ Ý”�œ WÑ-Ô-Ñ.Ô.¨qÔ1Ð7°R€IÝ•4”? 7¨FÑ3Ô3Ð5F×5MÒ5MÍcÐRYÉlÌlÕ\_Ð`fÑ\gÔ\gÑ5hÔ5hØIÐIÐIÐIÈ4ÐQVÐXqÐXqÐsyñ{ô {ð {r   c                 ób  — |pt           } |d                     t          | ¦  «        ¦  «        d¦  «        }t          |t          ¦  «        r(t          |                     d¦  «        t          ¦  «        st          d¦  «        ‚t          j	        |                     d¦  «        ¦  «        }t          j
        | ¦  «        ||fg}|                     d¦  «        pg D �]7}t          |                     dd¦  «        ¦  «        }|dk    rŒ-ddlm} |                     ¦   «           |d	                     t          | ¦  «        |¦  «        d¦  «        }t          |t          ¦  «        r(t          |                     d
¦  «        t          ¦  «        st          d¦  «        ‚t          |                     d¦  «        pd¦  «        }	t          |d
         ¦  «        |	k     rt          d¦  «        ‚|                     t          j        | |¦  «        ||f¦  «         �Œ9t          j        |¦  «         d„ |D ¦   «         S )ziForce a fresh `tv:<id>` and its regular seasons into the cache (service refresher). Returns keys written.r<   NrC   zIncomplete series metadatar?   Úseason_numberr   )Ú	userfirstrW   r[   zIncomplete season metadataÚepisode_countzIncomplete episode metadatac                 ó   — g | ]\  }}}|‘Œ	S r6   r6   )rO   r"   Ú_dataÚ_ttls       r   ú
<listcomp>z refresh_show.<locals>.<listcomp>`   s   € Ð0Ð0Ð0Ñ$�C˜ ˆCÐ0Ð0Ð0r   )r   r   r8   rN   r
   r   Úlistr   r   rA   rD   Úwcs.skinra   ÚbreatheÚlenÚappendr\   Úput_many)
r9   r$   r   ÚttlÚentriesÚentryr]   ra   Úseason_dataÚexpecteds
             r   Úrefresh_showrr   J   s  € àˆO•V€EØˆ5�—’¥ G¡¤Ñ-Ô-¨tÑ4Ô4€DÝ�d�DÑ!Ô!ð 9­°D·H²H¸YÑ4GÔ4GÍÑ)NÔ)Nð 9ÝÐ7Ñ8Ô8Ð8Ý
Ô
˜dŸhšh xÑ0Ô0Ñ
1Ô
1€CÝ”˜GÑ$Ô$ d¨CÐ0Ð1€GØ—’˜)Ñ$Ô$Ð*¨ð Mñ MˆÝ�U—Y’Y˜°Ñ2Ô2Ñ3Ô3ˆØ�QŠ;ˆ;ØØ&Ð&Ð&Ð&Ð&Ð&Ø×ÒÑÔÐØ�eÐ-×4Ò4µS¸±\´\À6ÑJÔJÈDÑQÔQˆÝ˜+¥tÑ,Ô,ð 	=µJ¸{¿ºÈzÑ?ZÔ?ZÕ\`Ñ4aÔ4að 	=ÝÐ;Ñ<Ô<Ð<Ý�u—y’y Ñ1Ô1Ð6°QÑ7Ô7ˆÝˆ{˜:Ô&Ñ'Ô'¨(Ò2Ð2ÝÐ<Ñ=Ô=Ð=Ø�Š�œ¨°Ñ8Ô8¸+ÀsÐKÑLÔLÐLÑLÝ„M�'ÑÔÐØ0Ð0¨Ð0Ñ0Ô0Ð0r   c                 ól  —  |pt           d                     t          | ¦  «        ¦  «        ddi¦  «        }t          |t          ¦  «        r(t          |                     d¦  «        t          ¦  «        st          d¦  «        ‚t          j	        t          j
        | ¦  «        |t          j        ¦  «         |S )Nr+   r2   r3   r5   zIncomplete movie metadata)r   r   r8   rN   r
   r   rg   r   r   r!   r7   r.   )r9   r$   r   s      r   Úrefresh_moviert   c   s•   € ØˆEˆO•V˜Z×.Ò.­s°7©|¬|Ñ<Ô<Ð?SÐU^Ð>_Ñ`Ô`€DÝ�d�DÑ!Ô!ð 8­°D·H²H¸XÑ4FÔ4FÍÑ)MÔ)Mð 8ÝÐ6Ñ7Ô7Ð7Ý„H�TŒ^˜GÑ$Ô$ d­D¬NÑ;Ô;Ð;Ø€Kr   c                 ó’   — t          t          j        | ¦  «        d                     t	          | ¦  «        ¦  «        d„ d |d„ ¦  «        S )Nzcollection/{}c                 ó   — t           j        S r-   )r   ÚTTL_COLLECTIONr/   s    r   r1   zcollection.<locals>.<lambda>m   s	   € �TÔ0€ r   c                 ó
   — d| v S )NÚpartsr6   r/   s    r   r1   zcollection.<locals>.<lambda>m   s   € ÈÐTUÈ€ r   )r)   r   Úkey_collectionr   r8   )Úcollection_idr$   s     r   Ú
collectionr|   k   sM   € Ý•4Ô& }Ñ5Ô5°×7MÒ7MÍcÐR_ÑN`ÔN`Ñ7aÔ7aØ0Ð0°$¸Ð?UÐ?UñWô Wð Wr   c                 óN  — t          | |¦  «        }|sdS |                     d¦  «        pi                      d¦  «        pg }t          d„ |D ¦   «         d¦  «        }|                     d¦  «        pd}|                     d¦  «        p|                     d¦  «        pd|dd	…         |                     d
d¦  «        |                     d¦  «        rt          |d         z   n|                     d¦  «        pd|                     d¦  «        rt          |d         z   nd|                     d¦  «        rd                     |d         ¦  «        ndd                     d„ |                     d¦  «        pg D ¦   «         ¦  «        |t          |                     d¦  «        pd¦  «        dœ	S )zlFlat dict the playing code needs: title, year, plot, poster, fanart, rating, genre, director, runtime (min).Nr3   Úcrewc              3   ót   K  — | ]3}|                      d ¦  «        dk    ¯|                      dd¦  «        V — Œ4dS )ÚjobÚDirectorÚnameÚ N©r   )rO   Úcs     r   rQ   zmovie_info.<locals>.<genexpr>v   sD   è è € ÐSÐS¨1¸¿º¸e¹¼È
Ò8RÐ8R�Q—U’U˜6 2Ñ&Ô&Ð8RÐ8RÐ8RÐ8RÐSÐSr   rƒ   Úrelease_dateÚtitler‚   é   ÚoverviewÚposter_pathÚposterÚbackdrop_pathÚvote_averageú{:.1f}ú, c              3   óB   K  — | ]}|                      d d¦  «        V — ŒdS ©r‚   rƒ   Nr„   ©rO   Úgs     r   rQ   zmovie_info.<locals>.<genexpr>|   s0   è è € ÐSÐS°Q˜qŸušu V¨RÑ0Ô0ÐSÐSÐSÐSÐSÐSr   r5   Úruntime)	r‡   ÚyearÚplotr‹   ÚfanartÚratingÚgenreÚdirectorr”   )r:   r   ÚnextÚPOSTERÚBACKDROPr   rT   Ústr)r9   r$   r   r~   rš   Údates         r   Ú
movie_infor    p   s§  € å�˜%Ñ Ô €DØð ØˆtØ�XŠX�iÑ Ô Ð& B×+Ò+¨FÑ3Ô3Ð:¸€DÝÐSÐS°ÐSÑSÔSÐUWÑXÔX€HØ�8Š8�NÑ#Ô#Ð) r€DØ—X’X˜gÑ&Ô&Ð@¨$¯(ª(°6Ñ*:Ô*:Ð@¸bÈ$ÈrÐPQÈrÌ(Ð\`×\dÒ\dÐeoÐqsÑ\tÔ\tØ6:·h²h¸}Ñ6MÔ6MÐm•f˜t MÔ2Ñ2Ð2ÐTX×T\ÒT\Ð]eÑTfÔTfÐTlÐjlØ:>¿(º(À?Ñ:SÔ:SÐ[•h  oÔ!6Ñ6Ð6ÐY[Ø?C¿xºxÈÑ?WÔ?WÐ_�h—o’o d¨>Ô&:Ñ;Ô;Ð;Ð]_Ø—Y’YÐSÐS¸$¿(º(À8Ñ:LÔ:LÐ:RÐPRÐSÑSÔSÑSÔSÐaiÝ˜4Ÿ8š8 IÑ.Ô.Ð4°"Ñ5Ô5ð7ð 7ð 7r   c                 ó>  ‡— t          | |¦  «        }|sdS t          | ||¦  «        pi }t          ˆfd„|                     d¦  «        pg D ¦   «         i ¦  «        }|                     d¦  «        pd}|                     dd¦  «        |dd…         |                     d¦  «        p|                     dd¦  «        |                     d	¦  «        rt          |d	         z   nd|                     d
¦  «        rt
          |d
         z   nd|                     d¦  «        rd                     |d         ¦  «        ndd                     d„ |                     d¦  «        pg D ¦   «         ¦  «        |                     d¦  «        pd                     ‰¦  «        |                     d¦  «        rt          |d         z   ndt          |                     d¦  «        p|                     d¦  «        pdgd         pd¦  «        |                     dd¦  «        t          | ¦  «        dœS )zLFlat dict for one episode (plus show fields); None when the show is unknown.Nc              3   óh   •K  — | ],}|                      d ¦  «        t          ‰¦  «        k    ¯(|V — Œ-dS )Úepisode_numberN)r   r8   )rO   Úer£   s     €r   rQ   zepisode_info.<locals>.<genexpr>†   sD   øè è € ÐsÐs˜!ÀAÇEÂEÐJZÑD[ÔD[Õ_bÐcqÑ_rÔ_rÒDrÐDr�AÐDrÐDrÐDrÐDrÐsÐsr   r[   Úfirst_air_daterƒ   r‚   rˆ   r‰   rŠ   rŒ   r�   rŽ   r�   c              3   óB   K  — | ]}|                      d d¦  «        V — ŒdS r‘   r„   r’   s     r   rQ   zepisode_info.<locals>.<genexpr>�   s0   è è € ÐXÐX°Q˜qŸušu V¨RÑ0Ô0ÐXÐXÐXÐXÐXÐXr   r5   z
Epizoda {}Ú
still_pathr”   Úepisode_run_timer   Úair_date)Úseries_namer•   r–   r‹   r—   r˜   r™   Úepisode_titleÚepisode_thumbr”   r©   r9   )	rE   r^   r›   r   rœ   r�   r   rT   rž   )Úshow_idr`   r£   r$   rY   rp   ÚepisoderŸ   s     `     r   Úepisode_infor¯   €   s  ø€ å�W˜eÑ$Ô$€IØð ØˆtÝ˜ -°Ñ7Ô7Ð=¸2€KÝÐsÐsÐsÐs˜{Ÿš¨zÑ:Ô:Ð@¸bÐsÑsÔsÐuwÑxÔx€GØ�=Š=Ð)Ñ*Ô*Ð0¨b€DØ$Ÿ=š=¨°Ñ4Ô4¸dÀ2ÀAÀ2¼hØ—K’K 
Ñ+Ô+ÐL¨y¯}ª}¸ZÈÑ/LÔ/LØ;D¿=º=ÈÑ;WÔ;WÐ_•f˜y¨Ô7Ñ7Ð7Ð]_Ø?H¿}º}È_Ñ?]Ô?]Ðe•h ¨?Ô!;Ñ;Ð;ÐceØDMÇMÂMÐR`ÑDaÔDaÐi�h—o’o i°Ô&?Ñ@Ô@Ð@ÐgiØ—Y’YÐXÐX¸)¿-º-ÈÑ:QÔ:QÐ:WÐUWÐXÑXÔXÑXÔXØ$Ÿ[š[¨Ñ0Ô0ÐW°L×4GÒ4GÈÑ4WÔ4WØ?F¿{º{È<Ñ?XÔ?XÐ`�V g¨lÔ&;Ñ;Ð;Ð^`Ý˜7Ÿ;š; yÑ1Ô1Ði°i·m²mÐDVÑ6WÔ6WÐ6_Ð\^Ð[_ÐabÔ5cÐiÐgiÑjÔjØŸš J°Ñ3Ô3ÅÀGÁÄð	Nð 	Nð 	Nr   r-   )NNNF)NF)Ú__doc__r   Úwcs.library2r   rœ   r�   r   r)   r:   rE   rU   r^   rr   rt   r|   r    r¯   r6   r   r   ú<module>r²      s6  ððð ð
 €€€à Ð Ð Ð Ð Ð à	*€Ø-€ðð ð ð ðð ð ð ð.Vð Vð Vð Vð
rð rð rð rð
cð cð cð cð{ð {ð {ð {ð1ð 1ð 1ð 1ð2ð ð ð ðWð Wð Wð Wð
7ð 7ð 7ð 7ð Nð Nð Nð Nð Nð Nr   