§
   „_“ø8�Çã                   óÂ   — d 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ej	        fd„Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zd„ Zd d„Zd„ Zd„ Zd„ Zd„ ZdS )!a¾  Start a MyTV / MyCinema channel without its dialog (docs/plan/milionar-library/150-widget-clicks.md).

`action=channel_play&kind=tv|cinema&channel_id=<id>&mode=live|live_shuffle|first|random`, started by a click on a channel
of the Home widgets. It does what the buttons of the dialogs do, with the same data:

* MyTV `live`: the channel's program queue (the cache `program_list_<id>` the dialog shows, without the episodes the
  channel already watched, in the user's saved order, filled up to `mytv_upcoming_count` with the next episodes of the
  channel's series) as one playlist, with the countdown monitor of the dialog; `live_shuffle`: a new shuffled queue;
  `first`: the first episode of the queue; `random`: the next episode of a random series.
* MyCinema `live`: up to 20 shuffled films of the cinema as a playlist; `random`: a random unwatched film.

The queue is stored back in the same cache format, so the dialog shows exactly what was played.
é    Nzplugin.video.milionari�~  i€:	 i€Q c                 óV   — t          j        d                     | ¦  «        |¦  «         d S )Nu   [MilionÃ¡Å™ ChannelPlay] {})ÚxbmcÚlogÚformat)ÚmessageÚlevels     úa/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/channel_play.pyÚ_logr
      s)   € Ý„HÐ*×1Ò1°'Ñ:Ô:¸EÑBÔBÐBÐBÐBó    c                 ól   — t          j        ¦   «                              d|t           j        d¦  «         d S )Nu
   MilionÃ¡Å™i   )ÚxbmcguiÚDialogÚnotificationÚNOTIFICATION_INFO)ÚaddonÚtexts     r	   Ú_notifyr      s.   € Ý„NÑÔ×!Ò! ,°µgÔ6OÐQUÑVÔVÐVÐVÐVr   c                 ó~   — 	 t          |                      |¦  «        p|¦  «        S # t          t          f$ r |cY S w xY w)N)ÚintÚ
getSettingÚ	TypeErrorÚ
ValueError)r   ÚkeyÚdefaults      r	   Ú_int_settingr   #   sQ   € ðÝ�5×#Ò# CÑ(Ô(Ð3¨GÑ4Ô4Ð4øÝ•zÐ"ð ð ð Øˆˆˆðøøøs   ‚#& ¦<»<c                 ó  — |                       d¦  «        pd}	 d|v r7|                     dd¦  «        \  }}t          |¦  «        t          |¦  «        fS t          |¦  «        t          |¦  «        fS # t          t          f$ r Y dS w xY w)zR(min, max) episodes in a row of one series, from `mytv_block_size` ("2" or "1-3").Úmytv_block_sizeÚ2ú-é   )r    r    )r   Úsplitr   r   r   )r   ÚvalueÚlowÚhighs       r	   Úblock_ranger%   *   s•   € à×ÒÐ.Ñ/Ô/Ð6°3€EðØ�%ˆ<ˆ<ØŸš C¨Ñ+Ô+‰IˆC�Ý�s‘8”8�S ™YœYÐ&Ð&Ý�5‰zŒz�3˜u™:œ:Ð%Ð%øÝ•zÐ"ð ð ð Øˆtˆtðøøøs   ™:A2 ÁA2 Á2BÂBc           
      ó  — |                       dd¦  «        }i dt          |¦  «        “d|“dt          | d         ¦  «        “dt          | d         ¦  «        “dd                     | d         | d         ¦  «        “d	|                       d	d¦  «        “d|“d
