§
   ÚV�‹=Ü˜iã                   óp   — d Z ddlZddlZddlmZmZmZ dZi Zd„ Z	d„ Z
dd„Zd	„ Zdd
„Zddd„ dfd„Zd„ ZdS )u  Service refresher of TMDb data for tracked series (docs/plan/milionar-library/050 Â§1).

Every series in My series or with watch activity gets its `tv:` and season data refreshed once it is stale (12 h
while the show runs), so a new episode's air date and a newly announced episode are known without the user opening
the series. Never runs while a video plays; one series at a time.
é    N)ÚmetaÚstoreÚtmdbi  c                 óV   ‡‡— t          j        ¦   «         Št          | ˆˆfd„¬¦  «        S )Nc                 ó@   •— t                                ‰‰| fd¦  «        S )Nr   )Ú
_attemptedÚget)ÚidentÚmediaÚscopes    €€úd/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/refresher.pyú<lambda>z_order.<locals>.<lambda>   s   ø€ ­¯ª¸ÀÀuÐ8MÈqÑ)QÔ)Q€ ó    )Úkey)r   Údb_pathÚsorted)Úidsr   r   s    `@r   Ú_orderr      s/   øø€ ÝŒM‰OŒO€EÝ�#ÐQÐQÐQÐQÐQÐRÑRÔRÐRr   c                 ód   — t          j        ¦   «         t          t          j        ¦   «         | |f<   d S ©N)ÚtimeÚ	monotonicr   r   r   )r   r
   s     r   Ú_attemptr      s'   € Ý26´.Ñ2BÔ2B…J•”‘” ¨Ð.Ñ/Ð/Ð/r   é   c           
      óŽ  ‡— t          j        ¦   «         }	 d„ |                     d¦  «        D ¦   «         }|                     ¦   «          n# |                     ¦   «          w xY wt	          j        d„ |D ¦   «         | ¬¦  «        Šˆfd„|D ¦   «         }t          |d¦  «        d |…         D ]›}t          j        d¦  «        r d S 	 t          d|¦  «         t          j        ||¦  «         Œ@# t          $ rO}t          j        d                     |t          |¦  «        j        ¦  «        t          j        ¦  «         Y d }~Œ”d }~ww xY wd S )	Nc                 ó   — g | ]
}|d          ‘ŒS )r   © ©Ú.0Úrs     r   ú
<listcomp>z&refresh_movies_due.<locals>.<listcomp>   s.   € ð ]ð ]ð ]˜ˆq�Œtð ]ð ]ð ]r   zcSELECT tmdb_id FROM titles WHERE media_type='movie' AND (in_list=1 OR last_activity_at IS NOT NULL)c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   )r   Ú	key_movie)r   Úis     r   ú	<genexpr>z%refresh_movies_due.<locals>.<genexpr>"   s,   è è € Ð%EÐ%E¸A¥d¤n°QÑ&7Ô&7Ð%EÐ%EÐ%EÐ%EÐ%EÐ%Er   ©Únowc                 óp   •— g | ]2}‰                      t          j        |¦  «        d ¦  «        d         ¯0|‘Œ3S )©NTé   )r	   r   r#   )r   r$   Ú	snapshotss     €r   r!   z&refresh_movies_due.<locals>.<listcomp>#   s;   ø€ Ð
OÐ
OÐ
O�˜YŸ]š]­4¬>¸!Ñ+<Ô+<¸lÑKÔKÈAÔNÐ
Oˆ1Ð
OÐ
OÐ
Or   ÚmovieúPlayer.HasVideou)   [MilionÃ¡Å™ Library] movie refresh {}: {})r   ÚconnectÚexecuteÚcloser   Úget_many_statusr   ÚxbmcÚgetCondVisibilityr   r   Úrefresh_movieÚ	ExceptionÚlogÚformatÚtypeÚ__name__Ú
LOGWARNING)	r'   ÚfetchÚlimitÚconnr   Úduer
   Úexcr+   s	           @r   Úrefresh_movies_duer@      s…  ø€ ÝŒ=‰?Œ?€Dðð]ð ]˜TŸ\š\ð +[ñ \ô \ð ]ñ ]ô ]ˆð 	�
Š
‰Œˆˆøˆ�
Š
‰ŒˆˆøøøÝÔ$Ð%EÐ%EÀÐ%EÑ%EÔ%EÈ3ÐOÑOÔO€IØ
OÐ
OÐ
OÐ
O�cÐ
OÑ
OÔ
O€CÝ˜˜WÑ%Ô% f u fÔ-ð uð uˆÝÔ!Ð"3Ñ4Ô4ð 	ØˆFˆFð	uÝ�W˜eÑ$Ô$Ð$ÝÔ˜u eÑ,Ô,Ð,Ð,øÝð 	uð 	uð 	uÝŒHÐ@×GÒGÈÍtÐTWÉyÌyÔOaÑbÔbÕdhÔdsÑtÔtÐtÐtÐtÐtÐtÐtøøøøð	uøøøðuð us$   –A
 Á
A Ã%C)Ã)
EÃ3AD=Ä=Ec                  óì   — t          j        ¦   «         } 	 |                      d¦  «                             ¦   «         }|                      ¦   «          n# |                      ¦   «          w xY wd„ |D ¦   «         S )Nz`SELECT tmdb_id FROM titles WHERE media_type='tv' AND (in_list=1 OR last_activity_at IS NOT NULL)c                 ó   — g | ]
}|d          ‘ŒS )Útmdb_idr   r   s     r   r!   z&tracked_series_ids.<locals>.<listcomp>4   s   € Ð'Ð'Ð'˜QˆAˆiŒLÐ'Ð'Ð'r   )r   r.   r/   Úfetchallr0   )r=   Úrowss     r   Útracked_series_idsrF   .   sq   € ÝŒ=‰?Œ?€DðØ�|Š|Ð~ÑÔ÷  Iò  Iñ  Kô  Kˆà�
Š
‰Œˆˆøˆ�
Š
‰ŒˆˆøøøØ'Ð' $Ð'Ñ'Ô'Ð's   •'A ÁA'c                 óÀ  ‡— g }t          ¦   «         }t          j        d„ |D ¦   «         | ¬¦  «        }t          ¦   «         }|                     ¦   «         D ]f\  }\  }}t          |                     d¦  «        d         ¦  «        Š|                     ˆfd„|                     d¦  «        pg D ¦   «         ¦  «         Œgt          j        || ¬¦  «        }|D �]	Š|                     t          j	        ‰¦  «        d¦  «        \  }}	|du pd|v}
|
s¸|                     d¦  «        pg D ] }t          |                     d	¦  «        pd
¦  «        }|d
k    rŒ-|                     t          j
        ‰|¦  «        d¦  «        \  }}|sA|r?d|vs;t          |d         ¦  «        t          |                     d¦  «        pd
