§
   26WÐq	Ëhã                   ó  — 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Z	d 
                    e	¦  «        ZdZg ZdZd„ Zej        fd„Z G d	„ d
ej        ¦  «        Zd„ Zdd„Zd„ Zd„ Zg Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!dS )a�  Live dialog harness -- local command channel inside the running Kodi.

The agent-side CLI (scripts/dialog_harness/kodi_live.py) writes a JSON request
into the harness directory; this listener (started from service.py) executes
it inside Kodi and writes a JSON response. Nothing runs unless the harness
directory contains the ENABLED flag file, which only the local CLI creates.

Directory: special://profile/addon_data/plugin.video.milionar/harness/
  ENABLED            flag file, created by `kodi_live.py enable`
  request.json       one pending request {"id": str, "ops": [...]}
  response-<id>.json result written after all ops ran
  heartbeat          touched while the listener is alive

Supported ops (executed in order, each returns a result dict):
  {"op": "ping"}
  {"op": "info", "labels": ["System.CurrentWindow", ...], "conds": ["Window.IsActive(home)"]}
  {"op": "builtin", "cmd": "ActivateWindow(Videos,plugin://...,return)", "wait": false}
  {"op": "sleep", "ms": 500}
  {"op": "wait", "cond": "Window.IsActive(...)", "timeout_ms": 8000}
  {"op": "screenshot", "path": "/abs/out.png"}
  {"op": "jsonrpc", "request": {"jsonrpc": "2.0", "method": "...", "id": 1}}
  {"op": "mark", "token": "unique"}                 writes the token to kodi.log
  {"op": "skin", "name": "skin.estuary"}            switch skin, confirm "keep skin"
  {"op": "reload", "timeout_ms": 20000}             ReloadSkin(), wait for Home
  {"op": "addon_setting", "key": "dev_fixture_provider", "value": "true"}   set an addon setting
  {"op": "call", "module": "wcs.library2.fixture_provider", "func": "seed_meta", "args": []}   call any addon function
  {"op": "stddialog", "kind": "yesno|select|ok|textviewer|input|numeric|progressbg|notification",
   "wait_cond": "Window.IsActive(yesnodialog)"}     open a standard Kodi dialog (own thread)
  {"op": "dialog", "xml": "notifications/premium/X.xml", "props": {...},
   "items": {"50": [{"Label": "...", "prop": "..."}]}, "focus": 111,
   "settle_ms": 1200, "screenshot": "/abs/out.png", "close": true, "measure": [ids],
   "backdrop": {"image": "/abs/backdrop.png"},
   "python_class": "wcs.ui.dialogs.DialogWcsSearch:DialogWcsSearch", "kwargs": {...}}
é    Nzplugin.video.milionarz(special://profile/addon_data/{}/harness/g       @g      Ð?c                  ó4   — t          j        t          ¦  «        S ©N)ÚxbmcvfsÚtranslatePathÚHARNESS_DIR© ó    új/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/harness_service.pyÚ_dirr   6   s   € ÝÔ ¥Ñ-Ô-Ð-r	   c                 óX   — t          j        d                     | ¦  «        |¬¦  «         d S )Nu   [MilionÃ¡Å™ Harness] {}©Úlevel)ÚxbmcÚlogÚformat)Úmsgr   s     r
   Ú_logr   :   s,   € Ý„HÐ&×-Ò-¨cÑ2Ô2¸%Ð@Ñ@Ô@Ð@Ð@Ð@r	   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_FixtureDialogzBGeneric dialog used to show any addon XML with fixture properties.c                 óÖ   •— |                      di ¦  «        | _        |                      di ¦  «        | _        |                      dd ¦  «        | _         t	          ¦   «         j        |Ž  d S )NÚfixture_propsÚfixture_itemsÚfixture_focus)Úpopr   r   r   ÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ	__class__s      €r
   r   z_FixtureDialog.__init__A   s_   ø€ Ø#ŸZšZ¨¸Ñ<Ô<ˆÔØ#ŸZšZ¨¸Ñ<Ô<ˆÔØ#ŸZšZ¨¸Ñ>Ô>ˆÔØ�‰ŒÔ˜$ÐÐÐÐr	   c           
      óú  — | j                              ¦   «         D ](\  }}|                      |t          |¦  «        ¦  «         Œ)| j                             ¦   «         D �]N\  }}	 |                      t          |¦  «        ¦  «        }n# t          t          t          f$ r Y ŒCw xY wg }|D ]À}t          j        t          |                     dd¦  «        ¦  «        ¬¦  «        }i }	|                     ¦   «         D ]E\  }}|dk    rŒ|dv rt          |¦  «        |	|<   |                     |t          |¦  «        ¦  «         ŒF|	r|                     |	¦  «         |                     |¦  «         ŒÁ	 |                     ¦   «          |                     |¦  «         �Œ8# t          t"          f$ r Y �ŒLw xY w| j        �H	 |                      t          | j        ¦  «        ¦  «         d S # t          t          t          f$ r Y d S w xY wd S )NÚLabelÚ )Úlabel)ÚthumbÚposterÚfanartÚicon)r   ÚitemsÚsetPropertyÚstrr   Ú