t          |¦  «        dk    r|dd…         dz   n|“dt          |                       dd¦  «        ¦  «        “dt          |                       dd¦  «        ¦  «        “d|                       dd¦  «        “d|                       dd¦  «        “d|                       dd¦  «        “dt          |                       dd¦  «        ¦  «        “d|                       dd¦  «        “dd“}|                       d¦  «        p|                       d¦  «        pd}|t          |                       dd¦  «        ¦  «        |||                       dd¦  «        d|                       dd¦  «        dœdœS )zmQueue entry in the cache format of the MyTV dialog (`_add_single_program_item` + `_save_program_list_cache`).ÚplotÚ Útmdb_idÚseries_nameÚseasonÚepisodeÚep_codezS{:02d}E{:02d}Úepisode_titleÚ
plot_shortéP   NéM   z...ÚruntimeÚratingÚseries_logoÚposterÚfanartÚyearÚgenreÚair_dateÚepisode_thumb)Úthumbr6   Ú	clearlogor5   )ÚlabelÚlabel2Ú
propertiesÚart)ÚgetÚstrr   Úlen)Úmetar*   Ú	series_idr'   Úpropsr;   s         r	   Úprogram_itemrG   8   sQ  € à�8Š8�F˜BÑÔ€Dð8Ø•3�y‘>”>ð8Ø#0°+ð8Ø?GÍÈTÐRZÌ^ÑI\ÔI\ð8à•3�t˜I”Ñ'Ô'ð8à)2Ð4D×4KÒ4KÈDÐQYÌNÐ\`ÐajÔ\kÑ4lÔ4lð8ð 	˜Ÿš /°2Ñ6Ô6ð8ð 9?Àð8ð 	­3¨t©9¬9°rª>¨>�d˜3˜B˜3”i %Ñ'Ð'¸tð	8ð FOÕPSÐTX×T\ÒT\Ð]fÐhjÑTkÔTkÑPlÔPlð	8ð
 	•#�d—h’h˜x¨Ñ,Ô,Ñ-Ô-ð8ð
 0=¸d¿hºhÀ}ÐVXÑ>YÔ>Yð8ð 	�$—(’(˜8 RÑ(Ô(ð8ð +3°D·H²H¸XÀrÑ4JÔ4Jð8ð MSÕTWÐX\×X`ÒX`ÐagÐikÑXlÔXlÑTmÔTmð8ð 	�—’˜' 2Ñ&Ô&ð8ð )3°Bð8€Eð �HŠH�_Ñ%Ô%ÐA¨¯ª°(Ñ);Ô);ÐA¸r€EØ ­C°·²¸ÀBÑ0GÔ0GÑ,HÔ,HÐX]Ø"¨d¯hªh°xÀÑ.DÔ.DÐSUÐae×aiÒaiÐjrÐtvÑawÔawÐxÐxðzð zð zr   c                 óâ   — d                      |||dz   ¦  «        }|                     |¦  «        }|s=ddlm} |                     |||| ¦  «        }|r|                     ||t          ¬¦  «         |S )z^Next episode of a series after (season, episode): the dialog's episode cache first, then TMDb.zepisode_{}_{}_{}r    r   )Ú
TMDbClient©Úttl_seconds)r   rA   Úwcs.metadatarI   Úget_next_episode_from_tmdbÚsetÚEPISODE_TTL)r   ÚcacherE   r+   r,   r   rD   rI   s           r	   Ú
_next_metarQ   H   s…   € à
×
#Ò
# I¨v°wÀ±{Ñ
CÔ
C€CØ�9Š9�S‰>Œ>€DØð :Ø+Ð+Ð+Ð+Ð+Ð+Ø×4Ò4°YÀÈÐQVÑWÔWˆØð 	:Ø�IŠI�c˜4­[ˆIÑ9Ô9Ð9Ø€Kr   c                 ó–  — ddl m} g }|D ]½}|                     di ¦  «        }|                     dd¦  «        t          |                     dd¦  «        pd¦  «        }}t          |                     dd¦  «        pd¦  «        }|r.|r,|                     | |¦  «        \  }	}
|	|k    s|	|k    r|
|k    rŒ¨|                     |¦  «         Œ¾|S )zkThe queue without the episodes the channel's progress is already past (what the dialog does when it opens).r   ©ÚProgressManagerr?   r)   r(   r+   r,   )Úwcs.airT   rA   r   Úget_progressÚappend)Ú
channel_idÚitemsrT   Ú	remainingÚitemrF   r)   r+   r,   Údone_seasonÚdone_episodes              r	   Údrop_watchedr^   T   sø   € à&Ð&Ð&Ð&Ð&Ð&Ø€IØð ð ˆØ—’˜ rÑ*Ô*ˆØŸ)š) I¨rÑ2Ô2µC¸¿	º	À(ÈAÑ8NÔ8NÐ8SÐRSÑ4TÔ4T�ˆÝ�e—i’i 	¨1Ñ-Ô-Ð2°Ñ3Ô3ˆØð 	�vð 	Ø(7×(DÒ(DÀZÐQXÑ(YÔ(YÑ%ˆK˜Ø˜VÒ#Ð#¨°vÒ(=Ð(=À,ÐRYÒBYÐBYØØ×Ò˜ÑÔÐÐØÐr   c                 óÔ  ‡	— |                       d                     |¦  «        ¦  «        }|s|S i g cŠ	}|D ]Ÿ}|                      di ¦  «        }d                     |                      dd¦  «        |                      dd¦  «        ¦  «        }|                      d¦  «        r|                      d¦  «        r
||v r|‰	|<   ŒŠ|                     |¦  «         Œ ˆ	fd„|D ¦   «         |z   }|p|S )znThe user's saved order (`program_reorder_<id>`): the listed episodes first in that order, new ones after them.úprogram_reorder_{}r?   ú{}_{}r)   r(   r-   c                 ó(   •— g | ]}|‰v ¯‰|         ‘ŒS © rc   )Ú.0r   Úknowns     €r	   ú
<listcomp>z!apply_reorder.<locals>.<listcomp>q   s"   ø€ Ð;Ð;Ð;˜c¨c°U¨l¨lˆu�SŒz¨l¨l¨lr   )rA   r   rW   )
rP   rX   rY   ÚsavedÚrestr[   rF   r   Úorderedre   s
            @r	   Úapply_reorderrj   d   s  ø€ à�IŠIÐ*×1Ò1°*Ñ=Ô=Ñ>Ô>€EØð ØˆØ�b€K€Eˆ4Øð ð ˆØ—’˜ rÑ*Ô*ˆØ�nŠn˜UŸYšY y°"Ñ5Ô5°u·y²yÀÈBÑ7OÔ7OÑPÔPˆØ�9Š9�YÑÔð 	 E§I¢I¨iÑ$8Ô$8ð 	¸SÀE¸\¸\ØˆE�#‰JˆJà�KŠK˜ÑÔÐÐØ;Ð;Ð;Ð; UÐ;Ñ;Ô;¸dÑB€GØÐ�eÐr   Tc           
      óê  ‡‡‡— ddl mŠ t          |¦  «        }t          ‰j        pg ¦  «        }|rt	          |¦  «        |k    r|S |rt          j        |¦  «         t          ¦   «         i c}Š|D ]ù}|                     di ¦  «        }	| 	                    d 
                    |	                     dd¦  «        |	                     dd¦  «        ¦  «        ¦  «         t          |	                     dd¦  «        pd¦  «        t          |	                     d	d¦  «        pd¦  «        }}
