
    `j                        d dl mZ d dlZd dlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d"dZ d#dZ!d$d%dZ"d&d Z#e$d!k    r e#             dS dS )'    )annotationsN   )run_nuvio_addon)	load_yaml)build_crawler)MovieDatabase)
HttpClient)JellyfinScanBot)	NfoWriter)PlaylistCleaner)run_playlist_server)PlaylistWriter)SlugRemapper)
StrmWriter)TmdbSync)setup_logging
app_configdictreturndict[str, dict]c                |    i }|                      dg           D ]"}t          |d                   }|||d         <   #|S )Nsourcesconfigname)getr   )r   resultitemsource_configs       moviebot\app.pyload_source_configsr       sK     Fy"-- - -!$x.11,tF|M    boolc                >    t          d | j        D                       S )Nc              3  8   K   | ]}|j         D ]}|j        V  d S )N)episodesm3u8_url).0serverepisodes      r   	<genexpr>z%has_playable_links.<locals>.<genexpr>   s4      [[F6?[[w[[[[[[[r!   )anyservers)movies    r   has_playable_linksr.      s!    [[em[[[[[[r!   config_pathstronly_source
str | None	only_slugNonec                \   t          |           }t          |                    di                               dd          |                    di                               dd                     t          j        d          }t          d(i |                    di           }t          |d         d	                   }t          t          |d
                             }|                    di           }t          |d         d         |||                    dd                    }	t          |d         d         |d         d         |                    dd                    }
t          |d         d         |                    dd                    }t          |                    di                               dd                    }	 t          |                                          D ].\  }}|r||k    rt          |||          }|                    d||           |r|gn|                    |          }|D ]}	 |                    |          }t%          |          s|                    d|||j                   F|                    |          }|                    ||          }d}|j        D ]}|                    ||j        |          }|j        D ]}|                    |||j        |          }|                    |          }|d         dk    r`|d         |j        k    rOd}|j        dk    r$|d         r|                    ||d                    |                    d|||j                   	 |	                     ||j        |j        |d                    }|
                     ||j        |j!        |d          |j"        |j#                  }|$                    ||j!        |j!        d           |j        dk    r|%                    ||j&                   d}J# tN          $ rN}|$                    |d d d!tQ          |                     |)                    d"|||j                   Y d }~d }~ww xY w|r |j        d#k    r|                     |           |                    d$|||j                   # tN          $ rF}|*                    ||tQ          |                     |)                    d%||           Y d }~d }~ww xY w0|                    d&i                               d'd          r6tW          |                    d&i           |          ,                                 |-                                 d S # |-                                 w xY w))NloggingdirlogslevelINFOmoviebothttpdatabasepathcleaner_config	db_mountspaths	playlists/m3u8	librariesplaylist_server
public_urlz/strmcrawl	max_pagesr   zCrawling source=%s max_pages=%sz;Skipped movie without m3u8 links source=%s slug=%s title=%sFcrawl_statussuccessorigin_m3u8_urlTr-   	strm_pathz3Skipped unchanged m3u8 source=%s slug=%s episode=%s
access_keyfailedz1Episode write failed source=%s slug=%s episode=%stvz(Crawled movie source=%s slug=%s title=%sz$Movie crawl failed source=%s slug=%sjellyfinscan_after_crawl ).r   r   r   r6   	getLoggerr	   r   r   r   r   r   intr    itemsr   info
list_slugsfetch_movier.   titleupsert_movieapply_canonical_movier,   upsert_serversourcer%   upsert_episodeget_episoder&   
media_typewrite_for_db_strmfilenamewritedb_pathseasonr)   update_episode_fileswrite_for_strm	file_path	Exceptionr0   	exceptionmark_source_failedr
   scanclose)r/   r1   r3   r   logr<   dbcleanerr@   playlist_writerstrm_writer
nfo_writerrH   source_namer   crawlerslugsslugr-   movie_idhas_success_episoder(   	server_idr)   
episode_idrowplaylist_resultstrm_resultexcs                                r   
crawl_oncer   "   sA   ;''J*..B//33E6BBJNNS\^`DaDaDeDefmouDvDvwww

