§
   æ]¯!"L4¹ã                   ó
  — 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dlZddl	m
Z
mZmZ dZdZdZdZdZd	d
dddddddddœ
Z G d„ de¦  «        Zd„ Zd%d„Zd&d„Zd„ Zd„ Zd„ Zd„ Zd&d„Zd&d„Zd „ Zd!„ Zd"„ Z efd#„Z!d&d$„Z"dS )'a‚  Explicit legacy-list migration, invoked ONLY by the library_migrate plugin action.

pending()/offer() are discovery without UI or providers. Automatic offers require
empty new lists and respect declines. Manual runs reopen and merge populated
lists, including interrupted metadata/Home work. Commit and full completion
have separate fingerprints, so partial work is manually retryable.
é    N)ÚmetaÚstoreÚtmdbzplugin.video.milionarz watchlists.migration.declined.v2z!watchlists.migration.completed.v2zwatchlists.migration.state.v2g      4@iðU  iØY  iÀ]  i¨a  i�e  ixi  i`m  iHq  i0u  iy  )
ÚmytvÚmycinemaÚcontÚgameÚaiÚkraskar   Ú	my_moviesÚ	my_seriesÚvinylc                   ó   — e Zd ZdS )Ú
_CancelledN)Ú__name__Ú
__module__Ú__qualname__© ó    úd/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/migration.pyr   r       s   € € € € € Ø€Dr   r   c                  ó~   — t          j        t          j        t          ¦  «                             d¦  «        ¦  «        S )NÚprofile)ÚxbmcvfsÚtranslatePathÚ	xbmcaddonÚAddonÚADDON_IDÚgetAddonInfor   r   r   Ú_profiler   $   s+   € ÝÔ ¥¤µÑ!:Ô!:×!GÒ!GÈ	Ñ!RÔ!RÑSÔSÐSr   Fc                 ób  — |st          j        ¦   «         sdS t          j        | pt          ¦   «         ¦  «        }|d         sdS |s)t	          |d                              ¦   «         ¦  «        sdS |d         }|s6|t          j        t          ¦  «        t          j        t          ¦  «        fv rdS |S )aÚ  Return a reviewed snapshot or None (populated/absent/declined/completed).

    Read failures raise; no UI, network, list writes or import flags here.
    Summary counts: counts.movie/tv (raw), existing (unique current membership),
    duplicates (within each source), invalid (individual rows), files (retained).
    Automatic discovery stops before reading legacy files if any new list has
    an entry. Manual discovery always permits safe merges and partial retries.
    NÚfilesÚcountsÚfingerprint)	r   Úwatchlist_import_emptyÚinspect_watchlist_importr   ÚanyÚvaluesÚget_flagÚDECLINEDÚ	COMPLETED)Úprofile_dirÚmanualÚsnapshotr#   s       r   Úofferr.   (   s¸   € ð ð �%Ô6Ñ8Ô8ð ØˆtÝÔ-¨kÐ.G½X¹Z¼ZÑHÔH€HØ�GÔð ØˆtØð �#˜h xÔ0×7Ò7Ñ9Ô9Ñ:Ô:ð ØˆtØ˜=Ô)€KØð �k¥e¤nµXÑ&>Ô&>ÅÄÍyÑ@YÔ@YÐ%ZÐZÐZØˆtØ€Or   c                 ób   — 	 t          | ¦  «        duS # t          t          t          f$ r Y dS w xY w)zìService-safe automatic offer gate, never an automatic partial-work retry.

    Broken sources remain discoverable while new lists are empty; once import
    populated them, STATE retains pending metadata/Home work for manual retry.
    NT)r.   ÚOSErrorÚ
ValueErrorÚUnicodeError)r+   s    r   Úpendingr3   >   sC   € ðÝ�[Ñ!Ô!¨Ð-Ð-øÝ•Z¥Ð.ð ð ð Øˆtˆtðøøøs   ‚ “.­.c                 óB   —  |                       |¦  «        j        di |¤ŽS )Nr   )ÚgetLocalizedStringÚformat)ÚaddonÚ	string_idr'   s      r   Ú_textr9   J   s)   € Ø5ˆ5×#Ò# IÑ.Ô.Ô5Ð?Ð?¸Ð?Ð?Ð?r   c           
      ó$  — 	 t          j        t          t          j        t          || d         |¬¦  «        ¦  «        ¦  «         d S # t          $ r?}t          j        dt          |¦  «        j
        z   t          j        ¦  «         Y d }~d S d }~ww xY w)Nr#   )r#   Úphaseu'   [MilionÃ¡Å™ Library] migration status: )r   Úset_flagÚSTATEÚjsonÚdumpsÚdictÚ	ExceptionÚxbmcÚlogÚtyper   Ú
LOGWARNING)r-   r;   ÚdetailsÚexcs       r   Ú_staterH   N   s™   € ðbÝŒ•u�dœj­¨gÀ8ÈMÔCZÐbgÐ)hÑ)hÔ)hÑiÔiÑjÔjÐjÐjÐjøÝð bð bð båŒÐ:½TÀ#¹Y¼YÔ=OÑOÕQUÔQ`ÑaÔaÐaÐaÐaÐaÐaÐaÐaøøøøðbøøøs   ‚AA Á
BÁ4B
Â
Bc                 ó”   — |                       ¦   «         s%t          j        ¦   «                              ¦   «         rt	          ¦   «         ‚d S ©N)Ú
iscanceledrB   ÚMonitorÚabortRequestedr   )Úprogresss    r   Ú_checkrO   V   sC   € Ø×ÒÑÔð ¥¤¡¤× =Ò =Ñ ?Ô ?ð Ý‰lŒlÐðð r   c                 ó¬  — t          | t          ¦  «        r*|                      d¦  «        s|                      d¦  «        sdS t          |                      d¦  «        t          ¦  «        rt	          d„ | d         D ¦   «         ¦  «        rdS |dk    rC|                      d¦  «        }t          |t          ¦  «        ot          d„ |D ¦   «         ¦  «        S d	S )
NÚtitleÚnameFÚgenresc              3   óJ   K  — | ]}t          |t          ¦  «         pd |vV — ŒdS )ÚidN)Ú
isinstancer@   )Ú.0Úgs     r   ú	<genexpr>z"_title_complete.<locals>.<genexpr>^   s<   è è € Ð6xÐ6xÐde½:ÀaÍÑ;NÔ;NÐ7NÐ7_ÐRVÐ^_ÐR_Ð6xÐ6xÐ6xÐ6xÐ6xÐ6xr   ÚtvÚseasonsc              3   ó¨   K  — | ]M}t          |t          ¦  «        o3t          |                     d ¦  «        t          ¦  «        o|d          dk    V — ŒNdS )Úseason_numberr   N)rV   r@   ÚgetÚint)rW   Úss     r   rY   z"_title_complete.<locals>.<genexpr>b   sz   è è € ð 1bð 1bØTUõ 2<¸A½tÑ1DÔ1Dð 2PÝ�q—u’u˜_Ñ-Ô-­sÑ3Ô3ð2PØ89¸/Ô8JÈaÒ8Oð1bð 1bð 1bð 1bð 1bð 1br   T)rV   r@   r^   Úlistr&   Úall)ÚdataÚ
media_typer[   s      r   Ú_title_completere   [   sð   € Ý�d�DÑ!Ô!ð ¨$¯(ª(°7Ñ*;Ô*;ð ¸t¿xºxÈÑ?OÔ?Oð ØˆuÝ�d—h’h˜xÑ(Ô(­$Ñ/Ô/ð µ3Ð6xÐ6xÐimÐnvÔiwÐ6xÑ6xÔ6xÑ3xÔ3xð ØˆuØ�TÒÐØ—(’(˜9Ñ%Ô%ˆÝ˜'¥4Ñ(Ô(ð b­Sð 1bð 1bØY`ð1bñ 1bô 1bñ .bô .bð 	bàˆ4r   c                 ób  — t          | t          ¦  «        r(t          |                      d¦  «        t          ¦  «        sdS d„ | d         D ¦   «         }t	          d„ |D ¦   «         ¦  «        rdS t          |¦  «        t          t          |¦  «        ¦  «        k    o|d u pt          |¦  «        |k    S )NÚepisodesFc                 óf   — g | ].}t          |t          ¦  «        r|                     d ¦  «        nd‘Œ/S )Úepisode_numberN)rV   r@   r^   )rW   Úes     r   ú
<listcomp>z$_season_complete.<locals>.<listcomp>j   s9   € ÐbÐbÐbÈA­*°Q½Ñ*=Ô*=ÐGˆq�uŠuÐ%Ñ&Ô&Ð&À4ÐbÐbÐbr   c              3   óx   K  — | ]5}t          |t          ¦  «         pt          |t          ¦  «        p|d k    V — Œ6dS )r   N)rV   r_   Úbool)rW   Úns     r   rY   z#_season_complete.<locals>.<genexpr>k   sG   è è € Ð
TÐ
TÀq�z˜!�SÑ!Ô!Ð!ÐB¥Z°µ4Ñ%8Ô%8ÐB¸AÀºFÐ
TÐ
TÐ
TÐ
TÐ
TÐ
Tr   )rV   r@   r^   ra   r&   ÚlenÚset)rc   ÚexpectedÚnumberss      r   Ú_season_completers   g   s®   € Ý�d�DÑ!Ô!ð ­°D·H²H¸ZÑ4HÔ4HÍ$Ñ)OÔ)Oð ØˆuØbÐbÐQUÐV`ÔQaÐbÑbÔb€GÝ
Ð
TÐ
TÈGÐ
TÑ
TÔ
TÑTÔTð ØˆuÝˆw‰<Œ<�3�s 7™|œ|Ñ,Ô,Ò,Ð_°(¸dÐ2BÐ2^ÅcÈ'ÁlÄlÐV^ÒF^Ð_r   c                 óä  ‡ ‡‡‡— ˆ fd„t           j        D ¦   «         }i }|D ]ÞŠ|                     ˆfd„‰ d         ‰         D ¦   «         ¦  «         |                     ˆfd„t          j        ‰¦  «        D ¦   «         ¦  «         ‰dk    rt          j        ¦   «         nt          j        ¦   «         }|D ]M}‰|f|vrEt          j        ‰|¦  «        pi }t          j        | 	                    d¦  «        pd¦  «        |‰|f<   ŒNŒßg }	t          |                     ¦   «         d¦  «        D �]H\  }
\  \  Š}}t          |¦  «         |                     d	t          d
|
z  t          dt          |¦  «        ¦  «        z  ¦  «        z   t!          |d|
t          |¦  «        ¬¦  «        ¦  «         	 ‰dk    rt#          j        |¦  «        nt#          j        |¦  «        }t#          j	        |¦  «        \  }}‰dk    rt"          j        n(t#          j        |p| 	                    d¦  «        ¦  «        }t-          |‰¦  «        s&t-          |‰¦  «        rt#          j        |||¦  «         t1          j        |d                     ‰|¦  «        ˆfd„|ˆfd„¬¦  «        Št-          ‰‰¦  «        s|	                     |¦  «         �Œ‘‰dk    �r‰d         D �]}|d         }|dk    rŒt          |¦  «         t#          j        ||¦  «        }| 	                    d¦  «        Št#          j	        |¦  «        \  }}t;          |‰¦  «        sKt;          |‰¦  «        r;t#          j        ||t#          j        ‰ 	                    d¦  «        ¦  «        ¦  «         t1          j        |d                     ||¦  «        ˆfd„|ˆfd„¬¦  «        }t;          |‰¦  «        s|	                     |¦  «         �Œ�Œ¹# t<          $ r ‚ t>          $ rz}|	                     d                     ‰|¦  «        ¦  «         tA          j!        d                     ‰|tE          |¦  «        j#        ¦  «        t@          j$        ¦  «         Y d}~�ŒBd}~ww xY w||	fS )zÝPrefer complete local snapshots/caches; fetch only missing explicit work.

    Includes current related lists/activity so their Home rows can be built
    completely. Tests supply fetch and never use a live provider.
    c                 ó^   •‡— h | ](\  }Št          ˆfd „‰d         D ¦   «         ¦  «        ¯&|’Œ)S )c              3   óˆ   •K  — | ]<}t           j                             |d          ¦  «                             ‰¦  «        V — Œ=dS ©ÚpathN)Úosrx   ÚbasenameÚ
startswith)rW   ÚfrR   s     €r   rY   z._prepare_metadata.<locals>.<setcomp>.<genexpr>w   sE   øè è € Ð\Ð\ÀQ•B”G×$Ò$ Q v¤YÑ/Ô/×:Ò:¸4Ñ@Ô@Ð\Ð\Ð\Ð\Ð\Ð\r   r!   )r&   )rW   ÚkindrR   r-   s     @€r   ú	<setcomp>z$_prepare_metadata.<locals>.<setcomp>v   s\   øø€ ð ^ð ^ð ^‘j�d˜DÝÐ\Ð\Ð\Ð\È(ÐSZÔJ[Ð\Ñ\Ô\Ñ\Ô\ð^ˆTð ^ð ^ð ^r   c                 ó&   •— i | ]}‰|d          f|“ŒS ©rU   r   ©rW   rj   r}   s     €r   ú
<dictcomp>z%_prepare_metadata.<locals>.<dictcomp>z   s#   ø€ ÐNÐNÐN¨q˜˜q œw˜¨ÐNÐNÐNr   Úentriesc                 ó&   •— i | ]}‰|d          f|“ŒS r€   r   r�   s     €r   r‚   z%_prepare_metadata.<locals>.<dictcomp>{   s#   ø€ ÐIÐIÐI¨q˜˜q œw˜¨ÐIÐIÐIr   ÚmovieÚlegacy_jsonz{}é   é
   éA   i—  )ÚdoneÚtotalÚstatusz{}/{}c                 óv   •— ‰dk    rt           j        n&t          j        |                      d¦  «        ¦  «        S )Nr…   rŒ   )r   Ú	TTL_MOVIEÚttl_for_statusr^   ©Údr}   s    €r   ú<lambda>z#_prepare_metadata.<locals>.<lambda>�   s1   ø€ ¸DÀGºO¸O­$¬.¨.ÕQUÔQdÐef×ejÒejÐksÑetÔetÑQuÔQu€ r   c                 ó$   •— t          | ‰¦  «        S rJ   )re   r�   s    €r   r’   z#_prepare_metadata.<locals>.<lambda>Ž   s   ø€ ÅÐPQÐSWÑ@XÔ@X€ r   )ÚfetchÚcompleterZ   r[   r]   r   Úepisode_countztv/{}/season/{}c                 óR   •— t          j        ‰                     d¦  «        ¦  «        S )NrŒ   )r   r�   r^   )r‘   rc   s    €r   r’   z#_prepare_metadata.<locals>.<lambda>ž   s   ø€ ½Ô8KÈDÏHÊHÐU]ÑL^ÔL^Ñ8_Ô8_€ r   c                 ó$   •— t          | ‰¦  «        S rJ   )rs   )r‘   rq   s    €r   r’   z#_prepare_metadata.<locals>.<lambda>Ÿ   s   ø€ ÕAQÐRSÐU]ÑA^ÔA^€ r   z{}:{}u1   [MilionÃ¡Å™ Library] migration metadata {}:{}: {}N)%r   ÚLEGACY_FILESÚupdateÚget_listÚget_movie_statesÚget_all_episode_statesÚ	get_titler>   Úloadsr^   Ú	enumerateÚitemsrO   r_   Úmaxro   r9   r   Ú	key_movieÚkey_tvrŽ   r�   re   Úputr   Ú_cachedr6   ÚappendÚ
key_seasonrs   r   rA   rB   rC   rD   r   rE   )r-   rN   r7   r”   Úkindsrƒ   ÚstatesÚtmdb_idrQ   ÚmissingrŠ   ÚentryÚkeyÚcachedÚ_staleÚttlÚseasonÚnumberÚ
season_keyÚseason_datarG   rc   rq   r}   s   `                    @@@r   Ú_prepare_metadatar¶   p   sß  øøøø€ ð^ð ^ð ^ð ^¥EÔ$6ð ^ñ ^ô ^€Eà€GØð Xð XˆØ�ŠÐNÐNÐNÐN°H¸YÔ4GÈÔ4MÐNÑNÔNÑOÔOÐOØ�ŠÐIÐIÐIÐIµE´NÀ4Ñ4HÔ4HÐIÑIÔIÑJÔJÐJØ-1°Wª_¨_•Ô'Ñ)Ô)Ð)Å%ÔB^ÑB`ÔB`ˆØð 	Xð 	XˆGØ�gˆ gÐ-Ð-Ýœ¨¨gÑ6Ô6Ð<¸"�Ý+/¬:°e·i²iÀÑ6NÔ6NÐ6VÐRVÑ+WÔ+W�˜˜w˜Ñ(øð	Xð €GÝ*3°G·M²M±O´OÀQÑ*GÔ*Gð %&ñ %&Ñ&ˆÑ&‰��g ÝˆxÑÔÐØ�Š˜�S  d¡­S°µC¸±L´LÑ-AÔ-AÑ!AÑBÔBÑBÝ˜e U°½SÀ¹\¼\ÐJÑJÔJñ	Lô 	Lð 	Lð!	&Ø-1°Wª_¨_•$”. Ñ)Ô)Ð)Å$Ä+ÈgÑBVÔBVˆCÝ!œX c™]œ]‰NˆF�FØ$(¨G¢O O•$”.�.½Ô9LÈfÈoÐX]×MbÒMbÐckÑMlÔMlÑ9mÔ9mˆCÝ" 6¨4Ñ0Ô0ð *µ_ÀUÈDÑ5QÔ5Qð *Ý”˜˜e SÑ)Ô)Ð)Ý”<  W§^¢^°D¸'Ñ%BÔ%BØ uÐ uÐ uÐ uØ&+Ð6XÐ6XÐ6XÐ6XðZñ Zô ZˆDõ # 4¨Ñ.Ô.ð Ø—’˜sÑ#Ô#Ð#ÙØ�tŠ|‰|Ø" 9œoð 3ñ 3�FØ# OÔ4�FØ ’{�{Ø Ý˜8Ñ$Ô$Ð$Ý!%¤°¸&Ñ!AÔ!A�JØ%Ÿzšz¨/Ñ:Ô:�HÝ%)¤X¨jÑ%9Ô%9‘N�F˜FÝ+¨F°HÑ=Ô=ð ^ÕBRÐSYÐ[cÑBdÔBdð ^Ýœ ¨VµTÔ5HÈÏÊÐRZÑI[ÔI[Ñ5\Ô5\Ñ]Ô]Ð]Ý"&¤,¨zÐ;L×;SÒ;SÐT[Ð]cÑ;dÔ;dØ._Ð._Ð._Ð._ÐglØ7^Ð7^Ð7^Ð7^ð#`ñ #`ô #`�Kõ ,¨K¸ÑBÔBð 3ØŸš zÑ2Ô2Ð2ùùøÝð 	ð 	ð 	ØÝð 	&ð 	&ð 	&Ø�NŠN˜7Ÿ>š>¨$°Ñ8Ô8Ñ9Ô9Ð9ÝŒHÐH×OÒOÐPTÐV]Õ_cÐdgÑ_hÔ_hÔ_qÑrÔrÝ”_ñ&ô &ð &ð &ð &ð &ð &ñ &øøøøð	&øøøð �'ˆ>Ðs!   Æ%DOÊ5D&OÏQ+Ï1A/Q&Ñ&Q+c                 ó6  ‡— g }t                                ¦   «         D ]û\  }}t          dd¦  «        D ]å}d                     ||¦  «        Št	          j        d                     ‰¦  «        ¦  «        }|| vrŒDˆfd„dD ¦   «         }|                     t	          j        d                     |¦  «        ¦  «        t	          j        d                     |¦  «        ¦  «        |||t          |¦  «        ¬	¦  «         |                     |||||d
z  z   |dœ¦  «         ŒæŒü|S )Nr‡   é   z	mil.{}.{}zSkin.String({}.type)c           	      ób   •— i | ]+}|t          j        d                      ‰|¦  «        ¦  «        “Œ,S )zSkin.String({}.{})©rB   ÚgetInfoLabelr6   )rW   r®   Úprefixs     €r   r‚   z_slots.<locals>.<dictcomp>³   sN   ø€ ð Fð Fð FØð �4Ô,Ð-A×-HÒ-HÈÐQTÑ-UÔ-UÑVÔVð Fð Fð Fr   )ÚlimitÚsortÚstyleÚclickzSkin.String(mil.{}.hidewatched)zSkin.String(mil.{}.upcoming))ÚhwÚupÚrowÚactionÚsecÚslotéd   )ÚsectionrÆ   rÃ   Ú	containerÚparams)	Ú
SLOT_BASESr¡   Úranger6   rB   r»   rš   Ústrr§   )ÚaffectedÚresultrÅ   Úbasern   rÃ   rÊ   r¼   s          @r   Ú_slotsrÑ   «   sY  ø€ Ø€FÝ×%Ò%Ñ'Ô'ð rð r‰	ˆˆTÝ�q˜!‘”ð 
	rð 
	rˆAØ ×'Ò'¨¨QÑ/Ô/ˆFÝÔ#Ð$:×$AÒ$AÀ&Ñ$IÔ$IÑJÔJˆCØ˜(Ð"Ð"ØðFð Fð Fð FØ!DðFñ Fô FˆFà�MŠM�TÔ.Ð/P×/WÒ/WÐX[Ñ/\Ô/\Ñ]Ô]Ý!Ô.Ð/M×/TÒ/TÐUXÑ/YÔ/YÑZÔZØ!¨#°3½SÀ¹V¼Vð ñ Eô Eð Eð �MŠM c°1¸SÈtÐVWÐZ]ÑV]É~ÐioÐpÐpÑqÔqÐqÐqð
	rð €Mr   c                 óH  — ddl m} t          | ¦  «        }|D ]‰}t          |¦  «         |d         |j        v r2|                     |d         |d         ¦  «        }d„ |D ¦   «         |d<   ŒRddlm} |                     |d         |d         ¦  «        }d„ |D ¦   «         |d<   ŒŠ|S )	z:Warm cached library rows before publishing their new URLs.r   )ÚrowsrÃ   rÊ   c                 óf   — g | ].\  }}}|                      ¦   «         |                     ¦   «         f‘Œ/S r   ©ÚgetLabelÚgetPath)rW   Ú_pathÚitemÚ_folders       r   rk   z$_prepare_widgets.<locals>.<listcomp>Ä   s5   € ÐdÐdÐdÑFZÀeÈTÐSZ §¢¡¤°$·,²,±.´.Ð AÐdÐdÐdr   rq   )Úwidgetsc                 ó^   — g | ]*}|                      ¦   «         |                     ¦   «         f‘Œ+S r   rÕ   )rW   rÙ   s     r   rk   z$_prepare_widgets.<locals>.<listcomp>È   s-   € ÐTÐTÐTÀd §¢¡¤°$·,²,±.´.Ð AÐTÐTÐTr   )Úwcs.library2rÓ   rÑ   rO   Ú	CATALOGUEÚbuildÚwcs.skinrÛ   )rÎ   rN   rÓ   ÚslotsrÆ   r¡   rÛ   s          r   Ú_prepare_widgetsrâ   ¼   sÕ   € à!Ð!Ð!Ð!Ð!Ð!Ý�8ÑÔ€EØð Uð UˆÝˆxÑÔÐØ�Œ;˜$œ.Ð(Ð(Ø—J’J˜t Eœ{¨D°¬NÑ;Ô;ˆEØdÐdÐ^cÐdÑdÔdˆD�ÑÐà(Ð(Ð(Ð(Ð(Ð(Ø—M’M $ u¤+¨t°H¬~Ñ>Ô>ˆEØTÐTÈeÐTÑTÔTˆD�ÑÐØ€Lr   c                 ó$  ‡— |                       d¦  «        }|€dS | d         Št          j        d                     ‰¦  «        ¦  «        t	          t          |¦  «        ¦  «        k    rdS t          ˆfd„t          |¦  «        D ¦   «         ¦  «        S )zDFast updates can finish between polls: verify the prepared contents.rq   NFrÉ   zContainer({}).NumItemsc              3   óÔ   •K  — | ]b\  }\  }}t          j        d                      ‰|¦  «        ¦  «        |k    o+t          j        d                     ‰|¦  «        ¦  «        |k    V — ŒcdS )z(Container({}).ListItemAbsolute({}).Labelz2Container({}).ListItemAbsolute({}).FilenameAndPathNrº   )rW   rn   Úlabelrx   rÉ   s       €r   rY   z_matches.<locals>.<genexpr>Ô   s�   øè è € ð <ð <á#�1‘m�u˜dõ Ô Ð!K×!RÒ!RÐS\Ð^_Ñ!`Ô!`ÑaÔaÐejÒjð tÝÔ Ð!U×!\Ò!\Ð]fÐhiÑ!jÔ!jÑkÔkÐosÒsð<ð <ð <ð <ð <ð <r   )r^   rB   r»   r6   rÍ   ro   rb   r    )rÆ   rq   rÉ   s     @r   Ú_matchesræ   Ì   s¢   ø€ à�xŠx˜
Ñ#Ô#€HØÐØˆuØ�[Ô!€IÝÔÐ1×8Ò8¸ÑCÔCÑDÔDÍÍCÐPXÉMÌMÑHZÔHZÒZÐZØˆuÝð <ð <ð <ð <å'0°Ñ':Ô':ð<ñ <ô <ñ <ô <ð <r   c                 ó  ‡— ddl m} t          j        d¦  «        Št	          j        ¦   «         d}}t          ¦   «         }t	          j        ¦   «         |z
  |k     �r/t          |¦  «         t          ˆfd„|  	                    ¦   «         D ¦   «         ¦  «        }| 
                    | ¦  «        }	|	| k    rŒ|                      |	¦  «         t          t          | ¦  «        |¦  «        |dd…<   |                     | ¦  «         |                     | ¦  «         |                     ¦   «          d}t!          j        d¦  «         Œþ|D ]ñ}