|	                     d¦  «        r1|
r/|
|f‰                     |	d         d
¦  «        k    r|
|f‰|	d         <   Œúˆˆˆfd„|D ¦   «         }t          | ¦  «        \  }}|t	          |¦  «        z
  dd}}}d}||k     �rI||dz  k     �r?|dz  }||t	          |¦  «        z           }|dz  }t          |                     d¦  «        ¦  «        |                     d¦  «        }}t          t          j        |t!          ||¦  «        ¦  «        ¦  «        D ]¥}||k    r nœ||         \  }
}t#          | |||
|¦  «        }|s nz|d         |d	         f||<   d 
                    ||d         |d	         ¦  «        }||v rŒg|                     t'          |||¦  «        ¦  «         | 	                    |¦  «         |dz  }Œ¦||k     r
||dz  k     �°?|S )zgAdd next episodes to `items` until it holds `count` (the series take turns in blocks, like the dialog).r   rS   r?   ra   r)   r(   r-   r+   r,   ©r   r   c                 ó2  •— i | ]“}t          |                     d ¦  «        ¦  «        ‰                     t          |                     d ¦  «        ¦  «        ¦  «        p:‰                     ‰j        t          |                     d ¦  «        ¦  «        ¦  «        “Œ”S )Úid)rB   rA   rV   rn   )rd   ÚsrT   ÚchannelÚlasts     €€€r	   ú
<dictcomp>zfill.<locals>.<dictcomp>…   s�   ø€ ð &ð &ð &Øõ �A—E’E˜$‘K”KÑ Ô  $§(¢(­3¨q¯uªu°T©{¬{Ñ+;Ô+;Ñ"<Ô"<Ð"zÀ×@\Ò@\Ð]dÔ]gÕilÐmn×mrÒmrÐswÑmxÔmxÑiyÔiyÑ@zÔ@zð &ð &ð &r   é   r    rn   Únamez{}_S{:02d}E{:02d})rU   rT   ÚlistÚseries_listrC   ÚrandomÚshufflerN   rA   Úaddr   r   r%   rB   ÚrangeÚrandintÚmaxrQ   rW   rG   )r   rP   rp   rY   ÚcountÚshuffle_seriesrv   Úexistingr[   rF   r+   r,   Úprogressr#   r$   ÚwantedÚloopsÚindexÚaddedÚseriesrE   rt   Ú_rD   r   rT   rq   s     `                      @@r	   Úfillr‡   u   s>  øøø€ à&Ð&Ð&Ð&Ð&Ð&Ý�‰KŒK€EÝ�wÔ*Ð0¨bÑ1Ô1€KØð �#˜e™*œ*¨Ò-Ð-ØˆØð $ÝŒ�{Ñ#Ô#Ð#Ý‘U”U˜B€N€HˆdØð 7ð 7ˆØ—’˜ rÑ*Ô*ˆØ�Š�W—^’^ E§I¢I¨i¸Ñ$<Ô$<¸e¿iºiÈ	ÐSUÑ>VÔ>VÑWÔWÑXÔXÐXÝ˜eŸiši¨°!Ñ4Ô4Ð9¸Ñ:Ô:½CÀÇ	Â	È)ÐUVÑ@WÔ@WÐ@\Ð[\Ñ<]Ô<]�ˆØ�9Š9�YÑÔð 	7 Fð 	7°¸Ð/@À4Ç8Â8ÈEÐR[ÔL\Ð^dÑCeÔCeÒ/eÐ/eØ&,¨gÐ%6ˆD��yÔ!Ñ"øð&ð &ð &ð &ð &ð &Ø$ð&ñ &ô &€Hå˜EÑ"Ô"�I€CˆØ ¥3 u¡:¤:Ñ-¨q°!�5ˆE€FØ€EØ
�&Š.‰.˜U V¨a¡ZÒ/Ñ/Ø�‰
ˆØ˜U¥S¨Ñ%5Ô%5Ñ5Ô6ˆØ�‰
ˆÝ˜fŸjšj¨Ñ.Ô.Ñ/Ô/°·²¸FÑ1CÔ1C�4ˆ	Ý•v”~ c­3¨s°D©>¬>Ñ:Ô:Ñ;Ô;ð 	ð 	ˆAØ˜ŠˆØ�Ø& yÔ1‰OˆF�GÝ˜e U¨I°v¸wÑGÔGˆDØð Ø�Ø#'¨¤>°4¸	´?Ð"CˆH�YÑØ%×,Ò,¨Y¸¸X¼ÈÈYÌÑXÔXˆCØ�hˆˆØØ�LŠL� d¨D°)Ñ<Ô<Ñ=Ô=Ð=Ø�LŠL˜ÑÔÐØ�Q‰JˆEˆEð% �&Š.ˆ.˜U V¨a¡ZÒ/Ñ/ð& €Lr   Fc           
      óR  — d                      |j        ¦  «        }t          | dd¦  «        }|rX|                     |¦  «         |                     d                      |j        ¦  «        ¦  «         t	          | ||g |d¬¦  «        }n`t          ||j        t          |j        |                     |¦  «        pg ¦  «        ¦  «        }t	          | ||||t          |¦  «        ¬¦  «        }|r?| 	                    ||t          ¬¦  «         |                     ¦   «          t          ¦   «          |S )zPThe playable queue of a MyTV channel; stored back in the cache the dialog reads.zprogram_list_{}Úmytv_upcoming_counté   r`   T©r~   rJ   )r   rn   r   Údeleter‡   rj   r^   rA   ÚboolrN   Ú	QUEUE_TTLÚflushÚ_program_changed)r   rP   rp   Úfreshr   r}   rY   s          r	   Útv_queuer’       s  € à