getControlÚintÚRuntimeErrorÚ	TypeErrorÚ
ValueErrorÚxbmcguiÚListItemÚgetÚsetArtÚappendÚresetÚaddItemsÚAttributeErrorr   Ú
setFocusId)
r   ÚkeyÚvalueÚ
control_idr)   ÚcontrolÚ
list_itemsÚdataÚitemÚarts
             r
   ÚonInitz_FixtureDialog.onInitG   s/  € ØÔ,×2Ò2Ñ4Ô4ð 	.ð 	.‰JˆC�Ø×Ò˜S¥# e¡*¤*Ñ-Ô-Ð-Ð-Ø!%Ô!3×!9Ò!9Ñ!;Ô!;ð 	ñ 	ÑˆJ˜ðØŸ/š/­#¨j©/¬/Ñ:Ô:��øÝ ¥)­ZÐ8ð ð ð Ø�ðøøøàˆJØð (ð (�ÝÔ'­c°$·(²(¸7ÀBÑ2GÔ2GÑ.HÔ.HÐIÑIÔI�Ø�Ø"&§*¢*¡,¤,ð 6ð 6‘J�C˜Ø˜g’~�~Ø ØÐCÐCÐCÝ#& u¡:¤:˜˜C™Ø×$Ò$ S­#¨e©*¬*Ñ5Ô5Ð5Ð5Øð %Ø—K’K Ñ$Ô$Ð$Ø×!Ò! $Ñ'Ô'Ð'Ð'ðØ—’‘”�Ø× Ò  Ñ,Ô,Ð,Ñ,øÝ ¥.Ð1ð ð ð Ø‘ðøøøàÔÐ)ðØ—’¥ DÔ$6Ñ 7Ô 7Ñ8Ô8Ð8Ð8Ð8øÝ ¥)­ZÐ8ð ð ð Ø��ðøøøð *Ð)s6   Á#"BÂB ÂB Å))FÆF)Æ(F)Æ4'G ÇG8Ç7G8c                 óŠ   — |                      ¦   «         t          j        t          j        fv r|                      ¦   «          d S d S r   )ÚgetIdr1   ÚACTION_NAV_BACKÚACTION_PREVIOUS_MENUÚclose)r   Úactions     r
   ÚonActionz_FixtureDialog.onActiong   s:   € Ø�<Š<‰>Œ>�gÔ5µwÔ7SÐTÐTÐTØ�JŠJ‰LŒLˆLˆLˆLð UÐTr	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rB   rI   Ú__classcell__)r    s   @r
   r   r   >   s]   ø€ € € € € ØLÐLð ð  ð  ð  ð  ðð ð ð@ð ð ð ð ð ð r	   r   c                  óä   — t          j        ¦   «         t          j        ¦   «         t          j        d¦  «        t          j        d¦  «        t          j        ¦   «         t          j        ¦   «         dœS )NzSystem.ScreenResolutionzSystem.CurrentWindow)Úscreen_wÚscreen_hÚ
resolutionÚcurrent_windowÚcurrent_window_idÚcurrent_dialog_id)r1   ÚgetScreenWidthÚgetScreenHeightr   ÚgetInfoLabelÚgetCurrentWindowIdÚgetCurrentWindowDialogIdr   r	   r
   Ú_screen_infor[   l   s_   € åÔ*Ñ,Ô,ÝÔ+Ñ-Ô-ÝÔ'Ð(AÑBÔBÝÔ+Ð,BÑCÔCÝ$Ô7Ñ9Ô9Ý$Ô=Ñ?Ô?ðð ð r	   ç      $@c                 óú  — t           j                             | ¦  «        }|r3t           j                             |¦  «        st          j        |¦  «         t           j                             | ¦  «        rt          j        | ¦  «         t          j        d 	                    | ¦  «        d¦  «         t          j
        ¦   «         |z   }d}t          j
        ¦   «         |k     r|t           j                             | ¦  «        r2t           j                             | ¦  «        }|dk    r||k    r| |dœS |}t          j        d¦  «         t          j
        ¦   «         |k     °|t          d 	                    | ¦  «        ¦  «        ‚)NzTakeScreenshot({},sync)Téÿÿÿÿr   )ÚpathÚbyteséd   zscreenshot not written: {})Úosr_   ÚdirnameÚisdirÚmakedirsÚexistsÚremover   Úexecutebuiltinr   ÚtimeÚgetsizeÚsleepr.   )r_   Ú	timeout_sÚfolderÚdeadlineÚ	last_sizeÚsizes         r
   Ú_take_screenshotrq   w   s;  € ÝŒW�_Š_˜TÑ"Ô"€FØð •b”g—m’m FÑ+Ô+ð Ý
Œ�FÑÔÐÝ	„w‡~‚~�dÑÔð Ý
Œ	�$‰ŒˆÝÔÐ1×8Ò8¸Ñ>Ô>ÀÑEÔEÐEÝŒy‰{Œ{˜YÑ&€HØ€IÝ
Œ)‰+Œ+˜Ò
 Ð
 ÝŒ7�>Š>˜$ÑÔð 	Ý”7—?’? 4Ñ(Ô(ˆDØ�aŠxˆx˜D IÒ-Ð-Ø $¨tÐ4Ð4Ð4ØˆIÝŒ
�3‰Œˆõ Œ)‰+Œ+˜Ò
 Ð
 õ Ð3×:Ò:¸4Ñ@Ô@Ñ
AÔ
AÐAr	   c                 óè   — t          j         ¦   «         |dz  z   }t          j         ¦   «         |k     rAt          j        | ¦  «        rdS t          j        d¦  «         t          j         ¦   «         |k     °AdS )Nç     @�@Tra   F)ri   r   ÚgetCondVisibilityrk   )ÚcondÚ
timeout_msrn   s      r
   Ú
