
    ڌh&                         d Z ddlmZm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mZ ddlmZmZ 	 ddlmZmZmZmZ n# e$ r Y nw xY w eej        d                   ZddZd	 Zd
 Zd Zd Zd Zd Zd Z dS )zPlugin route actions    )absolute_importunicode_literalsN   )tmdb
data_utils)loggersafe_get)OptionalTextUnion
ByteStringc                    t          | t                    s|                     d          } t          j        d                    | |                     t          j        | |          }|D ]}|d         }t          |d          &|d                    |d         dd                   z  }t          j
        |d	          }|}t          j        ||d
          }t          j        t          t          |d                   |d           dS )zFind a show by titleutf-8zSearching for TV show {} ({})namefirst_air_dateNz ({})   T	offscreenF	full_infoidurllistitemisFolder)
isinstancestrdecoder   debugformatr   search_showr	   xbmcguiListItemr   add_main_show_info
xbmcpluginaddDirectoryItemHANDLE)titleyearsearch_resultssearch_result	show_name	list_item	show_infos          k/Users/chudy/Library/Application Support/Kodi/addons/metadata.tvshows.themoviedb.org.python/libs/actions.py	find_showr0   (   s%    eS!! &W%%
L077tDDEEE%eT22N' 
 
!&)	M#344@6F(G(KLLLI$Y$???	!	1yE3 3 3	 	#M$'((		
 	
 	
 	
 	

 
    c                    t          | t                    r|                     dd          } t          j        d                    |                      t          j        |           \  }}|r|j        dk    r"t          j
        |j        |j        |          }nd}|Pt          j        |d         d	          }t          j        t"          t%          |d
                   |d           dS dS dS )z
    Get show ID by NFO file contents

    This function is called first instead of find_show
    if a NFO file is found in a TV show folder.

    :param nfo: the contents of a NFO file
    r   replacezParsing NFO file:
{}r   )ep_groupingnamed_seasonsNr   Tr   r   r   )r   bytesr   r   r   r    r   parse_nfo_urlproviderr   load_show_infoshow_idr4   r"   r#   r%   r&   r'   r   )nfoparse_resultr5   r.   r-   s        r/   get_show_id_from_nfor=   A   s    #u -jj),,
L(//44555",":3"?"?L-  F**+$,2JZgi i iII I (6):dKKKI '	$(("	       ! r1   c                     |                      d          r| d         S t          j        |           }t          |          dk    r|d                              d          S dS )z
    Get show ID by unique IDs

    In case there is a tmdb identifier in the unique IDs, use that.
    Else use the find_by_id method to get the show ID by an external ID.

    :param unique_ids: dictionary of unique IDs
    r   r   r   N)getr   
find_by_idlen)
unique_idsress     r/   get_show_idrD   a   s\     ~~f $&!!oj))s88a<<q6::d###4r1   c                 |   t          j        d                    |                      t          j        |           }|Pt          j        |d         d          }t          j        ||d          }t          j
        t          d|           dS t          j
        t          dt          j        d                     dS )z!Get details about a specific showzGetting details for show id {}Nr   Tr   r   F)r   r   r    r   r9   r"   r#   r   r$   r%   setResolvedUrlr'   r:   r.   r-   s      r/   get_detailsrH   s   s     L188AABBB#G,,I$Yv%6$GGG	1yD2 2 2	!&$	:::::!E7+d;;;	= 	= 	= 	= 	=r1   c           	         	 t          j        |           }|                    d          }|sS|                                D ]-\  }}t	          j        ||          }|rt          |          } n.|st          |           }nN# t          t          f$ r: t          |           }|	                                rt          j        d           Y nw xY w|st          d          |	                                s0t	          j        |          \  }}|r|j        }nt          d          t          j        d                    |                     t#          j        |          }|d}|d         D ]}	|	                    ddt          |	d	                   z             }
t'          j        |
d
          }t	          j        ||	d          }t,          j                            t          |d                   t          |          d          }|dz   }t,          j                            |          }t5          j        t8          ||d
           d S t          j        d                    |                     t          j        d           d S )Nr   zPusing deprecated episodeguide format, this show should be refreshed or rescrapedzUNo TMDb TV show id found in episode guide, this show should be refreshed or rescrapedz#Getting episode list for show id {}r   episodesr   zEpisode episode_numberTr   Fr   r   )r:   