d                     |
d         |
d	         ¦  «        }|o1‰                     |¦  «        t)          | |
d
                  ¦  «        k    }t!          j        d¦  «        sŒm|
d         }t!          j        d                     |¦  «        ¦  «        sŒ�t!          j        d                     |¦  «        ¦  «        r|                     |¦  «         d}ŒÜ||vrt/          |
¦  «        sd}Œòt	          j        ¦   «         }|r|€|n|}||z
  dk    rdS nd}t!          j        d¦  «         t	          j        ¦   «         |z
  |k     �°/dS )a9  Wait for publication and visible related containers; timeout is failure.

    Hidden containers reload on visibility from the published slot tokens. A
    visible one must settle after an observed update or match the warm snapshot.
    No unrelated window, skin reload, or unscoped Container.Refresh is used.
    r   ©Úrefreshi'  Nc              3   óp   •K  — | ]0\  }}‰                      d |z   ¦  «        t          |¦  «        k    V — Œ1dS )zmilionar.rows.N)ÚgetPropertyrÍ   )rW   rÃ   ÚversionÚhomes      €r   rY   z_wait_home.<locals>.<genexpr>æ   sI   øè è € ÐqÐqÑQ]ÐQTÐV]�D×$Ò$Ð%5¸Ñ%;Ñ<Ô<ÅÀGÁÄÒLÐqÐqÐqÐqÐqÐqr   é2   zmilionar.widgets.{}.{}rÈ   rÆ   rÃ   zWindow.IsVisible(home)rÉ   zControl.IsVisible({})zContainer({}).IsUpdatingFg      à?T)rà   ré   ÚxbmcguiÚWindowÚtimeÚ	monotonicrp   rO   rb   r¡   Ú	revisionsrš   râ   ÚpublishÚrequestÚclearrB   Úsleepr6   rë   rÍ   ÚgetCondVisibilityÚaddræ   )Útargetsrá   rN   Útimeoutré   ÚstartedÚstable_sinceÚupdatingÚreadyÚcurrentrÆ   r®   rÉ   Únowrí   s                 @r   Ú
