§
   ±Mm‘6ÝVã                   ó  — d Z ddlZddlZddlZddlZddlmZ ddlZddlZddl	m
Z
mZmZmZ dZdZdZ ej        d¬	¦  «        Z ej        ¦   «         Zd
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zd„ Zdd„Z d d„Z!dd„Z"d!d„Z#d„ Z$d„ Z%dS )"zGDurable manual marks and Kodi mirrors, isolated from the playback loop.é    N)Údate)ÚmetaÚnext_upÚstoreÚtmdbzplugin.video.milionaré   é   é   )Úmaxsizec                 ój   — t          j        d                     | ¦  «        t           j        ¦  «         d S )Nu   [MilionÃ¡Å™ Jobs] {})ÚxbmcÚlogÚformatÚ
LOGWARNING)Úmessages    ú_/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/jobs.pyÚ_logr      s+   € Ý„HÐ#×*Ò*¨7Ñ3Ô3µT´_ÑEÔEÐEÐEÐEó    c                 óZ   — t          j        t          ¦  «                             | ¦  «        S ©N)Ú	xbmcaddonÚAddonÚADDON_IDÚgetLocalizedString©Ú	string_ids    r   Útextr      s    € ÝŒ?�8Ñ$Ô$×7Ò7¸	ÑBÔBÐBr   c           
      óÚ   — t          j        d                     t          j        t          d¦  «        d¬¦  «        t          j        t          | ¦  «        d¬¦  «        ¦  «        ¦  «         d S )NzNotification({},{},5000)iŒ  F)Úensure_ascii)r   Úexecutebuiltinr   ÚjsonÚdumpsr   r   s    r   Ú_notifyr#      sk   € åÔÐ2×9Ò9ÝŒ
