§
   ŽÓÁåÌ"(˜ã                   óÀ   — d Z ddlZddlZddlZddlmZ ddlZddlZddlZddl	Z	ddl
mZmZmZmZ ej        Zej        fd„Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ ZdS )u.  `action=mplay`: resolve the canonical play URL to a stream (docs/plan/milionar-library/040 Â§2).

Runs inside Kodi's plugin resolve call: pick the source (dialog / automatic / same as last time), resolve the
provider stream, write the now-playing contract for the service tracker, then setResolvedUrl.
é    N)Ú
quote_plus)ÚplayÚstoreÚtmdbÚurlsc                 óV   — t          j        d                     | ¦  «        |¦  «         d S )Nu   [MilionÃ¡Å™ Library] {})ÚxbmcÚlogÚformat)ÚmsgÚlevels     úc/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/resolver.pyÚ_logr      s)   € Ý„HÐ&×-Ò-¨cÑ2Ô2°EÑ:Ô:Ð:Ð:Ð:ó    c                 óT   — t          j        | dt          j        ¦   «         ¦  «         d S )NF)Ú
xbmcpluginÚsetResolvedUrlÚxbmcguiÚListItem)Úhandles    r   Ú_failr      s&   € ÝÔ˜f e­WÔ-=Ñ-?Ô-?Ñ@Ô@Ð@Ð@Ð@r   c           	      óê  — |                       dd¦  «        }| d         }	 |dk    r<ddlm} ddlm} |                     ||¦  «        }|r|                     ||¦  «        ndS dd	lm} | 	                    |d
„ ¦  «        }|r| 
                    ||d|¬¦  «        ndS # t          $ rL}	t          d                     |t          |	¦  «        j        |	¦  «        t           j        ¦  «         Y d}	~	dS d}	~	ww xY w)z]Provider stream URL for a picked file {'ident', 'provider'}; None when it cannot be resolved.ÚproviderÚwebshareÚidentÚkraskar   )ÚSCClient)ÚKraskaClientN)ÚWebshareClientc                  ó   — d S )N© )ÚaÚks     r   ú<lambda>z_stream_for.<locals>.<lambda>)   s   € À€ r   Úvideo_stream)ÚdtypeÚaddonz"stream resolve failed ({}): {}: {})ÚgetÚwcs.streamcinemar   Ú
wcs.kraskar   Ú	get_identÚresolveÚwcs.websharer   Ú
revalidateÚgetlinkÚ	Exceptionr   r   ÚtypeÚ__name__r	   Ú
LOGWARNING)
Úselectedr'   r   r   r   r   Úrealr   ÚtokenÚexcs
             r   Ú_stream_forr8      s9  € à�|Š|˜J¨
Ñ3Ô3€HØ�WÔ€EðØ�xÒÐØ1Ð1Ð1Ð1Ð1Ð1Ø/Ð/Ð/Ð/Ð/Ð/Ø×%Ò% e¨UÑ3Ô3ˆDØ8<ÐF�<×'Ò'¨¨eÑ4Ô4Ð4À$ÐFØ/Ð/Ð/Ð/Ð/Ð/Ø×)Ò)¨%Ð1EÐ1EÑFÔFˆØZ_Ðiˆ~×%Ò% e¨U¸.ÐPUÐ%ÑVÔVÐVÐeiÐiøÝð ð ð ÝÐ1×8Ò8¸Å4ÈÁ9Ä9ÔCUÐWZÑ[Ô[Õ]aÔ]lÑmÔmÐmØˆtˆtˆtˆtˆtøøøøðøøøs    AB Á"9B Â
C2Â&AC-Ã-C2c                 óÐ   — ddl m} |                     |d         |d         |d         |d         |d         |d         |d	         |d
         |d         || d         |dk    ¬¦  «        S )Nr   ©ÚutilsÚtitleÚyearÚplotÚposterÚfanartÚratingÚgenreÚdirectorÚruntimer   Úauto)Útmdb_idÚautoplay)Úwcsr;   Úsearch_and_select_movie_file©ÚinfoÚdatar'   Úsrcr;   s        r   Ú_pick_movierN   0   s„   € ØÐÐÐÐÐØ×-Ò-ØˆWŒ�t˜F”| T¨&¤\°4¸´>À4ÈÄ>ÐSWÐX`ÔSaÐcgÐhoÔcpØˆZÔ˜$˜yœ/¨5¸$¸v¼,ÐRUÐY_ÒR_ð .ñ bô bð br   c                 óì   — ddl m} |                     |d         | d         | d         |d         |d         |d         |d	         |d
         |d         ||d         |d         |dk    | d         ¬¦  «        S )Nr   r:   Úseries_nameÚsÚeÚepisode_titler>   r?   r@   rA   rB   r=   rD   rE   r   )Úautoplay_requestrF   )rH   r;   Úsearch_and_select_episode_filerJ   s        r   Ú_pick_episoderV   7   s�   € ØÐÐÐÐÐØ×/Ò/Øˆ]Ô˜T #œY¨¨S¬	°4¸Ô3HÈ$ÈvÌ,ÐX\Ð]eÔXfÐhlÐmuÔhvØˆXŒ˜˜Wœ u¨d°6¬l¸DÀ¼OÐ_bÐflÒ_lØ�V”ð 0ñ ô ð r   c                 óF  — | d         dk    rdnd}t          j        || d         |                      d¦  «        |                      d¦  «        ¦  «        }|rK|                     d¦  «        r6|d         |                     d¦  «        pd	|                     d
