§
   À:y�Âhyã                   ó†  — 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lZdZ ej	        d 
                    e¦  «        ¦  «        Zej                             ed¦  «        ZdZdZdez  dez  d	ez  d	ez  d
œZe                     d„ dD ¦   «         ¦  «         d„ Zej        fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„ZdS )uý   Service-side cache builders for the skin's network widgets (docs/plan/skin-milionar/060 Â§4).

Runs in a service thread. Keep last good snapshots on failure, and publish only
the named rows whose item content changed. The parent scheduler owns retries.
é    Nzplugin.video.milionarz special://profile/addon_data/{}/Ú
skin_cachezhttps://image.tmdb.org/t/p/w500i  é   é   )Úwidget_tmdb_popular_moviesÚwidget_tmdb_popular_seriesÚwidget_kraska_rootÚwidget_mycinema_recommendedc                 ó   — i | ]}d |z   d“Œ	S )Úvinyl_i„  © )Ú.0Úsources     ú`/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/skin/refresher.pyú
<dictcomp>r      s1   € ð Tð Tð T¨F�˜FÑ" Cð Tð Tð Tó    )ÚcuratorÚdiscoverÚ
top_tracksÚsongsÚalbumsÚartistsÚ	playlistsÚgenresÚradiosÚfavorite_songsÚfavorite_playlistsÚfavorite_albumsÚfavorite_artistsc                  ó@   ‡‡— ddl mŠ ddlm} mŠ ˆˆfd„| D ¦   «         S )znOnly configured network/Vinyl types, deduplicated across the Home slots; a section switched off needs nothing.r   )Úwarm)ÚSECTIONSÚSLOTSc           	      óÌ   •— h | ]`}‰                      |¦  «        sIt          d ‰d z   ¦  «        D ]5}t          j        d                     ||¦  «        ¦  «        }|t
          v ¯3|’Œ6ŒaS )é   zSkin.String(mil.{}.{}.type))ÚhiddenÚrangeÚxbmcÚgetInfoLabelÚformatÚSCHEDULE)r   ÚsectionÚnumberÚrowr"   r    s       €€r   ú	<setcomp>zactive_rows.<locals>.<setcomp>$   s�   ø€ ð  ð  ð  �G¨t¯{ª{¸7Ñ/CÔ/Cð  ÕRWÐXYÐ[`ÐcdÑ[dÑReÔReð  ð  ÈÝÔ)Ð*G×*NÒ*NÈwÐX^Ñ*_Ô*_Ñ`Ô`�Ø•hˆˆð àˆˆˆr   )Úwcs.skinr    Úwcs.skin.slotsr!   r"   )r!   r"   r    s    @@r   Úactive_rowsr1       s]   øø€ àÐÐÐÐÐØ.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð ð  ð  ð  ð  ˜xð  ñ  ô  ð  r   c                 óV   — t          j        d                     | ¦  «        |¦  «         d S )Nu   [MilionÃ¡Å™ Skin] {})r'   Úlogr)   )ÚmsgÚlevels     r   Ú_logr6   )   s)   € Ý„HÐ#×*Ò*¨3Ñ/Ô/°Ñ7Ô7Ð7Ð7Ð7r   c                 óÜ   — |                       d¦  «        r0ddlm} |                     | t	          d¦  «        d …         ¦  «        S t
          j                             t          | dz   ¦  «        S )Nr   r   )Úclientz.json)	Ú