•4˜‘;”;¨UÐ3Ñ3Ô3µT´ZÅÀYÁÄÐ^cÐ5dÑ5dÔ5dñfô fñ gô gð gð gð gr   c                 ó:  ‡— t          | t          ¦  «        r0t          |                      d¦  «        t          ¦  «        r| d         st	          d¦  «        ‚d„ | d         D ¦   «         Št          d„ ‰D ¦   «         ¦  «        }|dk    rDt          |                      d¦  «        pd¦  «        t          |¦  «        k    rt	          d¦  «        ‚|dk    rt          |¦  «        gn|}|rt          ˆfd	„|D ¦   «         ¦  «        rt	          d
¦  «        ‚ˆfd„|D ¦   «         S )NÚseasonszMissing season coveragec                 ó:   — i | ]}t          |d          ¦  «        |“ŒS )Úseason_number©Úint)Ú.0Úss     r   ú
<dictcomp>z_numbers.<locals>.<dictcomp>&   s'   € ÐCÐCÐC¨a�s�1�_Ô%Ñ&Ô&¨ÐCÐCÐCr   c              3   ó&   K  — | ]}|d k    ¯|V — ŒdS )r   N© )r*   Úns     r   ú	<genexpr>z_numbers.<locals>.<genexpr>'   s&   è è € Ð1Ð1˜1¨1¨qª5¨5�Q¨5¨5¨5¨5Ð1Ð1r   ÚseasonÚnumber_of_seasonsr   zIncomplete season coveragec              3   ó    •K  — | ]}|‰vV — Œ	d S r   r.   ©r*   r/   Úentriess     €r   r0   z_numbers.<locals>.<genexpr>+   s(   øè è € Ð<Ð<¨q˜! 7Ð*Ð<Ð<Ð<Ð<Ð<Ð<r   zMissing requested seasonc                 óf   •— i | ]-}|t          ‰|                              d ¦  «        pd¦  «        “Œ.S )Úepisode_countr   )r)   Úgetr4   s     €r   r,   z_numbers.<locals>.<dictcomp>-   s8   ø€ ÐJÐJÐJ¸QˆA�s�7˜1”:—>’> /Ñ2Ô2Ð7°aÑ8Ô8ÐJÐJÐJr   )	Ú
isinstanceÚdictr8   ÚlistÚ
ValueErrorÚsortedr)   ÚlenÚany)ÚshowÚkindr1   ÚregularÚnumbersr5   s        @r   Ú_numbersrD   #   s6  ø€ Ý�d�DÑ!Ô!ð 4­°D·H²H¸YÑ4GÔ4GÍÑ)NÔ)Nð 4ÐVZÐ[dÔVeð 4ÝÐ2Ñ3Ô3Ð3ØCÐC°4¸	´?ÐCÑCÔC€GÝÐ1Ð1 Ð1Ñ1Ô1Ñ1Ô1€GØˆxÒÐ�C §¢Ð)<Ñ =Ô =Ð BÀÑCÔCÅcÈ'ÁlÄlÒRÐRÝÐ5Ñ6Ô6Ð6Ø# xÒ/Ð/�s�6‰{Œ{ˆmˆm°W€GØð 5•cÐ<Ð<Ð<Ð<°GÐ<Ñ<Ô<Ñ<Ô<ð 5ÝÐ3Ñ4Ô4Ð4ØJÐJÐJÐJÀ'ÐJÑJÔJÐJr   c                 ó  ‡
— t          | t          ¦  «        r0t          |                      d¦  «        t          ¦  «        r| d         st	          d¦  «        ‚|                      d|¦  «        |k    rt	          d¦  «        ‚| d         }d„ |D ¦   «         }t          |¦  «        Š
t          |¦  «        dk    s_t          ‰
¦  «        t          |¦  «        k    s?t          |¦  «        |k     s,t          ˆ
fd„t          d|dz   ¦  «        D ¦   «         ¦  «        rt	          d	¦  «        ‚g }t          ||¦  «        D ]K\  }}t          j        |                     d
¦  «        ¦  «        }	|	r|	|k    r|                     ||f¦  «         ŒL|S )NÚepisodeszMissing episodesr'   zWrong seasonc                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS )Úepisode_numberr(   )r*   Úeps     r   ú
<listcomp>z#_season_targets.<locals>.<listcomp>6   s&   € Ð<Ð<Ð<¨R�s�2Ð&Ô'Ñ(Ô(Ð<Ð<Ð<r   r   c              3   ó    •K  — | ]}|‰vV — Œ	d S r   r.   )r*   ÚeÚuniques     €r   r0   z"_season_targets.<locals>.<genexpr>9   s'   øè è € ÐCÐC q�1˜F�?ÐCÐCÐCÐCÐCÐCr   é   zIncomplete episodesÚair_date)r9   r:   r8   r;   r<   ÚsetÚminr>   r?   ÚrangeÚzipr   Ú_parse_dateÚappend)ÚdataÚnumberÚexpectedÚtodayrF   rC   ÚtargetsrI   ÚepisodeÚairrM   s             @r   Ú_season_targetsr]   0   sƒ  ø€ Ý�d�DÑ!Ô!ð -­°D·H²H¸ZÑ4HÔ4HÍ$Ñ)OÔ)Oð -ÐW[Ð\fÔWgð -ÝÐ+Ñ,Ô,Ð,Ø‡x‚x� Ñ(Ô(¨FÒ2Ð2Ý˜Ñ(Ô(Ð(Ø�JÔ€HØ<Ð<°8Ð<Ñ<Ô<€GÝ�‰\Œ\€FÝˆG‰Œ˜ÒÐ�S ™[œ[­C°©L¬LÒ8Ð8½CÀ¹L¼LÈ8Ò<SÐ<SÝÐCÐCÐCÐC­E°!°XÀ±\Ñ,BÔ,BÐCÑCÔCÑCÔCð =TåÐ.Ñ/Ô/Ð/Ø€GÝ˜8 WÑ-Ô-ð .ð .‰ˆˆGÝÔ! "§&¢&¨Ñ"4Ô"4Ñ5Ô5ˆØð 	.�3˜%’<�<Ø�NŠN˜F GÐ,Ñ-Ô-Ð-øØ€Nr   c                 ó   ‡— 	 t          j        t          j        ‰¦  «        ¦  «        d         }t          || |¦  «        }t          j        ˆfd„|D ¦   «         ¦  «        }g }|                     ¦   «         D ]a\  }}|                     t          |                     t          j        ‰|¦  «        ¦  «        ||t          j
        ¦   «         ¦  «        ¦  «         Œb|pdS # t          t          t          t          f$ r Y dS w xY w)zSCache only; never mark a partial season/show or report success for an empty result.r   c              3   óB   •K  — | ]}t          j        ‰|¦  «        V — Œd S r   )r   Ú