¦  «        pddœS dS )zHSame file as the last play of this item, or None when nothing is stored.r1   ÚmovieÚtvr   rQ   rR   Ú
last_identÚlast_file_nameÚ Úlast_providerr   )r   Únamer   N)r   Ú	get_stater(   )rK   r'   ÚkindÚstates       r   Ú
_last_pickrb   ?   s«   € à˜6”l gÒ-Ð-ˆ7ˆ7°4€DÝŒO˜D $ v¤,°·²¸±´¸t¿xºxÈ¹}¼}ÑMÔM€EØð F�—’˜<Ñ(Ô(ð FØ˜|Ô,°e·i²iÐ@PÑ6QÔ6QÐ6WÐUWØ!ŸIšI oÑ6Ô6ÐD¸*ðFð Fð 	Fàˆ4r   c                 ód  — | d         dk    r|d         |d         }}n1d                      |d         | d         | d         ¦  «        }|d         }t          j        ||¬	¦  «        }i }|                     d
¦  «        r+|                     |d
         |d
         |d
         dœ¦  «         |                     d¦  «        r|d         |d<   |r|                     |¦  «         |                     ¦   «         }|                     |¦  «         |                     |pd¦  «         | d         dk    rt| 	                    d¦  «         t          |                     d¦  «        pd¦  «                             ¦   «         r(|                     t          |d         ¦  «        ¦  «         nf| 	                    d¦  «         |                     |d         ¦  «         |                     | d         ¦  «         |                     | d         ¦  «         |                     dd¦  «         |                     dd¦  «         |S )Nr1   rX   r<   r>   z{} S{:02d}E{:02d}rP   rQ   rR   )ÚlabelÚpathr?   )ÚthumbÚiconr?   r@   r\   r=   ÚepisodeÚmimetypezapplication/octet-streamÚ
