
    ڌhGH                        d Z ddlmZmZ ddlZddlZddlmZmZ ddl	m
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mZmZ dd
lmZ eeef         Zn# e$ r Y nw xY w ej                    ZdZe                    d          Z  ej!        d          Z"dZ#ddhZ$dZ%dZ&g dZ' e
dg d          Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d(d!Z3d(d"Z4d# Z5d$ Z6d% Z7d& Z8d' Z9dS ))zFunctions to process data    )absolute_importunicode_literalsN)ActorVideoStreamDetail)
namedtuple   )safe_getlogger)settings	api_utils)OptionalTupleTextDictListAny)ListItemzhttps://api.themoviedb.org/3/{}zfind/{}z<[^>]+>)	z/(themoviedb)\.org/tv/(\d+).*/episode_group/(.*)z(themoviedb)\.org/tv/(\d+)z(themoviedb)\.org/./tv/(\d+)z(tmdb)\.org/./tv/(\d+)z(imdb)\.com/.+/(tt\d+)z(thetvdb)\.com.+&id=(\d+)z(thetvdb)\.com/series/(\d+)z!(thetvdb)\.com/api/.*series/(\d+)z(thetvdb)\.com/.*?"id":(\d+)posterbanner)largeoriginalmedium))z<b>z[B])z</b>z[/B])z<i>z[I])z</i>z[/I])z</p><p>z[CR])tmdb_idimdb_idtvdb_idUrlParseResult)providershow_idep_groupingc                     t           D ]$}|                     |d         |d                   } %t                              d|           } | S )z%Replace HTML tags with Kodi skin tagsr   r    )CLEAN_PLOT_REPLACEMENTSreplaceTAG_REsub)plotrepls     n/Users/chudy/Library/Application Support/Kodi/addons/metadata.tvshows.themoviedb.org.python/libs/data_utils.py_clean_plotr)   L   sH     ( . .||DGT!W--::b$DK    c           	         t          j                    \  }}g }| D ]}|d         |                    d|                    dd                    |d         d}d}t          |d          ||d         z   }|                    t          |d         |d	         |d         |                     |                    |           dS )
zSave cast info to list itemname	charactercharacter_namer!   order)r,   roler/   Nprofile_pathr0   )r   loadBaseUrlsgetr	   appendr   setCast)	cast_infovtagimagerooturlpreviewrooturlcastitemactorthumbs           r(   	_set_castr>   U   s     $,#8#:#: L.D 	P 	PLHH[$((3CR*H*HII']
 

 D.))5 4#77EE%-vgNNOOOOLLr*   c                    g }|                      dg           D ]}|                    |d                    |                      di                                dg           D ]}|                     dd                                          dk    p+|                     dd                                          d	k    }|r2|                     d          |vr|                    |d                    |S )
z4Extract show creator(s) and writer(s) from show info
created_byr,   creditscrewjobr!   writer
departmentwriting)r3   r4   lower)	show_inforA   r;   isWriters       r(   _get_creditsrJ   g   s     GlB// % %tF|$$$$i,,00<< ) )88E2&&,,..(: 3dhh"? ?#egg?3 	)((77NN4<(((Nr*   c                     g }|                      di                                dg           D ]6}|                     d          dk    r|                    |d                    7|S )z+Extract episode writer(s) from episode inforA   rB   rC   Directorr,   )r3   r4   )episode_info
directors_r;   s      r(   _get_directorsrO   u   sl     J  B//33FB?? , ,88E??j((d6l+++r*   c                     i }|                                  D ]Q\  }}|t          v rC|rA|dk    rd}nd}|dd         }t          |          }|                    |||           |||<   R|S )z-Extract unique ID in various online databasesr   TFN)type	isdefault)itemsVALIDEXTIDSstrsetUniqueID)ext_idsr7   
return_idskeyvalueisTMDBshortkey	str_values           r(   _set_unique_idsr_      s     Jmmoo 	- 	-
U+%i3B3xHE

IYXHHH#,Jx r*   c           	      2   d}t           d         D ]}t          j        d|z             t          |                     di                               |i                               dd                    }t          |                     di                               |i                               dd                    }t          j        dt          |          d	t          |                     |d
k    r|                    ||||           d}dS )zSet show/episode ratingTRATING_TYPESzadding rating type of %sratingsrating0voteszadding rating of z and votes of r   )re   rR   rS   FN)SOURCE_SETTINGSr
   debugfloatr3   intrV   	setRating)the_infor7   firstrating_typerc   re   s         r(   _set_ratingrn      s(    E&~6  /+=>>>x||Ir2266  S3//1 1HLLB//33  S#..0 0&kkkk3u:::/ 	0 	0 	0A::NN6 +u  > > >E r*   c           
         | d         D ]}t          j        d|d         z             |                    |d         t          |dd                     |                    di                                           D ]H\  }}|dk    rd}n|}|D ]5}t          |          \  }}|r|                    ||||d         	           6Id
