§
   T©�çZ‹¤&ã                   óD  — 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mZ ddl	m
Z
mZ ddlZddlZddlZddlmZ ddlmZ dZdd	d
dddddddddddœZ ej        ¦   «         ZdZdZdZdZd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z d „ Z!d,d"„Z"d#„ Z#d-d$„Z$d.d'„Z%d/d)„Z&d*„ Z'd+„ Z(dS )0zKCache-only Vinyl widgets, using the existing Home slot and click contracts.é    N)Úcontextmanager)ÚquoteÚ	urlencode)Úfamily)Úclientzplugin://plugin.video.milionar/)ÚcuratorÚplaylistiõ~  )Údiscoverr	   iö~  )ÚsongsÚsongi÷~  )Ú
top_tracksr   i²  )ÚalbumsÚalbumiø~  )ÚartistsÚartistiù~  )Ú	playlistsr	   iú~  )ÚgenresÚgenreiû~  )ÚradiosÚradioiü~  )Úfavorite_songsr   iþ~  )Úfavorite_playlistsr	   iÿ~  )Úfavorite_albumsr   i   )Úfavorite_artistsr   i  )Úvinyl_curatorÚvinyl_discoverÚvinyl_songsÚvinyl_top_tracksÚvinyl_albumsÚvinyl_artistsÚvinyl_playlistsÚvinyl_genresÚvinyl_radiosÚvinyl_favorite_songsÚvinyl_favorite_playlistsÚvinyl_favorite_albumsÚvinyl_favorite_artists)ÚidÚalbum_idÚnameÚtitler   r   Úprimary_artistÚdescriptionÚdurationÚtotal_durationÚ
song_countÚ
created_atÚ
updated_atÚcover_versionÚ
cover_moder   Úcover_song_idsÚcover_songsÚplaylist_idÚplaylist_nameÚplaylist_cover_song_idsÚplaylist_cover_modeÚcharacter_idÚstatusÚis_favoriteÚis_ownerÚuser_idÚtitle_image_versionr   Ú_genresÚyear)r   r   )r   r
   r   r   é<   c                 óœ   — ddl m} 	 t          | pd¦  «        }n# t          t          f$ r d}Y nw xY w|                     |dv r|nd¦  «        S )Nr   ©Úperformanceé   )é
   rG   é   é2   )Úwcs.skinrF   ÚintÚ
ValueErrorÚ	TypeErrorÚlimit)ÚvaluerF   Úcounts      ú_/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/vinyl/widgets.pyÚ_limitrS   0   sx   € Ø$Ð$Ð$Ð$Ð$Ð$ðÝ�E�K˜RÑ Ô ˆˆøÝ�	Ð"ð ð ð Øˆˆˆðøøøà×Ò eÐ/?Ð&?Ð&?˜U˜UÀRÑHÔHÐHs   ˆ š0¯0c               #   ó’   K  — t          t          dd¦  «        } dt          _        	 dV — | t          _        dS # | t          _        w xY w)zOLegacy context edits request worker jobs at the REST write, never fetch inline.ÚdeferredFTN)ÚgetattrÚ_refresh_moderU   )Úpreviouss    rR   Údefer_refreshrY   9   sQ   è è € õ •} j°%Ñ8Ô8€HØ!…MÔð*Øˆˆˆà!)�ÔÐÐø �ÔÐ)Ð)Ð)Ð)s	   ¦8 ¸Ac                  óÒ  — ddl m}  i }t          j        d¦  «        }| j                             ¦   «         D �]/\  }\  }}}t          d| j        dz   ¦  «        D �]}d                     ||¦  «        }t          j	        |dz   ¦  «        }	|s|t          |¦  «        k    r||dz
           nd}
