§
   üu´ã©/ã            	       ó$  — d Z ddlZddlZddlZddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlZdZdZdZdZdZdZd	Zd
ZdZdZd\  ZZZZZZd\	  ZZZZ Z!Z"Z#Z$Z%d\  Z&Z'Z(Z)Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5dd„Z6dd„Z7d„ Z8d d„Z9d„ Z:dS )!a  Check for a new version of the addon and offer to install it (docs/plan/skin-milionar/250-update.md).

The skin's settings menu (window 1108) opens window 1124 and asks for `action=skin_update`; the window draws what the
Home properties milionar.update.* say. The check reads the index of the repository the addon is published to and
compares versions. Installing is Kodi's own job: `UpdateAddonRepos` makes Kodi refresh its repositories and, with
automatic updates on, install the new version; otherwise Kodi's list of available updates opens. Kodi stops and starts
the service again while it installs, so the new service finishes the window (`resume`).

A development workspace (a git checkout of the addon) never installs: an update from the repository would replace it.
é    Nzplugin.video.milionarzrepository.milionarz7https://hosting.pilsfree.net/chudy/kodi/repo/addons.xmlid  zmilionar.update.)
ÚstateÚ	installedÚ	availableÚheadlineÚtextÚprimaryÚnextÚ	secondaryÚbusyÚtargeté   é´   z6ActivateWindow(AddonBrowser,addons://outdated/,return))iø  iù  iú  iû  iü  iý  )	iþ  iÿ  i €  i€  i€  i€  i€  i
€  i€  )i€  i€  i€  i€  i	€  c                  ó*   — t          j        d¦  «        S )Ni'  )ÚxbmcguiÚWindow© ó    ú]/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/skin/update.pyÚ_homer   )   s   € ÝŒ>˜%Ñ Ô Ð r   c                 óT   — t          ¦   «                              t          | z   ¦  «        S ©N)r   ÚgetPropertyÚPREFIX)Únames    r   Ú_getr   -   s   € Ý‰7Œ7×Ò�v¨™}Ñ-Ô-Ð-r   c            
      ó|  — t          ¦   «         }t          D ]L}|dk    r|| vrŒ|                     t          |z   t	          |                      |d¦  «        ¦  «        ¦  «         ŒM|                      d¦  «        rBt          j        d                     t          ¦  «        ¦  «        rt          j
        d¦  «         dS dS dS )z9Set the window's state: every field not given is cleared.r   Ú r   úWindow.IsActive({})zSetFocus(11)N)r   ÚFIELDSÚsetPropertyr   ÚstrÚgetÚxbmcÚgetCondVisibilityÚformatÚWINDOWÚexecutebuiltin)ÚvaluesÚhomer   s      r   Ú_showr*   1   sÈ   € å‰7Œ7€DÝð Cð CˆØ�8ÒÐ ¨FÐ 2Ð 2ØØ×Ò� $™­¨F¯JªJ°t¸RÑ,@Ô,@Ñ(AÔ(AÑBÔBÐBÐBØ‡z‚z�)ÑÔð ,¥Ô!7Ð8M×8TÒ8TÕU[Ñ8\Ô8\Ñ!]Ô!]ð ,ÝÔ˜NÑ+Ô+Ð+Ð+Ð+ð,ð ,ð ,ð ,r   c                 óH   — |                       |¦  «        }|r
 |j        |Ž n|S r   )ÚgetLocalizedStringr%   )ÚaddonÚ	string_idÚargsr   s       r   Ú_textr0   <   s.   € Ø×#Ò# IÑ.Ô.€DØ!%Ð/ˆ;ˆ4Œ;˜ÐÐ¨4Ð/r   c                 ó^   — t          d„ t          j        d| pd¦  «        D ¦   «         ¦  «        S )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   )Úint)Ú.0Úparts     r   ú	<genexpr>zversion_key.<locals>.<genexpr>B   s(   è è € ÐIÐI˜t•�T‘”ÐIÐIÐIÐIÐIÐIr   z\d+r   )ÚtupleÚreÚfindall)Úversions    r   Úversion_keyr;   A   s/   € ÝÐIÐI¥r¤z°&¸'¸-ÀRÑ'HÔ'HÐIÑIÔIÑIÔIÐIr   c           	      óÆ   — t           j                             t           j                             t	          j        |                      d¦  «        ¦  «        d¦  «        ¦  «        S )zXA git checkout: the development tree, which an update from the repository would replace.Úpathz.git)Úosr=   ÚisdirÚjoinÚxbmcvfsÚtranslatePathÚgetAddonInfo)r-   s    r   Úis_workspacerD   E   s@   € åŒ7�=Š=�œŸš¥gÔ&;¸E×<NÒ<NÈvÑ<VÔ<VÑ&WÔ&WÐY_Ñ`Ô`ÑaÔaÐar   c                 óª   — dd| |dœ}t          j        t          j        t          j        |¦  «        ¦  «        ¦  «                             d¦  «        pi S )Nz2.0é   )ÚjsonrpcÚidÚmethodÚparamsÚresult)ÚjsonÚloadsr#   ÚexecuteJSONRPCÚdumpsr"   )rI   rJ   Úrequests      r   Ú_rpcrQ   J   sL   € Ø q°FÀfÐMÐM€GÝŒ:•dÔ)­$¬*°WÑ*=Ô*=Ñ>Ô>Ñ?Ô?×CÒCÀHÑMÔMÐSÐQSÐSr   c                  ót   — t          t          dt          dgdœ¦  «                             d¦  «        ¦  «        S )NzAddons.GetAddonDetailsÚenabled)ÚaddonidÚ