episode_idr   r   z/unable to get show information using show id {}z7you may need to refresh the show to get a valid show id)jsonloadsr?   itemsr   _convert_ext_idr   
ValueErrorAttributeErrorisdigitr   errorRuntimeErrorr7   r:   r   r    r   r9   r"   r#   add_episode_infourllibparse	urlencodequoter%   r&   r'   )show_idsall_idsr:   keyvaluer<   r5   r.   theindexepisodeepnamer-   encoded_idsr   s                 r/   get_episode_listrc      s   d*X&&++f%% 	(%mmoo  
U$4S%@@ !'llGE  (h--' d d dh--?? 	dLbd d dd
  	ice e 	e__ i&0&>w&G&G#m 	i"*GGgi i i
L6==gFFGGG#G,,I , 	 	G[[!$W-=%>!?!?*@ A AF(4@@@I"37e5 5 5I ,00	$00HNN K  !|H ,$$[11C'"	    	 	( 	=DDWMM	O 	O 	ONOOOOOs   A>B ACCc                 ,   t           j                            |           } t          t           j                            |                     }t          j        d                    |                     t          j	        |d         |d                   }|rPt          j        |d         d          }t          j        ||d          }t          j        t           d|           d S t          j        t           dt          j        d                     d S )	NzGetting episode details for {}r:   rL   r   Tr   r   F)rW   rX   unquotedict	parse_qslr   r   r    r   load_episode_infor"   r#   r   rV   r%   rF   r'   )rb   decoded_idsepisode_infor-   s       r/   get_episode_detailsrk      s   ,&&{33Kv|--k::;;K
L188EEFFF)IL 9 L  =$\&%9TJJJ	/|t5 5 5	!&$	:::::!E7+d;;;	= 	= 	= 	= 	=r1   c                    | sdS t          j        d                    |                      t          j        |           }|Nt          j        |d         d          }t          j        ||          }t          j
        t          d|           dS t          j
        t          dt          j        d                     dS )zn
    Get available artwork for a show

    :param show_id: default unique ID set by setUniqueIDs() method
    NzGetting artwork for show ID {}r   Tr   F)r   r   r    r   r9   r"   r#   r   set_show_artworkr%   rF   r'   rG   s      r/   get_artworkrn      s      
L188AABBB#G,,I$Yv%6$GGG	/	9EE	!&$	:::::!E7+d;;;	= 	= 	= 	= 	=r1   c                    t          t          j                            |                     }t	          j        d                    t          j                             |d         dk    r?t	          j        d           t          |d         |
                    d                     n|d                                         dk    r+t	          j        d           t          |d	                    nV|d         d
k    rot	          j        d           |
                    d          p3t          t          j        |
                    d                              }|rt!          |           n|d         dk    r*t	          j        d           t#          |d                    n|d         dk    r*t	          j        d           t%          |d                    no|d         dk    r7t	          j        d           t'          |
                    d                     n,t)          d                    t          j                            t+          j        t.                     dS )z~
    Route addon calls

    :param paramstring: url-encoded query string
    :raises RuntimeError: on unknown call action
    zCalled addon with params: {}actionfindzperforming find actionr(   r)   nfourlzperforming nfourl actionr;   
getdetailszperforming getdetails actionr   	uniqueIDsgetepisodelistz performing getepisodelist actiongetepisodedetailsz#performing getepisodedetails action
getartworkzperforming getartwork actionr   zInvalid addon call: {}N)rf   rW   rX   rg   r   r   r    sysargvr0   r?   lowerr=   rD   rM   rN   rH   rc   rk   rn   rU   r%   endOfDirectoryr'   )paramstringparamsr:   s      r/   routerr~      s    &,((5566F
L/66sx@@AAAh6!!-...&/6::f#5#56666					!	!X	-	-/000VE]++++		\	)	)3444**U##W{4:fjj>U>U3V3V'W'W 	!   		-	-	-7888''''		0	0	0:;;;F5M****		\	)	)3444FJJt$$%%%%3::38DDEEEf%%%%%r1   )N)!__doc__
__future__r   r   rx   rM   urllib.parserW   r"   r%    r   r   utilsr   r	   typingr
   r   r   r   ImportErrorintry   r'   r0   r=   rD   rH   rc   rk   rn   r~    r1   r/   <module>r      sw  *   8 8 8 8 8 8 8 8 



                   # # # # # # # #	8888888888888 	 	 	D	 
SXa[		
 
 
 
2  @  $= = =:P :P :Pz= = =$= = =( &  &  &  &  &s   = AA