×
"Ò
" 7¤:Ñ
.Ô
.€CÝ˜Ð 5°rÑ:Ô:€EØð VØ�Š�SÑÔÐØ�ŠÐ)×0Ò0°´Ñ<Ô<Ñ=Ô=Ð=Ý�U˜E 7¨B°ÀdÐKÑKÔKˆˆå˜e W¤Zµ¸g¼jÈ%Ï)Ê)ÐTWÉ.Ì.ÐJ^Ð\^Ñ1_Ô1_Ñ`Ô`ˆÝ�U˜E 7¨E°5ÍÈeÉÌÐUÑUÔUˆØð Ø�	Š	�#�u­)ˆ	Ñ4Ô4Ð4Ø�Š‰ŒˆÝÑÔÐØ€Lr   c                  ó¶   — 	 ddl m}   | dh¦  «         dS # t          $ r8}t          d                     |¦  «        t
          j        ¦  «         Y d}~dS d}~ww xY w)zCHome shows what is on a channel now (the first entry of its queue).r   )ÚchangedÚwidget_mytv_channelszchannel row refresh failed: {}N)Úwcs.skin.refreshr”   Ú	Exceptionr
   r   r   Ú
LOGWARNING)r”   Úexcs     r	   r�   r�   ²   sŠ   € ðLØ,Ð,Ð,Ð,Ð,Ð,ØˆÐ'Ð(Ñ)Ô)Ð)Ð)Ð)øÝð Lð Lð LÝÐ-×4Ò4°SÑ9Ô9½4¼?ÑKÔKÐKÐKÐKÐKÐKÐKÐKøøøøðLøøøs   ‚ –
A -AÁAc                 óX  — |                       di ¦  «        |                       di ¦  «        }}|                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      d	d¦  «        |                      d
d¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        dœS )Nr?   r@   r*   r(   r+   r,   r)   r.   r'   r3   r5   r6   r8   r7   r;   )r*   r+   r,   r)   r.   r'   r3   r5   r6   r8   r7   r:   )rA   )r[   rF   r@   s      r	   Ú
_item_datar›   »   s  € Ø—’˜,¨Ñ+Ô+¨T¯XªX°e¸RÑ-@Ô-@ˆ3€EØ Ÿ9š9 ]°BÑ7Ô7À5Ç9Â9ÈXÐWYÑCZÔCZÐgl×gpÒgpÐqzÐ|~ÑgÔgØ—y’y ¨BÑ/Ô/À%Ç)Â)ÈOÐ]_ÑB`ÔB`Ðjo×jsÒjsÐtzÐ|~ÑjÔjØ—i’i ¨"Ñ-Ô-¸¿ºÀ8ÈRÑ9PÔ9PÐ\a×\eÒ\eÐfnÐprÑ\sÔ\sØ—Y’Y˜w¨Ñ+Ô+°U·Y²Y¸vÀrÑ5JÔ5JÐ]`×]dÒ]dÐelÐnpÑ]qÔ]qðsð sð sr   c                 óH  — | r|sdS 	 ddl m} ddlm} |                     | |¦  «        }|r|d         dk    rdS |                     d¦  «        rPt          |d         ¦  «        t          |d	         ¦  «        ft          |pd¦  «        t          |pd¦  «        fk    rdS |d         }t          j        ¦   «         t          j	        ¦   «         }	}t          d
¦  «        D ]€}
|                     d¦  «        r dS |	                     ¦   «         rR|	                     ¦   «         dk    r:|	                     |¦  «         t          d                     |¦  «        ¦  «          dS Œ�dS # t"          $ r8}t          d                     |¦  «        t          j        ¦  «         Y d}~dS d}~ww xY w)zâPlayback of a playlist item starts at 0: jump to the position the channel saved for the series (as the dialog does).
    With the progress shared with the library the position belongs to one episode: only that episode resumes.Nr   ©ÚChannelHistory)ÚsharedÚpositioné
   Útvr+   r,   é2   gš™™™™™É?zresumed at {:.0f}szresume seek failed: {})rU   rž   Úwcs.library2rŸ   Úget_resume_pointÚactiver   r   ÚMonitorÚPlayerrz   ÚwaitForAbortÚ	isPlayingÚgetTimeÚseekTimer
   r   r—   r˜   )rX   r)   r+   r,   rž   rŸ   Úresumer    ÚmonitorÚplayerr†   r™   s               r	   Ú_seek_to_resumer°   Ã   sì  € ð ð ˜Wð ØˆðDØ)Ð)Ð)Ð)Ð)Ð)Ø'Ð'Ð'Ð'Ð'Ð'Ø×0Ò0°¸WÑEÔEˆØð 	˜ 