propertiesr-   )ÚboolrQ   ÚREPO_IDr"   r   r   r   Ú_repository_installedrX   O   s6   € Ý•Ð-½7ÐS\ÐR]Ð/^Ð/^Ñ_Ô_×cÒcÐdkÑlÔlÑmÔmÐmr   c                  ó^   — t          dddi¦  «                             d¦  «        t          k    S )NzSettings.GetSettingValueÚsettingzgeneral.addonupdatesÚvalue)rQ   r"   ÚAUTO_INSTALLr   r   r   Ú_auto_installr]   S   s.   € ÝÐ*¨YÐ8NÐ,OÑPÔP×TÒTÐU\Ñ]Ô]ÕamÒmÐmr   c                  ó„  — 	 t          j        d                     t          ¦  «        ¦  «        } t	          j        | ¦  «                             ¦   «                              d¦  «        }|�5|j        pd 	                    d¦  «        r|j         
                    ¦   «         S n# t          t          j        f$ r Y nw xY wt          S )z_The <info> of the installed repository addon (it knows where it lives), else the published one.z"special://home/addons/{}/addon.xmlz5.//extension[@point='xbmc.addon.repository']/dir/infoNr   zhttps://)rA   rB   r%   rW   ÚETÚparseÚgetrootÚfindr   Ú