|	s
|
r|
d         }	|	t          vrŒht          j	        |dz   ¦  «        p|
r|
d         nd	}t          j	        |d
z   ¦  «        p|
r|
d         nd}t          |	         d         }|dv r|ndt          |¦  «        f}||                     |g ¦  «        vr||                              |¦  «         �Œ�Œ1|S )z<Read active slots without constructing dialog/context items.r   )Úslotsz Skin.HasSetting(MilionarSlotsV1)é   zSkin.String(mil.{}.{}.ztype)Nzlimit)Ú20zsort)é   Úsource)r_   r+   Úrandom)rK   r[   ÚxbmcÚgetCondVisibilityÚSECTIONSÚitemsÚrangeÚSLOTSÚformatÚgetInfoLabelÚlenÚROWSrS   Ú
setdefaultÚappend)r[   ÚresultÚinitializedÚsectionÚ_labelÚ_rowsÚdefaultsÚnumberÚprefixÚrowÚdefaultrQ   Úorderr_   Úconfigs                  rR   Úconfigurationsry   D   sª  € àÐÐÐÐÐØ€FÝÔ(Ð)KÑLÔL€KØ.3¬n×.BÒ.BÑ.DÔ.Dð .ñ .Ñ*ˆÑ*�&˜% Ý˜A˜uœ{¨Q™Ñ/Ô/ð 	.ñ 	.ˆFØ-×4Ò4°W¸fÑEÔEˆFÝÔ# F¨WÑ$4Ñ5Ô5ˆCØ2=ÐcÀ&ÍCÐPXÉMÌMÒBYÐBY�h˜v¨™zÔ*Ð*Ð_cˆGØð !˜7ð !Ø˜a”j�Ø�$ˆˆØÝÔ% f¨xÑ&7Ñ8Ô8Ð]È7Ð=\¸WÀQ¼Z¸ZÐX\ˆEÝÔ% f¨wÑ&6Ñ7Ô7Ð`È'Ð<_¸GÀA¼J¸JÐW_ˆEÝ˜#”Y˜q”\ˆFØ$Ð(EÐEÐE�e�eÈ8ÕU[Ð\aÑUbÔUbÐcˆFØ˜V×.Ò.¨v°rÑ:Ô:Ð:Ð:Ø�v”×%Ò% fÑ-Ô-Ð-ùñ	.ð €Mó    c                 óœ   ‡— g }| D ]EŠˆfd„t           D ¦   «         }d|v rd„ |d         pg D ¦   «         |d<   |                     |¦  «         ŒF|S )Nc                 ó*   •— i | ]}|‰v ¯|‰|         “ŒS © r}   )Ú.0ÚkeyÚentrys     €rR   ú
<dictcomp>z_plain.<locals>.<dictcomp>^   s$   ø€ ÐBÐBÐB C°S¸E°\°\��U˜3”Z°\°\°\rz   r6   c                 ó,   ‡— g | ]Šˆfd „dD ¦   «         ‘ŒS )c                 ó*   •— i | ]}|‰v ¯|‰|         “ŒS r}   r}   )r~   Úkr   s     €rR   r�   z%_plain.<locals>.<listcomp>.<dictcomp>`   s+   ø€ Ð#]Ð#]Ð#]°1ÐSTÐX\ÐS\ÐS\ A t¨A¤wÐS\ÐS\ÐS\rz   )r(   r3   r}   )r~   r   s    @rR   ú
<listcomp>z_plain.<locals>.<listcomp>`   sE   ø€ ð #Jð #Jð #JØ'+ð $^Ð#]Ð#]Ð#]Ð8OÐ#]Ñ#]Ô#]ð #Jð #Jð #Jrz   )ÚFIELDSrl   )Úentriesrm   Úitemr€   s      @rR   Ú_plainr‰   [   s‡   ø€ Ø€FØð ð ˆØBÐBÐBÐB­6ÐBÑBÔBˆØ˜DÐ Ð ð#Jð #JØ/3°MÔ/BÐ/HÀbð#Jñ #Jô #JˆD�Ñà�Š�dÑÔÐÐØ€Mrz   c                 óN  — t          |                      di ¦  «                             || d         ¦  «        ¦  «        }|dk    r|                     d„ ¬¦  «         nA|dk    r;t          j        d                     ||¦  «        ¦  «                             |¦  «         |d |…         S )NÚsortsrd   r+   c                 ó¨   — |                       d¦  «        p+|                       d¦  «        p|                       d¦  «        pd                     ¦   «         S )Nr*   r+   r8   Ú )ÚgetÚcasefold)Úes    rR   ú<lambda>z_selected.<locals>.<lambda>i   sB   €  A§E¢E¨&¡M¤MÐ$c°Q·U²U¸7±^´^Ð$cÀqÇuÂuÈ_ÑG]ÔG]Ð$cÐac×#mÒ#mÑ#oÔ#o€ rz   ©r   r`   z{}:{})ÚlistrŽ   Úsortr`   ÚRandomrg   Úshuffle)Údatar_   rw   rQ   Úuserr‡   s         rR   Ú	_selectedr™   f   sœ   € Ý�4—8’8˜G RÑ(Ô(×,Ò,¨U°D¸´MÑBÔBÑCÔC€GØ�ÒÐØ�ŠÐoÐoˆÑpÔpÐpÐpØ	�(Ò	Ð	åŒ�g—n’n T¨6Ñ2Ô2Ñ3Ô3×;Ò;¸GÑDÔDÐDØ�6�E�6Œ?Ðrz   c                 ó  — t           d|z            d         }g }|D �]o\  }}g }t          | ||||¦  «        D �]=}	|                     t          |	|¦  «        t	          j        |	|¦  «        t	          j        |	|¦  «        |	                     d¦  «        pd|	                     d¦  «        pd|	                     d¦  «        pd|	                     d¦  «        p|	                     d	¦  «        pd|	                     d
¦  «        pd|	                     d¦  «        pd|	                     d¦  «        p|	                     d¦  «        pd|	                     d¦  «        |	                     d¦  «        pdf¦  «         �Œ?|                     |¦  «         �Œq|S )NÚvinyl_r\   r-   r�   r   r0   r   r.   r/   r   r)   r   rA   r=   r1   )rj   r™   rl   Úqueryr   ÚcoverÚtitle_imagerŽ   )
r—   r_   Úconfigsr˜   Úkindrm   rw   rQ   Úcardsr€   s
             rR   Ú_displayr¢   p   s�  € Ý�˜6Ñ!Ô" 1Ô%€DØ€FØð 	ñ 	‰ˆˆuØˆÝ˜t V¨U°E¸4Ñ@Ô@ð 	:ñ 	:ˆEØ�LŠL�%  tÑ,Ô,­f¬l¸5À$Ñ.GÔ.GÍÔI[Ð\aÐcgÑIhÔIhØŸ)š) MÑ2Ô2Ð8°b¸%¿)º)ÀHÑ:MÔ:MÐ:SÐQSØŸ)š) LÑ1Ô1Ð6°Q¸¿	º	À*Ñ8MÔ8MÐ8qÐQV×QZÒQZÐ[kÑQlÔQlÐ8qÐpqØŸ)š) GÑ,Ô,Ð2°°E·I²I¸jÑ4IÔ4IÐ4OÈRØŸ)š) GÑ,Ô,ÐJ°·	²	¸)Ñ0DÔ0DÐJÈÈEÏIÊIÐVcÑLdÔLdØŸ)š) LÑ1Ô1Ð7°Rð9ñ :ô :ð :ñ :ð 	�Š�eÑÔÐÑØ€Mrz   c                  ó¢   — t           j                             t           j                             t	          j        dd¦  «        ¦  «        d¦  «        S )NÚxÚpubliczvinyl_playlist_genres.json)ÚosÚpathÚjoinÚdirnamer   Ú
