
    j'              	          d dl Z d dl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	  e	d      Z
 e	d      Z e	d      ZdZej                  dd        ej                  d	      Zd
 Zd Ze
j'                  dd      j)                         Zg Zd Zd Zd Zi ZeD ]  Zej9                  d      sej;                  e       'ej=                  e      Zes e d       ej;                  e       TejC                  d      jE                         Z#e#j9                  d      s e de#        ej;                  e        e de#        e#ev rLee#   Z$e$r& e de$        ejK                  de# dde$ d      Zn e d       edz  Zej;                  e        ee#      Z&ee&z  Z'e'jQ                         r(e'jS                         jT                  d kD  r e de'         ee#e'      rJe de& Z$e$ee#<    e d        e de'         e de$        ejK                  de# dde$ d      Zedz  Zndee#<   edz  Z e d       ej;                  e        e de d e d!e         ejV                   ejX                  d"d#              ej[                  d$j]                  e      d$z   d%        e          e d&e         e d'e         e d(e         e d)e        y)*    N)Pathz/srv/iptv/channels.m3uz/srv/iptv/channels-cached.m3uz/pub/iptv/artworkzhttp://localhost:8095/artworkT)parentsexist_okztvg-logo="([^"]*)"c                    t         j                  j                  |       }t        |j                        j
                  j                         }|dvrd}t        j                  | j                               j                         d d }||z   S )N>   .gif.jpg.png.svg.jpeg.webpz.img   )urllibparseurlparser   pathsuffixlowerhashlibsha256encode	hexdigest)urlparsedextdigests        /srv/iptv/scripts/cache_logos.pysafe_filenamer      so    \\""3'F
v{{

"
"
(
(
*C
DD^^CJJL)335cr:FC<    c                    |j                         r6|j                         j                  dkD  rt        d|j                          yddd}t        dd      D ]  }	 t        d	| d
       t        j                  j                  | |      }t        j                  j                  |d      5 }t        d|j                   d|j                  j                  d       d|j                  j                  d              |j                         }d d d        st        d        y|j                  |       t        dt        |      dd        y t        d!       y# 1 sw Y   QxY w# t        j                   j"                  $ r}|j$                  dk(  r/d|z  }t        d| d       t'        j(                  |       Y d }~m|j$                  dv r<d|z  }t        d|j$                   d| d       t'        j(                  |       Y d }~t        d|j$                   d|j*                          Y d }~ yd }~wt,        $ r/}t        d t/        |      j0                   d|        Y d }~ yd }~ww xY w)"Nr   zCACHE HIT: Tz"Mozilla/5.0 (Kodi IPTV Logo Cache)z@image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8)z
User-AgentAccept      zDOWNLOAD attempt z/4)headers   )timeoutzHTTP z type=zContent-Typez length=zContent-LengthzEMPTY RESPONSEFzWROTE ,z bytesi     z!HTTP 429 RATE LIMITED -- waiting s>           z TEMP ERROR -- retrying in zHTTP ERROR z: zERROR: zGAVE UP after 4 attempts)existsstatst_sizeprintnameranger   requestRequesturlopenstatusr#   getreadwrite_byteslenerror	HTTPErrorcodetimesleepreason	Exceptiontype__name__)	r   destr#   attemptreqrdataewaits	            r   fetchrK       sH   {{},,q0DII;'( ;TG
 A; 65	%gYb12..((g(>C''R'8  AAHH: &IIMM.9: ;iimm,<=>@ vvx  &'T"F3t9Q-v.//6p 

$%g   & ||%% 	vv}G|""&q*
 

4 vv--7{AFF8 $&&*V1.
 

4 Kxr!((45 	GDG,,-Rs34	sQ   AE*-A!EE*%*E*E'	#E**I58H:AH:%H::I5$I00I5zutf-8replace)encodingerrorsz#EXTINFzNO LOGO: entry has no tvg-logor!   )zhttp://zhttps://zSKIP NON-HTTP: z
PROCESSING: zDUPLICATE -> REUSE: z
tvg-logo=""z$DUPLICATE -> previous attempt failedzALREADY CACHED: /zSUCCESS:z  file: z  url:  z%FAILED -> keeping original remote URLzSTATUS: cached=z duplicates=z failed=g      ?g      ?
)rM   zCached/reused:      zDuplicate URLs:     zFailed:             zOutput playlist:    )/r   randomrer>   urllib.parser   urllib.requesturllib.errorpathlibr   SOURCEOUTPUTARTWORK_DIRBASE_URLmkdircompilelogo_rer   rK   	read_text
splitlineslinesoutcachedfailedskipped_duplicate	seen_urlsline
startswithappendsearchmr0   groupstrip
remote_url	local_urlrL   filenamerD   r-   r.   r/   r?   uniform
write_textjoin r   r   <module>ru      so     	     	&	'	-	.&'*   $  .
"***
+DL 	 	 	 *, 
 		
	
 	 I+D??9%

4tA./

4!!#J  !89
|,-

4	N:,
'(Yj)	(45<<ZL*YKq)D
 89Q

4Z(H!D{{},,q0 '(Zj(,	 )	* $%||A&1%

 	! !%	*!56JJt	
& "'( )	 DJJ~v~~dD)*SI+V   IIcNT  
  VH% & ./0 1 VH% & VH% &r   