
    9jk'                        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 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mZ d(dZd)dZd*dZd+d Zd,d%Zd-d&Zed'k    r e             dS dS ).    )annotationsN)Any)	load_yaml)normalize_api_movie)NormalizedMovie)	NfoWriter)
StrmWriter)library_namemovie_folder_namedb_path
str | Nonerootpathlib.Pathmountstr
local_rootreturnpathlib.Path | Nonec                X   | sd S t          |                               dd          }d|                    d           d}|                    |          r,||t	          |          d          z                                  S ||                    d          z                                  S )N\/)r   replacestrip
startswithlenresolvelstrip)r   r   r   r   
normalizedprefixs         moviebot\repair_slug.pydb_to_file_pathr!      s     tW%%dC00J$S!!$$$FV$$ BZF66??AAA:$$S)))22444    pathallowed_rootNonec                   | sd S 	 |                      |                                           n# t          $ r Y d S w xY w|                                 r*|                                 r|                                  d S d S d S )N)relative_tor   
ValueErrorexistsis_fileunlink)r#   r$   s     r    remove_filer,      s     --//0000   {{}}     s   '. 
<<rowsqlite3.Rowr   c           	        t          di d| d         pdd| d         pdd| d         pdd| d         pdd| d         pdd| d         pdd	| d	         pdd
| d
         pdd| d         pdd| d         pdd| d         pdd| d         pddt          j        | d         pd          dt          j        | d         pd          dt          j        | d         pd          dt          j        | d         pd          S )Nsource source_slugtitleoriginal_titleyear
media_typemovietmdb_idimdb_id
poster_urlbackdrop_urlruntimecontentgenresgenres_jsonz[]	countriescountries_jsonactorsactors_json	directorsdirectors_json )r   jsonloads)r-   s    r    row_to_movierI   &   s      8}"&," 'l b +,2	
 [B |$/ I$" I$" |$* (.B I$" I$" z#m,4555 *S!12:d;;; z#m,4555  *S!12:d;;;! r"   connsqlite3.Connectionr7   intc                   |                      d|j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
        |j        t          j        |j        d          t          j        |j        d          t          j        |j        d          t          j        |j        d          f           |                      d|j        f                                          }t'          |d                   S )Na
  
        INSERT INTO movies (
            merge_key, tmdb_id, media_type, title, original_title, year, imdb_id,
            poster_url, backdrop_url, runtime, content, genres_json, countries_json,
            actors_json, directors_json
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ON CONFLICT(merge_key) DO UPDATE SET
            tmdb_id=excluded.tmdb_id,
            media_type=excluded.media_type,
            title=excluded.title,
            original_title=excluded.original_title,
            year=excluded.year,
            imdb_id=COALESCE(NULLIF(excluded.imdb_id, ''), movies.imdb_id),
            poster_url=excluded.poster_url,
            backdrop_url=excluded.backdrop_url,
            runtime=excluded.runtime,
            content=excluded.content,
            genres_json=excluded.genres_json,
            countries_json=excluded.countries_json,
            actors_json=excluded.actors_json,
            directors_json=excluded.directors_json,
            updated_at=CURRENT_TIMESTAMP
        Fensure_asciiz)SELECT id FROM movies WHERE merge_key = ?id)execute	merge_keyr8   r6   r3   r4   r5   r9   r:   r;   r<   r=   rG   dumpsr>   r@   rB   rD   fetchonerL   )rJ   r7   r-   s      r    upsert_repaired_movierU   ;   s    LL	0 OMK JMMMJu|%888JuU;;;Ju|%888JuU;;;	
1) ) )T ,,BU_DV
W
W
`
`
b
bCs4y>>r"   config_pathr0   slugdict[str, Any]c                   t          |           }t          j                                                                        }||d         d         z                                  }|                    di           }|                    dd          }|                    dd          }t          |d         d         |d         d         |          }	t          |d         d         |          }
t          j	        |d	         d
                   }t          j
        |_        |                    d||f                                          }|s)|                                 t          d| d|           t!          |d                   }t#          |          }t%          j        |d         pd          }t)          |||          }t+          ||          }|                    d||d         f           |                    d||f                                          }|t/          |j                  z  t3          |j        |j        |j                  z  }t;          |dz  |           t;          |dz  |           |D ]Q}t=          |d         |||          }t;          ||           t;          |r|                    d          nd |           Ri }|j         D ]}|                    d|||j!        |j"        t%          j#        |j$        d          f           |                    d|||j!        f                                          }t!          |d                   ||j!        <   d}|j         D ]}|j%        D ]}|                    d|||j&        f                                          }|r&t!          |d                   }|d         }|d          }nd}d!}d }|sd!}|	'                    ||j(        |||j)        |j*                  }|                    d"|||j!                 |j+        |j        |j(        |j)        |j*        |j,        t%          j#        |j$        d          |f
           |