J
'
'C33
vr2233D	z*-f5	6	6Bi
3C(DEEFFG{B//I$Z%8%EtWV_VcVcdoqxVyVyzzOZ0=zJ[?\]i?jlulyly  {F  HO  mP  mP  Q  QK:g.{;Y]];X_=`=`aaJJNN7B//33KCCDDI:*=j*I*I*O*O*Q*Q 5	] 5	]&K {k99#KEEGHH6YOOO#,OYKK'2D2DY2O2OE /] /].]#//55E-e44 !!^`kmqsxs~ !u55H44XuEEE*/'"'-  H  H$&$4$4Xu|V$T$T	'- H HG)+):):8YPUP\^e)f)fJ"$.."<"<C">2i??CHYDZ^e^nDnDn6: 3#(#3w#>#>3{CS#>$.$@$@KHX$Y$Y$Y #$Y$/$($+$4	!" !" !" !)H2A2G2GwO_ahaqsv  xD  tE  3F  3F.9.?.?$)$+$4$3$;$'$5$+N$+O/" /" !# 7 7
OD[]h]pr{ | | |#(#3w#>#>$.$=$=e[EZ$[$[$[6: 3 3#, H H H " 7 7
D$PXZ]^aZbZb c c c #.acnptv}  wG  !H  !H  !H  !H  !H  !H  !H  !HH9H> + 0u/?4/G/G"((///HHGVZ\a\ghhhh  ] ] ]))+tSXXFFFMM"H+W[\\\\\\\\][/]` >>*b))--.@%HH 	IJNN:r::DAAFFHHH









ss   A7V AS
V C;S
B&P,*S
,
R6AQ?9S
?RAS
V 

T;TV TA%V V+c            
     	   t          j        d          } |                     dg d           |                     dd           |                     d	           |                     d
           |                     d           |                                 }|j        dk    r"t          |j        |j        |j                   d S |j        dk    rt          |j                  }t          |                    di                               dd          |                    di                               dd                     |d         }t          |d                             dd          |                    dd          t          |                    dd                    |d         d                    d S |j        dk    r=t          |j                  }t          |                    di                               dd          |                    di                               dd                     |                    di                                           }|                    d|d         d                    |                    d|d                             dd                     |                    d |                    d!i                               d"d#                     t!          |           d S |j        d$k    rt          |j                  }t          |                    di                               dd          |                    di                               dd                     |                    d%i           }t#          d,i |                    d&i           }t%          ||                              |                    d'd(          |                    d)d*          |j                   d S |j        d+k    rt          |j                  }t          |                    di                               dd          |                    di                               dd                     t#          d,i |                    d&i           }t)          ||                              |j                   d S d S )-NzModular movie crawler bot)descriptioncommand)rG   serve-playlistsserve-nuvio-addonremap-slugs	sync-tmdb)choicesz--configzapp.yaml)defaultz--sourcez--slugz	--tmdb-idrG   r   r6   r7   r8   r9   r:   rE   rA   content_root.hostz0.0.0.0porti@  r=   r>   r   nuvio_addonrd   playlist_mountr@   rB   rC   r   	slug_mapsr<   movieszslug_map_movies.yamltvshowszslug_map_tvshows.yamlr   rR   )argparseArgumentParseradd_argument
parse_argsr   r   r   r]   rw   r   r   r   r   rT   copy
setdefaultr   r	   r   runr   tmdb_id)parserargsr   r(   addon_configr   r<   s          r   mainr   l   s   $1LMMMF
	+x+x+xyyy

J777

###
!!!
$$$D|w4;TY77777	*	*	*t{++
jnnY3377vFF
W`bdHeHeHiHijqsyHzHz{{{-.w##NC88JJvy))

64(())z"6*		
 	
 	
 	
 	
 
,	,	,t{++
jnnY3377vFF
W`bdHeHeHiHijqsyHzHz{{{!~~mR88==??	:j+A&+IJJJ
70C0G0GX[0\0\]]] 0*..b2Q2Q2U2UVacj2k2klll%%%%%		&	&t{++
jnnY3377vFF
W`bdHeHeHiHijqsyHzHz{{{NN;33	77JNN626677Z&&**MM($:;;MM)%<==I	
 	
 	
 	
 	

 
	$	$t{++
jnnY3377vFF
W`bdHeHeHiHijqsyHzHz{{{77JNN626677T""&&t|44444	 
%	$r!   __main__)r   r   r   r   )r   r"   )NN)r/   r0   r1   r2   r3   r2   r   r4   )r   r4   )%
__future__r   r   r6   addons.nuvio_addonr   r   r   crawlersr   r=   r   r<   r	   jellyfin.scan_botr
   rs   r   playlist.cleanerr   playlist.playlist_serverr   rq   r   remapr   rr   r   	tmdb_syncr   utilsr   r    r.   r   r   __name__rR   r!   r   <module>r      s   " " " " " "   / / / / / /       # # # # # # # # # # # #       . . . . . . ! ! ! ! ! ! - - - - - - 9 9 9 9 9 9 + + + + + +       # # # # # #                     \ \ \ \G G G G GT+5 +5 +5 +5\ zDFFFFF r!   