_wait_condrw   Š   sg   € ÝŒy‰{Œ{˜Z¨&Ñ0Ñ0€HÝ
Œ)‰+Œ+˜Ò
 Ð
 ÝÔ! $Ñ'Ô'ð 	Ø�4ÝŒ
�3‰Œˆõ Œ)‰+Œ+˜Ò
 Ð
 ð ˆ5r	   c                 óü  — | d         }t          j        ¦   «         |k    r|ddœS t          j        t          j        t          j        dddd|dœd	œ¦  «        ¦  «        ¦  «        }d
|v r(t          d                     |d
         ¦  «        ¦  «        ‚t          j        ¦   «         t          |  
                    dd¦  «        ¦  «        dz  z   }d}t          j        ¦   «         |k     ræ|s?t          j        d¦  «        r+t          j        d¦  «         t          j        dd¦  «         d}t          j        ¦   «         |k    rct          j        d¦  «        rOt          j        d¦  «        s;t          j        t          |  
                    dd¦  «        ¦  «        ¦  «         |d|dœS t          j        d¦  «         t          j        ¦   «         |k     °æt          d                     |t          j        ¦   «         ¦  «        ¦  «        ‚)zLSwitch the skin and press Yes on the "keep this skin" dialog (button id 11).ÚnameF)ÚskinÚchangedz2.0é   zSettings.SetSettingValuezlookandfeel.skin)Úsettingr;   )ÚjsonrpcÚidÚmethodÚparamsÚerrorzSetSettingValue failed: {}rv   i0u  rs   zWindow.IsActive(yesnodialog)é,  zSendClick(11)TúWindow.IsActive(home)Ú	settle_msiÜ  )rz   r{   Ú	confirmedéÈ   z,skin {} not active after switch (active: {}))r   Ú
getSkinDirÚjsonÚloadsÚexecuteJSONRPCÚdumpsr.   r   ri   r-   r3   rt   rk   rh   )Úopry   Úresponsern   r†   s        r
   Ú_op_skinr�   “   sè  € àˆfŒ:€DÝ„ÑÔ˜DÒ Ð Ø¨Ð/Ð/Ð/ÝŒz�$Ô-­d¬jØ Ð-GØ0¸4Ð@Ð@ð:Bð :Bñ /Cô /Cñ Dô Dñ Eô E€Hð �(ÐÐÝÐ7×>Ò>¸xÈÔ?PÑQÔQÑRÔRÐRÝŒy‰{Œ{�S §¢¨°eÑ!<Ô!<Ñ=Ô=ÀÑFÑF€HØ€IÝ
Œ)‰+Œ+˜Ò
 Ð
 Øð 	�TÔ3Ð4RÑSÔSð 	ÝŒJ�s‰OŒOˆOÝÔ °Ñ6Ô6Ð6ØˆIÝŒ?ÑÔ Ò$Ð$­Ô)?Ð@WÑ)XÔ)XÐ$ÝÔ.Ð/MÑNÔNð %åŒJ•s˜2Ÿ6š6 +¨tÑ4Ô4Ñ5Ô5Ñ6Ô6Ð6Ø ¨TÀ	ÐJÐJÐJÝŒ
�3‰Œˆõ Œ)‰+Œ+˜Ò
 Ð
 õ ÐE×LÒLÈTÕSWÔSbÑSdÔSdÑeÔeÑ
fÔ
fÐfr	   c                 óð  — t          j        ¦   «         }| dk    r|                     dd¦  «         d S | dk    r|                     dg d¢¦  «         d S | dk    r|                     dd¦  «         d S | dk    r|                     dd	¦  «         d S | d
k    r|                     dd¦  «         d S | dk    r|                     dd¦  «         d S | dk    r$|                     ddt           j	        d¦  «         d S | dk    r\t          j
        ¦   «         }|                     dd¦  «         |                     ddd¦  «         t                               |¦  «         d S t          d                     | ¦  «        ¦  «        ‚)NÚyesnoÚHarnessz1Do you want to continue with this fixture dialog?Úselect)zFirst optionzSecond optionzThird optionzFourth optionÚokz$A fixture message for the OK dialog.Ú