Ô+¨rÒ1Ð1ØˆFØ�=Š=˜ÑÔð 	¥C¨¨xÔ(8Ñ$9Ô$9½3¸vÀiÔ?PÑ;QÔ;QÐ#RÕWZÐ[aÐ[fÐefÑWgÔWgÕilÐmtÐmyÐxyÑizÔizÐV{Ò#{Ð#{ØˆFØ˜*Ô%ˆÝœ,™.œ.­$¬+©-¬-�ˆÝ�r‘”ð 	ð 	ˆAØ×#Ò# CÑ(Ô(ð Ø��Ø×ÒÑ!Ô!ð  f§n¢nÑ&6Ô&6¸Ò&:Ð&:Ø—’ Ñ)Ô)Ð)ÝÐ)×0Ò0°Ñ:Ô:Ñ;Ô;Ð;Ø��øð	ð 	øõ ð Dð Dð DÝÐ%×,Ò,¨SÑ1Ô1µ4´?ÑCÔCÐCÐCÐCÐCÐCÐCÐCøøøøðDøøøs1   ˆ0E ºA#E ÂAE Ã6A$E ÅE Å
F!Å)-FÆF!c           
      ó¾  — ddl m} t          j        t          j        ¦  «        }|                     ¦   «          |D ]T}t          |¦  «        }|                     |                     t          ||¦  «        | 
                    |¦  «        ¦  «         ŒUt          j        ¦   «                              |¦  «         ddlm} |d                              di ¦  «        }t!          |¦  «        dk    r |¦   «                              ¦   «          n{ |¦   «                              ||                     dd¦  «        t%          |                     d¦  «        pd¦  «        t%          |                     d	¦  «        pd¦  «        d
œ¬¦  «         t'          ||                     dd¦  «        |                     d¦  «        |                     d	¦  «        ¦  «         t)          ¦   «          dS )z[Play the queue entries as one playlist and keep the countdown monitor alive while it plays.r   )ÚPlaylistBuilder)Úget_playlist_monitorr?   r    r)   r(   r+   r,   )rX   r)   r+   r,   )rD   N)rU   r²   r   ÚPlayListÚPLAYLIST_VIDEOÚclearr›   ry   Úbuild_playlist_urlÚADDON_IDÚbuild_playlist_listitemr¨   ÚplayÚ%wcs.playback.PlaylistCountdownMonitorr³   rA   rC   Úactivater   r°   Ú_keep_alive)	r   rX   rY   r²   Úplaylistr[   Údatar³   Úfirsts	            r	   Úplay_episodesrÁ   Ý   sí  € à&Ð&Ð&Ð&Ð&Ð&ÝŒ}�TÔ0Ñ1Ô1€HØ‡N‚NÑÔÐØð Dð DˆÝ˜$ÑÔˆØ�Š�_×7Ò7½À$È
ÑSÔSÐUd×U|ÒU|ð  ~Bñ  VCô  VCñ  	Dô  	Dð  	Dð  	DÝ„K�M„M×Ò�xÑ Ô Ð ØJÐJÐJÐJÐJÐJØ�!ŒH�LŠL˜ rÑ*Ô*€EÝ
ˆ5�z„z�A‚~€~ØÐÑÔ×'Ò'Ñ)Ô)Ð)Ð)àÐÑÔ×'Ò'¸JÐSX×S\ÒS\Ð]fÐhjÑSkÔSkÝ8;¸E¿IºIÀhÑ<OÔ<OÐ<TÐSTÑ8UÔ8UÕbeÐfk×foÒfoÐpyÑfzÔfzÐfÐ~ñ  cAô  cAð.Bð .BÐ'ñ 	Cô 	Cð 	Cå�J §	¢	¨)°RÑ 8Ô 8¸%¿)º)ÀHÑ:MÔ:MÈuÏyÊyÐYbÑOcÔOcÑdÔdÐdÝ�M„M€M€M€Mr   é`T  c                 ó  — t          j        ¦   «         t          j        ¦   «         }}d\  }}}|| k     rO|                     d¦  «        rdS |dz  }|                     ¦   «         rd\  }}n|dz  }||rdndk    rdS || k     °MdS dS )zËThe monitor thread of the countdown lives in this script: stay while something plays (a gap between two playlist
    items is up to ~30 s), at most 90 s before the first start, and leave when Kodi quits.)Fr   r   é   N)Tr   é   éZ   )r   r§   r¨   r©   rª   )Úlimitr®   r¯   ÚstartedÚidleÚwaiteds         r	   r½   r½   ñ   s¦   € õ ”l‘n”n¥d¤k¡m¤mˆV€GØ'Ñ€GˆT�6Ø