¦  «        k     rd}
 nŒ¡|	s|
r|                     ‰¦  «         �Œ|S )zIMissing/stale shows or incomplete season coverage; read metadata in bulk.c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   )r   Úkey_tv)r   Úshow_ids     r   r%   zdue_series.<locals>.<genexpr>;   s,   è è € Ð!JÐ!J¸7¥$¤+¨gÑ"6Ô"6Ð!JÐ!JÐ!JÐ!JÐ!JÐ!Jr   r&   ú:r*   c              3   óž   •K  — | ]G}t          |                     d ¦  «        pd¦  «        dk    ¯*t          j        ‰|d          ¦  «        V — ŒHdS )Úseason_numberr   N)Úintr	   r   Ú
key_season)r   ÚsrJ   s     €r   r%   zdue_series.<locals>.<genexpr>?   si   øè è € ð gð gØ ÅÀQÇUÂUÈ?ÑE[ÔE[ÐE`Ð_`ÑAaÔAaÐdeÒAeÐAeõ  œ?¨7°A°oÔ4FÑGÔGØAeÐAeÐAeÐAeðgð gr   Úseasonsr)   NrM   r   ÚepisodesÚepisode_countT)rF   r   r1   ÚsetÚitemsrN   ÚsplitÚupdater	   rI   rO   ÚlenÚappend)r'   r>   r   ÚshowsÚseason_keysr   ÚdataÚ_stalerQ   ÚstaleÚ
incompleterP   ÚnumberÚcachedÚexpiredrJ   s                  @r   Ú
due_seriesrc   7   sN  ø€ à
€CÝ
Ñ
Ô
€CÝÔ Ð!JÐ!JÀcÐ!JÑ!JÔ!JÐPSÐTÑTÔT€EÝ‘%”%€KØ$Ÿ{š{™}œ}ð gð gÑˆ‰^ˆd�FÝ�c—i’i ‘n”n QÔ'Ñ(Ô(ˆØ×Òð gð gð gð gØ$(§H¢H¨YÑ$7Ô$7Ð$=¸2ðgñ gô gñ 	gô 	gð 	gð 	gåÔ" ;°CÐ8Ñ8Ô8€GØð  ñ  ˆØ—i’i¥¤¨GÑ 4Ô 4°lÑCÔC‰ˆˆeØ˜T�\Ð: Y°dÐ%:ˆ
Øð 	Ø—X’X˜iÑ(Ô(Ð.¨Bð ð �Ý˜QŸUšU ?Ñ3Ô3Ð8°qÑ9Ô9�Ø˜Q’;�;ØØ")§+¢+­d¬o¸gÀvÑ.NÔ.NÐP\Ñ"]Ô"]‘�˜Øð  &ð ¨J¸fÐ,DÐ,DÍÈFÐS]ÔL^ÑH_ÔH_ÕbeÐfg×fkÒfkÐl{Ñf|Ôf|ð  gBð  ABñ  cCô  cCò  ICð  ICØ!%�JØ�Eð ICð ð 	 �Jð 	 Ø�JŠJ�wÑÔÐùØ€Jr   c                  ó*   — t          j        d¦  «        S )Nr-   )r2   r3   r   r   r   r   r   S   s   € µdÔ6LÐM^Ñ6_Ô6_€ r   c           
      ó¾  — g }t          t          t          | ¦  «        d¦  «        ¦  «        D ]¯\  }} |¦   «         s||k    r n™	 t          d|¦  «         t	          j        ||¦  «        r|                     |¦  «         ŒS# t          $ rP}t          j	        d 
                    |t          |¦  «        j        |¦  «        t          j        ¦  «         Y d}~Œ¨d}~ww xY w|S )z<Refresh up to `limit` due series; returns the ids refreshed.Útvu.   [MilionÃ¡Å™ Library] refresh {} failed: {}: {}N)Ú	enumerater   rc   r   r   Úrefresh_showrY   r5   r2   r6   r7   r8   r9   r:   )r'   r;   Úplayingr<   ÚdoneÚattemptrJ   r?   s           r   Úrefresh_duerl   S   s  € à€DÝ%¥f­Z¸©_¬_¸dÑ&CÔ&CÑDÔDð Að AÑˆ�Øˆ7‰9Œ9ð 	˜ 5Ò(Ð(ØˆEð	AÝ�T˜7Ñ#Ô#Ð#ÝÔ  ¨%Ñ0Ô0ð %Ø—’˜GÑ$Ô$Ð$øøÝð 	Að 	Að 	AÝŒHÐE×LÒLÈWÕVZÐ[^ÑV_ÔV_ÔVhÐjmÑnÔnÕptÔpñ  Aô  Að  Að  Að  Að  Að  Að  Aøøøøð	Aøøøà€Ks   Á:B Â 