cache_pathr}   rz   rR   Ú_genre_cacher«   €   s4   € ÝŒ7�<Š<�œŸš­Ô(9¸#¸xÑ(HÔ(HÑIÔIÐKgÑhÔhÐhrz   é   c                 óŒ  ‡— i Š| D ]�}t          |                     d¦  «        pd¦  «                             d¦  «        D ]V}|                     ¦   «         r@‰                     |                     ¦   «         d¦  «        dz   ‰|                     ¦   «         <   ŒWŒ‘d                     t          ‰ˆfd„¬¦  «        d |…         ¦  «        S )Nr   r�   ú,r   r\   c                 ó   •— ‰|           | fS ©Nr}   )r*   Útotalss    €rR   r‘   z_top_genres.<locals>.<lambda>Š   s   ø€ °f¸T´l°]ÀDÐ4I€ rz   r’   )ÚstrrŽ   ÚsplitÚstripr¨   Úsorted)r   rQ   r   r*   r±   s       @rR   Ú_top_genresr¶   „   sÊ   ø€ Ø€FØð Gð GˆÝ˜Ÿš Ñ)Ô)Ð/¨RÑ0Ô0×6Ò6°sÑ;Ô;ð 	Gð 	GˆDØ�zŠz‰|Œ|ð GØ'-§z¢z°$·*²*±,´,ÀÑ'BÔ'BÀQÑ'F��t—z’z‘|”|Ñ$øð	Gð �8Š8•F˜6Ð'IÐ'IÐ'IÐ'IÐJÑJÔJÈ6ÈEÈ6ÔRÑSÔSÐSrz   c           
      ó  ‡ ‡‡‡— t          ¦   «         }	 t          |d¬¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   n# t          t
          f$ r i }Y nw xY wt          d}}t          D �]EŠ‰‰ vrŒˆ ˆˆfd„|‰         D ¦   «         }|‰ ‰         d         z   D �]Št          ‰ 	                    d¦  «        ¦  «        ‰ 	                    d¦  «        pd	}
}	| 	                    |	¦  «        }|r|d
         |
k    r |d
k    ršt          ˆfd„|D ¦   «         ¦  «        r|dz  }	 t          j        d                     t          ‰d         ¦  «        ¦  «        d¬¦  «         	                    dg ¦  «        }n# t          $ r Y Œãw xY w|
t!          |¦  «        gx}||	<   d}|r|d         r|d         ‰d<   �Œ�ŒG|rÃ	 t#          j        t"          j                             |¦  «        d¬¦  «         t+          j        ddt"          j                             |¦  «        d¬¦  «        5 }t          j        ||¦  «         ddd¦  «         n# 1 swxY w Y   t#          j        |j        |¦  «         dS # t          $ r Y dS w xY wdS )zÕService job only: a playlist list has no genres, so the shown playlists get the most frequent genres of their
    tracks (`_genres`). One detail request per new or changed playlist, remembered by its `updated_at`.úutf-8)ÚencodingNFc           	      óR   •— g | ]#\  }}t          ‰‰         ‰||‰¦  «        D ]}|‘ŒŒ$S r}   )r™   )r~   rw   rQ   r€   Ú	documentsr_   r˜   s       €€€rR   r…   z$_playlist_genres.<locals>.<listcomp>š   sh   ø€ ð  Bð  Bð  B™<˜5 %Í	ÐR[Ð\bÔRcÐekÐmrÐtyÐ{ñ  IAô  IAð  Bð  B¸u�ð  Bð  Bð  Bð  Brz   rd   r(   r2   r�   r   c              3   ó    •K  — | ]}‰|u V — Œ	d S r°   r}   )r~   r�   r€   s     €rR   ú	<genexpr>z#_playlist_genres.<locals>.<genexpr>ž   s)   øè è € ÐFaÐFaÐVWÀuÐPQÀzÐFaÐFaÐFaÐFaÐFaÐFarz   r\   zplaylists/{})r¬   é   )Útimeoutr   TrA   ©Úexist_okÚw©Úmoder¹   ÚdirÚdelete)r«   ÚopenÚjsonÚloadÚOSErrorrM   ÚGENRE_FETCHESÚPLAYLIST_SOURCESr²   rŽ   Úanyr   Úrequestrg   rL   Ú	Exceptionr¶   r¦   Úmakedirsr§   r©   ÚtempfileÚNamedTemporaryFileÚdumpÚreplacer*   )r»   rŸ   r˜   r§   ÚhandleÚknownÚbudgetÚdirtyÚshownr   ÚstampÚsavedr   r€   r_   s   ` `          @@rR   Ú_playlist_genresrÜ   �   sp  øøøø€ õ ‰>Œ>€DðÝ�$ Ð)Ñ)Ô)ð 	&¨VÝ”I˜fÑ%Ô%ˆEð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&øøå•ZÐ ð ð ð Øˆˆˆðøøøå! 5ˆE€FÝ"ð ,ñ ,ˆØ˜Ð"Ð"Øð Bð  Bð  Bð  Bð  Bð  B¨7°6¬?ð  Bñ  Bô  BˆØ˜Y vÔ.¨wÔ7Ñ7ð 	,ñ 	,ˆEÝ˜UŸYšY t™_œ_Ñ-Ô-¨u¯yªy¸Ñ/FÔ/FÐ/LÈ"�ˆCØ—I’I˜c‘N”NˆEØð ˜U 1œX¨Ò.Ð.°F¸Q²J°JÅ3ÐFaÐFaÐFaÐFaÐ[`ÐFaÑFaÔFaÑCaÔCa°JØ˜!‘�ðÝ"œN¨>×+@Ò+@ÅÀUÈ4Ä[ÑAQÔAQÑ+RÔ+RÐ\bÐcÑcÔc×gÒgÐhoÐqsÑtÔt�E�EøÝ ð ð ð Ø�Hðøøøà&+­[¸Ñ-?Ô-?Ð%@Ð@�˜˜c™