textviewera\  Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Line one
Line two
Line three
Úinputzfixture textÚnumericr   ÚnotificationzA fixture notification messageip  Ú
progressbgzFixture progress messageé(   zunknown dialog kind: {})r1   ÚDialogr‘   r“   r”   r•   r–   r—   r˜   ÚNOTIFICATION_INFOÚDialogProgressBGÚcreateÚupdateÚ	_STD_KEEPr5   r0   r   )ÚkindÚdialogÚprogresss      r
   Ú_run_std_dialogr¤   ¯   sŸ  € ÝŒ^ÑÔ€FØˆw‚€Ø�Š�YÐ SÑTÔTÐTÐTÐTØ	�Ò	Ð	Ø�Š�iÐ!cÐ!cÐ!cÑdÔdÐdÐdÐdØ	�ŠˆØ�	Š	�)ÐCÑDÔDÐDÐDÐDØ	�Ò	Ð	Ø×Ò˜)Ð%LÑMÔMÐMÐMÐMØ	�ŠˆØ�Š�Y Ñ/Ô/Ð/Ð/Ð/Ø	�Ò	Ð	Ø�Š�q˜)Ñ$Ô$Ð$Ð$Ð$Ø	�Ò	Ð	Ø×Ò˜IÐ'GÍÔIbÐdhÑiÔiÐiÐiÐiØ	�Ò	Ð	ÝÔ+Ñ-Ô-ˆØ�Š˜	Ð#=Ñ>Ô>Ð>Ø�Š˜˜IÐ'AÑBÔBÐBÝ×Ò˜Ñ"Ô"Ð"Ð"Ð"åÐ2×9Ò9¸$Ñ?Ô?Ñ@Ô@Ð@r	   c           	      ó  — dd l }| d         }t          D ]'}	 |                     ¦   «          Œ# t          $ r Y Œ$w xY wt          d d …= |dk    rd|iS |                     t
          |fd¬¦  «        }|                     ¦   «          |                      d¦  «        r7t          | d         t          |                      dd¦  «        ¦  «        ¦  «        nd}t          j        t          |                      d	d
¦  «        ¦  «        ¦  «         ||dœS )Nr   r¡   rG   T)Útargetr   ÚdaemonÚ	wait_condrv   é@  r…   i   )r¡   Úmet)Ú	threadingr    rG   r.   ÚThreadr¤   Ústartr3   rw   r-   r   rk   )r�   r«   r¡   r£   Úthreadrª   s         r
   Ú_op_stddialogr¯   È   s  € ØÐÐÐØˆfŒ:€DÝð ð ˆð	Ø�NŠNÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøå�!�!�!ˆØˆw‚€Ø˜ˆ~ÐØ×Ò¥_¸D¸7È4ÐÑPÔP€FØ
‡L‚L�N„N€NØJLÏ&Ê&ÐQ\ÑJ]ÔJ]Ð
g�*�R˜”_¥c¨"¯&ª&°¸tÑ*DÔ*DÑ&EÔ&EÑ
FÔ
FÐ
FÐcg€CÝ„J�s�2—6’6˜+ sÑ+Ô+Ñ,Ô,Ñ-Ô-Ð-Ø Ð%Ð%Ð%s   —,¬
9¸9c                 óú   — d|d         i}t          d|                      d¦  «        dd|¬¦  «        }|                     ¦   «          t          j        t          |                     dd	¦  «        ¦  «        ¦  «         |S )
zKShow a neutral full-screen backdrop so translucent dialogs capture cleanly.zHarness.ImageÚimagezdevtools/HarnessBackdrop.xmlr_   ÚDefaultÚ1080i)r   r…   é�  )r   ÚgetAddonInfoÚshowr   rk   r-   r3   )ÚaddonÚbackdropÚpropsÚshades       r
   Ú_open_backdropr»   Ú   sz   € à˜h wÔ/Ð0€EÝÐ9¸5×;MÒ;MÈfÑ;UÔ;UØ$ g¸UðDñ Dô D€Eà	‡J‚J�L„L€LÝ„J�s�8—<’< ¨SÑ1Ô1Ñ2Ô2Ñ3Ô3Ð3Ø€Lr	   c                 ó¢  — i }|D ]É}	 |                       t          |¦  «        ¦  «        }|                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         dœ|t          |¦  «        <   Œ…# t          t          t          f$ r+}dt          |¦  «        i|t          |¦  «        <   Y d}~ŒÂd}~ww xY w|S )zMReal control geometry as Kodi laid it out (x/y relative to the parent group).)ÚxÚyÚwÚhr‚   N)
r,   r-   ÚgetXÚgetYÚgetWidthÚ	getHeightr+   r.   r/   r0   )ÚwindowÚcontrol_idsÚrectsr<   r=   Úexcs         r
   Ú_measurerÉ   ä   s×   € à€EØ!ð 9ð 9ˆ
ð	9Ø×'Ò'­¨J©¬Ñ8Ô8ˆGØ+2¯<ª<©>¬>ÀÇÂÁÄØ+2×+;Ò+;Ñ+=Ô+=ÀG×DUÒDUÑDWÔDWð&Yð &YˆE•#�j‘/”/Ñ"Ð"øå�i­Ð4ð 	9ð 	9ð 	9Ø&-­s°3©x¬xÐ%8ˆE•#�j‘/”/Ñ"Ð"Ð"Ð"Ð"Ð"øøøøð	9øøøà€Ls   ˆBB
Â
CÂ!!CÃCc                  óÈ   — t           rFt                                ¦   «         } 	 |                      ¦   «          n# t          $ r Y nw xY wt           °Ft	          j        d¦  «         d S )Nr‡   )Ú_KEPTr   rG   r.   r   rk   )rÅ   s    r
   Ú_close_keptrÌ   ñ   sh   € Ý
ð Ý—’‘”ˆð	Ø�LŠL‰NŒNˆNˆNøÝð 	ð 	ð 	ØˆDð	øøøõ	 ð õ 	„Jˆs�O„O€O€O€Os   ¢7 ·
AÁAc                 ó„  ‡	‡
— t          ¦   «          t          j        t          ¦  «        }|                      d¦  «        rt          || d         ¦  «        nd }|                      d¦  «        r�dd l}| d                              d¦  «        \  }}t          | 	                    |¦  «        |¦  «        Š	g Š
 G ˆ	ˆ