CÂ
ACÃCc                 óö  — |                       d¦  «        rd S |                      ¦   «         sÍ	 t          ¦   «          t          ¦   «         }|r2t	          j        d                     |¦  «        t          j        ¦  «         nI# t          $ r<}t	          j        d                     |¦  «        t          j	        ¦  «         Y d }~nd }~ww xY w|                       t          ¦  «        rd S |                      ¦   «         ¯Ëd S d S )Né<   u(   [MilionÃ¡Å™ Library] refreshed series {}u)   [MilionÃ¡Å™ Library] refresher failed: {})ÚwaitForAbortÚabortRequestedr@   rl   r2   r6   r7   ÚLOGINFOr5   r:   ÚCHECK_EVERY_S)Úmonitorrj   r?   s      r   Úlooprt   b   s  € Ø×Ò˜BÑÔð ØˆØ×$Ò$Ñ&Ô&ð 	ð	_ÝÑ Ô Ð Ý‘=”=ˆDØð `Ý”ÐC×JÒJÈ4ÑPÔPÕRVÔR^Ñ_Ô_Ð_øøÝð 	_ð 	_ð 	_ÝŒHÐ@×GÒGÈÑLÔLÍdÌoÑ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^øøøøð	_øøøà×Ò¥Ñ.Ô.ð 	ØˆEð ×$Ò$Ñ&Ô&ð 	ð 	ð 	ð 	ð 	s   ­AA> Á>
CÂ2B?Â?C)NNr   r   )Ú__doc__r   r2   Úwcs.library2r   r   r   rr   r   r   r   r@   rF   rc   rl   rt   r   r   r   ú<module>rw      sç   ððð ð €€€à €€€à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à€Ø€
ðSð Sð Sð
Cð Cð Cðuð uð uð uð&(ð (ð (ðð ð ð ð8  Ð._Ð._Ðghð ð ð ð ðð ð ð ð r   