�5Š.ˆ.Ø×Ò Ñ"Ô"ð 	ØˆFØ�!‰ˆØ×ÒÑÔð 	Ø#‰MˆG�T�Tà�A‰IˆDØ˜gÐ-˜˜¨2Ò.Ð.Ø�ð �5Š.ˆ.ˆ.ˆ.ˆ.ˆ.r   c           	      ó0  — ddl m} ddlm}  || d¦  «                             |¦  «        }|r|j        s(t          | |                      t          ¦  «        ¦  «        S  |¦   «         }|dk    rt          | ||g dd¬¦  «        }n't          | |||d	k    ¬
¦  «        }|dk    r
|d d…         }|s(t          | |                      t          ¦  «        ¦  «        S t          d                     ||t          |¦  «        ¦  «        ¦  «         t          | ||¦  «         d S )Nr   ©ÚMediaChannelManager)Úget_cache_managerr¢   rw   r    Tr‹   Úlive_shuffle)r‘   rÀ   ztv {} {}: {} item(s))Úwcs.ai.MediaChannelManagerrÍ   Úwcs.cachingrÎ   Úget_channel_by_idrv   r   ÚgetLocalizedStringÚS_EMPTYr‡   r’   r
   r   rC   rÁ   )r   rX   ÚmoderÍ   rÎ   rp   rP   rY   s           r	   Úplay_tvrÖ     sD  € Ø>Ð>Ð>Ð>Ð>Ð>Ø-Ð-Ð-Ð-Ð-Ð-Ø!Ð! %¨Ñ.Ô.×@Ò@ÀÑLÔL€GØð A˜'Ô-ð AÝ�u˜e×6Ò6µwÑ?Ô?Ñ@Ô@Ð@ØÐÑÔ€EØˆxÒÐÝ�U˜E 7¨B°À$ÐGÑGÔGˆˆå˜  w°t¸~Ò7MÐOÑOÔOˆØ�7Š?ˆ?Ø˜"˜1˜"”IˆEØð AÝ�u˜e×6Ò6µwÑ?Ô?Ñ@Ô@Ð@ÝÐ	×	&Ò	& z°4½¸U¹¼Ñ	DÔ	DÑEÔEÐEÝ�%˜ UÑ+Ô+Ð+Ð+Ð+r   c                 ób   — | r*|                       d¦  «        sd                     | ¦  «        n| pdS )NÚhttpz!https://image.tmdb.org/t/p/w500{}r(   )Ú