Ø�Øð ,˜˜qœð ,Ø#(¨¤8��iÑ ùñ	,ð ð ð	ÝŒK�œŸš¨Ñ-Ô-¸Ð=Ñ=Ô=Ð=ÝÔ,°#ÀÍRÌWÏ_Ê_Ð]aÑMbÔMbÐkpÐqÑqÔqð )Ðu{Ý”	˜% Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )åŒJ�v”{ DÑ)Ô)Ð)Ð)Ð)øÝð 	ð 	ð 	ØˆDˆDð	øøøðð s}   ”A ¥AºA ÁA
Á
A ÁA
ÁA ÁA(Á'A(Ä0AFÆ
FÆFÇA(I6 È-IÉI6 ÉIÉI6 ÉIÉI6 É6
JÊJc                 óL
  — t          t          dd¦  «        rdS ddlm} ddlm} t          ¦   «         }t          | €|nt          | t          ¦  «        r| gn| ¦  «        }| 
                    t          j        ¦  «         |sdS t          j        ¦   «         }|d         }|D ](}|                     |dt          d	¦  «        fg¦  «         Œ)	 t          j        |                     t$          ¦  «        d¬
¦  «        }d„ |                     ¦   «         D ¦   «         }	|                     t$          ¦  «        D �]-}t+          d„ ||         D ¦   «         ¦  «        }
t-          d„ ||         D ¦   «         ¦  «        }|r&t+          |
|                     ¦   «         rdnd¦  «        n|
}t          j        |g|d¬¦  «        }||vrŒˆt1          ||         ¦  «        i d|idœ}t-          d„ ||         D ¦   «         ¦  «        rft+          d„ ||         D ¦   «         ¦  «        }t          j        |g|dd¬¦  «        }||vrŒÿt1          ||         ¦  «        |d         d<   ||d         d<   ||	|<   �Œ/t3          |	||¦  «         n# t4          $ r Y dS w xY wt          j        ¦   «         |k    rdS |                     |	¦  «        }g }|	                     ¦   «         D �]Q\  }}t          j        ¦   «         |k    r dS t          j        ||¦  «        }t          j        ||¦  «        }d}	 |du p1t=          ||||         |¦  «        t=          ||||         |¦  «        k    }|                     tA          j         ¦   «         dd¬¦  «         tC          j"        tB          j#         $                    |¦  «        d¬¦  «         tK          j&        ddtB          j#         $                    |¦  «        d¬¦  «        5 }|j'        }tQ          j)        ||¦  «         ddd¦  «         n# 1 swxY w Y   t          j        ¦   «         |k    r?	 |r6tB          j#         *                    |¦  «        rtC          j+        |¦  «          dS  dS  dS tC          j,        ||¦  «         |r| -                    d|z   ¦  «         n# t4          $ r d}Y nw xY w|r3tB          j#         *                    |¦  «        rtC          j+        |¦  «         �Œ# |r4tB          j#         *                    |¦  «        rtC          j+        |¦  «         w w w xY w|r ||¦  «         |S ) zZService job: publish each successful source atomically; False asks the scheduler to retry.rU   FTr   rE   )ÚchangedNr_   rG   )Ústrictc                 ó:   — i | ]\  }}|t          |¦  «        i d œ“ŒS ))rd   r‹   )r‰   )r~   r_   r‡   s      rR   r�   zrefresh.<locals>.<dictcomp>Ã   s-   € ÐiÐiÐiÉÈÐQX�V¥v¨g¡¤ÀÐDÐDÐiÐiÐirz   c              3   ó    K  — | ]	\  }}|V — Œ
d S r°   r}   )r~   Ú_sortrQ   s      rR   r½   zrefresh.<locals>.<genexpr>Å   s&   è è € ÐBÐB¡, %¨˜ÐBÐBÐBÐBÐBÐBrz   c              3   ó(   K  — | ]\  }}|d k    V — ŒdS )r`   Nr}   ©r~   rw   Ú_counts      rR   r½   zrefresh.<locals>.<genexpr>Æ   s+   è è € ÐUÐU±M°E¸6˜e xÒ/ÐUÐUÐUÐUÐUÐUrz   rJ   éÈ   )rO   rß   )rd   r‹   Úlimitsc              3   ó(   K  — | ]\  }}|d k    V — ŒdS ©r+   Nr}   rä   s      rR   r½   zrefresh.<locals>.<genexpr>Ì   s+   è è € ÐIÐI©¨¨v�5˜GÒ#ÐIÐIÐIÐIÐIÐIrz   c              3   ó,   K  — | ]\  }}|d k    ¯|V — ŒdS ré   r}   )r~   rw   rQ   s      rR   r½   zrefresh.<locals>.<genexpr>Í   s1   è è € Ð!`Ð!`©L¨E°5ÈuÐX_ÒO_ÐO_ %ÐO_ÐO_ÐO_ÐO_Ð!`Ð!`rz   r+   )rO   r”   rß   r‹   rç   r^   r\   )ÚbuiltÚversionÚpresentationrÀ   rÂ   r¸   rÃ   r›   ).rV   rW   rK   rF   Úwcs.skin.refreshrÞ   ry   ÚsetÚ
isinstancer²   Úintersection_updater   ÚSOURCESÚscoperk   rS   ÚsourcesÚ
differenceÚSONG_SOURCESrd   ÚintersectionÚmaxrÍ   Úenabledr‰   rÜ   rÏ   ÚissubsetÚsnapshotrª   r¢   ÚupdateÚtimer¦   rÐ   r§   r©   rÑ   rÒ   r*   rÈ   rÓ   ÚexistsÚremoverÔ   rl   )rô   rF   rÞ   rŸ   ÚselectedÚsessionr˜   r_   r—   r»   rQ   Úrandom_poolÚpoolr‡   ÚdocumentÚtitle_countÚtitlesÚsuccessÚupdatedrX   r§   Ú	temporaryÚ	differentrÕ   s                           rR   Úrefreshr  ²   sÖ  € å�}˜j¨%Ñ0Ô0ð ØˆtØ$Ð$Ð$Ð$Ð$Ð$Ø(Ð(Ð(Ð(Ð(Ð(ÝÑÔ€GÝ˜g˜o�7�7ÅÈGÕUXÑAYÔAYÐ4f°W°I°IÐ_fÑhÔh€HØ× Ò ¥¤Ñ0Ô0Ð0Øð ØˆtÝŒl‰nŒn€GØ�1Œ:€DØð =ð =ˆØ×Ò˜6 X­v°b©z¬zÐ$:Ð#;Ñ<Ô<Ð<Ð<ðÝŒ~˜h×1Ò1µ,Ñ?Ô?ÈÐNÑNÔNˆØiÐiÐ\`×\fÒ\fÑ\hÔ\hÐiÑiÔiˆ	Ø×+Ò+­LÑ9Ô9ð 	)ñ 	)ˆFÝÐBÐB°'¸&´/ÐBÑBÔBÑBÔBˆEÝÐUÐUÀWÈVÄ_ÐUÑUÔUÑUÔUˆKØGRÐ]•3�u K×$7Ò$7Ñ$9Ô$9ÐB˜b˜b¸sÑCÔCÐCÐX]ˆDÝ”n f X°TÀ%ÐHÑHÔHˆGØ˜WÐ$Ð$ØÝ!'¨°¬Ñ!8Ô!8À2ÐRZÐ\`ÐQaÐbÐbˆHÝÐIÐI¸À¼ÐIÑIÔIÑIÔIð :Ý!Ð!`Ð!`¸GÀF¼OÐ!`Ñ!`Ô!`Ñ`Ô`�Ýœ¨¨¸È'ÐZ_Ð`Ñ`Ô`�Ø Ð'Ð'ØÝ-3°F¸6´NÑ-CÔ-C�˜Ô! 'Ñ*Ø.9�˜Ô" 7Ñ+Ø (ˆI�fÑÑÝ˜ G¨TÑ2Ô2Ð2Ð2øÝð ð ð Øˆuˆuðøøøå„|�~„~˜Ò Ð ØˆuØ×Ò 	Ñ*Ô*€GØ€GØ%ŸOšOÑ-Ô-ð %ñ %Ñˆ�ÝŒ<‰>Œ>˜WÒ$Ð$Ø�5�5Ý”? 6¨4Ñ0Ô0ˆÝÔ  ¨Ñ.Ô.ˆØˆ	ð	%Ø  DÐ(ð 9­H°X¸vÀwÈvÄÐX\Ñ,]Ô,]ÕaiØ˜& '¨&¤/°4ñb9ô b9ò -9ˆIà�OŠO¥$¤)¡+¤+°qÀqˆOÑIÔIÐIÝŒK�œŸš¨Ñ-Ô-¸Ð=Ñ=Ô=Ð=ÝÔ,°#ÀÍRÌWÏ_Ê_Ð]aÑMbÔMbÐkpÐqÑqÔqð ,Ðu{Ø"œK�	Ý”	˜( FÑ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,õ Œ|‰~Œ~ Ò(Ð(Øð ð %�RœWŸ^š^¨IÑ6Ô6ð %Ý”	˜)Ñ$Ô$Ð$Ð$Ð$Ð$ð%ð %ð %ð %ð %ð %õ ŒJ�y $Ñ'Ô'Ð'Øð 2Ø—’˜x¨&Ñ0Ñ1Ô1Ð1øøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøð ð %�RœWŸ^š^¨IÑ6Ô6ð %Ý”	˜)Ñ$Ô$Ð$ùøð ð %�RœWŸ^š^¨IÑ6Ô6ð %Ý”	˜)Ñ$Ô$Ð$Ð$ð%ð %øøøàð Øˆ�ÑÔÐØ€Nsh   ÃF&I/ É/
I=É<I=ÌCRÏPÏ5RÐP	ÐRÐP	Ð	RÑ"/RÒSÒR!ÒSÒ R!Ò!SÓ9Tr�   rÇ   c                 ó´  — |                       d¦  «        pg }d||dk    r+|                       d¦  «        p|                       dd¦  «        n|                       dd¦  «        |                       d¦  «        p+|                       d¦  «        p|                       d	¦  «        pd|                       d
¦  «        p |                       d¦  «        p|r|d         nd||dœS )Nr   Ú
vinyl_itemr   r)   r(   r�   r*   r+   r8   r,   r   r   )Úactionr    r(   r*   r   ru   Úclick)rŽ   )r€   r    ru   r  r   s        rR   rœ   rœ   ø   s  € Ø�iŠi˜	Ñ"Ô"Ð( b€GØ"¨DÐjnÐryÒjyÐjy¸¿ºÀ:Ñ9NÔ9NÐ9eÐRW×R[ÒR[Ð\`ÐbdÑReÔReøð  @E÷  @Iò  @Ið  JNð  PRñ  @Sô  @SØ—I’I˜fÑ%Ô%Ð_¨¯ª°7Ñ);Ô);Ð_¸u¿yºyÈÑ?YÔ?YÐ_Ð]_Ø—i’iÐ 0Ñ1Ô1Ðk°U·Y²Y¸xÑ5HÔ5HÐkÐ[bÐMjÈWÐUVÌZÈZÐhjØ ð(ð (ð (rz   Fc                 ó¬  — ddl m} |                      d¦  «        p+|                      d¦  «        p|                      d¦  «        pd}t          | |||¦  «        }|                      d¦  «        r| d         |d<   |                      d	¦  «        rA|                     t          | d	         ¦  «        |                      d
¦  «        rdnd¬¦  «         |dk    r?|                     |                      dd¦  «        |                      dd¦  «        ¬¦  «         | o|dk    p|dk    ot          j        ¦   «         }|rd|d<   t          dz   t          |¦  «        z   }	|dk    o| }
| 
                    t          j        | |¦  «        ¦  «        }t          j        ||                      d¦  «        pMt          j        ¦   «                              d¦  «                             |                      d¦  «        pd¦  «        |	d¬¦  «        }|                     |||||dœ¦  «         |                      d¦  «        p|                      d¦  «        pd}|dk    rtd                     t          j        ¦   «                              d¦  «                             |                      d¦  «        pd¦  «        |¦  «                             ¦   «         }|rÐ|                     ¦   «         }|                     |¦  «         |                     |                      d¦  «        p|                      d¦  «        pd¦  «         |                     t1          |                      d¦  «        p|                      d ¦  «        pd¦  «        ¦  «         |dk    r|                     d¦  «         nŠ|                     ¦   «         }|                     |¦  «         |                     |¦  «         |                     t1          |                      d¦  «        p|                      d ¦  «        pd¦  «        ¦  «         |