fd„d‰	¦  «        } || d         | 
                    d¦  «        fi |                      d	i ¦  «        ¤Ž}njt          | d         | 
                    d¦  «        d
d|                      di ¦  «        |                      di ¦  «        |                      d¦  «        ¬¦  «        }i }|                     ¦   «          	 t          j        t          |                      dd¦  «        ¦  «        ¦  «         |                      d¦  «        �]|                     t          | d         ¦  «        ¦  «         t          j        t          |                      dd¦  «        ¦  «        ¦  «         t#          |d¦  «        r|                     ¦   «         nd |d<   |                      d¦  «        rt'          || d         ¦  «        |d<   |                      d¦  «        r‰
|d<   |                      d¦  «        rt)          | d         ¦  «        |d<   |                      dd¦  «        r@|                     ¦   «          |�|                     ¦   «          t          j        d¦  «         ~n¨t,                               d„ ||fD ¦   «         ¦  «         n�# |                      dd¦  «        r@|                     ¦   «          |�|                     ¦   «          t          j        d¦  «         ~w t,                               d„ ||fD ¦   «         ¦  «         w xY w|S )Nr¸   Úpython_classr   ú:c                   ó    •— e Zd ZdZˆ ˆfd„ZdS )ú_op_dialog.<locals>._Tracedz7Records whether the real onInit ran and what it raised.c                 óü   •— ‰                      d¦  «         	 ‰                     | ¦  «         ‰                      d¦  «         d S # t          $ r- ‰                      dt          j        ¦   «         z   ¦  «         Y d S w xY w)NrB   zonInit donezonInit raised: )r5   rB   Ú	ExceptionÚ	tracebackÚ
format_exc)r   Ú
base_classÚtraces    €€r
   rB   z"_op_dialog.<locals>._Traced.onInit  s�   ø€ Ø—’˜XÑ&Ô&Ð&ðMØ×%Ò% dÑ+Ô+Ð+Ø—L’L Ñ/Ô/Ð/Ð/Ð/øÝ ð Mð Mð MØ—L’LÐ!2µYÔ5IÑ5KÔ5KÑ!KÑLÔLÐLÐLÐLÐLðMøøøs   ˜*A Á3A;Á:A;N)rJ   rK   rL   rM   rB   )rÖ   r×   s   €€r
   Ú_TracedrÑ     sA   ø€ € € € € ØIÐIðMð Mð Mð Mð Mð Mð Mð Mr	   rØ   Úxmlr_   r   r²   r³   r¹   r)   Úfocus)r   r   r   r…   i°  Úfocus_settle_msr´   Ú
getFocusIdÚ
focused_idÚmeasureÚmeasuredÚclass_traceÚ
screenshotrG   Trƒ   c                 ó   — g | ]}|®|‘ŒS r   r   )Ú.0r¿   s     r
   ú
<listcomp>z_op_dialog.<locals>.<listcomp>.  s   € ÐFÐFÐF ¸¸˜!¸¸¸r	   )rÌ   Ú	xbmcaddonÚAddonÚADDON_IDr3   r»   Ú	importlibÚsplitÚgetattrÚimport_modulerµ   r   r¶   r   rk   r-   r9   ÚhasattrrÜ   rÉ   rq   rG   rË   Úextend)r�   r·   rº   rè   Úmodule_nameÚ
class_namerØ   r¢   ÚresultrÖ   r×   s            @@r
   Ú
_op_dialogrñ   û   sª  øø€ Ý�M„M€MÝŒO�HÑ%Ô%€EØ57·V²V¸JÑ5GÔ5GÐQ�N˜5 " Z¤.Ñ1Ô1Ð1ÈT€EØ	‡v‚vˆnÑÔð 
àÐÐÐØ"$ ^Ô"4×":Ò":¸3Ñ"?Ô"?Ñˆ�ZÝ˜Y×4Ò4°[ÑAÔAÀ:ÑNÔNˆ
Øˆð	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	M�jñ 	Mô 	Mð 	Mð �˜˜Eœ E×$6Ò$6°vÑ$>Ô$>ÐWÐWÀ"Ç&Â&ÈÐSUÑBVÔBVÐWÐWˆˆåØˆuŒI�u×)Ò)¨&Ñ1Ô1°9¸gØŸ&š& ¨"Ñ-Ô-ØŸ&š& ¨"Ñ-Ô-ØŸ&š& ™/œ/ð	
ñ 
ô 
ˆð €FØ
‡K‚K�M„M€MðHÝŒ
•3�r—v’v˜k¨4Ñ0Ô0Ñ1Ô1Ñ2Ô2Ð2Ø�6Š6�'‰?Œ?Ð&Ø×Ò�c " W¤+Ñ.Ô.Ñ/Ô/Ð/ÝŒJ•s˜2Ÿ6š6Ð"3°SÑ9Ô9Ñ:Ô:Ñ;Ô;Ð;Ý6=¸fÀlÑ6SÔ6SÐ]˜v×0Ò0Ñ2Ô2Ð2ÐY]ˆˆ|ÑØ�6Š6�)ÑÔð 	AÝ!)¨&°"°Y´-Ñ!@Ô!@ˆF�:ÑØ�6Š6�.Ñ!Ô!ð 	*Ø$)ˆF�=Ñ!Ø�6Š6�,ÑÔð 	FÝ#3°B°|Ô4DÑ#EÔ#EˆF�<Ñ à�6Š6�'˜4Ñ Ô ð 	HØ�LŠL‰NŒNˆNØÐ Ø—’‘”�ÝŒJ�s‰OŒOˆOØ�å�LŠLÐFÐF f¨e _ÐFÑFÔFÑGÔGÐGÐGøð �6Š6�'˜4Ñ Ô ð 	HØ�LŠL‰NŒNˆNØÐ Ø—’‘”�ÝŒJ�s‰OŒOˆOØ�å�LŠLÐFÐF f¨e _ÐFÑFÔFÑGÔGÐGÐGøøøØ€Ms   Å=EL? Ì?A>N=c                 ó®
  — |                       d¦  «        }|dk    r=t          ¦   «         }t          j        d¦  «        |d<   t          j        ¦   «         |d<   |S |dk    rNd„ |                       dg ¦  «        D ¦   «         d	„ |                       d