startswithÚstripÚOSErrorÚ
ParseErrorÚ
REPO_INDEX)r=   Úinfos     r   Ú
_index_urlri   W   s®   € ðÝÔ$Ð%I×%PÒ%PÕQXÑ%YÔ%YÑZÔZˆÝŒx˜‰~Œ~×%Ò%Ñ'Ô'×,Ò,Ð-dÑeÔeˆØÐ ¤ ¨b× <Ò <¸ZÑ HÔ HÐØ”9—?’?Ñ$Ô$Ð$øøÝ•R”]Ð#ð ð ð ØˆðøøøåÐs   ‚BB ÂB8Â7B8c                  óH  — ddl } |                      t          ¦   «         t          ddi¬¦  «        }|                     ¦   «          t          j        |j        ¦  «        }t          d„ | 	                    d¦  «        D ¦   «         d¦  «        }|�|                     d¦  «        s't          d	                     t          ¦  «        ¦  «        ‚|                     d
¦  «        }|                     d¦  «        |�.d                     |j        pd                     ¦   «         ¦  «        ndfS )zZ(version, news) of the addon in the repository index; raises on a network or format error.r   NzCache-Controlzno-cache)ÚtimeoutÚheadersc              3   óV   K  — | ]$}|                      d ¦  «        t          k    ¯ |V — Œ%dS )rH   N)r"   ÚADDON_ID)r4   Únodes     r   r6   zpublished.<locals>.<genexpr>i   s6   è è € ÐTÐT˜4¸¿ºÀ$¹¼Í8Ò9SÐ9S�$Ð9SÐ9SÐ9SÐ9SÐTÐTr   r-   r:   z!{} is not in the repository indexz/.//extension[@point='xbmc.addon.metadata']/newsú r   )Úrequestsr"   ri   Ú	TIMEOUT_SÚraise_for_statusr_   Ú
fromstringÚcontentr	   ÚiterÚ
ValueErrorr%   rn   rb   r@   r   Úsplit)rq   ÚresponseÚrootr-   Únewss        r   Ú	publishedr|   c   sÿ   € à€O€O€OØ�|Š|�J™LœLµ)ÀoÐWaÐEbˆ|ÑcÔc€HØ×ÒÑÔÐÝŒ=˜Ô)Ñ*Ô*€DÝÐTÐT 4§9¢9¨WÑ#5Ô#5ÐTÑTÔTÐVZÑ[Ô[€EØ€}˜EŸIšI iÑ0Ô0€}ÝÐ<×CÒCÅHÑMÔMÑNÔNÐNØ�:Š:ÐGÑHÔH€DØ�9Š9�YÑÔÈÐHX §¢¨4¬9¨?¸×*AÒ*AÑ*CÔ*CÑ!DÔ!DÐ!DÐ^`Ð`Ð`r   c                 óÒ  — | pt          j        t          ¦  «        } |                      d¦  «        }t	          d|t          | t          ¦  «        dt          | t          ¦  «        ¬¦  «         	 t          ¦   «         \  }}n¿# t          $ r²}t          j        d                     t          |¦  «        j        |¦  «        t          j        ¦  «         t	          d|t          | t           ¦  «        t          | t"          ¦  «        t          | t$          ¦  «        dt          | t          ¦  «        ¬¦  «         Y d	}~d	S d	}~ww xY wt'          |¦  «        t'          |¦  «        k    rPt	          d
|t          | t(          ¦  «        t          | t*          |¦  «        t          | t          ¦  «        ¬¦  «         d	S t-          | ¦  «        rt          | t.          ¦  «        d}}nRt1          ¦   «         st          | t2          ¦  «        d}}n,|pt          | t4          ¦  «        t          | t6          ¦  «        }}t	          d||t          | t8          ¦  «        |||rdndt          | t:          ¦  «        ¬¦  «         d	S )z:Look for a new version and show the result in window 1124.r:   ÚcheckingÚtrue)r   r   r   r   r
   u(   [MilionÃ¡Å™ Update] check failed: {}: {}ÚfailedÚretry)r   r   r   r   r   r	   r
   NÚcurrent©r   r   r   r   r
   r   r   Úinstall©r   r   r   r   r   r   r	   r
   )Ú	xbmcaddonÚAddonrn   rC   r*   r0   Ú
S_CHECKINGÚB_CLOSEr|   Ú	Exceptionr#   Úlogr%   ÚtypeÚ__name__Ú
LOGWARNINGÚS_FAILEDÚT_FAILEDÚB_RETRYr;   Ú	S_CURRENTÚ	T_CURRENTrD   ÚT_DEVrX   Ú	T_NO_REPOÚT_NEWSÚ	B_INSTALLÚS_AVAILABLEÚB_LATER)r-   r   r   r{   Úexcr   r   s          r   Úcheckr›   p   sU  € àÐ.•Y”_¥XÑ.Ô.€EØ×"Ò" 9Ñ-Ô-€IÝ	�
 i½%ÀÅzÑ:RÔ:RÐY_Ý˜%¥Ñ)Ô)ð+ñ +ô +ð +ðÝ#™+œ+‰ˆ	�4�4øÝð ð ð ÝŒÐ;×BÒBÅ4ÈÁ9Ä9ÔCUÐWZÑ[Ô[Õ]aÔ]lÑmÔmÐmÝ�H¨	½EÀ%ÍÑ<RÔ<RÕY^Ð_dÕfnÑYoÔYoÝ˜E¥7Ñ+Ô+°'ÅUÈ5ÕRYÑEZÔEZð	\ñ 	\ô 	\ð 	\àˆˆˆˆˆøøøøð	øøøõ
 �9ÑÔ¥¨YÑ!7Ô!7Ò7Ð7Ý�I¨½UÀ5Í)Ñ=TÔ=TÝ˜¥	¨9Ñ5Ô5ÅÀuÍgÑAVÔAVð	Xñ 	Xô 	Xð 	XàˆÝ�EÑÔð NÝ˜e¥UÑ+Ô+¨RˆgˆˆÝ"Ñ$Ô$ð NÝ˜e¥YÑ/Ô/°ˆgˆˆàÐ4¥ e­VÑ 4Ô 4µe¸EÅ9Ñ6MÔ6MˆgˆÝ	� y¸IÕPUÐV[Õ]hÑPiÔPiÐptØ¨WÐ < 	 	¸"ÍÈeÕU\ÑH]ÔH]ð_ñ _ô _ð _ð _ð _s   Á,A> Á>