_wait_homer  Ù   s˜  ø€ ð !Ð Ð Ð Ð Ð ÝŒ>˜%Ñ Ô €DÝ œNÑ,Ô,¨dˆ\€GÝ‰uŒu€HÝ
Œ.Ñ
Ô
˜WÑ
$ wÒ
.Ñ
.ÝˆxÑÔÐÝÐqÐqÐqÐqÐah×anÒanÑapÔapÐqÑqÔqÑqÔqˆØ×#Ò# GÑ,Ô,ˆØ�gÒÐð �NŠN˜7Ñ#Ô#Ð#Ý'­¨G©¬°hÑ?Ô?ˆE�!�!�!‰HØ�OŠO˜GÑ$Ô$Ð$Ø�OŠO˜GÑ$Ô$Ð$Ø�NŠNÑÔÐØˆLÝŒJ�r‰NŒNˆNØØð 	ð 	ˆDØ*×1Ò1°$°y´/À4ÈÄ<ÑPÔPˆCØÐP˜d×.Ò.¨sÑ3Ô3µs¸7À4ÈÄ;Ô;OÑ7PÔ7PÒPˆEÝÔ)Ð*BÑCÔCð ØØ˜[Ô)ˆIÝÔ)Ð*A×*HÒ*HÈÑ*SÔ*SÑTÔTð ØÝÔ%Ð&@×&GÒ&GÈ	Ñ&RÔ&RÑSÔSð Ø—’˜YÑ'Ô'Ð'Ø��Ø (Ð*Ð*µ8¸D±>´>Ð*Ø�øÝŒnÑÔˆØð 	 Ø".Ð"6˜3˜3¸LˆLØ�\Ñ! SÒ(Ð(Ø�tð )ð  ˆLÝŒ
�2‰ŒˆõG Œ.Ñ
Ô
˜WÑ
$ wÒ
.Ñ
.ðH ˆ5r   c                 ó€  ‡— t          j        ¦   «         t          j        ¦   «         urt          d¦  «        ‚| pi } t	          |                      dd¦  «        ¦  «        dk    }t          j        t          ¦  «        t          j
        ¦   «         }}t          |d¦  «        }t          ¦   «         }	 t          ||¬¦  «        }nt# t          $ rg}t          j        dt#          |¦  «        j        z   t          j        ¦  «         |                     |t          |d¦  «        ¦  «         d	d