g ¦  «        D ¦   «         t          ¦   «         dœS |dk    rFt          j        | d         t          |                       dd¦  «        ¦  «        ¦  «         d| d         iS |dk    r7t          j        t          |                       dd¦  «        ¦  «        ¦  «         i S |dk    ržt          j	        ¦   «         t          |                       dd¦  «        ¦  «        dz  z   }t          j	        ¦   «         |k     rIt          j
        | d         ¦  «        rddiS t          j        d¦  «         t          j	        ¦   «         |k     °IddiS |dk    r}t          j        ¦   «         }t          j        t          j        t          j        | d         ¦  «        ¦  «        ¦  «        }t!          t          j        ¦   «         |z
  dz  d¦  «        |d<   |S |dk    rCt          j        d                      | d!         ¦  «        t          j        ¬"¦  «         d!| d!         iS |dk    rt)          | ¦  «        S |d#k    r¥t          j        d$d¦  «         t          j        d¦  «         t+          d%t          |                       dd&¦  «        ¦  «        ¦  «        }t          j        t          |                       d'd¦  «        ¦  «        ¦  «         |t          j        ¦   «         d(œS |d)k    rt-          | ¦  «        S |d*k    r�t/          j        t2          ¦  «                             | d+         t7          | d,         ¦  «        ¦  «         | d+         t/          j        t2          ¦  «                             | d+         ¦  «        d-œS |d.k    r¡d/d l}t=          |                     | d0         ¦  «        | d1         ¦  «        } ||                       d2g ¦  «        Ž }d3tA          |t          tB          t6          t          tD          tF          tI          d ¦  «        f¦  «        r|nt7          |¦  «        iS |d4k    rtK          ¦   «          i S |d5k    r8tM          | d6         ¦  «        }| '                    t          ¦   «         ¦  «         |S |d7k    r2tQ          | ¦  «        }| '                    t          ¦   «         ¦  «         |S tS          d8                     |¦  «        ¦  «        ‚)9Nr�   ÚpingzSystem.BuildVersionÚkodirz   Úinfoc                 ó8   — i | ]}|t          j        |¦  «        “ŒS r   )r   rX   )rã   r$   s     r
   ú
<dictcomp>z_run_op.<locals>.<dictcomp>;  s%   € ÐYÐYÐY¸5�u�dÔ/°Ñ6Ô6ÐYÐYÐYr	   Úlabelsc                 óR   — i | ]$}|t          t          j        |¦  «        ¦  «        “Œ%S r   )Úboolr   rt   )rã   ru   s     r
   r÷   z_run_op.<locals>.<dictcomp><  s-   € Ð_Ð_Ð_À4�d�D¥Ô!7¸Ñ!=Ô!=Ñ>Ô>Ð_Ð_Ð_r	   Úconds)rø   rû   ÚscreenÚbuiltinÚcmdÚwaitFrk   Úmsiô  rv   r©   rs   ru   rª   Tra   r~   Úrequestiè  r|   Ú