startswithÚ	wcs.vinylr8   Ú
cache_pathÚlenÚosÚpathÚjoinÚ	CACHE_DIR)Únamer8   s     r   r;   r;   -   se   € Ø‡‚�xÑ Ô ð 7Ø$Ð$Ð$Ð$Ð$Ð$Ø× Ò  ¥c¨(¡m¤m n nÔ!5Ñ6Ô6Ð6ÝŒ7�<Š<�	 4¨'¡>Ñ2Ô2Ð2r   c                 ó¦   — 	 t          j         ¦   «         t          j                             t	          | ¦  «        ¦  «        z
  S # t
          $ r Y d S w xY w©N)Útimer=   r>   Úgetmtimer;   ÚOSError)rA   s    r   Ú	cache_agerG   4   sR   € ðÝŒy‰{Œ{�RœW×-Ò-­j¸Ñ.>Ô.>Ñ?Ô?Ñ?Ð?øÝð ð ð Øˆtˆtðøøøs   ‚?A Á
AÁAc                 óØ  — t          |t          ¦  «        rt          d„ |D ¦   «         ¦  «        st          d¦  «        ‚t	          | ¦  «        }d}	 t          |d¬¦  «        5 }t          j        |¦  «        d         }ddd¦  «         n# 1 swxY w Y   n## t          t          t          t          f$ r Y nw xY wt          j        t          d¬¦  «         d}	 t          j        d	dt          d
¬¦  «        5 }|j        }t          j        t%          t'          j        ¦   «         ¦  «        |dœ|d
¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j        ||¦  «         |r3t          j                             |¦  «        rt          j        |¦  «         n<# |r4t          j                             |¦  «        rt          j        |¦  «         w w w xY w||k    }|rddlm}  || g¦  «         |S )zUAtomically replace a successful snapshot, including []; refresh only changed content.c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rC   )Ú
isinstanceÚdict)r   Úitems     r   ú	<genexpr>zwrite_cache.<locals>.<genexpr>=   s,   è è € Ð-WÐ-WÈ­j¸½tÑ.DÔ.DÐ-WÐ-WÐ-WÐ-WÐ-WÐ-Wr   zInvalid widget cache itemsNúutf-8©ÚencodingÚitemsT)Úexist_okÚwF)ÚmoderP   ÚdirÚdelete)ÚbuiltrQ   )Úensure_asciir   )Úchanged)rJ   ÚlistÚallÚ
ValueErrorr;   ÚopenÚjsonÚloadrF   ÚKeyErrorÚ	TypeErrorr=   Úmakedirsr@   ÚtempfileÚNamedTemporaryFilerA   ÚdumpÚintrD   Úreplacer>   ÚexistsÚremoveÚwcs.skin.refreshrY   )rA   rQ   r>   ÚpreviousÚhandleÚ	temporaryÚ	differentrY   s           r   Úwrite_cachero   ;   s‰  € å�e�TÑ"Ô"ð 7­#Ð-WÐ-WÐQVÐ-WÑ-WÔ-WÑ*WÔ*Wð 7ÝÐ5Ñ6Ô6Ð6Ý�dÑÔ€DØ€HðÝ�$ Ð)Ñ)Ô)ð 	2¨VÝ”y Ñ(Ô(¨Ô1ˆHð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2øøå•Z¥­9Ð5ð ð ð Øˆðøøøå„K•	 DÐ)Ñ)Ô)Ð)Ø€Ið!ÝÔ(¨c¸GÍÐ[`ÐaÑaÔað 	_ÐekØœˆIÝŒI¥¥D¤I¡K¤KÑ 0Ô 0¸5ÐAÐAÀ6ÐX]Ð^Ñ^Ô^Ð^ð	_ð 	_ð 	_ñ 	_ô 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_øøøð 	_ð 	_ð 	_ð 	_õ 	Œ
�9˜dÑ#Ô#Ð#àð 	!�œŸš¨	Ñ2Ô2ð 	!ÝŒI�iÑ Ô Ð øøð ð 	!�œŸš¨	Ñ2Ô2ð 	!ÝŒI�iÑ Ô Ð Ð ð	!ð 	!øøøà˜EÒ!€IØð Ø,Ð,Ð,Ð,Ð,Ð,Øˆ��‰ŒˆØÐsg   ÁB Á!BÁ<B ÂBÂB ÂBÂB ÂB4Â3B4ÃF Ã2A D>Ä2F Ä>EÅF ÅEÅF Æ9Gc                 óæ  — |                       d¦  «        p|                       d¦  «        pd}|                       d¦  «        p|                       d¦  «        pd}|                       d¦  «        }|dk    rdnd}||d d	…         ||                       d
¦  «        rt          | d
         z   nd|                       dd¦  «        |                       d¦  «        |dk    rdndd                     ||¦  «        dœS )NÚtitlerA   Ú Úrelease_dateÚfirst_air_dateÚidÚmovieÚtvé   Úposter_pathÚoverviewÚvote_averageÚseriesz0action=show_wcs_details&media_type={}&tmdb_id={})rq   ÚyearÚtmdb_idÚposterÚplotÚratingÚ