D:ÂB'D5Ä5D:c                 ó4  — | pt          j        t          ¦  «        } t          | ¦  «        r!t	          j        dt          j        ¦  «         dS |                      d¦  «        t          d¦  «        }}t          ¦   «         sšt	          j
        d¦  «         t          d||t          | t          ¦  «        t          | t          ¦  «        dt          | t          ¦  «        |¬¦  «         t	          j        ¦   «                              d	¦  «         t%          ¦   «          dS t          d||t          | t          ¦  «        t          | t&          ¦  «        dt          | t          ¦  «        |¬¦  «         t	          j        d
                     ||¦  «        t          j        ¦  «         t	          j
        d¦  «         t	          j        ¦   «         }t-          j        ¦   «         t.          z   }t-          j        ¦   «         |k     rA|                     d¦  «        st          d¦  «        dk    rdS t-          j        ¦   «         |k     °At          d||t          | t0          ¦  «        t          | t2          ¦  «        t          | t4          ¦  «        dt          | t          ¦  «        ¬¦  «         dS )zZLet Kodi install the version the window offers; wait for it while this service still runs.uH   [MilionÃ¡Å™ Update] development workspace: no update from the repositoryNr:   r   ÚUpdateAddonReposÚ
installingr   )r   r   r   r   r   r   r
   r   é   u<   [MilionÃ¡Å™ Update] asking Kodi to install {} (installed {})é   r   Úopenr…   )r†   r‡   rn   rD   r#   r‹   rŽ   rC   r   r]   r'   r*   r0   ÚS_INSTALLINGÚT_MANUALr‰   ÚMonitorÚwaitForAbortÚ_open_updatesÚT_INSTALLINGr%   ÚLOGINFOÚtimeÚINSTALL_WAIT_Sr˜   ÚT_NOT_INSTALLEDÚB_OPEN)r-   r   r   ÚmonitorÚdeadlines        r   r„   r„   ‹   sQ  € àÐ.•Y”_¥XÑ.Ô.€EÝ�EÑÔð ÝŒÐ[Õ]aÔ]lÑmÔmÐmØˆØ ×-Ò-¨iÑ8Ô8½$¸{Ñ:KÔ:Kˆy€IÝ‰?Œ?ð ÝÔÐ.Ñ/Ô/Ð/Ý�L¨IÀÕUZÐ[`ÕbnÑUoÔUoÝ˜¥Ñ)Ô)°Å%ÈÍwÑBWÔBWÐ`ið	kñ 	kô 	kð 	kåŒ‰Œ×#Ò# AÑ&Ô&Ð&Ý‰ŒˆØˆÝ	�¨	¸YÕQVÐW\Õ^jÑQkÔQkÝ�U�LÑ)Ô)°Å%ÈÍwÑBWÔBWÐ`iðkñ kô kð kå„HÐK×RÒRÐS\Ð^gÑhÔhÕjnÔjvÑwÔwÐwÝÔÐ*Ñ+Ô+Ð+åŒl‰nŒn€GÝŒy‰{Œ{�^Ñ+€HÝ
Œ)‰+Œ+˜Ò
 Ð
 Ø×Ò Ñ"Ô"ð 	¥d¨7¡m¤m°|Ò&CÐ&CØˆFõ Œ)‰+Œ+˜Ò
 Ð
 õ 
� y¸IÕPUÐV[Õ]hÑPiÔPiÝ�U�OÑ,Ô,µe¸EÅ6Ñ6JÔ6JÐQWÕchÐinÕpwÑcxÔcxðzñ zô zð zð zð zr   c                  ó�   — t          j        d                     t          ¦  «        ¦  «         t          j        t          ¦  «         d S )NzDialog.Close({}))r#   r'   r%   r&   ÚUPDATES_LISTr   r   r   r¦   r¦   §   s9   € ÝÔÐ*×1Ò1µ&Ñ9Ô9Ñ:Ô:Ð:ÝÔ�Ñ%Ô%Ð%Ð%Ð%r   c           
      ó  — | pt          j        t          ¦  «        } t          d¦  «        }|sdS |                      d¦  «        }t          |¦  «        t          |¦  «        k     r9t          ¦   «          t          ¦   «                              t          dz   ¦  «         dS |pt          j        ¦   «         }t          ¦   «                              d¦  «        st          j        d¦  «        sL|                     d¦  «        rdS t          ¦   «                              d¦  «        °8t          j        d¦  «        ¯Lt          d|t          | t           ¦  «        t          | t"          |¦  «        t          | t$          ¦  «        ¬¦  «         t          ¦   «                              t          dz   ¦  «         t          j        d	                     t(          ¦  «        ¦  «        s.t          j        d
                     t(          ¦  «        ¦  «         dS dS )zcService start: the new version Kodi just installed finishes the window the old one left installing.r   Nr:   zmilionar.skin.installingzWindow.IsActive(home)rF   Údonerƒ   r   úActivateWindow({}))r†   r‡   rn   r   rC   r;   r*   r   ÚclearPropertyr   r#   r¤   r   r$   r¥   r0   ÚS_DONEÚT_DONEr‰   r%   r&   r'   )r-   r­   r   r   s       r   Úresumer·   ¬   sÊ  € àÐ.•Y”_¥XÑ.Ô.€EÝ�(‰^Œ^€FØð ØˆØ×"Ò" 9Ñ-Ô-€IÝ�9ÑÔ¥¨FÑ 3Ô 3Ò3Ð3Ý‰ŒˆÝ‰Œ×Ò�f xÑ/Ñ0Ô0Ð0ØˆØÐ'�œ™œ€Gå