elapsed_msÚmarku   [MilionÃ¡Å™ Harness] MARK {}Útokenr   ÚreloadzReloadSkin()r„   i N  r…   )Úhomerz   Ú	stddialogÚaddon_settingr:   r;   )r:   r;   Úcallr   ÚmoduleÚfuncr   rð   Ú
close_keptrá   r_   r¢   zunknown op: {})*r3   r[   r   rX   rˆ   rh   rú   rk   r-   ri   rt   Úperf_counterr‰   rŠ   r‹   rŒ   Úroundr   r   ÚLOGINFOr�   rw   r¯   rå   ræ   rç   Ú
setSettingr+   Ú
getSettingrè   rê   rë   Ú
isinstanceÚfloatÚlistÚdictÚtyperÌ   rq   rŸ   rñ   r0   )	r�   r¡   rõ   rn   Ústartedrð   rª   rè   r  s	            r
   Ú_run_opr  2  sÇ  € Ø�6Š6�$‰<Œ<€DØˆv‚~€~Ý‰~Œ~ˆÝÔ(Ð)>Ñ?Ô?ˆˆV‰Ý”Ñ(Ô(ˆˆV‰ØˆØˆv‚~€~àYÐYÀBÇFÂFÈ8ÐUWÑDXÔDXÐYÑYÔYØ_Ð_È2Ï6Ê6ÐRYÐ[]ÑK^ÔK^Ð_Ñ_Ô_Ý"‘n”nð
ð 
ð 	
ð
 ˆyÒÐÝÔ˜B˜uœI¥t¨B¯FªF°6¸5Ñ,AÔ,AÑ'BÔ'BÑCÔCÐCØ�r˜%”yÐ!Ð!Øˆw‚€ÝŒ
•3�r—v’v˜d CÑ(Ô(Ñ)Ô)Ñ*Ô*Ð*Øˆ	Øˆv‚~€~Ý”9‘;”;¥ R§V¢V¨L¸$Ñ%?Ô%?Ñ!@Ô!@À6Ñ!IÑIˆÝŒi‰kŒk˜HÒ$Ð$ÝÔ% b¨¤jÑ1Ô1ð %Ø˜t�}Ð$ÝŒJ�s‰OŒOˆOõ Œi‰kŒk˜HÒ$Ð$ð �uˆ~ÐØˆyÒÐÝÔ#Ñ%Ô%ˆÝ”�DÔ/µ´
¸2¸i¼=Ñ0IÔ0IÑJÔJÑKÔKˆÝ$¥dÔ&7Ñ&9Ô&9¸GÑ&CÀtÑ%KÈQÑOÔOˆˆ|ÑØˆØˆv‚~€~ÝŒÐ/×6Ò6°r¸'´{ÑCÔCÍ4Ì<ÐXÑXÔXÐXØ˜˜GœÐ%Ð%Øˆv‚~€~Ý˜‰|Œ|ÐØˆxÒÐÝÔ˜N¨DÑ1Ô1Ð1ÝŒ
�3‰ŒˆÝÐ0µ#°b·f²f¸\È5Ñ6QÔ6QÑ2RÔ2RÑSÔSˆÝŒ
•3�r—v’v˜k¨4Ñ0Ô0Ñ1Ô1Ñ2Ô2Ð2Ø¥T¤_Ñ%6Ô%6Ð7Ð7Ð7Øˆ{ÒÐÝ˜RÑ Ô Ð ØˆÒÐÝŒ�Ñ!Ô!×,Ò,¨R°¬Y½¸B¸w¼KÑ8HÔ8HÑIÔIÐIØ˜%”y­9¬?½8Ñ+DÔ+D×+OÒ+OÐPRÐSXÔPYÑ+ZÔ+ZÐ[Ð[Ð[Øˆv‚~€~ØÐÐÐÝ�y×.Ò.¨r°(¬|Ñ<Ô<¸bÀ¼jÑIÔIˆØ��r—v’v˜f bÑ)Ô)Ð*ˆØ¥J¨v½½UÅCÍÍtÕUYÕ[_Ð`dÑ[eÔ[eÐ7fÑ$gÔ$gÐx˜&˜&ÕmpÐqwÑmxÔmxÐyÐyØˆ|ÒÐÝ‰ŒˆØˆ	Øˆ|ÒÐÝ! " V¤*Ñ-Ô-ˆØ�Š•l‘n”nÑ%Ô%Ð%ØˆØˆxÒÐÝ˜B‘”ˆØ�Š•l‘n”nÑ%Ô%Ð%ØˆÝ
Ð%×,Ò,¨TÑ2Ô2Ñ
3Ô
3Ð3r	   c           	      ó@  — | dz   }t          j        | |¦  «         	 t          |dd¬¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   n`# t
          t          f$ rL}t          d                     |¦  «        t          j
        ¦  «         t          j        |¦  «         Y d }~d S d }~ww xY wt          |                     dd¦  «        ¦  «        }g d }}|                     dg ¦  «        D ]û}		 |                     |	                     d	¦  «        d
t          |	¦  «        dœ¦  «         Œ=# t           $ r²}d                     t#          |¦  «        j        |¦  «        }|                     |	                     d	¦  «        d|t'          j        ¦   «         dœ¦  «         t          d                     |	                     d	¦  «        |¦  «        t          j
        ¦  «         Y d }~ nd }~ww xY wt           j                             |d                     |¦  «        ¦  «        }