S )zAdd info for show seasonsseasonsz-adding information for season %s to list itemseason_numberr,   r!   imagespostersr   )arttypepreviewseasonN)r
   rg   	addSeasonr	   r3   rT   get_image_urlsaddAvailableArtwork)	rH   r7   rv   
image_type
image_listdestinationimagetheurl
previewurls	            r(   _add_season_infor      s&    I& i iDO,- 	. 	. 	.vo.33	5 	5 	5&,jj2&>&>&D&D&F&F 		i 		i"J
Y&&&(# i i%3E%:%:"
 i,,ZPVWfPg - i i ii		ii ir*   c                 J    g }| D ]}|                     |d                    |S )zGet names from a list of dictsr,   )r4   )	item_listrT   r;   s      r(   
_get_namesr      s6     E # #T&\""""Lr*   c                 (   t          j                    \  }}|                     dd                              d          rdS |                     d          dk    r| d         }|                    dd          }n|| d         z   }|| d         z   }||fS )	z%Get image URLs from image information	file_pathr!   .svg)NNrR   fanarttvz.fanart.tv/fanart/z.fanart.tv/preview/)r   r2   r3   endswithr#   )r}   r8   r9   r~   r   s        r(   rx   rx      s     $,#8#:#: L.yyb!!**622 zyyJ&&{#^^ "79 9

 k 22#eK&88
:r*   c                 6   |                                 }|                     di                                           D ]\  }}|dk    rg }|D ]n}t          |          \  }}|                    d          dk    r(t          d         r|r|                    |d|           U|r|                    d|i           o|r|                    |           |d	k    rd
}	n|dk    rd}	n|}	|D ].}t          |          \  }}|r|                    ||	|           /|S )zSet available images for a showrr   	backdrops	iso_639_1NCATLANDSCAPE	landscapert   ru   r}   rs   r   logos	clearlogo)getVideoInfoTagr3   rT   rx   rf   ry   r4   setAvailableFanart)
rH   	list_itemr7   rz   r{   fanart_listr}   r~   r   r|   s
             r(   set_show_artworkr      s    $$&&D"+--""="="C"C"E"E I I
J$$K# : :%3E%:%:"
99[))T11on6U1Z`1,,Z - I I I I :&&'8999 :,,[999Y&&&w&&)(# I I%3E%:%:"
 I,,Z - I I II
 r*   Tc                 f
   t          j                    \  }}|                                 }|                    d          }t          d         r|r|}n|d         }t          t          |dd                    }|                    |           |                    |           |	                    |           |
                    |           |                    |           |                    d           d|d         i}	|	                    |                    d	i                      t          |	|          }
|                    t!          j        |
                     |                    d
          rK|                    t'          |d
         dd                              |                    |d
                    |r|                    t          |dd                     |                    t/          |                    dg                                t          d         rJ|                    t/          |                    di                               dg                                |                    dg           }|r|d         }|                    dd          }nd}d}|r@|r>t          d         r1|                    d                    |d         |          g           n|r|                    |d         g           |r|                    |g           |                    di                               di           }|rd}d}|D ]~}|                    dd                                          }|dk    r|                    d          }|t          d                                         k    r|                    dd          }|s|}|r#|                    t          d         |z              |                    t?          |                     t          d         rNtA          |                    di                               di                     }|r|!                    |           tE          ||           } tG          ||           tI          |d         d          |           tK          ||           nO|                    d!d          }|r7|&                    d"          s"||z   }||z   }|'                    |d#|$           tQ          j)        d%|z             | S )&z!Add main show info to a list itemoriginal_name	KEEPTITLEr,   overviewr!   tvshowr   idexternal_idsfirst_air_dateN   statusgenresSAVETAGSkeywordsresultsnetworksr   origin_countrySTUDIOCOUNTRYz	{0} ({1})content_ratings
iso_3166_1usrc   CERT_COUNTRYCERT_PREFIXENABTRAILERvideosrA   r:   poster_pathr   r   r   z.adding tv show information for %s to list item)*r   r2   r   r3   rf   r)   r	   setTitlesetOriginalTitlesetTvShowTitlesetPlotsetPlotOutlinesetMediaTypeupdater_   setEpisodeGuidejsondumpssetYearri   setPremieredsetTvShowStatus	setGenresr   setTags
setStudiosformatsetCountriesrG   setMpaa
setWritersrJ   _parse_trailer
setTrailerr   r   r>   rn   r   ry   r
   rg   )r   rH   	full_infor8   r9   r7   r   shownamer&   rX   epguide_idsr   networkcountryr   mpaampaa_backupcontent_ratingisotrailerr}   r~   r   s                          r(   add_main_show_infor      s:    $,#8#:#: L.$$&&DMM/22M{# % % V$x	:r::;;DMM(-(((!!!LLh)D/*GNN9==44555!'400KK00111}}%&& 7S#34RaR899:::)$45666 2>Xi2>>???z)--""="=>>???:& 	5LLIMMB%  %  #Ir 2 24 4 5 5 5==R00 	qkGkk"2B77GGGG 	/w 	/??#C 	/OO[//IIJKKKK 	/OOWV_-... 	)wi(((#--r# ##&3y"#5#5 	 	DDK"1 < <$((r::@@BB$;;"0"4"4X">">K/.9??AAAA)--h;;D #" D_];dBCCCY//000=) 	)$Y]]"& &!c)R002 2G )((($Y	::	D))))I&v.555It$$$$mR00 	>// 	>!E)F'%/J$$* % > > >
LAHLMMMr*   c           	         |                     ddt          |d                   z             }|                                 }|                    |           |                    |d                    |                    |d                    |                    d           t          |d          |                    |d                    |rt          |d          }|9t          |          }|
                    |           |                    |           t          |d          |                    |d                    |                     d	          }|r5t          t          |          d
z            }|                    |           t!          |d         |d         d         z   |           d|d         i}	|	                    |                     di                      t%          |	|           t'          ||           |                     di                                dg           D ].}
t)          |
          \  }}|r|                    |d|           /|                    t/          |                     |                    t3          |                     t5          j        d|d         d|d         d|d           | S )zAdd episode info to a list itemr,   zEpisode episode_numberrq   episodeair_dateNr   runtime<   )durationseason_castrA   guest_starsr   r   r   rr   stillsr=   r   z adding episode information for SEz - z to list item)r3   rV   r   r   	setSeason
setEpisoder   r	   setFirstAiredr)   r   r   r   r   ri   addVideoStreamr>   r   r_   rn   rx   ry   r   rJ   setDirectorsrO   r
   rg   )r   rM   r   titler7   summaryr&   r   videostreamrX   r}   r~   r   s                r(   add_episode_infor   =  s    VZ .>!?@@&A B BE$$&&DMM%NN<0111OOL!12333i   j))5<
3444 8<44w''DLL%%%L*--9l:6777##I.. 	-+S]]25EFFFK,,,',y*A-*PPRV	X 	X 	Xl401|'';;<<<&&&L$'''!%%h3377"EE 	A 	AE!/!6!6FJ A((GZ ) A A A\22333.66777
LL///>N1O1O1OQVQVQVX Y Y Yr*   c                 h   d}t          j        || t           j                  }d}d}t          D ]}t	          j        d           t	          j        |           t          j        || t           j                  }|r2t	          j        d|                    d          z              t	          j        d|                    d          z              |                    d          dk    s|                    d          d	k    r=	 |                    d
          }n# t          $ r Y nw xY w|                    d          }n6t          |                    d          |                    d                    }|r7t	          j        dt          |          z              t          d	||          } n||fS )z8Extract show ID and named seasons from NFO file contentsz-<namedseason number="(.*)">(.*)</namedseason>Nz/trying regex to match service from parsing nfo:zmatch group 1: r   zmatch group 2:    
themoviedbtmdb   zmatch group 3: )refindallISHOW_ID_REGEXPSr
   rg   searchgroup
IndexError_convert_ext_idrV   r   )nfons_regexns_match	sid_matchr   regexpshow_id_matchr   s           r(   parse_nfo_urlr   g  s    @Hz(C..HIK!  FGGGV	&#rt44 	L*]-@-@-C-CCDDDL*]-@-@-C-CCDDD""1%%559L9LQ9O9OSY9Y9Y"/"5"5a"8"8KK!   D'--a00)!''**M,?,?,B,BD D .[1A1AABBB*67KHH	hs   D
D&%D&c                 L   dddd}t                               |          }t          j        t          d         d}|                    |           }|r||d<   t          j        ||          }nd}|r2|                    d	          }|r|d
                             d          S dS )z!get a TMDb ID from an external IDr   r   )imdbthetvdbtvdbLANG_DETAILS)api_keylanguageexternal_source)paramsN
tv_resultsr   r   )FIND_URLr   r   TMDB_CLOWNCARrf   r3   r   	load_info)ext_providerext_idproviders_dictshow_urlr   r   rH   r  s           r(   r   r     s     (!*') )N v&&H!/).9; ;F!!,//H $, !'@@@			 +]]<00
 	+a=$$T***4r*   c                    |                                  } |                     d          r!| dd                                         rd| dS |                     d          r)| dd                                         rd| dd         dS |                     d	          r)| dd                                         rd
| dd         dS |                     d          r)| dd                                         rd| dd         dS dS )z0get the ID from a title and return with the typettr   Nr   )rR   r   zimdb/tt      ztmdb/r   ztvdb/r   )rG   
startswithisdigit)r   s    r(   parse_media_idr    s*    KKMME 
7%)"3"3"5"5 
7!E222			)	$	$ 7qrr):):)<)< 7!E!""I666			'	"	" 7uQRRy'8'8':': 7!E!""I666			'	"	" 7uQRRy'8'8':': 7!E!""I6664r*   c                    | rt           d         dk    rd}nt           d         dk    rd}g }t           d         dd         d	fD ]}| D ]}|                    d
          dk    ru|                    d          |k    r\|                    d          }|                    d          dk    rt          |          r	||z   c c S {|                    |           |D ]}t          |          r	||z   c c S dS )z2create a valid Tubed or YouTube plugin trailer URL
PLAYERSOPTtubedz0plugin://plugin.video.tubed/?mode=play&video_id=youtubez-plugin://plugin.video.youtube/play/?video_id=r   r   r   ensiteYouTuber   rZ   rR   TrailerN)rf   r3   _check_youtuber4   )r   addon_playerbackup_keys
video_langresultrZ   	keybackups          r(   r   r     sN     2<(G33MLL\*i77JL*>:1Q3?F 	2 	2J! 	0 	0::f%%22vzz+7N7NR\7\7\ **U++Czz&))Y66)#.. 4#/#3333334
 $**3///( 2 2	!),, 2'	11111122 4r*   c                 L    d| z   }t          j        |d          }|rd|v rdS dS )z4check to see if the YouTube key returns a valid linkz https://www.youtube.com/watch?v=not_json)	resp_typezVideo unavailableFT)r   r  )rZ   chk_linkchecks      r(   r  r    s@     2#5HJ???E '500u4r*   )T):__doc__
__future__r   r   r   r   xbmcr   r   collectionsr   utilsr	   r
   r!   r   r   typingr   r   r   r   r   r   xbmcguir   InfoTypeImportErrorgetSourceSettingsrf   BASE_URLr   r  compiler$   r   SUPPORTED_ARTWORK_TYPESIMAGE_SIZESr"   rU   r   r)   r>   rJ   rO   r_   rn   r   r   rx   r   r   r   r   r   r  r   r   r*   r(   <module>r2     s  *    8 8 8 8 8 8 8 8 				  ) ) ) ) ) ) ) ) " " " " " " # # # # # # # # ! ! ! ! ! ! ! !	================      D#IHH 	 	 	D	 -(,..,??9%%	J		

 $X. -  0//<<<> >    $      "  $i i i(       >L L L L^' ' ' 'T  >  ,  $  4    s    A AA