‰'Œ'×
Ò
Ð8Ñ
9Ô
9ð ÅÔAWÐXoÑApÔApð Ø×Ò Ñ"Ô"ð 	ØˆFõ ‰'Œ'×
Ò
Ð8Ñ
9Ô
9ð ÅÔAWÐXoÑApÔApð õ 
� )µe¸EÅ6Ñ6JÔ6JÕQVÐW\Õ^dÐfoÑQpÔQpÝ˜%¥Ñ)Ô)ð+ñ +ô +ð +å	�G„G×Ò�& 8Ñ+Ñ,Ô,Ð,ÝÔ!Ð"7×">Ò">½vÑ"FÔ"FÑGÔGð AÝÔÐ0×7Ò7½Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@ðAð Ar   c                 óø  — t          j        t          ¦  «        }|                      dd¦  «        }|dk    rit	          j        d                     t          ¦  «        ¦  «        s,t	          j        d                     t          ¦  «        ¦  «         t          |¦  «         d
S |dk    rSt          d¦  «        }|dk    rt          |¦  «         d
S |dk    rt          ¦   «          d
S |d	k    rt          |¦  «         d
S d
S d
S )zLThe window's actions: `do=check` (it opens), `do=primary` (its main button).Údor›   r   r³   r   r	   r�   r¡   r„   N)r†   r‡   rn   r"   r#   r$   r%   r&   r'   r›   r   r¦   r„   )rJ   r-   ÚstepÚactions       r   Úrunr¼   Ã   sñ   € åŒO�HÑ%Ô%€EØ�:Š:�d˜GÑ$Ô$€DØˆw‚€ÝÔ%Ð&;×&BÒ&BÅ6Ñ&JÔ&JÑKÔKð 	EÝÔÐ 4× ;Ò ;½FÑ CÔ CÑDÔDÐDÝˆe‰ŒˆˆˆØ	�Ò	Ð	Ý�f‘”ˆØ�WÒÐÝ�%‰LŒLˆLˆLˆLØ�vÒÐÝ‰OŒOˆOˆOˆOØ�yÒ Ð Ý�E‰NŒNˆNˆNˆNð 
Ð	ð !Ð r   r   )NN);Ú__doc__rL   r>   r8   r©   Úxml.etree.ElementTreeÚetreeÚElementTreer_   r#   r†   r   rA   rn   rW   rg   r&   r   r   rr   rª   r\   r°   rˆ   r˜   r’   r¢   rµ   r�   r“   r§   r¶   r�   r£   r”   r•   r–   r«   r—   r™   r‘   r¬   r‰   r   r   r*   r0   r;   rD   rQ   rX   r]   ri   r|   r›   r„   r¦   r·   r¼   r   r   r   ú<module>rÁ      s  ðð	ð 	ð €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø €€€à"€Ø
€ØF€
Ø	€Ø	€à	r€Ø€	Ø€Ø€ØG€àEmÑ B€
ˆK˜ L°&¸(ðbCÑ ^€	ˆ<˜ ¨8°U¸IÀvÈà/PÑ ,€	ˆ7�G˜V Wð!ð !ð !ð.ð .ð .ð,ð ,ð ,ð0ð 0ð 0ð
Jð Jð Jðbð bð bð
Tð Tð Tð
nð nð nðnð nð nð	ð 	ð 	ð
að 
að 
að_ð _ð _ð _ð6zð zð zð zð8&ð &ð &ð
Að Að Að Að.ð ð ð ð r   