dœcY d}~S d}~ww xY w|€0|sdnd}|r$|                     |t          |d¦  «        ¦  «         d|iS t          |d|d         d         |d         d         |d         |d         |d         d                     d„ |d         D ¦   «         ¦  «        ¬¦  «        }	|                     ||	t          j        d¦  «        t          j        d¦  «        ¬¦  «        sš	 t1          j        t4          |d         ¦  «         nt# t          $ rg}t          j        d t#          |¦  «        j        z   t          j        ¦  «         |                     |t          |d¦  «        ¦  «         d	d!dœcY d}~S d}~ww xY wdd"iS t          j        ¦   «         }
d#i g i d$œ}d}	 |
                     |t          |d%¦  «        ¦  «         t=          |
¦  «         t1          j        t4          d&¦  «         t1          j        t>          d&¦  «         tA          |d'¦  «         t1          j!        ||¬(¦  «        |d<   tA          |d)¦  «         tE          ||
|¦  «        \  }}||d#<   d*d+l#m$Š  tK          ¦   «         j&        ˆfd,„|D ¦   «         Ž }d|v r| '                    d-¦  «         ‰ (                    |¦  «         ‰ )                    |¦  «        }||d.<   tU          ||
¦  «        }|
 +                    d/t          |d0¦  «        ¦  «         tA          |d1||¬2¦  «         ‰ ,                    |¦  «         ‰ -                    |¦  «         t]          |||