IsPlayableÚtrue)r   r   r   r(   ÚupdateÚsetArtÚgetVideoInfoTagÚsetTitleÚsetPlotÚsetMediaTypeÚstrÚisdigitÚsetYearÚintÚsetTvShowTitleÚ	setSeasonÚ
setEpisodeÚsetProperty)	rK   rL   Ústreamr4   r<   r>   ÚitemÚartÚtags	            r   Ú	_listitemr~   I   s  € ØˆF„|�wÒÐØ˜7”m T¨&¤\ˆtˆˆà#×*Ò*¨4°Ô+>ÀÀSÄ	È4ÐPSÌ9ÑUÔUˆØ�FŒ|ˆÝÔ %¨fÐ5Ñ5Ô5€DØ
€CØ‡x‚x�ÑÔð `Ø�
Š
˜T (œ^°T¸(´^ÈtÐT\Ì~Ð^Ð^Ñ_Ô_Ð_Ø‡x‚x�ÑÔð 'Ø˜XœˆˆH‰Ø
ð Ø�Š�CÑÔÐØ
×
Ò
Ñ
 Ô
 €CØ‡L‚L�ÑÔÐØ‡K‚K��
˜ÑÔÐØˆF„|�wÒÐØ×Ò˜Ñ!Ô!Ð!Ýˆt�xŠx˜ÑÔÐ% 2Ñ&Ô&×.Ò.Ñ0Ô0ð 	+Ø�KŠK�˜D œLÑ)Ô)Ñ*Ô*Ð*øà×Ò˜Ñ#Ô#Ð#Ø×Ò˜4 Ô.Ñ/Ô/Ð/Ø�Š�d˜3”iÑ Ô Ð Ø�Š�t˜C”yÑ!Ô!Ð!Ø×Ò�ZÐ!;Ñ<Ô<Ð<Ø×Ò�\ 6Ñ*Ô*Ð*Ø€Kr   Tc                 óP  — |                      d¦  «        pd}t          j        | ||||                      d¦  «        p|                      dd¦  «        |                      dd¦  «        t          |¦  «                             ¦   «         rt          |¦  «        dz  nd||pd|¬	¦
  «
        S )
NrD   r\   r<   rS   rP   é<   r   Úmplay)r<   Ú
show_titleÚ	runtime_sÚstart_atÚoriginÚfollow)r(   r   Úcontractrr   rs   ru   )	rK   rL   rz   r4   Ú	canonicalr„   r…   r†   Úruntime_mins	            r   Ú_write_contractrŠ   h   s°   € Ø—(’(˜9Ñ%Ô%Ð+¨€KÝŒ=˜˜v x°À$Ç(Â(È7ÑBSÔBSÐBtÐW[×W_ÒW_Ð`oÐqsÑWtÔWtØ$(§H¢H¨]¸BÑ$?Ô$?Ý<?ÀÑ<LÔ<L×<TÒ<TÑ<VÔ<VÐ#]¥3 {Ñ#3Ô#3°bÑ#8Ð#8Ð\]ÐhpØ &Ð 1¨'¸&ðBñ Bô Bð Br   c                 ó\  — ddl m} ddlm} ddlm} 	 | d         dk    r«|                     ||d         |d         |d	         |d
         d| d         |d         |d         dœ¦  «          ||                     |d         |d         |d         |d	         |d         |d
         |d         |d         |d         dœ	¦  «        d¬¦  «         dS ddlm	}  |||d         | d         | d         |d         |d         |d	         |d         |d
         |d         |d         |d         t          | d         ¦  «        d|                     dd¦  «        ¬¦  «         dS # t          $ rK}t          d                     t          |¦  «        j        |¦  «        t"          j        ¦  «         Y d}~dS d}~ww xY w)zdWhat the old play paths did after starting: recently played entry and the info dialog with the game.r   ©Ú	user_data)Úschedule_info_dialog)ÚMediaMetadatar1   rX   r<   r=   r?   rA   r   r>   rB   )r<   r=   r?   rA   Ú