media_typeÚrun)ÚgetÚTMDB_IMGr)   )r-   r‚   rq   Údater~   Úkinds         r   Ú_entryrˆ   W   sú   € Ø�GŠG�GÑÔÐ5 §¢¨¡¤Ð5°2€EØ�7Š7�>Ñ"Ô"ÐE c§g¢gÐ.>Ñ&?Ô&?ÐEÀ2€DØ�gŠg�d‰mŒm€GØ  GÒ+Ð+ˆ7ˆ7°€DØ D¨¨!¨¤H¸Ø7:·w²w¸}Ñ7MÔ7MÐU•h  ]Ô!3Ñ3Ð3ÐSUØ—G’G˜J¨Ñ+Ô+°s·w²w¸~Ñ7NÔ7NØ%/°7Ò%:Ð%:˜'˜'ÀØE×LÒLÈTÐSZÑ[Ô[ð	]ð ]ð ]r   c                 óˆ   ‡— ddl m} ‰dk    rdnd}|                     ‰|ddi| d¬	¦  «        }ˆfd
„|D ¦   «         d d…         S )Nr   )Ú
TMDbClientrv   zmovie/popularz
tv/popularÚpager$   T©Ústrictc                 óZ   •— g | ]'}|                      d ¦  «        ¯t          |‰¦  «        ‘Œ(S )ru   )r„   rˆ   )r   Úrr‚   s     €r   ú
<listcomp>z&build_tmdb_popular.<locals>.<listcomp>g   s2   ø€ Ð?Ð?Ð? a°1·5²5¸±;´;Ð?�F�1�jÑ!Ô!Ð?Ð?Ð?r   é   )Úwcs.metadatarŠ   Úfetch_tmdb_items)Úaddonr‚   rŠ   ÚendpointÚrowss    `   r   Úbuild_tmdb_popularr—   c   sn   ø€ Ø'Ð'Ð'Ð'Ð'Ð'Ø",°Ò"7Ð"7ˆˆ¸\€HØ×&Ò& z°8¸fÀa¸[È%ÐX\Ð&Ñ]Ô]€DØ?Ð?Ð?Ð?¨4Ð?Ñ?Ô?ÀÀÀÔDÐDr   c           	      ó–  — ddl m} |                     di |                      d¦  «        ¬¦  «        }t	          |t
          ¦  «        r(t	          |                     d¦  «        t          ¦  «        st          d¦  «        ‚g }|d         D �]?}t	          |t
          ¦  «        st          d¦  «        ‚|                     d	¦  «        d
vs*|                     d¦  «        pd 	                    d¦  «        rŒi|                     di ¦  «        }|                     di ¦  «                             d¦  «        p>|                     di ¦  «                             d¦  «        p|                     dd¦  «        }|rV| 
                    ||                     dd¦  «        |                     d¦  «        pi                      dd¦  «        dœ¦  «         �ŒA|S )Nr   )ÚSCClientú/Úsc_auth_token)ÚparamsÚ
auth_tokenÚmenuzInvalid Kraska root responsezInvalid Kraska root itemÚtype)rU   ÚldirÚvisiblerr   zsc://Ú	i18n_infoÚcsrq   ÚenÚurlÚartÚicon)rq   r>   r§   )Úwcs.streamcinemar™   Ú_api_getÚ
getSettingrJ   rK   r„   rZ   r\   r9   Úappend)r”   r™   ÚresponseÚentriesrL   Úi18nrq   s          r   Úbuild_kraska_rootr¯   j   sÊ  € Ø)Ð)Ð)Ð)Ð)Ð)à× Ò  ¨R¸E×<LÒ<LÈ_Ñ<]Ô<]Ð Ñ^Ô^€HÝ�h¥Ñ%Ô%ð 9­Z¸¿ºÀVÑ8LÔ8LÍdÑ-SÔ-Sð 9ÝÐ7Ñ8Ô8Ð8Ø€GØ˜Ô ð 	Nñ 	NˆÝ˜$¥Ñ%Ô%ð 	9ÝÐ7Ñ8Ô8Ð8Ø�8Š8�FÑÔ ?Ð2Ð2°t·x²xÀ	Ñ7JÔ7JÐ7PÈb×6\Ò6\Ð]dÑ6eÔ6eÐ2ØØ�xŠx˜ RÑ(Ô(ˆØ—’˜˜rÑ"Ô"×&Ò& wÑ/Ô/Ðk°4·8²8¸DÀ"Ñ3EÔ3E×3IÒ3IÈ'Ñ3RÔ3RÐkÐVZ×V^ÒV^Ð_fÐhjÑVkÔVkˆØð 	NØ�NŠN U°D·H²H¸UÀBÑ4GÔ4GØ%)§X¢X¨e¡_¤_Ð%:¸×$?Ò$?ÀÈÑ$KÔ$KðMð Mñ Nô Nð Nùà€Nr   c                 óD  — ddl m}m} t          d¦  «        }d„ |D ¦   «         }i }t	          |¦  «        D �]2}d                     |¦  «        }ddi}|                     ||dt          z  ¬	¦  «        }	|	d u }
|
r|                     d
||| d¬¦  «        }	t          |	t          ¦  «        rt          d„ |	D ¦   «         ¦  «        st          d¦  «        ‚|
r|                     |||	¦  «         t          ¦   «         }|	D ]o}t          |d         ¦  «        }||v s||v s|                     d¦  «        sŒ5|                     |¦  «         |                     |d|f¦  «        \  }}|dz   |f||<   Œp�Œ4t	          |                     ¦   «         d„ d¬¦  «        }d„ |d d…         D ¦   «         S )Nr   )Ú	TMDbCacherŠ   zmycinema_channels.jsonc           	      ó°   — h | ]S}|                      d ¦  «        pg D ]9}|                      d¦  «        ®t          t          |d         ¦  «        ¦  «        ’Œ:ŒTS )Ú
media_listru   )r„   Ústrrf   )r   Úcinemarv   s      r   r.   z-build_mycinema_recommended.<locals>.<setcomp>�   si   € ð -ð -ð - vÀvÇzÂzÐR^ÑG_ÔG_ÐGeÐceð -ð -¸UØ—	’	˜$‘”Ð+õ •�U˜4”[Ñ!Ô!Ñ"Ô"Ø+Ð+Ð+Ð+r   zmovie/{}/recommendationsÚlanguagezcs-CZr   )Úexpire_secondsrv   TrŒ   c              3   ón   K  — | ]0}t          |t          ¦  «        o|                     d ¦  «        duV — Œ1dS )ru   N)rJ   rK   r„   )r   r-   s     r   rM   z-build_mycinema_recommended.<locals>.<genexpr>Œ   sC   è è € Ð0uÐ0uÐilµ¸CÅÑ1FÔ1FÐ1dÈ3Ï7Ê7ÐSWÉ=Ì=Ð`dÐKdÐ0uÐ0uÐ0uÐ0uÐ0uÐ0ur   z#Invalid cached TMDb recommendationsru   ry   r$   c                 óL   — | d         | d                               d¦  «        pdfS )Nr   r$   r{   )r„   )Úpairs    r   ú<lambda>z,build_mycinema_recommended.<locals>.<lambda>˜   s%   € °d¸1´g¸tÀA¼w¿{º{È>Ñ?ZÔ?ZÐ?_Ð^_Ð5`€ r   )ÚkeyÚreversec                 ó4   — g | ]\  }}t          |d ¦  «        ‘ŒS )rv   )rˆ   )r   Ú_countr-   s      r   r�   z.build_mycinema_recommended.<locals>.<listcomp>™   s&   € Ð@Ð@Ð@¡[ V¨S�F�3˜Ñ Ô Ð@Ð@Ð@r   r‘   )r’   r±   rŠ   Ú_loadÚsortedr)   Úget_from_cacheÚHOURSr“   rJ   rZ   r[   r\   Úset_to_cacheÚsetr´   r„   ÚaddÚvalues)r”   r±   rŠ   ÚcinemasÚownedÚvotesÚmovie_idr•   rœ   r–   ÚmissingÚseenr-   ÚridÚcountÚ_rowÚrankeds                    r   Úbuild_mycinema_recommendedrÒ   ~   sú  € Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ÝÐ,Ñ-Ô-€Gð-ð -°ð -ñ -ô -€Eà€EÝ˜5‘M”Mð *ñ *ˆØ-×4Ò4°XÑ>Ô>ˆØ˜gÐ&ˆØ×'Ò'¨°&ÈÍeÉÐ'ÑTÔTˆØ˜$�,ˆØð 	^à×.Ò.¨w¸À&È%ÐX\Ð.Ñ]Ô]ˆDÝ˜$¥Ñ%Ô%ð 	D­SÐ0uÐ0uÐptÐ0uÑ0uÔ0uÑ-uÔ-uð 	DÝÐBÑCÔCÐCØð 	;Ø×"Ò" 8¨V°TÑ:Ô:Ð:Ý‰uŒuˆØð 	*ð 	*ˆCÝ�c˜$”i‘.”.ˆCØ�eˆ|ˆ|˜s d˜{˜{°#·'²'¸-Ñ2HÔ2H˜{ØØ�HŠH�S‰MŒMˆMØŸ)š) C¨!¨S¨Ñ2Ô2‰KˆE�4Ø !™) SÐ)ˆE�#‰JˆJñ	*õ �E—L’L‘N”NÐ(`Ð(`ÐjnÐoÑoÔo€FØ@Ð@°F¸3¸B¸3´KÐ@Ñ@Ô@Ð@r   c                 óî   — 	 t          t          j                             t          | ¦  «        dd¬¦  «        5 }t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S # t          $ r g cY S w xY w)Nr�   rN   rO   )r]   r=   r>   r?   ÚPROFILEr^   r_   ÚFileNotFoundError)rA   rl   s     r   rÀ   rÀ   œ   s¾   € ðÝ•"”'—,’,�w¨Ñ-Ô-¨s¸WÐEÑEÔEð 	%ÈÝ”9˜VÑ$Ô$ð	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øåð ð ð Øˆ	ˆ	ˆ	ðøøøs4   ‚5A% ·AÁA% ÁAÁA% ÁAÁ A% Á%A4Á3A4c           	      óÚ  — 	 |dk    s|t           v rO|                     d¦  «        r:ddlm} |                     |dk    rdn|t          d¦  «        d…         g¬¦  «        S |dk    r'|                      d¦  «        sd	S t          | ¦  «        }nF|d
k    rt          | d¦  «        }n/|dk    rt          | d¦  «        }n|dk    rt          | ¦  «        }nd	S t          ||¦  «         t          d                     |t          |¦  «        ¦  «        ¦  «         dS # t          $ rK}t          d                     |t          |¦  «        j        ¦  «        t           j        ¦  «         Y d}~d	S d}~ww xY w)zSBuild one widget cache now; providers that are not configured are skipped silently.Úvinylr   r   )ÚwidgetsN)Úsourcesr   r›   Fr   rv   r   rw   r	   z{}: cached {} itemsTz{} refresh failed: {})r*   r9   r:   rØ   Úrefreshr<   rª   r¯   r—   rÒ   ro   r6   r)   Ú	ExceptionrŸ   Ú__name__r'   Ú
LOGWARNING)r”   rA   Úvinyl_widgetsrQ   Úexcs        r   rÚ   rÚ   ¤   sš  € ðØ�7Š?ˆ?˜d¥hÐ.Ð.°4·?²?À8Ñ3LÔ3LÐ.Ø:Ð:Ð:Ð:Ð:Ð:Ø ×(Ò(¸Àº¸°°ÈtÕTWÐX`ÑTaÔTaÐTbÐTbÔOcÐNdÐ(ÑeÔeÐeØÐ)Ò)Ð)Ø×#Ò# OÑ4Ô4ð Ø�uÝ% eÑ,Ô,ˆEˆEàÐ3Ò3Ð3Ý*¨5°'Ñ:Ô:��ØÐ5Ò5Ð5Ý*¨5°$Ñ7Ô7��ØÐ6Ò6Ð6Ý2°5Ñ9Ô9��à�uÝ�D˜%Ñ Ô Ð ÝÐ"×)Ò)¨$µ°E±
´
Ñ;Ô;Ñ<Ô<Ð<ØˆtøÝð ð ð ÝÐ$×+Ò+¨Dµ$°s±)´)Ô2DÑEÔEÅtÄÑWÔWÐWØˆuˆuˆuˆuˆuøøøøðøøøs-   ‚AD Á D Á=AD ÃA D Ä
E*ÄA E%Å%E*r   c                 ó¼  — t          j        t          ¦  «        }t          ¦   «         }t	          | ¦  «        }d|v r|                     d„ |D ¦   «         ¦  «         ||t	          t          ¦  «        z  z  }t          j        d¦  «        }i }t          |¦  «        D ]B}|r||vrŒ	t          |¦  «        }||v s|�|t          |         k    rt          ||¦  «        ||<   ŒC|S )zSCompatibility worker: due active rows plus explicitly forced names; no retry loops.r×   c              3   óD   K  — | ]}|                      d ¦  «        ¯|V — ŒdS )r   N)r9   )r   rA   s     r   rM   zrefresh_due.<locals>.<genexpr>Å   s3   è è € ÐKÐK˜t°·²ÀÑ1JÔ1JÐK�dÐKÐKÐKÐKÐKÐKr   zPlayer.HasVideo)Ú	xbmcaddonÚAddonÚADDON_IDr1   rÅ   Úupdater*   r'   ÚgetCondVisibilityrÁ   rG   rÚ   )	Úforcer”   ÚactiveÚforcedÚselectedÚplayingÚresultrA   Úages	            r   Úrefresh_duerî   ¿   sç   € åŒO�HÑ%Ô%€EÝ‰]Œ]€FÝ�‰ZŒZ€FØ�&ÐÐØ�ŠÐKÐK vÐKÑKÔKÑKÔKÐKØ˜¥#¥h¡-¤-Ñ/Ñ0€HÝÔ$Ð%6Ñ7Ô7€GØ€FÝ�xÑ Ô ð 0ð 0ˆØð 	�t 6Ð)Ð)ØÝ˜‰oŒoˆØ�6ˆ>ˆ>˜S˜[¨Cµ8¸D´>Ò,AÐ,AÝ" 5¨$Ñ/Ô/ˆF�4‰LøØ€Mr   )r   ) Ú__doc__r^   r=   rc   rD   r'   râ   Úxbmcvfsrä   ÚtranslatePathr)   rÔ   r>   r?   r@   r…   rÃ   r*   rå   r1   ÚLOGINFOr6   r;   rG   ro   rˆ   r—   r¯   rÒ   rÀ   rÚ   rî   r   r   r   ú<module>ró      s×  ððð ð
 €€€Ø 	€	€	€	Ø €€€Ø €€€à €€€Ø Ð Ð Ð Ø €€€à"€Ø
ˆ'Ô
Ð B× IÒ IÈ(Ñ SÔ SÑ
TÔ
T€ØŒG�LŠL˜ ,Ñ/Ô/€	Ø,€Ø€à"# e¡)Ø"# e¡)Ø˜u™*Ø#%¨¡:ð	ð €ð 	‡‚ð Tð Tð 7Sð Tñ Tô Tñ Uô Uð Uð
 ð  ð  ð ”Lð 8ð 8ð 8ð 8ð3ð 3ð 3ðð ð ðð ð ð8	]ð 	]ð 	]ðEð Eð Eðð ð ð(Að Að Að<ð ð ðð ð ð6ð ð ð ð ð r   