¦  «        }|rd3}tA          |d4||¬2¦  «         n¶|sd5}tA          |d6|¬7¦  «         nŸt=          |
¦  «         t1          j/        |¦  «        d         |d         k    rta          d8¦  «        ‚t1          j        t>          |d         ¦  «         tA          |d9|¬7¦  «         d9|d<   d:}|
 +                    d;t          ||¦  «        ¦  «         n”# tb          $ r tA          |d<¦  «         d<|d<   Y nst          $ rg}t          j        d=t#          |¦  «        j        z   t          j        ¦  «         tA          |d	t#          |¦  «        j        ¬>¦  «         d	|d<   Y d}~nd}~ww xY w|
 2                    ¦   «          n# |
 2                    ¦   «          w xY w|d         d<k    r9|                     |t          ||tg          |d#         ¦  «        ¬?¦  «        ¦  «         |S )@aB  Plugin entry. auto=1 requires empty lists and respects decline/completion.

    Returns status complete/declined/skipped/no_sources/cancelled/pending/failed,
    with counts, pending metadata and target revisions where applicable. Only
    complete persists COMPLETED. Errors/timeout close modal progress as failures.
    z/Migration UI must run in the plugin main threadÚautoÚ0Ú1i”  )r,   u*   [MilionÃ¡Å™ Library] migration discovery: i›  ÚfailedÚsource_read)rŒ   ÚreasonNÚskippedÚ