r-|                     d!d¦  «         d"                     |	d#¦  «        }n+|                     d$d%¦  «         d&                     |	¦  «        }|                     d'|¦  «         |sdd(lm} |                     || ||¦  «         |r\|dk    rV|                      t          j!        d)                     | d*         ¦  «        ¦  «        ¦  «         |                     d$d%¦  «         |                     d+tE          t          tG          |d,||	|                      d-d¦  «        |
rdnd¬.¦  «        ¦  «        d¬/¦  «        ¦  «         dd0l m$} | %                    | &                    | '                    | (                    d+¦  «        ¦  «        ¦  «        d¦  «         | )                    ¦   «         ||
fS )1Nr   rE   r*   r+   r8   r�   Ú_queueÚidsÚ_parent_playlistÚ_ownerÚ1)Úparent_playlistÚownerr   r   r)   )r   r)   ÚdetailrÇ   Úvinyl_detailr  ú?r   i  r0   T)Úlabel2r§   Ú	offscreen)ÚthumbÚposterÚ	landscapeÚfanartÚiconr-   z{}
{}r,   r.   r/   zmilionar.folderzActivateWindow(Music,{},{})ÚreturnÚ
IsPlayableÚtruezRunPlugin({})zmilionar.exec)rí   z	stream/{}r(   zmilionar.ctxdataÚvinylr=   )Útyper+   r§   r=   Úfolder)Úsafe)Úcontext)*rK   rF   rŽ   rœ   rü   r²   r   ÚactiveÚBASEr   Úartworkr   r�   ÚxbmcguiÚListItemÚaddonÚgetLocalizedStringrg   ÚsetArtr´   ÚgetMusicInfoTagÚsetTitleÚ	setArtistÚsetDurationrL   ÚsetMediaTypeÚgetVideoInfoTagÚsetPlotÚsetPropertyÚ	wcs.vinylrí   ÚapplyÚsetPathÚmediar   Údictr)  ÚaddContextMenuItemsr€   ÚunpackÚgetPropertyÚgetPath)r€   r    ru   r  ÚlistingrF   r+   ÚparamsÚcardr§   r'  ÚartÚliÚplotÚtagÚcommandrí   r)  s                     rR   rˆ   rˆ      s¶  € Ø$Ð$Ð$Ð$Ð$Ð$Ø�IŠI�fÑÔÐW §¢¨7Ñ!3Ô!3ÐW°u·y²yÀÑ7QÔ7QÐWÐUW€EÝ�5˜$  UÑ+Ô+€FØ‡y‚y�ÑÔð (Ø˜hœˆˆu‰Ø‡y‚yÐ#Ñ$Ô$ð pØ�Š¥c¨%Ð0BÔ*CÑ&DÔ&DÐSX×S\ÒS\Ð]eÑSfÔSfÐLnÈCÈCÐlnˆÑoÔoÐoØˆv‚~€~Ø�Š˜EŸIšI g¨rÑ2Ô2¸U¿YºYÀzÐSUÑ=VÔ=VˆÑWÔWÐWØˆ;ÐW˜E XÒ-ÐV°%¸6²/Ð2UÅfÄmÁoÄo€DØð *Ø)ˆˆxÑÝ�#‰:�	 &Ñ)Ô)Ñ)€DØ�fŠ_Ð) T €FØ
×
Ò
�fœl¨5°$Ñ7Ô7Ñ
8Ô
8€CÝ	Ô	˜%¨¯	ª	°(Ñ(;Ô(;ð )&½v¼|¹~¼~×?`Ò?`ÐafÑ?gÔ?g×?nÒ?nØ�	Š	�,ÑÔÐ$ 1ñ@&ô @&Ø,0¸Dð
Bñ 
Bô 
B€Bà‡I‚I˜ s¸ÈØðð ñ ô ð à�9Š9�]Ñ#Ô#Ð@ u§y¢y°Ñ':Ô':Ð@¸b€DØˆv‚~€~Ø�Š�vœ|™~œ~×@Ò@ÀÑGÔG×NÒNÈuÏyÊyÐYeÑOfÔOfÐOkÐjkÑlÔlÐnrÑsÔs×yÒyÑ{Ô{ˆàð XØ× Ò Ñ"Ô"ˆØ�Š�UÑÔÐØ�Š�e—i’i Ñ)Ô)ÐN¨U¯YªYÐ7GÑ-HÔ-HÐNÈBÑOÔOÐOØ�Š�˜EŸIšI jÑ1Ô1ÐU°U·Y²YÐ?OÑ5PÔ5PÐUÐTUÑVÔVÑWÔWÐWØ�6Š>ˆ>Ø×Ò˜VÑ$Ô$Ð$øà× Ò Ñ"Ô"ˆØ�Š�UÑÔÐØ�Š�DÑÔÐØ�Š�˜EŸIšI jÑ1Ô1ÐU°U·Y²YÐ?OÑ5PÔ5PÐUÐTUÑVÔVÑWÔWÐWØð /Ø
�ŠÐ(¨#Ñ.Ô.Ð.Ø/×6Ò6°t¸XÑFÔFˆˆà
�Š�| VÑ,Ô,Ð,Ø!×(Ò(¨Ñ.Ô.ˆØ‡N‚N�? GÑ,Ô,Ð,Øð 4Ø*Ð*Ð*Ð*Ð*Ð*Ø×Ò˜2˜u d¨FÑ3Ô3Ð3Øð -�4˜6’>�>Ø
�
Š
•6”< × 2Ò 2°5¸´;Ñ ?Ô ?Ñ@Ô@ÑAÔAÐAØ
�Š�| VÑ,Ô,Ð,Ø‡N‚NÐ%¥u­Yµt¸FÈÐX]Ø=AÈuÏyÊyÐYfÐhjÑOkÔOkØFLÐ?T¸s¸sÐRTð8Vñ 8Vô 8Vñ .Wô .Wà]_ð(añ (aô (añ bô bð bð !Ð Ð Ð Ð Ð Ø×Ò˜7Ÿ=š=¨¯ª¸¿ºÐGYÑ8ZÔ8ZÑ)[Ô)[Ñ\Ô\Ð^bÑcÔcÐcØ�:Š:‰<Œ<˜˜VÐ#Ð#rz   c                 óh  ‡
‡‡‡— ddl m} ddlm} |                      dd¦  «        Št
          ‰         \  }Š}|                      dd¦  «        }t          |                      d¦  «        ¦  «        }t          j        ¦   «         }t          j	        ||¦  «        }|€|s|t          j
        v r |‰g¦  «         g S |                     d	¦  «        d