|
dz   }t          |dd¬¦  «        5 }t          j        ||d u ||dœ|dd¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ||
¦  «         t          j        |¦  «         d S )Nz.processingÚrzutf-8)Úencodingzinvalid request: {}r   ÚnoidÚopsr�   T)r�   r”   rð   z{}: {}F)r�   r”   r‚   r×   zop {} failed: {}zresponse-{}.jsonz.tmpr¿   )r   r”   r‚   Úresultsé   )Úensure_asciiÚindent)rb   ÚreplaceÚopenr‰   ÚloadÚOSErrorr0   r   r   r   Ú
LOGWARNINGrg   r+   r3   r5   r  rÓ   r  rJ   rÔ   rÕ   r_   ÚjoinÚdump)Úrequest_pathÚbaseÚ
processingÚhandler  rÈ   Ú
request_idr  r‚   r�   Úresponse_pathÚtmp_paths               r
   Ú_processr0  t  s  € Ø Ñ-€JÝ„Jˆ|˜ZÑ(Ô(Ð(ðÝ�*˜c¨GÐ4Ñ4Ô4ð 	(¸Ý”i Ñ'Ô'ˆGð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(øøå•ZÐ ð ð ð ÝÐ"×)Ò)¨#Ñ.Ô.µ´Ñ@Ô@Ð@Ý
Œ	�*ÑÔÐØˆˆˆˆˆøøøøðøøøõ �W—[’[  vÑ.Ô.Ñ/Ô/€JØ˜ˆU€GØ�kŠk˜% Ñ$Ô$ð ð ˆð	Ø�NŠN "§&¢&¨¡,¤,°dÅgÈbÁkÄkÐRÐRÑSÔSÐSÐSøÝð 	ð 	ð 	Ø—O’O¥D¨¡I¤IÔ$6¸Ñ<Ô<ˆEØ�NŠN "§&¢&¨¡,¤,°eÀeÝ%.Ô%9Ñ%;Ô%;ð=ð =ñ >ô >ð >åÐ#×*Ò*¨2¯6ª6°$©<¬<¸Ñ?Ô?ÅÄÑQÔQÐQØˆEˆEˆEˆEˆEøøøøð	øøøõ ”G—L’L Ð'9×'@Ò'@ÀÑ'LÔ'LÑMÔM€MØ˜vÑ%€HÝ	ˆh˜ gÐ	.Ñ	.Ô	.ð 8°&ÝŒ	˜¨5°D¨=À5ÐU\Ð]Ð]Ø u°Qð	8ñ 	8ô 	8ð 	8ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8õ „Jˆx˜Ñ'Ô'Ð'Ý„IˆjÑÔÐÐÐsf   œA ®AÁA ÁAÁA ÁAÁA ÁB8Á,AB3Â3B8Ã;9D5Ä5
G1Ä?B'G,Ç,G1È> I*É*I.É1I.c                  óô  — t          j        ¦   «         } t          ¦   «         }t          j                             |d¦  «        }t          j                             |d¦  «        }t          j                             |d¦  «        }t          d                     |¦  «        ¦  «         |                      ¦   «         �s?t          j         	                    |¦  «        s|  
                    t          ¦  «        rdS ŒQ	 t          |d¦  «        5 }|                     t          t          j        ¦   «         ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          j         	                    |¦  «        rt!          ||¦  «         nD# t"          $ r7}t          d                     |¦  «        t           j        ¦  «         Y d}~nd}~ww xY w|  
                    t&          ¦  «        rdS |                      ¦   «         �¯=dS dS )zDBlock until Kodi exits; serve harness requests while ENABLED exists.zrequest.jsonÚENABLEDÚ	heartbeatzlistener ready ({})r¿   Nzlistener error: {})r   ÚMonitorr   rb   r_   r'  r   r   ÚabortRequestedrf   ÚwaitForAbortÚIDLE_POLL_Sr#  Úwriter+   ri   r0  rÓ   ÚLOGERRORÚACTIVE_POLL_S)Úmonitorr*  r)  Úenabled_pathÚheartbeat_pathr,  rÈ   s          r
   Úrun_listenerr>  ’  s  € åŒl‰nŒn€GÝ‰6Œ6€DÝ”7—<’<  nÑ5Ô5€LÝ”7—<’<  iÑ0Ô0€LÝ”W—\’\ $¨Ñ4Ô4€NÝÐ	×	%Ò	% dÑ	+Ô	+Ñ,Ô,Ð,Ø×$Ò$Ñ&Ô&ñ ÝŒw�~Š~˜lÑ+Ô+ð 	Ø×#Ò#¥KÑ0Ô0ð Ø�Øð	BÝ�n cÑ*Ô*ð /¨fØ—’�S¥¤¡¤Ñ-Ô-Ñ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /åŒw�~Š~˜lÑ+Ô+ð -Ý˜ tÑ,Ô,Ð,øøÝð 	Bð 	Bð 	BÝÐ%×,Ò,¨SÑ1Ô1µ4´=ÑAÔAÐAÐAÐAÐAÐAÐAøøøøð	Bøøøà×Ò¥Ñ.Ô.ð 	ØˆEð ×$Ò$Ñ&Ô&ñ ð ð ð ð s<   Ã6F Ä4EÄ:F ÅE
Å
F ÅE
Å2F Æ
GÆ-F=Æ=G)r\   )"rM   r‰   rb   ri   rÔ   r   rå   r1   r   rç   r   r   r7  rË   r:  r   r  r   ÚWindowXMLDialogr   r[   rq   rw   r�   r    r¤   r¯   r»   rÉ   rÌ   rñ   r  r0  r>  r   r	   r
   ú<module>r@     sÈ  ðð!ð !ðF €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð à €€€Ø Ð Ð Ð Ø €€€Ø €€€à"€Ø8×?Ò?ÀÑIÔI€Ø€Ø
€Ø€ð.ð .ð .ð ”Lð Að Að Að Að+ð +ð +ð +ð +�WÔ,ñ +ô +ð +ð\ð ð ðBð Bð Bð Bð&ð ð ðgð gð gð2 €	ðAð Að Að2&ð &ð &ð$ð ð ð
ð 
ð 
ðð ð ð4ð 4ð 4ðn?4ð ?4ð ?4ðDð ð ð<ð ð ð ð r	   