no_sourcesi�  rŒ   i•  r"   r…   rZ   ÚexistingÚ
duplicatesÚinvalidz, c              3   ó`   K  — | ])}t           j                             |d          ¦  «        V — Œ*dS rw   )ry   rx   rz   )rW   r|   s     r   rY   zrun.<locals>.<genexpr>&  s6   è è € Ð#[Ð#[ÀA¥B¤G×$4Ò$4°Q°v´YÑ$?Ô$?Ð#[Ð#[Ð#[Ð#[Ð#[Ð#[r   r!   )r…   rZ   r  r  r  r!   éj   ék   )ÚnolabelÚyeslabelr#   u(   [MilionÃ¡Å™ Library] migration decline: Údecline_saveÚdeclinedr3   )rŒ   r"   r3   ró   i–  Ú Ú	importing)r-   Úmetadatar   rè   c              3   óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS )TN)Ú
media_rows)rW   r}   ré   s     €r   rY   zrun.<locals>.<genexpr>?  s3   øè è € Ð RÐ RÀD ×!3Ò!3°D¸$Ñ!?Ô!?Ð RÐ RÐ RÐ RÐ RÐ Rr   Úwidget_mytv_nextró   éZ   i˜  rí   )r3   ró   iš  Úpending_metadataiœ  Úpending_home)ró   z%Legacy lists changed during migrationr•   i™  rÇ   Ú	cancelledu'   [MilionÃ¡Å™ Library] migration failed: )Úerror)Úcount)4Ú	threadingÚcurrent_threadÚmain_threadÚRuntimeErrorrÍ   r^   r   r   r   rï   ÚDialogr9   r   r.   rA   rB   rC   rD   r   rE   ÚokÚjoinÚyesnor5   r   r<   r)   ÚLOGERRORÚDialogProgressÚcreaterO   r*   rH   Úimport_watchlistsr¶   rà   ré   rp   Úunionrù   Úchangedró   râ   rš   rô   rõ   r  r%   r1   r   Úclosero   )rÊ   r,   r7   ÚdialogrQ   r   r-   rG   rŒ   ÚsummaryrN   rÏ   Ú
message_idr©   r¬   rÎ   rú   rá   Ú	refreshedré   s                      @r   Úrunr5    s–  ø€ õ ÔÑ!Ô!­Ô)>Ñ)@Ô)@Ð@Ð@ÝÐLÑMÔMÐMØˆ\�r€FÝ�—’˜F CÑ(Ô(Ñ)Ô)¨SÒ0€FÝ”O¥HÑ-Ô-­w¬~Ñ/?Ô/?ˆ6€EÝ�%˜ÑÔ€EÝ‰jŒj€Gð=Ý˜¨Ð0Ñ0Ô0ˆˆøÝð =ð =ð =ÝŒÐ=ÅÀSÁ	Ä	Ô@RÑRÕTXÔTcÑdÔdÐdØ�	Š	�%�˜u eÑ,Ô,Ñ-Ô-Ð-Ø"¨mÐ<Ð<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð=øøøð ÐØ"(Ð:��¨lˆØð 	2Ø�IŠI�e�U 5¨%Ñ0Ô0Ñ1Ô1Ð1Ø˜&Ð!Ð!Ý�E˜5¨°Ô(:¸7Ô(CÈÐQYÔHZÐ[_ÔH`Ø% jÔ1¸hÀ|Ô>TÐ^fÐgpÔ^qØŸ)š)Ð#[Ð#[ÈÐRYÔIZÐ#[Ñ#[Ô#[Ñ[Ô[ð]ñ ]ô ]€Gð �<Š<˜˜wµÔ0GÈÑ0LÔ0LÕW[ÔWnÐorÑWsÔWsˆ<ÑtÔtð &ð	BÝŒN�8 X¨mÔ%<Ñ=Ô=Ð=Ð=øÝð 	Bð 	Bð 	BÝŒHÐ?Å$ÀsÁ)Ä)ÔBTÑTÕVZÔVcÑdÔdÐdØ�IŠI�e�U 5¨%Ñ0Ô0Ñ1Ô1Ð1Ø&°.ÐAÐAÐAÐAÐAÐAÐAÐAøøøøð	Bøøøð ˜*Ð%Ð%ÝÔ%Ñ'Ô'€HØ!¨R¸BÈRÐPÐP€FØ€Jð2Ø�Š˜�u U¨EÑ2Ô2Ñ3Ô3Ð3ÝˆxÑÔÐõ 	Œ•x Ñ$Ô$Ð$ÝŒ•y "Ñ%Ô%Ð%Ýˆx˜Ñ%Ô%Ð%Ý Ô2°7ÀXÐNÑNÔNˆˆxÑÝˆx˜Ñ$Ô$Ð$Ý*¨8°X¸uÑEÔE‰ˆˆwØ#ˆˆyÑØ$Ð$Ð$Ð$Ð$Ð$Ø•3‘5”5”;Ð RÐ RÐ RÐ RÈEÐ RÑ RÔ RÐSˆØ�5ˆ=ˆ=Ø�LŠLÐ+Ñ,Ô,Ð,à�Š˜Ñ!Ô!Ð!Ø×#Ò# HÑ-Ô-ˆØ%ˆˆ{ÑÝ  ¨8Ñ4Ô4ˆØ�Š˜�E %¨Ñ/Ô/Ñ0Ô0Ð0Ýˆx˜¨¸GÐDÑDÔDÐDØ�Š˜Ñ!Ô!Ð!Ø�Š˜Ñ!Ô!Ð!Ý˜w¨¨xÑ8Ô8ˆ	Øð 	;ØˆJÝ�8Ð/¸ÈGÐTÑTÔTÐTÐTØð 	;ØˆJÝ�8˜^°wÐ?Ñ?Ô?Ð?Ð?å�8ÑÔÐåÔ-¨gÑ6Ô6°}ÔEÈÐR_ÔI`Ò`Ð`Ý Ð!HÑIÔIÐIÝŒN�9 h¨}Ô&=Ñ>Ô>Ð>Ý�8˜Z°7Ð;Ñ;Ô;Ð;Ø)ˆF�8ÑØˆJØ�OŠO˜C¥ u¨jÑ!9Ô!9Ñ:Ô:Ð:øøÝð 'ð 'ð 'Ýˆx˜Ñ%Ô%Ð%Ø&ˆˆxÑÐÐÝð $ð $ð $ÝŒÐ:½TÀ#¹Y¼YÔ=OÑOÕQUÔQ^Ñ_Ô_Ð_Ýˆx˜­¨c©¬Ô);Ð<Ñ<Ô<Ð<Ø#ˆˆxÑÐÐÐÐÐøøøøð$øøøð
 	�ŠÑÔÐÐøˆ�ŠÑÔÐÐøøøØˆhÔ˜;Ò&Ð&Ø�	Š	�%�˜u j½¸FÀ9Ô<MÑ8NÔ8NÐOÑOÔOÑPÔPÐPØ€Ms|   Â-B? Â?
D0Ã	AD+Ä%D0Ä+D0È H( È(
JÈ2AJÊJÊJÊ=I9T7 Ô6W  Ô7WÕW  Õ	WÕ!AWÖ>W  ×W×W  × W6)NFrJ   )#Ú__doc__r>   ry   r"  rñ   rB   r   rï   r   rÝ   r   r   r   r   r)   r*   r=   ÚHOME_TIMEOUTrË   rA   r   r   r.   r3   r9   rH   rO   re   rs   r¶   rÑ   râ   ræ   r  r5  r   r   r   ú<module>r8     s÷  ððð ð €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€à €€€Ø Ð Ð Ð Ø €€€Ø €€€à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à"€Ø-€Ø/€	Ø'€Ø€à¨¸ÀuØ U°EÈØ ¨5ð2ð 2€
ð
	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ðTð Tð Tðð ð ð ð,	ð 	ð 	ð 	ð@ð @ð @ðbð bð bðð ð ð
	ð 	ð 	ð`ð `ð `ð `ð8ð 8ð 8ð 8ðvð ð ð"ð ð ð 
<ð 
<ð 
<ð 2>ð /ð /ð /ð /ðd\ð \ð \ð \ð \ð \r   