key_season)r*   r/   Útmdb_ids     €r   r0   z!cached_targets.<locals>.<genexpr>H   s/   øè è € ÐLÐL¸q�tœ¨w¸Ñ:Ô:ÐLÐLÐLÐLÐLÐLr   N)r   r8   Úkey_tvrD   Úget_manyÚitemsÚextendr]   r`   r   rY   r<   Ú	TypeErrorÚKeyErrorÚAttributeError)	rA   ra   r1   r@   rC   ÚcachedrZ   rW   rX   s	    `       r   Úcached_targetsrj   C   s  ø€ ð
ÝŒx�œ GÑ,Ô,Ñ-Ô-¨aÔ0ˆÝ˜4  vÑ.Ô.ˆÝ”ÐLÐLÐLÐLÀGÐLÑLÔLÑLÔLˆØˆØ '§¢¡¤ð 	Lð 	LÑˆF�HØ�NŠN�?¨6¯:ª:µd´oÀgÈvÑ6VÔ6VÑ+WÔ+WØ+1°8½T¼Z¹\¼\ñKô Kñ Lô Lð Lð Làˆ˜$ÐøÝ�	¥8­^Ð<ð ð ð Øˆtˆtðøøøs   ƒCC ÃC=Ã<C=c           
      ó,  ‡ ‡‡‡	‡