k    sX|t          v r[|                     d¦  «        dk    s6|                     di ¦  «                             |dk    rdndd¦  «        |k     r |‰g¦  «         |                     ‰|                      d¦  «        ¦  «        Š
t          |||||¦  «        }	‰dk    r-d                     d„ |	D ¦   «         ¦  «        Šˆfd„|	D ¦   «         }	ˆ
ˆˆfd„|	D ¦   «         S )Nr   )Úclicks)rÎ   ru   r�   r”   r_   rO   rí   r\   rì   r^   rç   r+   r  r   r®   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r(   N)r²   )r~   r�   s     rR   r½   zbuild.<locals>.<genexpr>L  s,   è è € Ð7Ð7¨!�˜Q˜tœW™œÐ7Ð7Ð7Ð7Ð7Ð7rz   c                 ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS ))r  )r>  )r~   r�   Úqueues     €rR   r…   zbuild.<locals>.<listcomp>M  s&   ø€ Ð:Ð:Ð:¨Q•4˜ %Ð(Ñ(Ô(Ð:Ð:Ð:rz   c                 ó4   •— g | ]}t          |‰‰‰¦  «        ‘ŒS r}   )rˆ   )r~   r�   r  r    ru   s     €€€rR   r…   zbuild.<locals>.<listcomp>N  s'   ø€ Ð7Ð7Ð7¨!�D��D˜#˜uÑ%Ô%Ð7Ð7Ð7rz   )Úwcs.library2rL  rî   rÎ   rŽ   rj   rS   r   Úaccountrû   ÚPUBLIC_SOURCESrö   Úresolver™   r¨   )rD  rL  rÎ   r_   Ú_titlerw   rO   r˜   r—   r‡   r  r    rO  ru   s             @@@@rR   ÚbuildrV  9  sÛ  øøøø€ Ø#Ð#Ð#Ð#Ð#Ð#Ø(Ð(Ð(Ð(Ð(Ð(Ø
�*Š*�U˜BÑ
Ô
€CÝ œ9Ñ€FˆD�&Ø�JŠJ�v˜xÑ(Ô(€EÝ�6—:’:˜gÑ&Ô&Ñ'Ô'€EÝŒ>ÑÔ€DÝŒ?˜6 4Ñ(Ô(€DØ€|Øð 	�6�VÔ2Ð2Ð2ØˆG�S�E‰NŒNˆNØˆ	Ø‡x‚x�ÑÔ 1Ò$Ð$¨µ<Ð)?Ð)?ÀTÇXÂXÈiÑEXÔEXÐ\]ÒE]ÐE]Ø�HŠH�X˜rÑ"Ô"×&Ò&°%¸7Ò2BÐ2B w wÈÐRSÑTÔTÐW\Ò\Ð\Øˆ��‰ŒˆØ�NŠN˜3 §
¢
¨7Ñ 3Ô 3Ñ4Ô4€EÝ˜˜f e¨U°DÑ9Ô9€GØˆv‚~€~Ø—’Ð7Ð7¨wÐ7Ñ7Ô7Ñ7Ô7ˆØ:Ð:Ð:Ð:°'Ð:Ñ:Ô:ˆØ7Ð7Ð7Ð7Ð7Ð7¨wÐ7Ñ7Ô7Ð7rz   c                 óÀ   — t          j        | d¦  «         t          |¦  «        }t          j        | |t	          |¦  «        ¦  «         t          j        | d¬¦  «         d S )Nr   F)ÚcacheToDisc)Ú
xbmcpluginÚ
setContentrV  ÚaddDirectoryItemsri   ÚendOfDirectory)rÕ   rD  rd   s      rR   Úrunr]  Q  sW   € ÝÔ˜& (Ñ+Ô+Ð+Ý�&‰MŒM€EÝÔ  ¨µ°E±
´
Ñ;Ô;Ð;ÝÔ˜f°%Ð8Ñ8Ô8Ð8Ð8Ð8rz   )r¬   r°   )r�   rÇ   )r�   rÇ   F))Ú__doc__rÈ   r¦   r`   rÑ   Ú	threadingrý   Ú
contextlibr   Úurllib.parser   r   ra   r-  rY  rK   r   r:  r   r+  rj   ÚlocalrW   r†   rö   rÌ   rË   rS   rY   ry   r‰   r™   r¢   r«   r¶   rÜ   r  rœ   rˆ   rV  r]  r}   rz   rR   ú<module>rc     s  ðà QÐ QØ €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à €€€Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à(€à3Ø5Ø+Ø5Ø.Ø1Ø7Ø.Ø.Ø=Ø IØ@ØCðð €ð"  �	”Ñ!Ô!€ð
=€ð
 +€ØMÐ Ø€ðIð Ið Ið ð*ð *ñ „ð*ðð ð ð.ð ð ðð ð ðð ð ð ið ið iðTð Tð Tð Tð"ð "ð "ðJCð Cð Cð CðL(ð (ð (ð (ð6$ð 6$ð 6$ð 6$ðr8ð 8ð 8ð09ð 9ð 9ð 9ð 9rz   