-                    ||j.                   |d#z  }||k    rX|                    d$||f           |                    d%|f                                          s|                    d&|f           |} | |k    r[| /                                rG	 | 0                                 n# tb          $ r Y n%w xY w| j2        } | |k    r| /                                G|3                                 |                                 ||j        ||j        |d'S )(Npaths	libraries	db_mountsz/strm	playlistsz/m3u8playlist_server
public_urldatabaser#   a  
        SELECT ms.id AS source_id, ms.source, ms.source_slug, ms.raw_json, ms.movie_id,
               m.title, m.original_title, m.year, m.media_type, m.tmdb_id, m.imdb_id,
               m.poster_url, m.backdrop_url, m.runtime, m.content, m.genres_json,
               m.countries_json, m.actors_json, m.directors_json
        FROM movie_sources ms
        JOIN movies m ON m.id = ms.movie_id
        WHERE ms.source = ? AND ms.source_slug = ?
        zSlug not found: source=z slug=movie_idraw_jsonz{}zRUPDATE movie_sources SET movie_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?	source_idz8SELECT * FROM episodes WHERE movie_id = ? AND source = ?z
tvshow.nfoz	movie.nfo	strm_pathz.nfoa@  
            INSERT INTO servers (movie_id, source, name, priority, raw_json)
            VALUES (?, ?, ?, ?, ?)
            ON CONFLICT(movie_id, source, name) DO UPDATE SET
                priority=excluded.priority,
                raw_json=excluded.raw_json,
                updated_at=CURRENT_TIMESTAMP
            FrN   zESELECT id FROM servers WHERE movie_id = ? AND source = ? AND name = ?rP   r   z
                SELECT *
                FROM episodes
                WHERE movie_id = ? AND source = ? AND origin_m3u8_url = ?
                ORDER BY id
                LIMIT 1
                
access_keycleaned_m3u8_pathr1   a  
                UPDATE episodes
                SET movie_id = ?, server_id = ?, source_episode_id = ?, title = ?, filename = ?,
                    season = ?, episode = ?, strm_path = ?, raw_json = ?, updated_at = CURRENT_TIMESTAMP
                WHERE id = ?
                   z5DELETE FROM servers WHERE movie_id = ? AND source = ?z6SELECT 1 FROM movie_sources WHERE movie_id = ? LIMIT 1zDELETE FROM movies WHERE id = ?)old_movie_idold_media_typetarget_movie_idnew_media_typefixed_episodes)4r   pathlibPathcwdr   getr	   r   sqlite3connectRowrow_factoryrQ   rT   closer(   rL   rI   rG   rH   r   rU   fetchallr
   r6   r   r3   r5   r8   r,   r!   with_suffixserversnamepriorityrS   rawepisodesm3u8_urlwritefilenameseasonepisodesource_episode_idr   write_for_strm	file_pathr)   rmdirOSErrorparentcommit)!rV   r0   rW   
app_configr   library_rootr\   
strm_mountplaylist_mountstrm_writer
nfo_writerrJ   
source_rowrh   	old_moviepayloadrepairedrj   old_episode_rows
old_folderold_episodeold_strm
server_idsserver
server_rowrl   r   existing
episode_idre   cleaned_pathresultcurrents!                                    r    repair_slugr   j   s"   ;''J<%%''D:g.{;;DDFFL{B//I{G44J]];88N7K($%l3 K
 :g.{;ZHHJ?:j1&9::D{D	 
  hjj   I

G6GGGGHHHz*-..LZ((IjJ/7488G"6499H+D(;;OLLehw  zD  EP  zQ  hR  S  S  S||$^amou`vww  A  A  C  CY-A B BBEVW`Wfhqhv  yB  yJ  FK  FK  KJ
\)<888
[(,777' V V";{#;T:|\\Hl+++HFH((000$UUUU!#J" 8 8 ffk6?DJvzhmDnDnDno
	
 
	
 
	
 \\Sffk2
 
 (** 	 #&j&6"7"7
6;N" .  .  -	  -	 G|| vw'78	 	 hjj   $ $00
%l3
'(;<

# "! &&x1A<Q[]d]kmtm|}}FLL $v{+-M$NONJw{???  ( %%h0@AAAaNN[-	 ^ &&L|]cNdeee||TWcVeffooqq 	MLL:\OLLLG
\
!
!gnn&6&6
!	MMOOOO 	 	 	E	. \
!
!gnn&6&6
! 	KKMMMJJLLL %#.*"-(  s   T 
T&%T&c                 ~   t          j        d          } |                     dd           |                     dd           |                     d	d           |                                 }t	          |j        |j        |j                  }|                                D ]\  }}t          | d
|            d S )Nz!Repair one slug from raw DB data.)descriptionz--configzapp.yaml)defaultz--sourceT)requiredz--slugz: )
argparseArgumentParseradd_argument
parse_argsr   configr0   rW   itemsprint)parserargsr   keyvalues        r    mainr      s    $1TUUUF

J777

T222
4000Ddk49==Fllnn ! !
U    ! !r"   __main__)
r   r   r   r   r   r   r   r   r   r   )r#   r   r$   r   r   r%   )r-   r.   r   r   )rJ   rK   r7   r   r   rL   )rV   r   r0   r   rW   r   r   rX   )r   r%   )
__future__r   r   rG   rm   rq   typingr   moviebot.configr   moviebot.crawlers.commonr   moviebot.modelsr   moviebot.nfo_writerr   moviebot.strm_writerr	   moviebot.utilsr
   r   r!   r,   rI   rU   r   r   __name__rF   r"   r    <module>r      sa   " " " " " "           % % % % % % 8 8 8 8 8 8 + + + + + + ) ) ) ) ) ) + + + + + + : : : : : : : :5 5 5 5      *, , , ,^I I I IX! ! ! ! zDFFFFF r"   