— ˆ ˆfd„}t          t          j        |¦  «        d                     t	          |¦  «        ¦  «        d„ |¦  «        Š
t          ‰
‰ ‰¦  «        }g }|                     ¦   «         D ]Š\  Š	Šˆˆ	fd„}t          t          j        |‰	¦  «        d                     t	          |¦  «        ‰	¦  «        ˆ
fd„|¦  «        }|                     t          |‰	‰t          j        ¦   «         ¦  «        ¦  «         Œ‹|st          d¦  «        ‚|S )zMStrict worker-only loads; a failed fetch leaves the previous snapshot intact.c                 ó*   •— t          | ‰‰¦  «         d S r   )rD   )rV   rA   r1   s    €€r   Úcomplete_showz$_load_targets.<locals>.complete_showT   s   ø€ Ý��t˜VÑ$Ô$Ð$Ð$Ð$r   ztv/{}c                 óP   — t          j        |                      d¦  «        ¦  «        S ©NÚstatus©r   Úttl_for_statusr8   )Úds    r   ú<lambda>z_load_targets.<locals>.<lambda>X   s   € ¥dÔ&9¸!¿%º%À¹/¼/Ñ&JÔ&J€ r   c                 óN   •— t          | ‰‰t          j        ¦   «         ¦  «         d S r   )r]   r   rY   )rV   rX   rW   s    €€r   Úcomplete_seasonz&_load_targets.<locals>.complete_season\   s#   ø€ Ý˜D &¨(µD´J±L´LÑAÔAÐAÐAÐAr   ztv/{}/season/{}c                 óR   •— t          j        ‰                     d¦  «        ¦  «        S ro   rq   )rs   r@   s    €r   rt   z_load_targets.<locals>.<lambda>a   s   ø€ ­$Ô*=¸d¿hºhÀxÑ>PÔ>PÑ*QÔ*Q€ r   zNo aired episodes available)Ú_cached_completer   rb   r   r)   rD   rd   r`   re   r]   r   rY   r<   )rA   ra   r1   rm   rC   rZ   rv   rV   rX   rW   r@   s   ` `     @@@r   Ú_load_targetsry   R   sH  øøøøø€ ð%ð %ð %ð %ð %ð %õ �DœK¨Ñ0Ô0°'·.².ÅÀWÁÄÑ2NÔ2NØJÐJÈMñ[ô [€Då�t˜T 6Ñ*Ô*€GØ€GØ#ŸMšM™OœOð Nð NÑˆ�ð	Bð 	Bð 	Bð 	Bð 	Bð 	Bõ  ¥¤°¸Ñ @Ô @Ø 1× 8Ò 8½¸W¹¼ÀvÑ NÔ NØ QÐ QÐ QÐ QÐSbñdô dˆð 	�Š• t¨V°X½t¼z¹|¼|ÑLÔLÑMÔMÐMÐMØð 8ÝÐ6Ñ7Ô7Ð7Ø€Nr   c                 óL   ‡— ˆfd„}ˆfd„}t          j        | ||||d¬¦  «        S )Nc                 óh   •— 	  ‰| ¦  «         dS # t           t          t          t          f$ r Y dS w xY w)NTF)r<   rf   rg   rh   )rV   Úvalidates    €r   Úcompletez"_cached_complete.<locals>.completei   sE   ø€ ð	ØˆH�T‰NŒNˆNØ�4øÝ�I¥xµÐ@ð 	ð 	ð 	Ø�5�5ð	øøøs   ƒ �1°1c                 óH   •— t          j        | |¦  «        } ‰|¦  «         |S r   )r   Ú_fetch)ÚpathÚparamsrV   r|   s      €r   Úfetchz_cached_complete.<locals>.fetchp   s&   ø€ ÝŒ{˜4 Ñ(Ô(ˆØˆ�‰ŒˆØˆr   T)r‚   r}   Ústrict)r   Ú_cached)Úkeyr€   Úttlr|   r}   r‚   s      `  r   rx   rx   h   sT   ø€ ðð ð ð ð ðð ð ð ð õ
 Œ<˜˜T 3¨e¸hÈtÐTÑTÔTÐTr   c                 óö   — t          j        ¦   «         }	 |                     d| t          |¦  «        f¦  «                             ¦   «         d u|                     ¦   «          S # |                     ¦   «          w xY w)NzDSELECT 1 FROM pending_marks WHERE media_type=? AND tmdb_id=? LIMIT 1)r   ÚconnectÚexecuter)   ÚfetchoneÚclose)Úmediara   Úconns      r   Úhas_pendingrŽ   x   sh   € ÝŒ=‰?Œ?€DðØ�|Š|ÐbØ"¥C¨¡L¤LÐ1ñ3ô 3ß3;²8±:´:ÀTðJð 	�
Š
‰Œˆˆøˆ�
Š
‰Œˆˆøøøs   •8A" Á"A8c                 óö  — | dk    rdnd}t          j        ¦   «         }	 |                     d|t          |¦  «        f¦  «        }|D ]ƒ}|d         | k    r|d         |k    r|d         |k    s2|d         dk    r|�$|dk    s|d         dk    r=| dk    r7|d         |k    r+t	          |d	         ¦  «        c |                     ¦   «          S Œ„	 |                     ¦   «          n# |                     ¦   «          w xY wdS )
zRLatest queued intent covering this item, so repeated toggles preserve user intent.ÚmovieÚtvzMSELECT * FROM pending_marks WHERE media_type=? AND tmdb_id=? ORDER BY id DESCrA   r1   r[   Nr   Úwatched)r   rˆ   r‰   r)   Úboolr‹   )rA   ra   r1   r[   rŒ   r�   ÚpendingÚmarks           r   Úpending_watchedr–   �   s  € à˜w’�ˆGˆG¨D€EÝŒ=‰?Œ?€Dð	Ø—,’,ÐnØ %¥s¨7¡|¤|Ð4ñ6ô 6ˆàð 	-ð 	-ˆDØ�V” Ò$Ð$¨¨h¬¸6Ò)AÐ)AÀdÈ9ÄoÐY`ÒF`ÐF`Ø˜F”| tÒ+Ð+°°À6ÈAÂ:À:Ø˜F”| xÒ/Ð/°D¸IÒ4EÐ4EÈ$ÈxÌ.Ð\bÒJbÐJbÝ˜D œOÑ,Ô,Ð,Ð,à�
Š
‰Œˆˆøð	-ð 	�
Š
‰Œˆˆøˆ�
Š
‰ŒˆˆøøøØˆ4s   ŸBC  Ã	C  Ã C6c                 ó  — t          j        ¦   «         5 }|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         d         }t	          ||rt          |d         ¦  «        nd¦  «        dz   }	|                     dt          |	¦  «        f¦  «         |                     d|	| t          |¦  «        |||t          |¦  «        f¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz:SELECT value FROM flags WHERE key='pending_marks.sequence'z-SELECT COALESCE(MAX(id),0) FROM pending_marksr   ÚvaluerN   zJINSERT OR REPLACE INTO flags(key,value) VALUES('pending_marks.sequence',?)zbINSERT INTO pending_marks(id,media_type,tmdb_id,kind,season,episode,watched) VALUES(?,?,?,?,?,?,?))r   Útxr‰   rŠ   Úmaxr)   Ústr)
rŒ   ra   rA   r1   r[   r’   r�   ÚsequenceÚlast_idÚjob_ids
             r   ÚenqueuerŸ   ’   sK  € Ý	Œ‰Œð Y�tà—<’<Ð \Ñ]Ô]×fÒfÑhÔhˆØ—,’,ÐNÑOÔO×XÒXÑZÔZÐ[\Ô]ˆÝ�W¸ÐG�c (¨7Ô"3Ñ4Ô4Ð4ÀaÑHÔHÈ1ÑLˆØ�ŠÐaÕdgÐhnÑdoÔdoÐcqÑrÔrÐrØ�ŠÐyØ˜e¥S¨¡\¤\°4¸ÀÍ#ÈgÉ,Ì,ÐWñ	Yô 	Yð 	YðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð Yð Ys   ”CC;Ã;C?ÄC?rN   c                 óò   — t          j        ¦   «         }	 d„ |                     d|€t          j        ¦   «         n|| f¦  «        D ¦   «         |                     ¦   «          S # |                     ¦   «          w xY w)Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r.   )r:   )r*   Úrs     r   rJ   z!pending_marks.<locals>.<listcomp>¡   s*   € ð ;ð ;ð ;˜A•�Q‘”ð ;ð ;ð ;r   zÒSELECT p.* FROM pending_marks p WHERE p.next_attempt<=? AND NOT EXISTS (SELECT 1 FROM pending_marks older WHERE older.media_type=p.media_type AND older.tmdb_id=p.tmdb_id AND older.id<p.id) ORDER BY p.id LIMIT ?)r   rˆ   r‰   Útimer‹   )ÚlimitÚnowr�   s      r   Úpending_marksr¦   �   s|   € ÝŒ=‰?Œ?€Dðð;ð ; §¢ðSð  ˜K�TŒY‰[Œ[ˆ[¨S°%Ð8ñ	":ô ":ð ;ñ ;ô ;ð 	�
Š
‰Œˆˆøˆ�
Š
‰Œˆˆøøøs   •6A  Á A6c           
      ób  — d}t          || ¦  «        D �]š}	 |d         }|dk    rdg}nL|dk    r|d         |d         fg}n4|d         st          d¦  «         t          ||d	         |d         ¦  «        }t          j        |d
         |d	         |t          |d         ¦  «        |d         ¬¦  «         |dz  }Œ¦# t          $ ré}t          ddt          |d         dz   d¦  «        z  ¦  «        }t          j        ¦   «         5 }| 	                    d| €t          j
        ¦   «         n| |z   |d         f¦  «         d d d ¦  «         n# 1 swxY w Y   t          d                     |d         t          |¦  «        j        |¦  «        ¦  «         |d         st          d¦  «         Y d }~�Œ”d }~ww xY w|S )Nr   rA   r�   ©NNr[   r1   ÚattemptsiŠ  ra   Ú
media_typer’   Úid)Ú
pending_idrN   iX  é   é
   zFUPDATE pending_marks SET attempts=attempts+1,next_attempt=? WHERE id=?zmark {} failed: {}: {}i‹  )r¦   r#   ry   r   Ú	mark_manyr“   Ú	ExceptionrQ   r™   r‰   r£   r   r   ÚtypeÚ__name__)	r¥   r¤   Ú	completedr”   rA   rZ   ÚexcÚdelayr�   s	            r   Úprocess_marksr¶   ª   s+  € Ø€IÝ  ¨Ñ,Ô,ð ñ ˆð	Ø˜6”?ˆDØ�wŠˆØ'˜.��Ø˜Ò"Ð"Ø# HÔ-¨w°yÔ/AÐBÐC��à˜zÔ*ð #Ý˜E‘N”N�NÝ'¨¨g°iÔ.@À'È(ÔBSÑTÔT�ÝŒO˜G LÔ1°7¸9Ô3EÀwÕPTÐU\Ð]fÔUgÑPhÔPhØ'.¨t¤}ð6ñ 6ô 6ð 6à˜‰NˆIˆIøÝð 	ð 	ð 	Ý˜˜Q¥# g¨jÔ&9¸AÑ&=¸rÑ"BÔ"BÑBÑCÔCˆEÝ”‘”ð ]˜tØ—’ÐeØ.1¨k�tœy™{œ{˜{¸sÀeÑKÈWÐUYÌ]Ð[ñ]ô ]ð ]ð]ð ]ð ]ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]øøøð ]ð ]ð ]ð ]õ Ð)×0Ò0°¸´ÅÀSÁ	Ä	Ô@RÐTWÑXÔXÑYÔYÐYØ˜:Ô&ð Ý˜‘”�øøøøùøøøøð	øøøð Ðs=   —B!B9Â9
F,Ã=F'Ä 7EÄ7F'ÅEÅF'Å
EÅAF'Æ'F,c           	      óØ  — ddl m} d}t          j        t          | ¦  «        D ]Æ}|d         dk    rd n|d         }|d         dk    rd n|d         }	 |                     |d         dk    rdnd|d         ||¦  «        }nN# t          $ rA}t          d	                     t          |¦  «        j
        |¦  «        ¦  «         d
}Y d }~nd }~ww xY w|r|dz  }Œ²t          j        |¦  «         ŒÇ|S )Nr   ©Úmirrorr1   éÿÿÿÿr[   rª   r�   ra   zmirror failed: {}: {}FrN   )Úwcs.library2r¹   r   Úpending_mirrorsÚBATCHÚpushr°   r   r   r±   r²   Úretry_mirror)r¥   r¹   r³   r”   r1   r[   Úokr´   s           r   Úprocess_mirrorsrÁ   Å   s1  € Ø#Ð#Ð#Ð#Ð#Ð#Ø€IÝÔ(­°Ñ4Ô4ð (ð (ˆØ  Ô*¨bÒ0Ð0��°g¸hÔ6GˆØ! )Ô,°Ò2Ð2�$�$¸À	Ô8Jˆð	Ø—’¨°Ô(=ÀÒ(HÐ(H˜W˜WÈiØ$ YÔ/°¸ñBô BˆBˆBøåð 	ð 	ð 	ÝÐ(×/Ò/µ°S±	´	Ô0BÀCÑHÔHÑIÔIÐIØˆBˆBˆBˆBˆBˆBøøøøð	øøøð ð 	(Ø˜‰NˆIˆIåÔ˜wÑ'Ô'Ð'Ð'ØÐs   Á,A?Á?
C
Â	7CÃC
Ú c                 ó|  — t          t                               | ¦  «        ¦  «        d t          …         |f}|d         sd S 	 t                               |¦  «         d S # t          j        $ rN 	 t                               ¦   «          n# t          j	        $ r Y nw xY wt                               |¦  «         Y d S w xY w)Nr   )
r;   r:   ÚfromkeysÚADOPT_BATCHÚ
_adoptionsÚ
put_nowaitÚqueueÚFullÚ
get_nowaitÚEmpty)ÚpathsÚfolderÚworks      r   Úrequest_adoptionrÏ   Ø   sÏ   € Ý•—’˜uÑ%Ô%Ñ&Ô& |­ |Ô4°fÐ=€DØ�Œ7ð Øˆð$Ý×Ò˜dÑ#Ô#Ð#Ð#Ð#øÝŒ:ð $ð $ð $ð	Ý×!Ò!Ñ#Ô#Ð#Ð#øÝŒ{ð 	ð 	ð 	ØˆDð	øøøå×Ò˜dÑ#Ô#Ð#Ð#Ð#Ð#ð$øøøs6   ÁA ÁB;Á.BÂB;ÂBÂB;ÂBÂB;Â:B;c                  ó,  — ddl m}  	 t                               ¦   «         \  }}n# t          j        $ r Y dS w xY w|                      |¦  «        }|rB|r@t          j        d¦  «        r,t          j	        d¦  «        |k    rt          j
        d¦  «         |S )Nr   r¸   zWindow.IsActive(videos)zContainer.FolderPathzContainer.Refresh)r»   r¹   rÆ   rÊ   rÈ   rË   Úcheck_pathsr   ÚgetCondVisibilityÚgetInfoLabelr    )r¹   rÌ   rÍ   Úchangeds       r   Úprocess_adoptionsrÕ   æ   s·   € Ø#Ð#Ð#Ð#Ð#Ð#ðÝ"×-Ò-Ñ/Ô/‰ˆˆvˆvøÝŒ;ð ð ð Øˆqˆqðøøøà× Ò  Ñ'Ô'€GØð 1�Fð 1�tÔ5Ð6OÑPÔPð 1ÝÔ!Ð"8Ñ9Ô9¸VÒCÐCÝÔÐ/Ñ0Ô0Ð0Ø€Ns   ˆ% ¥8·8c           
      ó  — t                                d¬¦  «        sd S 	 |                      ¦   «         sžt          t          t
          fD ]_}	  |¦   «          Œ# t          $ rE}t          d                     |j	        t          |¦  «        j	        |¦  «        ¦  «         Y d }~ŒXd }~ww xY w|                      d¦  «        rn|                      ¦   «         ¯žt                                ¦   «          d S # t                                ¦   «          w xY w)NF)Úblockingz{} failed: {}: {}g      à?)Ú_worker_lockÚacquireÚabortRequestedrÁ   rÕ   r¶   r°   r   r   r²   r±   ÚwaitForAbortÚrelease)ÚmonitorrÎ   r´   s      r   ÚlooprÞ   ó   s%  € å×Ò¨ÐÑ/Ô/ð Øˆð
Ø×(Ò(Ñ*Ô*ð 	Ý(Õ*;½]ÐKð ]ð ]�ð]Ø�D‘F”F�F�FøÝ ð ]ð ]ð ]ÝÐ,×3Ò3°D´MÅ4ÈÁ9Ä9ÔCUÐWZÑ[Ô[Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\øøøøð]øøøà×#Ò# CÑ(Ô(ð Øð ×(Ò(Ñ*Ô*ð 	õ 	×ÒÑÔÐÐÐø�×ÒÑÔÐÐøøøs5   Ÿ*C, Á

AÁC, Á
B$Á;BÂC, ÂB$Â$-C, Ã,Dr   r¨   )rN   N)NrN   )rÂ   )&Ú__doc__r!   rÈ   Ú	threadingr£   Údatetimer   r   r   r»   r   r   r   r   r   r½   rÅ   ÚQueuerÆ   ÚLockrØ   r   r   r#   rD   r]   rj   ry   rx   rŽ   r–   rŸ   r¦   r¶   rÁ   rÏ   rÕ   rÞ   r.   r   r   ú<module>rä      sí  ðà MÐ MØ €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à"€Ø	€Ø€ØˆUŒ[ Ð#Ñ#Ô#€
ØˆyŒ~ÑÔ€ðFð Fð FðCð Cð Cðgð gð gð
Kð 
Kð 
Kðð ð ð&ð ð ð ðð ð ð ð,Uð Uð Uð ð ð ðð ð ð ð"Yð Yð Yð
ð 
ð 
ð 
ðð ð ð ð6ð ð ð ð&$ð $ð $ð $ð
ð 
ð 
ðð ð ð ð r   