startswithr   )Úpaths    r	   Ú_posterrÛ     s:   € Ø?CÐuÈDÏOÊOÐ\bÑLcÔLcÐuÐ.×5Ò5°dÑ;Ô;Ð;ÐjnÐjtÐrtÐur   c                 ó@	  — ddl m} ddlm} ddlm}  || d¦  «        }|                     |¦  «        }|r|j        s(t          | |  	                    t          ¦  «        ¦  «        S |dk    �r[|                     |¦  «        }|s(t          | |  	                    t          ¦  «        ¦  «        S |                     ||                     d¦  «        ¦  «         ddlm}	  |	|                     d	¦  «        p|                     d
d¦  «        |                     d¦  «        pdd d…         |                     dd¦  «        t!          |                     d¦  «        p|                     d¦  «        ¦  «        t!          |                     d¦  «        p|                     d¦  «        ¦  «        |                     d¦  «        |dœ| ¦  «         d S t#          |j        ¦  «        }
t%          j        |
¦  «         t)          j        t(          j        ¦  «        }|                     ¦   «          |
d d…         D �]Ö}|                     d	¦  «        p|                     d
d¦  «        |                     d¦  «        }}|r|sŒH|                     d¦  «        pdd d…         }t!          |                     d¦  «        p|                     d¦  «        ¦  «        }t!          |                     d¦  «        p|                     d¦  «        ¦  «        }d                     t2           ||¦  «        | ||                     dd¦  «        ¦  «         ||¦  «         ||¦  «         ||¦  «         ||¦  «        ¦  «        }t5          j        |¬¦  «        }|                     d||                     dd¦  «        |                     ¦   «         rt=          |¦  «        ndddœ¦  «         |                     |||dœ¦  «         |                      ||¦  «         �ŒØ| !                    ¦   «         dk    r(t          | |  	                    t          ¦  «        ¦  «        S tE          d                     || !                    ¦   «         ¦  «        ¦  «         t)          j#        ¦   «          $                    |¦  «         d S )Nr   )Ú
quote_plusr�   rÌ   Úcinemarw   rn   )Úplay_movie_from_addonrt   Útitler(   Úrelease_dateé   ÚoverviewÚposter_pathr5   Úbackdrop_pathr6   )rà   r7   r'   r5   r6   r)   Úmycinema_channel_idé   z…plugin://{}?action=play_movie_from_addon_playlist&movie_name={}&tmdb_id={}&plot={}&poster={}&fanart={}&year={}&mycinema_channel_id={})r=   ÚvideoÚmovie)rà   r'   r7   Ú	mediatype)r5   r6   r;   zcinema {}: {} film(s))%Úurllib.parserÝ   rU   rž   rÐ   rÍ   rÒ   Ú
media_listr   rÓ   rÔ   Úget_random_movie_for_channelÚmark_movie_watchedrA   Ú	wcs.utilsrß   rÛ   ru   rw   rx   r   r´   rµ   r¶   r   r¸   r   ÚListItemÚsetInfoÚisdigitr   ÚsetArtry   Úsizer
   r¨   rº   )r   rX   rÕ   rÝ   rž   rÍ   Úmanagerrp   ré   rß   Úmoviesr¾   rt   Úmovie_idr7   r5   r6   Úurlr[   s                      r	   Úplay_cinemarù     sõ  € Ø'Ð'Ð'Ð'Ð'Ð'Ø%Ð%Ð%Ð%Ð%Ð%Ø>Ð>Ð>Ð>Ð>Ð>Ø!Ð! %¨Ñ2Ô2€GØ×'Ò'¨
Ñ3Ô3€GØð A˜'Ô,ð AÝ�u˜e×6Ò6µwÑ?Ô?Ñ@Ô@Ð@ØˆxÒÑØ×4Ò4°ZÑ@Ô@ˆØð 	EÝ˜5 %×":Ò":½7Ñ"CÔ"CÑDÔDÐDØ×)Ò)¨*°e·i²iÀ±o´oÑFÔFÐFØ3Ð3Ð3Ð3Ð3Ð3ØÐ¨¯	ª	°&Ñ(9Ô(9Ð(S¸U¿YºYÀwÐPRÑ=SÔ=SÐ^c×^gÒ^gÐhvÑ^wÔ^wÐ^}Ð{}ð  @Bð  ABð  @Bô  ^CØ',§y¢y°¸RÑ'@Ô'@ÍGÐTY×T]ÒT]Ð^kÑTlÔTlð  UDÐpu×pyÒpyð  {Cñ  qDô  qDñ  MEô  MEÝ)0°·²¸?Ñ1KÔ1KÐ1bÈuÏyÊyÐYaÑObÔObÑ)cÔ)cÐpu×pyÒpyÐz~ÑpÔpØ6@ðBð Bð DIñ	Jô 	Jð 	Jð 	ˆÝ�'Ô$Ñ%Ô%€FÝ
„N�6ÑÔÐÝŒ}�TÔ0Ñ1Ô1€HØ‡N‚NÑÔÐØ˜˜˜”ð  ñ  ˆØŸš 6Ñ*Ô*ÐD¨e¯iªi¸ÀÑ.DÔ.DÀeÇiÂiÐPTÁoÄoˆhˆØð 	˜tð 	ØØ—	’	˜.Ñ)Ô)Ð/¨R°°!°Ô4ˆÝ˜Ÿš =Ñ1Ô1ÐH°U·Y²Y¸xÑ5HÔ5HÑIÔIˆÝ˜Ÿš ?Ñ3Ô3ÐJ°u·y²yÀÑ7JÔ7JÑKÔKˆð1ß28²&½À:À:ÈdÑCSÔCSÐU]Ð_iÐ_iÐjo×jsÒjsÐt~ð  ACñ  kDô  kDñ  `Eô  `EØ:D¸*ÀVÑ:LÔ:LÈjÈjÐY_ÑN`ÔN`ÐblÐblÐmqÑbrÔbrÐt~Ðt~ð  @Jñ  uKô  uKñ3Lô 3Lð 	õ Ô dÐ+Ñ+Ô+ˆØ�Š�W¨°e·i²iÀ
ÈBÑ6OÔ6OÐfj×frÒfrÑftÔftÐY{ÕY\Ð]aÑYbÔYbÐYbÐz{Ø,3ð5ð 5ñ 	6ô 	6ð 	6à�Š˜v°À&ÐIÐIÑJÔJÐJØ�Š�S˜$ÑÔÐÑØ‡}‚}�„˜!ÒÐÝ�u˜e×6Ò6µwÑ?Ô?Ñ@Ô@Ð@ÝÐ	 ×	'Ò	'¨
°H·M²M±O´OÑ	DÔ	DÑEÔEÐEÝ„K�M„M×Ò�xÑ Ô Ð Ð Ð r   c           
      ó  — t          j        t          ¦  «        }|                      dd¦  «        |                      dd¦  «        |                      dd¦  «        }}}	 |dk    rt	          |||¦  «         d S t          |||¦  «         d S # t          $ ru}t          d                     ||t          |¦  «        j
        |¦  «        t          j        ¦  «         t          ||                     t          ¦  «        ¦  «         Y d }~d S d }~ww xY w)	NÚkindr¢   rX   r(   rÕ   ÚliverÞ   z{} {} failed: {}: {})Ú	xbmcaddonÚAddonr¸   rA   rù   rÖ   r—   r
   r   ÚtypeÚ__name__r   ÚLOGERRORr   rÓ   rÔ   )Úparamsr   rû   rX   rÕ   r™   s         r	   Úrunr  G  s  € ÝŒO�HÑ%Ô%€EØ#ŸZšZ¨°Ñ5Ô5°v·z²zÀ,ÐPRÑ7SÔ7SÐU[×U_ÒU_Ð`fÐhnÑUoÔUo�dˆ*€Dð:Ø�8ÒÐÝ˜˜z¨4Ñ0Ô0Ð0Ð0Ð0å�E˜: tÑ,Ô,Ð,Ð,Ð,øÝð :ð :ð :ÝÐ#×*Ò*¨4°µt¸C±y´yÔ7IÈ3ÑOÔOÕQUÔQ^Ñ_Ô_Ð_Ý��u×/Ò/µÑ8Ô8Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð:øøøs   ÁB	 Á6B	 Â	
DÂA*DÄD)T)Frl   )rÂ   )Ú__doc__rw   r   rý   r   r¸   rÔ   rO   rŽ   ÚLOGINFOr
   r   r   r%   rG   rQ   r^   rj   r‡   r’   r�   r›   r°   rÁ   r½   rÖ   rÛ   rù   r  rc   r   r	   ú<module>r     s¬  ððð ð €€€à €€€Ø Ð Ð Ð Ø €€€à"€Ø
€Ø€Ø€	ð œð Cð Cð Cð CðWð Wð Wðð ð ð	ð 	ð 	ðzð zð zð 	ð 	ð 	ðð ð ð ð ð ð"(ð (ð (ð (ðVð ð ð ð$Lð Lð Lðsð sð sðDð Dð Dð Dð4ð ð ð(ð ð ð ð",ð ,ð ,ð*vð vð vð)!ð )!ð )!ðX
:ð 
:ð 
:ð 
:ð 
:r   