media_typerF   r>   rB   r@   rC   rD   )	r<   r=   r>   r?   r@   rA   rB   rC   rD   Úaddon_movie)Úsource)Ú_on_episode_playback_startrP   rQ   rR   rS   r\   Úepisode_thumb)r”   z post-resolve step failed: {}: {}N)rH   r�   Úwcs.playback.dialog_schedulerrŽ   Úwcs.playback.metadatar�   Úadd_recently_played_itemÚfrom_tmdb_movieÚ	wcs.utilsr“   rr   r(   r0   r   r   r1   r2   r	   r3   )rK   rL   r'   r�   rŽ   r�   r“   r7   s           r   Ú_after_resolverš   p   sT  € àÐÐÐÐÐØBÐBÐBÐBÐBÐBØ3Ð3Ð3Ð3Ð3Ð3ðbØ�Œ<˜7Ò"Ð"Ø×.Ò.¨uØ˜gœ°°V´ÈÈXÌÐbfÐgoÔbpØ%°$°v´,ÈÈVÌÐ_cÐdkÔ_lð7nð 7nñ oô oð oð !Ð  ×!>Ò!>Ø˜gœ°°V´ÀdÈ6ÄlÐ^bÐckÔ^lØ˜xœ.°D¸´NÈTÐRYÌ]Ø  Ô,¸¸i¼ð@Jð @Jñ "Kô "Kð Taðbñ bô bð bð bð bð
 =Ð<Ð<Ð<Ð<Ð<Ø&Ð&Ø�t˜MÔ*¨D°¬I°t¸C´yÀ$ÀÔBWÐY]Ð^dÔYeÐgkÐltÔguØ�X”  X¤°°W´¸tÀF¼|ÈTÐR[Ì_Õ^aÐbfÐgmÔbnÑ^oÔ^oØ $§(¢(¨?¸BÑ"?Ô"?ðAñ Aô Að Að Að Aøõ ð bð bð bÝÐ/×6Ò6µt¸C±y´yÔ7IÈ3ÑOÔOÕQUÔQ`ÑaÔaÐaÐaÐaÐaÐaÐaÐaøøøøðbøøøs    ”B5E ÃB	E Å
F+Å A F&Æ&F+c                 ó
  — t          j         ¦   «         }	 t          j        d                     t          j        d                     d„ |                     ¦   «         D ¦   «         ¦  «        ¦  «        ¦  «        }n# t          $ r d }Y nw xY w|s<t          d                     |¦  «        t          j
        ¦  «         t          | ¦  «        S t          j        |¦  «        }t          j        |¦  «        }t          j        t          j        ¦  «        }|d         dk    rt#          j        |d         ¦  «        n't#          j        |d         |d         |d	         ¦  «        }|sUt)          j        ¦   «                              d
|                     d¦  «        t(          j        d¦  «         t          | ¦  «        S d\  }}	|	�sddlm}
 |
                     |¦  «        st          | ¦  «        S |                     d¦  «        rp|d                              d¦  «        rUt;          |d         ¦  «        }|                     dd¦  «         |                     dd¦  «         t?          ||¦  «        }	|	sd }|	s2|d         dv r(tA          ||¦  «        }|rt?          ||¦  «        nd }	|	sd }|	sÕ |d         dk    rtB          ntD          ||||d         dv rdnd¦  «        }|rd|vr�t          d                     |¦  «        ¦  «         |d         dv rR|d         dk    rFt)          j        ¦   «                              d
|                     d¦  «        t(          j#        d¦  «         t          | ¦  «        S t?          ||¦  «        }	|	sUt)          j        ¦   «                              d
|                     d¦  «        t(          j        d¦  «         t          | ¦  «        S |d         dk    rdnd }tI          j%        ||d         |                     d¦  «        |                     d	¦  «        ¦  «        }|r!|d!         d"k    rtM          |d#         ¦  «        nd$}tO          |||	||||                     d%¦  «        |                     d&d'¦  «        ¦  «         tQ          |||	|¦  «        }tS          j*        | d'|¦  «         t          d(                     ||                     d¦  «        t          j         ¦   «         |z
  |¦  «        ¦  «         tW          |||¦  «         d S ))Nzplugin://{}/?{}ú&c              3   óH   K  — | ]\  }}d                       ||¦  «        V — ŒdS )z{}={}N)r   )Ú.0r#   Úvs      r   ú	<genexpr>zrun.<locals>.<genexpr>‹   s9   è è € ÐJ{ÐJ{ÑdhÐdeÐghÈ7Ï>Ê>ÐZ[Ð]^ÑK_ÔK_ÐJ{ÐJ{ÐJ{ÐJ{ÐJ{ÐJ{r   znot a canonical url: {}r1   rX   r   rQ   rR   u
   MilionÃ¡Å™i~  i   )NNr   rŒ   Úpickr   r   r   r^   r\   rM   )ÚlastÚknown)rE   r¢   rE   Údialogzno source picked for {}rh   i~  iˆ  iÎu  rY   ÚfromÚresumeÚ
resume_posg        r…   r†   Tz0resolved {} via {} in {:.1f}s (start_at {:.0f}s)),Útimer   Úparser   ÚADDON_IDÚjoinÚitemsr0   r   r	   r3   r   rˆ   r   ÚconsumeÚ	xbmcaddonÚAddonr   Ú
movie_infoÚepisode_infor   ÚDialogÚnotificationÚgetLocalizedStringÚNOTIFICATION_ERRORrH   r�   Úcheck_providers_and_promptr(   ÚdictÚ
setdefaultr8   rb   rN   rV   ÚNOTIFICATION_INFOr   r_   ÚfloatrŠ   r~   r   r   rš   )r   ÚparamsÚstartedrK   rˆ   Úrequestr'   rL   r4   rz   r�   r`   ra   r„   r{   s                  r   Úrunr¾   ˆ   s  € ÝŒi‰kŒk€GðÝŒzÐ+×2Ò2µ4´=À#Ç(Â(ÐJ{ÐJ{Ðlr×lxÒlxÑlzÔlzÐJ{ÑJ{ÔJ{ÑB{ÔB{Ñ|Ô|Ñ}Ô}ˆˆøÝð ð ð Øˆˆˆðøøøàð ÝÐ&×-Ò-¨fÑ5Ô5µt´ÑGÔGÐGÝ�V‰}Œ}ÐÝ”˜tÑ$Ô$€IÝŒl˜9Ñ%Ô%€GÝŒO�DœMÑ*Ô*€Eà,0°¬L¸GÒ,CÐ,C�4Œ?˜4 œ<Ñ(Ô(Ð(ÍÔIZÐ[_Ð`fÔ[gÐimÐnqÔirÐtxÐy|Ôt}ÑI~ÔI~€DØð ÝŒÑÔ×%Ò% l°E×4LÒ4LÈUÑ4SÔ4SÕU\ÔUoÐquÑvÔvÐvÝ�V‰}Œ}Ðà!Ñ€HˆfØñ !Ø!Ð!Ð!Ð!Ð!Ð!Ø×3Ò3°EÑ:Ô:ð 	!Ý˜‘=”=Ð Ø�;Š;�vÑÔð 	  7¨6¤?×#6Ò#6°wÑ#?Ô#?ð 	 Ý˜G FœOÑ,Ô,ˆHØ×Ò 
¨JÑ7Ô7Ð7Ø×Ò ¨Ñ+Ô+Ð+Ý  ¨5Ñ1Ô1ˆFØð  Ø�Øð 	 ˜' %œ.Ð,=Ð=Ð=Ý! $¨Ñ.Ô.ˆHØ5=ÐG•[ ¨5Ñ1Ô1Ð1À4ˆFØð  Ø�Øð 	2ØQ t¨F¤|°wÒ'>Ð'>�˜ÅMØ�d˜E¨W°U¬^Ð?OÐ-OÐ-O 6 6ÐU]ñ_ô _ˆHàð %˜w¨hÐ6Ð6ÝÐ.×5Ò5°iÑ@Ô@ÑAÔAÐAØ˜5”>Ð%5Ð5Ð5¸$¸v¼,È)Ò:SÐ:SÝ”NÑ$Ô$×1Ò1°,À×@XÒ@XÐY^Ñ@_Ô@_ÕahÔazð  }Añ  Bô  Bð  BÝ˜V‘}”}Ð$Ý  ¨5Ñ1Ô1ˆFØð 	!ÝŒNÑÔ×)Ò)¨,¸×8PÒ8PÐQVÑ8WÔ8WÕY`ÔYsÐuyÑzÔzÐzÝ˜‘=”=Ð à˜6”l gÒ-Ð-ˆ7ˆ7°4€DÝŒO˜D $ v¤,°·²¸±´¸t¿xºxÈ¹}¼}ÑMÔM€EØ.3Ð]¸À¼È8Ò8SÐ8S�u�U˜<Ô(Ñ)Ô)Ð)ÐZ]€HÝ�D˜$ ¨°)¸XÀwÇ{Â{ÐS[ÑG\ÔG\Ð^e×^iÒ^iÐjrÐtxÑ^yÔ^yÑzÔzÐzÝ�T˜4 ¨Ñ2Ô2€DÝÔ˜f d¨DÑ1Ô1Ð1ÝÐ	;×	BÒ	BÀ9ÈhÏlÊlÐ[eÑNfÔNfÝDHÄIÁKÄKÐRYÑDYÐ[cñ
eô 
eñ fô fð få�4˜˜uÑ%Ô%Ð%Ð%Ð%s   •A!A7 Á7BÂB)NT)Ú__doc__ÚjsonÚosr¨   Úurllib.parser   r	   r®   r   r   Úwcs.library2r   r   r   r   ÚNP_PROPERTYÚLOGINFOr   r   r8   rN   rV   rb   r~   rŠ   rš   r¾   r!   r   r   ú<module>rÆ      sR  ððð ð
 €€€Ø 	€	€	€	Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0àÔ€ð ”Lð ;ð ;ð ;ð ;ðAð Að Aðð ð ð$bð bð bðð ð ðð ð ðð ð ð>Bð Bð Bð Bðbð bð bð08&ð 8&ð 8&ð 8&ð 8&r   