
   *6M}                   0   	 d dl 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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 d dlmZ 	 d dlmc mZ n# e$ r d dlmc mZ Y nw xY w	 d dlmZ n# e$ r dZY nw xY wd dlmZ d dlmZ d dlmZ d d	lm Z  d dl!Z!d dl"Z"e!j#        rd d
l$m%Z%m&Z&m'Z'm(Z( nd d
l%m%Z%m&Z&m'Z'm(Z( g Z)dZ*dZ+dZ,d Z-d Z.dZ/dZ0ej1        2                    e/d          Z3dZ4dZ5dZ6ddiZ7 G d de8          Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd  ZBd2d"ZC G d# d$          ZD G d% d&          ZE G d' d(          ZF G d) d*          ZGd+ ZHd3d,ZIeJd-k    r=e.r!d.Z0d/Z/d0Z4ej1        2                    e/d          Z3 ejK         eI                       dS d1Z5dS )4    )print_functionN)Image)OrderedDict)eDVBDB)ArgumentParser)RawDescriptionHelpFormatter)rangeescape)urlparsequoteparse_qs
quote_plusz0.9.1z
2017-06-04z
2022-12-29z/etc/enigma2/z/etc/epgimport/ze2m3u2bouquet/z/usr/share/enigma2/picon/Fz#SERVICE 1:832:d:0:0:0:0:0:0:0:z
User-AgentzfMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36c                   ,     e Zd Z	  fdZd Zd Z xZS )CLIErrorc                     t          t                                        t          |                      d|z  | _        d S )NzE: %s)superr   __init__typemsg)selfr   	__class__s       /home/vix/6.4/builds/openvix/release/vuultimo4k/tmp/work/cortexa15hf-neon-vfpv4-oe-linux-gnueabi/enigma2-plugin-extensions-e2m3u2bouquet/enigma2-plugin-extensions-e2m3u2bouquet-0.9.0+gitAUTOINC+7d0469119f-r1/image/usr/lib/enigma2/python/Plugins/Extensions/E2m3u2bouquet/e2m3u2bouquet.pyr   zCLIError.__init__N   s2    //4::&&&s]$(((    c                     | j         S Nr   r   s    r   __str__zCLIError.__str__R   	    	/r   c                     | j         S r   r   r   s    r   __unicode__zCLIError.__unicode__U   r    r   )__name__
__module____qualname__r   r   r"   __classcell__)r   s   @r   r   r   K   sY        A            r   r   c                      t          d           t          d                    t                               t          t          t          j                                                             t          d           d S )N!
********************************z"Starting Enigma2 IPTV bouquets v{}!********************************
)printformat__version__strdatetimenow r   r   display_welcomer1   Y   sh    +,,,+22;??@@@s8  ""##$$$+,,,,,r   c                     t          d           t          d           t          d           t          d           t          d           t          d           t          d           t          d           t          d	           d S )
Nr(   z Enigma2 IPTV bouquets created ! z ********************************z
To enable EPG dataz"Please open EPG-Importer plugin.. z-Select sources and enable the new IPTV sourcez>(will be listed as under 'IPTV Bouquet Maker - E2m3u2bouquet')zESave the selected sources, press yellow button to start manual importzGYou can then set EPG-Importer to automatically import the EPG every day)r*   r0   r   r   display_end_msgr3   `   s    +,,,)***)***+,,,6777GHHHNOOOPQQQQQr   c                      	 	 t          j        t                     d S # t          $ r!} | j        t          j        k    r Y d } ~ d S d } ~ ww xY wr   )osmakedirsCFGPATHOSErrorerrnoEEXIST)es    r   make_config_folderr<   l   sg    	+g 	 	 	W 	s    
A	AA	c                     	 t          d           	 t          d           t          j        t                    D ]y} d| v r8t          j        t          j                            t          |                      >d| v r7t          j        t          j                            t          |                      zt          d           t          j                            t                    rWt          j        t                    D ]=} d| v r7t          j        t          j                            t          |                      >t          d           t          j	        t          j                            t          d          t          j                            t          d                     t          t          j                            t          d          d	          }t          t          j                            t          d                    }|D ]}d
|vr|                    |           |                                 |                                 n"# t          $ r}t          d            d }~ww xY wt          d           d S )Nz----Running uninstall----zRemoving old IPTV bouquets...zuserbouquet.suls_iptv_zbouquets.tv.bakz Removing IPTV custom channels...
suls_iptv_z*Removing IPTV bouquets from bouquets.tv...bouquets.tvw+z.suls_iptv_zUnable to uninstallz----Uninstall complete----)r*   r5   listdir
ENIGMAPATHremovepathjoinisdirEPGIMPORTPATHrenameopenwriteclose	Exception)fnametvfilebakfileliner;   s        r   uninstallerrQ   v   s   "###'(((z*%% / /e%''Ibgll:u--....U""Ibgll:u--...*+++W]]=!! 3
=)) 3 3uuYrw||M5112224555)BGLL]33RW\\*N_5`5`aaaZ77>>&j*;<<=='  d4
LL	--///,,....    #$$$$$s   II 
I3I..I3c                 h    	 | |v r,||                               dd          r||          d         n| S | S )NnameOverrideFget)catcategory_optionss     r   get_category_titlerX      sJ    2B32G2K2KN\a2b2b	k	#	~	.	.hkkr   c                 P    	 |                      dd          r| d         n| d         S )NrS   Fstream-namerT   )channels    r   get_service_titler\      s0    #*;;~u#E#Ea7S`Kaar   c                      t           sqt          d           t          r6t          j                                                     t          d           d S t          j        d           t          d           d S d S )Nz
----Reloading bouquets----zbouquets reloaded...zKwget -qO - http://127.0.0.1/web/servicelistreload?mode=2 > /dev/null 2>&1 &)TESTRUNr*   r   getInstancereloadBouquetsr5   systemr0   r   r   reload_bouquetsrb      s     !&''' !	&&(((	     9Z[[[	     ! !r   c                 (    t          | ddd          S )Nz&quot;z&apos;)"'r
   strings    r   
xml_escaperh      s    vXH55666r   c                 0    	 |                      dd          S )Nz--z- - )replacerf   s    r   xml_safe_commentrk      s    $tV$$$r    c                    	 |                      dd                               dd          }t          |t          j                  r|                    d          }t          j        dt          j        |dd                                        d	d          }t          j        d
d|	                                          }|s|}t          j
        |          S )N _/utf-8NFKDutf_8ignoreerrorsASCIIs   [^a-z0-9-_]r   )rj   
isinstancesix	text_typeencodeunicodedata	normalizeresublower
ensure_str)filenamefallbacknames      r   get_safe_filenamer      s    c""**344tS]## 	W		$fcmD'(&S&S&STT[[\cemnn
~sDJJLL11 	$tr   c                       e Zd ZdZdZdS )StatusFrl   N)r#   r$   r%   
is_runningmessager0   r   r   r   r      s        r   r   c                       e Zd Zd ZdS )ProviderConfigc                 :   d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nrl   r   F)r   numenabledsettings_levelm3u_urlepg_urlusernamepasswordprovider_update_urlprovider_hide_urls
iptv_typesstreamtype_tvstreamtype_vod	multi_vodall_bouquetpicons	icon_pathsref_overridebouquet_urlbouquet_downloadbouquet_toplast_provider_updater   s    r   r   zProviderConfig.__init__   s    $)$($,$$,$,$-$-$!$$/$$$.$$+$.$$$$$r   N)r#   r$   r%   r   r0   r   r   r   r      s#                 r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd$dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$dS )%Providerc                     d| _         i | _        d | _        g | _        i | _        t                      | _        d | _        || _        d S )Nrl   )	_panel_bouquet_file_panel_bouquet	_m3u_file_category_order_category_optionsr   _dictchannels_xmltv_sources_listconfig)r   r   s     r   r   zProvider.__init__   sH    $$$.$$"}}$!$$+++r   c           	         |d         }|r{|                     d          sd                    |          }|                     |          }t          j                            | j        j        t          j	        |                    }t          t          t          j        j        t          j        |dz                                 }|st          r2t          d           t          d                    |                     nDt           s=t"          j                            d           t"          j                                         	 t+          j        |t.          d	          }|j        d
k    r|j        d                             d          d                                                              d          rCt9          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   n-t          rt          d           |                     |           d S nD# t>          $ r7}t          rt          d|           |                     |           Y d }~d S d }~ww xY w|                      |           d S d S d S )Ntvg-logohttpz	http://{}*z$Picon file doesn't exist downloadingzPiconURL: {}.Theadersallow_redirects   zContent-Type;r   zimage/wbz'Download Picon - not an image, skippingzDownload picon error)!
startswithr+   _get_picon_namer5   rD   rE   r   r   ry   r   listfilterisfileglobDEBUGr*   IMPORTEDsysstdoutrJ   flushrequestsrU   	myheadersstatus_coder   splitr   rI   content_picon_create_emptyrL   _picon_post_processing)	r   r[   logo_url	piconnamepicon_file_pathexistingpiconrfr;   s	            r   _download_picon_filezProvider._download_picon_file   s   Z (  1


f
%
% ,!!(++H##G,,9W\\$+"7	9R9RSS?rw~ty39N/O/OPPQQ=
 1 
1222
>  **++++  	js	j	h	4	H	H	HQ	>!:!@!@!E!Ea!H!N!N!P!P![![\d!e!e&& !wwqy               
 86777
///f    '"A&&&	o...VVVVV	
 	00000A 1  11 1s=   	BH, G2&H, 2G66H, 9G6:/H, ,
I-6,I((I-c                 R    	 t          |dz   d                                           d S )Nz.Nonea)rI   rK   )r   r   s     r   r   zProvider._picon_create_empty  s0      #&&,,.....r   c                    	 d}	 dd l }d|                    |          z   }ni# t          $ r dd l}|                    |          }Y nDt
          $ r8}t          rt          d||           |                     |           Y d }~d S d }~ww xY w|d k    r|dk    rt          rt          d           	 t          j
        |                              d                    |d                     nD# t
          $ r7}t          rt          d	|           |                     |           Y d }~d S d }~ww xY w	 t          j        |           d S # t
          $ r"}t          rt          d
|           Y d }~d S d }~ww xY w	 t          j        |d                    ||                     d S # t
          $ r(}t          rt          d|           Y d }~d S Y d }~d S d }~ww xY w)Nrl   r   r   z/Picon post processing - not an image or no filez.pngzConverting Picon to pngz{}.{}pngz/Picon post processing - unable to convert imagez5Picon post processing - unable to remove non png filez{}{}z.Picon post processing - unable to rename file )imghdrwhatImportError	puremagic	from_filerL   r   r*   r   r   rI   saver+   r5   rC   rH   )r   r   extr   r   r;   s         r   r   zProvider._picon_post_processing  s}    	#

===	v{{?++	+33	 . . .			_	-	-333	 
 
 
 Q	
;QPPPO,,,	66666	
 
Tkkv %	
#$$$	J$$W^^OU%K%KLLLL
    A
<a@@@_---
FFFFF	
Io
    G
BAFFF
FFFFF@Iov}}_cBBCCCCC
 @ @ @ @
;Q?????????@ @ @ @ @ @@sc   " #B	B-BB.;C* *
D+4,D&&D+/E 
E1E,,E15)F   
G*GGc                 ,   	 t          |          }|}t          |t          j                  r|                    d          }t          j        dt          j        |dd                                        dd          }t          j        dd|	                    d	d
          	                    dd          	                    dd          
                                          }|s.|d         	                    dd                                          }|S )Nrq   rr   rs   rt   ru   rw   s   [\W]r      &s   and   +s   plus   *s   star
serviceRef:ro   )r\   rx   ry   rz   r{   r|   r}   r~   r   rj   r   upper)r   r[   service_titler   s       r   r   zProvider._get_picon_nameF  s    #G,,-	$cm$$ 
++g

4		vs}T78'T'T'T	U	U	\	\]dfn	o	o$	dll488gg
 
$ 
 :
,

'
'S
1
1
7
7
9
94	+r   c                    	 t           j                            | j                  rGt	          | j        d          5 }|D ]}d|v r|                                                    d          }t          |          dk    r|d                             d          }|dk    r|dz   t          |d                   k    rw|d         |dz   d          }d	                    |d         |d	         |d
         |d         |d         |d         |d         |d         |d         f	          }|dk    r
|| j
        |<   	 d d d            n# 1 swxY w Y   t          st          j        | j                   d S d S d S )Nr   z#SERVICEr      
   rp                           	   z0:1:0:0:0:0:0:0:0)r5   rD   r   r   rI   stripr   lenrfindrE   r   r   rC   )r   r   rP   serviceposkeyvalues          r   _parse_panel_bouquetzProvider._parse_panel_bouquetX  s    W^^D,-- (T%s++ *q * *d

""3''g	W		R[s##s
))qC$4$444bk#'((#'!*gaj'!*gaj'RS*aj'!*gaj'!*> ? ?'''$)	S	!** * * * * * * * * * * * * * *  (Id&'''''#( (( (s   C8EEEc                 <   	 t          |d                   }t          j                            |j                  \  }}t	          j        d|j                  }|j                            d          s|j                            d          s|sA|s?| j        j        rdnd|d<   | j        j	        rt          | j        j	                  |d<   d S d S d|d	<   d
                    |d                   |d<   | j        j        sdnt          | j        j                  |d<   d S )N
stream-urlz\.[^/]+\.m3u8$tsz.m3u840971stream-typevodcategory_typezVOD - {}group-title)r   r5   rD   splitextr~   searchendswithr   r   r   r-   r+   r   )r   service_dictparsed_stream_urlrootr   is_m3u8_vods         r   _set_streamtypes_vodcatsz!Provider._set_streamtypes_vodcatso  s<   |L9::g0566)$ 	*,=,BCC+%%d++ 
o/@/E/N/Nw/W/W 
o
o
o ,0;+A!Js<
k A"%dk&?"@"@LA A $)< !,!3!3L4O!P!P</3{/I!nsSWS^SmOnOn<r   c                     	 g }|                                  }|r|                     d           t          d                    t          j                             	 t          j        |          }|                    d          D ]}i }|j	        
                    d          }t          |t          j                  st          j        |          }|j	        
                    dd          }t          |t          j                  st          j        |          }||d<   |j	        
                    dd	          d
k    |d<   |                    |           |j	        
                    dd          d
k    }|rd	|d<   || j        vr
g | j        |<   || j        |<   |                     d           t          t          j                   n1# t$          $ r$}	d}
t          |
           t&          r|
Y d }	~	nd }	~	ww xY w|S )Nz$----Parsing custom bouquet order----
filez.//categoryr   rS   rl   r   TtruecustomCategoryFzcustom bouquet order applied...Corrupt override.xml file)_get_mapping_file_update_statusr*   r+   r   r   ETElementTreefindallattribrU   rx   ry   rz   ensure_textappendr   r   rL   r   )r   category_ordermapping_filetreenode
dictoptioncategorycat_title_overrideis_custom_categoryr;   r   s              r   _parse_map_bouquet_xmlzProvider._parse_map_bouquet_xml  s   .'')), "=>>>V^	$	$%%%>|,,,D]++ 3 3Z''Xx// +**h+//."==)3=99 ??+=>>"4Z![__Y==GZ	8$$$ +//*:EBBfL )%)j!"	+	+	+&(t(#(2TH%%9:::	&.
   
%C	#JJJ Y     
s   E/G 
G;G66G;c           	         	 | j         D ]}|dk    r| j                            |          rh| j                            |          ddddddt          di}|| j        |<   | j        |         d	                             d
d          | j        |         d<   | j                            |          ddddddt          di}|| j        |<   d S )NVODrS   rl   r   Tr  Fliver   r   r   r   )r   r   rU   r   r   )r   rV   r  s      r   _set_category_typezProvider._set_category_type  s    ! . .c	Ullc"" c""3''/"B	49I5j$.dS!+/+=c+B1+E+I+I/[a+b+bTC (!!#&&.!2y$8H%
Z#-TC . .r   c                 $    	                                   }|rq                     d           t          d                    t          j                             	 t          j        |          }d} j        D ]_} j	        |         
                    dd          dk    r6g }g }|                    d                    |                    D ]}|j        
                    d          |j        
                    d	          d }	 t           fd
 j                 D             d           }n# t          $ r Y nw xY w|> j        |                              j                                     |                      j        |         D ]}	|                    |	d                    |                    d                    |                    D ]}|j        
                    d          dk    rNdt#          |          z   |                                j        |                             di           |dz  }|                               |                    |           t'          d |D                                                       }d t+          |          D              j        |                             fd           a                     d           t          t          j                   |                    d          }
|
D ]}|j        
                    d          |j        
                    d	          |j        
                    d          d }d }r;	 t           fd j                 D             d           }n# t          $ r Y nw xY wr| j        
                              }n j        
                              }|9dk    r2|D ].}	|	d         k    r|j        
                    d          dk    rd|	d<   |j        
                    dd          |	d<   |j        
                    dd          |	d<   |j        
                    d|	d                   |	d<   |j        
                    dd           r5 j        j        r)|j        
                    d|	d                   |	d<   d|	d <   |j        
                    d!|	d"                   |	d"<   |j        
                    d#          d$k    }|rd|	d"<    n0	                     d%           t          t          j                   d S # t4          $ r%}d&}t          |           t6          r|Y d }~d S d }~ww xY wd S )'Nz7----Parsing custom channel order, please be patient----
{}r  r   r   r$  z".//channel[@categoryOverride="{}"]r   r  c              3   p   K   | ]0}|d          k    j                                      |          V  1dS rZ   Nr   index).0itemr  	node_namer   s     r   	<genexpr>z3Provider._parse_map_channels_xml.<locals>.<genexpr>  sT       4 44}%22 #0:@@FF22224 4r   rZ   z.//channel[@category="{}"]placeholderplaceholder_r   c              3      K   | ]}|d fV  	dS TNr0   r,  xs     r   r/  z3Provider._parse_map_channels_xml.<locals>.<genexpr>  s&       C Cq!T C C C C C Cr   c                     i | ]\  }}||	S r0   r0   )r,  r+  r[   s      r   
<dictcomp>z4Provider._parse_map_channels_xml.<locals>.<dictcomp>  s    YYY~ugGUYYYr   c                      | d                  S )NrZ   r0   )r5  channel_order_dicts    r   <lambda>z2Provider._parse_map_channels_xml.<locals>.<lambda>  s    1CAmDT1U r   )r   zcustom channel order applied...r[   categoryOverridec              3   p   K   | ]0}|d          k    j                                      |          V  1dS r)  r*  )r,  r-  category_overrider   r   s     r   r/  z3Provider._parse_map_channels_xml.<locals>.<genexpr>  sV       - -SW]#t++ "/0ABHHNN++++- -r   r   falseFrS   rl   tvg-idr   TserviceRefOverride	streamUrlr   clearStreamUrlr  zcustom overrides applied...r  )r  r  r*   r+   r   r   r  r  r   r   rU   r  r  nextKeyErrorr  popr-   extendr   keys	enumeratesortiterr   r   rL   r   )r   r  r  irV   sortedchannelslistchannelsr  channel_indexr5  channel_nodesoverride_channelchannels_listclear_stream_urlr;   r   r  r=  r9  r   r.  s   `               @@@@@r   _parse_map_channels_xmlz Provider._parse_map_channels_xml  sc   '')), dPQQQv~	&	&'''`>|,,,D	A! +W +Ws#''776AAnl ,,DKKCPPQQ X X$;??6**y+//*--x} 4 4 4 4 4 4SWSefnSo 4 4 459; ;    
#3&&t'9('C'G'G'V'VWWW!#& - -!1]+,,,,,,<CCCHHII 	( 	($;??6**y
}
$
$"SVV+	I&&&3&&y'ABBB	QY''''L)))  C CN C C CCCHHJJl ZY<AXAXYYY
""'U'U'U'U"VVV9:::	&. IIi((M) % %#''//T '++J77X)0445GHH]]  - - - - - -[_[mn  \A - - -.24 4}}   t 	 7m7(,,->??mm(,,X66m!dm&;&;  !
M
d
"
""&&y11W<<9,377KK. 0 7 ; ;<NPR S S
&-11(AhKHH("&&|T:: 	(t{?X 	(+266|Q|_UU<#'	 *155k1\?SS,+2667GHHFR 	< #  	5666	&.
   
%C	#JJJ Y     Ad dsc   !B+U )D76U 7
EU EH8U =)N'&U '
N41U 3N44F(U 
V(VVc                 :   d }|                                  }t          j                            t          |dz             t          j                            t          j                    |dz             g}|D ]%}t          j                            |          r|} n&|S )Nz-sort-override.xml)_get_safe_provider_filenamer5   rD   rE   r7   getcwdr   )r   r  provider_safe_filenamesearch_pathrD   s        r   r  zProvider._get_mapping_file+  s    ,;;==g'=@T'TUU
RY[["8;O"OPPR+ 
 
dgnnT 
L	E
 
r   c           	         	 |d                              d          st          j        t          |                    }|                    d                    |d         t          |d                   |                     |                    d                    |                     d S |                    d                    t                               d S )NrZ   r1  z#SERVICE {}:{}:{}
r   r   #DESCRIPTION {}
{}
)r   ry   r   r\   rJ   r+   r   PLACEHOLDER_SERVICE)r   r   r[   titles       r   _save_bouquet_entryzProvider._save_bouquet_entry6  s    			*	*>	:	: />+G4455577 ''(=uW\EZ?[?[]bccddd77%%e,,-----776==,--.....r   c                 .    d                     ||          S )Nz\#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.suls_iptv_{}_{}.tv" ORDER BY bouquet
)r+   )r   cat_filenameprovider_filenames      r   _get_bouquet_index_namez Provider._get_bouquet_index_name@  s    
iV|,,.r   c                    	 |                                  }|rt          t          j                            t
          d          d          5 }|                    d           | j        j        r5|D ]}|                    |           |D ]}|                    |           n4|D ]}|                    |           |D ]}|                    |           d d d            d S # 1 swxY w Y   d S d S )Nr?   wz#NAME Bouquets (TV)
)	_get_current_bouquet_indexesrI   r5   rD   rE   rB   rJ   r   r   )r   iptv_bouquetscurrent_bouquet_indexesr   bouquets        r   _save_bouquet_index_entriesz$Provider._save_bouquet_index_entriesD  se    !==?? RW\\*m44c:: aGG#$$${ 	!  ggg+  ggg ,  ggg!  ggg                  s   BC##C'*C'c                 V   	 g }t          t          j                            t          d          d          5 }|D ]V}|                    d          rd                    |                                           |vr|                    |           W	 d d d            n# 1 swxY w Y   |S )Nr?   r   z#NAMEz.suls_iptv_{})	rI   r5   rD   rE   rB   r   r+   rU  r  )r   current_bouquets_indexesr   rP   s       r   re  z%Provider._get_current_bouquet_indexesX  s    BGLL]33S99 ,Q , ,tw ,""4#C#C#E#EFF$NN%%d+++,, , , , , , , , , , , , , , , 
"!s   ABB"%B"c           	         	 |                      d           t          d                    t          j                             g }|                                 }d                    |          }t          |          }t          j        	                    t          d                    ||                    }t          r"t          d                    |                     t          |d          5 }|                    d                    t          j        | j        j                  t          j        |                               t%          d          D ]/}|                    d	                    t&                               0d
}| j        D ]i}	d}
| j        |	                             dd          dk    r/| j                            |	i                               dd          }
|	| j        v r|
rt1          |	| j                  }|                    d           |                    d                    t          j        |                               | j        |	         D ]M}|                    d          s|d                             d          r|                     ||           |d
z  }N|dz  dk    r;|                    d	                    t&                               |d
z  }|dz  dk    ;k	 d d d            n# 1 swxY w Y   |                    |                     ||                     |                      d           t          t          j                   |S )Nz%----Creating all channels bouquet----r'  z{} All Channelsuserbouquet.suls_iptv_{}_{}.tvCreating: {}r@   z#NAME {} - {}
d   r[  r   Fr   r$  r   T#SERVICE 1:64:0:0:0:0:0:0:0:0:
rZ  rZ   r1  r   z all channels bouquet created ...)r  r*   r+   r   r   rU  r   r5   rD   rE   rB   r   rI   rJ   ry   r   r   r   r	   r\  r   r   rU   r   rX   r   r^  r  rb  )r   bouquet_indexesra  bouquet_namer`  bouquet_filepathr   rK  channel_numrV   cat_enabled	cat_titler5  s                r   _create_all_channels_bouquetz%Provider._create_all_channels_bouquetf  so   =>>>fn%%&&&/6688"))*;<<,"<00, W\\*.N6#\224 4
 2		/	0	0111d## q77##CN4;3C$D$DcnUaFbFbccddd #JJ 0 0qGGFMM-..////;"  sKc"&&vv66&@@)--c266::9dKK[
d   [ #C)?@@YWW/000WW ''y(A(ABBCCC %  	
y		 &Q}-88HH &1%%%Qkk#!##ggfmm/00111Qk #!##              8 55lDUVVWWW8999	s   /HLLLNc                    	 d}|                                  }|rd                    ||          n|}t          j                            t
          d                    |                    }t          j                            t
          d                    t          |                              }t          t          j                            t
          |          d          5 }|                    d           |                    d                    |                     |                    d                    d	|z  |                     |                    d
                    d|z  t          t          j        |                                         |D ].}	|                    d                    d|z  |	                     /|                    d                    d	|z                       |                    d                    |                     |                    d           d d d            d S # 1 swxY w Y   d S )N  {} - {}suls_iptv_{}_channels.xmlzsuls_iptv_{}.sources.xmlr@   z
<sources>
zA{}<sourcecat sourcecatname="IPTV Bouquet Maker - E2m3u2bouquet">
z6{}<source type="gen_xmltv" nocheck="1" channels="{}">
r   z {}<description>{}</description>
r   z{}<url><![CDATA[{}]]></url>
z{}</source>
z{}</sourcecat>
z</sources>
)rU  r+   r5   rD   rE   rG   r   rI   rJ   rh   ry   r   )
r   sourcesgroupindentrW  source_namechannels_filenamesource_filenamer   sources
             r   _create_epgimport_sourcez!Provider._create_epgimport_source  sG   &;;==CHd	  !7???Nd+gll=2M2T2TUk2l2lmm GLL0JV%k22335 5/ BGLL88$?? 
177=77OVVW]^^___77DfQZ*++- - -77.55a&j*S^\gMhMhBiBijjkkk H HvGG+221v:vFFGGGG77?!!!f*--...77$$V,,---77>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   "EH==IIc                     	 t          j        | j        j                            d          |                    d          z                                             d d         S )Nrq   r   )hashlibmd5r   r   r{   	hexdigest)r   rV   s     r   _get_category_idzProvider._get_category_id  sQ    D	T[%,,W55

78K8KK	L	L	V	V	X	XY[Z[Y[	\\r   c                     | j         d uS r   )r   r   s    r   _has_m3u_filezProvider._has_m3u_file  s    	t	##r   c                 F   	 | j         j        rt          | j         j                  }t          |j                                      d          }|r|d         | j         _        t          |j                                      d          }|r|d         | j         _        d S d S d S )Nr   r   r   )r   r   r   r   queryrU   r   r   )r   parsedusername_parampassword_params       r   _extract_user_details_from_urlz'Provider._extract_user_details_from_url  s    1	[ -T[())6V\**..z::> -)!,DKV\**..z::> -)!,DK- -- -r   c                 ~    d                     t          j        | j        j                  |          t
          _        d S )Nz{}: {})r+   ry   r   r   r   r   r   )r   r   s     r   r  zProvider._update_status  s*    ??3>$+2B#C#CWMM&...r   c                 0   	 d}t          j                    }t          j                            |d                    | j        j                            }|                     d           t          d                    t          j                             t          d| j        j                   	 t          j        | j        j        t          dd          }|j        dk    rBt#          |d	          5 }|                    |j                   d d d            n# 1 swxY w Y   nI# t(          $ r<}t          d
t+          |          j                   t          d|           Y d }~nd }~ww xY wt          j                            |          r	 t#          |d          5 }|                                                                }d d d            n# 1 swxY w Y   |r|                    d          d         |                    d          d         |                    d          d         d}|                    d          r|                    d          rz|d         | j        _        |d         | j        _        |                    d| j        j                  | j        _        t;          t=          j                              | j        _        d}n&# t@          $ r}t          d           Y d }~nd }~ww xY wtB          st          j"        |           |S )NFzprovider-{}-update.txtz)----Downloading providers update file----r'  zprovider update url = T)r   r   verifyr   r   z.[e2m3u2b] process_provider_update error. Type:z)[e2m3u2b] process_provider_update error: r   ,r   r   r   )r   m3uepgr   r  r  zM[e2m3u2b] _process_provider_update error unable to read providers update file)#tempfile
gettempdirr5   rD   rE   r+   r   r   r  r*   r   r   r   r   rU   r   r   rI   rJ   r   rL   r   r#   r   readliner   r   r   r   inttimer   
IndexErrorr   rC   )	r   updatedrD   r   r   r   r;   rP   provider_tmps	            r   _process_provider_updatez!Provider._process_provider_update  sT   .'				$W\\$ 8 ? ?@P Q QRR(ABBBfn%%&&& $+"ABBB9|DK3YX\ejkkk1ms	h		 WWQY              	 9 9 9	9477;KLLL	4a888888889 W^^H [	h		 !JJLL  T! ! ! ! ! ! ! ! ! ! ! ! ! ! ! jjooa ZZ__QZZ__Q \ 	   \%5%5e%<%< %f-dk(/dk(,,UDK4GHHdk),TY[[)9)9dk&g
 [ [ [	
YZZZZZZZZ[  Ih	.sz   0AD% 2DD% DD%  D!D% %
E+/2E&&E+K 'GK GK GC:K 
K8K33K8c                     t          j        t          | j        j        d                    | j        j                                      S )Nz
provider{})ry   r   r   r   r   r+   r   r   s    r   rU  z$Provider._get_safe_provider_filename  s7    	)$+*:L<O<OPTP[P_<`<`aa	b	bbr   c                    dt           _        | j        j        d| j        _        | j        j        t
          dk    rt          | j        _        | j        j        d| j        _        | j        j        | j        j	        | 
                                 | j        j                            dt          | j        j                                                dt          | j        j	                            | j        _        | j        j                            dt          | j        j                                                dt          | j        j	                            | j        _        | j        j        rx| j        j        rl| j        j                            dt          | j        j                                                dt          | j        j	                            | j        _        | j        j        r| j        j        s| j        j                            d          }|dk    rf| j        j        d	|d
z            d                    t          | j        j                  t          | j        j	                            z   | j        _        | j        j        r|                                  |                                  |                                 r|                                  | j        r|                                  |                                  |                                  | j        j        r|                                  |                                  |                     d           t=          d                    t           j                             |                                   |                     d           t=          t           j                   dt           _        d S )NTz6http://www.vuplus-community.net/rytec/rytecxmltv-UK.gzr   E2m3u2BouquetUSERNAMEPASSWORDzget.phpr   r   r   z0?username={}&password={}&type=dreambox&output=tsz%----Creating EPG-Importer config ----r'  zEPG-Importer config created...F)!r   r   r   r   r   r^   
PICONSPATHr   r   r   r  r   rj   r   r   r   findr+   download_panel_bouquetdownload_m3ur  	parse_m3ur   
parse_dataparse_map_xmltvsources_xmlsave_map_xmlr   download_piconscreate_bouquetsr  r*   r   create_epgimporter_config)r   r   s     r   process_providerzProvider.process_provider  s   & 
[ Q4;	["gll%4;	[%4; k"(<(D&&((( +33J
4;K_@`@`aaiijt  wA  BF  BM  BV  wW  wW  X  X$++33J
4;K_@`@`aaiijt  wA  BF  BM  BV  wW  wW  X  X$+	[! adk&= a![4<<ZTXT_ThIiIijjrrs}  @J  KO  KV  K_  @`  @`  a  a4; 
[! I$+*A I			!	!)	,	,3	Rii"k1!C!G)<?q?x?x$%%z$+2F'G'G@I @I IDK 
[ !    	 >>	 ??""$$$ k >???v~	&	&'''!!###7888&r   c                 v    | j         j        r,| j         j        r | j         j        r|                                 S dS )NF)r   r   r   r   r  r   s    r   provider_updatezProvider.provider_update1  s>    	[$ *)= *$+BV *

'
'
)
))	r   c                    	 t          j                    }t          j                            |d          }|                     d           t          d                    t          j	                             t          r,t          d                    | j        j                             	 t          j        | j        j        t          d          }t          d|j        z             |j        dk    rCt#          |d	          5 }|                    |j                   d d d            n# 1 swxY w Y   nd }nG# t(          $ r:}|                     d
           t          t          j	                   d }Y d }~nd }~ww xY w|| _        d S )Nze2m3u2bouquet.m3uz----Downloading m3u file----r'  zm3uurl = {}Tr   z[e2m3u2Bouquet] status code=%sr   r   z$Unable to download m3u file from url)r  r  r5   rD   rE   r  r*   r+   r   r   r   r   r   r   rU   r   r   rI   rJ   r   rL   r   r   rD   r   r   r   r;   s         r   r  zProvider.download_m3u6  s   "				$W\\$ 344(4555fn%%&&&
 4		dk1	2	2333|DK'DQQQ1	)AM	9:::ms	h		 WWQY               H	   =>>>888888 $...s=   *AD8 D)D8 )D--D8 0D-1D8 8
E<0E77E<c                    	 |                      d           t          d                    t          j                             	 t
          j                            | j                  s'd}t          |           t          rt          |          n.# t          $ r!}t          |           t          r Y d }~nd }~ww xY wi }d}d}t          | j        d          5 }|D ]}	 t          j        |           n9# t          $ r, |                    dd                              d          }Y nw xY wd|v s*|                    d	          r|                    d
          sd|v rwd}dddddddddddddd}|                    d          dk    r2|                    d          dk    rt          rd}t          |           |sd}|                    d          }|d                             d          }	|d         |	d          |d<   t)          dt+          |          dz
  d          D ]M}
t          j        ||
dz                      |||
                                                             d          <   N|                    d          }|dk    r4t          j        ||dz   d                                                    |d<   |d         dk    rd|d<   d}d|v sd|v sd |v sd!|v rx|du rt|                                |d"<   |                     |           |d         | j        vr|g| j        |d         <   _| j        |d                                      |           |s'd#}t          |           t          rt          |          d d d            n# 1 swxY w Y   t          s?t
          j                            | j                  rt          j        | j                   d S d S d S )$Nz----Parsing m3u file----r'  z,M3U file is empty. Check username & passwordFr   asciirt   EXTM3U#z#EXTINFzEXTINF:rl   r$  T)r?  ztvg-namer   r  rZ   r   has_archiver   r   rS   r;  r   r@  ztvg-r   zgroup-z1No extended playlist info found for this service'rd   r   rn   r   r   z =z",rZ   r  Nonezhttp:zhttps:zrtmp:zrtsp:r   zHNo extended playlist info found. Check m3u url should be 'type=m3u_plus')r  r*   r+   r   r   r5   rD   getsizer   r   rL   rI   ry   r  UnicodeDecodeErrordecoder{   r   r  r   r	   r   r   r   r   r	  r   r  r   rC   )r   r   r;   r  valid_services_foundservice_validr   rP   r[   r   rK  stream_name_poss               r   r  zProvider.parse_m3uN  s    0111fn%%&&&	

'//$.
)
) 
8C	#JJJ S>>	 
 
 
888 
	
 
 
 
 


 ,-DNC   9A 2K 2Kt;_T ; ; ;KK**11'::TTT;
 4DOOC009S9S	d		]!rrRTeg dBTV \
 			&RDIIh$7$72$=$=	 @sSzzz" "!zz#W1:??3S!*STT"WQZ As7||a'++ U U58_WQQRU^5T5Tl71:##%%++D1122 zz$''_2$'OD19L9M9M4N4T4T4V4V$W$Wl=! 	]#r))$+l=!]]
T//X--DGtOOYfjnYnYn"&**,,\,	""<000]#4+===9Edm455
m45<<\JJJ
 
TC	#JJJ S>>s9 9 9 9 9 9 9 9 9 9 9 9 9 9 9v 
 gnnT^$$ Idn  sP   AB 
B;B66B;N C54N53D+(N*D++I!NNNc           	      &                                      }t           j                                                   _        |                     j                   t          t          d |D                                                                  _                                                                             j        D ]]}d}| j        v rN j        |         D ]?} 	                    |          }d
                    ||d d         |dd                    }|d                             d          sۉ j        r|                    d          s|d                             d	          }|d
k    rc|dz   t          |d                   k    rG|d         |dz   d          }| j        v r+d
                    |d          j        |                   |d<   |                    d          sd
                    |d         |          |d<   |dz  }5t           |d<   A_d }	d j        v r j                            d          }	nt           j                  }	|	t           fd j        D                       t                    rPfd j        D              _         j        |	|	<   	  j                            d           n# t&          $ r Y nw xY wt(          rt*          rt-          t.          j                            t4          d          d          }
 j        D ]}| j        v r j        |         D ]}d}|                                D ]J\  }}t9          |t:                    r|t=          |          dz   z  }0|t?          j         |          dz   z  }K|
!                    d
                    |                     |
"                                  #                    d           tI          tJ          j&                   d S )Nc              3      K   | ]}|d fV  	dS r3  r0   r4  s     r   r/  z&Provider.parse_data.<locals>.<genexpr>  s&      )O)O1d))O)O)O)O)O)Or   r   z{:x}:{}:{}:0r   rZ   r1  r@  r   rp   r   z{}:{}r   r   z{}:0:1:{}:0:0:0r#  c              3   f   K   | ]+}j         |                             d d          dk    '|V  ,dS r   r$  r   Nr   rU   r,  rV   r   s     r   r/  z&Provider.parse_data.<locals>.<genexpr>  sI      zz#AWX[A\A`A`agioApAptyAyAy#AyAyAyAyzzr   c                     g | ]}|v|	S r0   r0   )r,  r5  vod_categoriess     r   
<listcomp>z'Provider.parse_data.<locals>.<listcomp>  s#    WWW!q?V?VA?V?V?Vr   zchannels.debugr@   rl   r   r[  zCompleted parsing data...)'r!  r   r   rG  r   rF  r   r%  rS  r  r+   r   r   rU   r   r   r\  r+  rC   
ValueErrorr   r^   rI   r5   rD   rE   r7   itemsrx   boolr-   ry   r   rJ   rK   r  r*   r   r   )r   sorted_categoriesrV   r   r5  cat_idservice_refr   m3u_stream_file	vod_indexdatafilerP   linevalsr   r   r  s   `              @r   r  zProvider.parse_data  s>   1133d0557788$4/000k)O)O=N)O)O)OOOTTVVWW$     ! , ,c	
3	T$ , ,##C((V!((fRaRj&*EE[m''77 ,		 	QUU+?%@%@ 	|_""3''s
))qC,$8$888L/#'((3d111">>!M*:%o68 8<	UU'(( Q*11!M2BKPPq	Qhcc+aoo)
d""" #))%00994'((9zzzz)=zzz{{>	. 
WWWWt';WWWD0>D9,-
	  '''' 
 
 
	T
  w 27<<)9::DAA8" 	. 	.s
d   #C( . .h

 0 0*#u
UD
!
! 0CJJ$$CN5))C//nnV]]8,,---->>1222s   7K 
KKc                    	 t          j                    }t          j                            |d          }|                     d           t          d                    t          j	                             t          r,t          d                    | j        j                             	 t          j        | j        j        t          d          }|j        dk    rBt#          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   nR# t(          $ rE}t          d	t+          |          j                   t          d
|           t          r|Y d }~nd }~ww xY w|| _        |                                  d S )Nzuserbouquet.panel.tvz)---Downloading providers bouquet file----r'  zbouqueturl = {}Tr   r   r   z<[e2m3u2b] download providers panel bouquet file error. Type:z7[e2m3u2b] download providers panel bouquet file error: )r  r  r5   rD   rE   r  r*   r+   r   r   r   r   r   r   rU   r   r   rI   rJ   r   rL   r   r#   r   r   r  s         r   r  zProvider.download_panel_bouquet  s   				$W\\$ 677(ABBBfn%%&&&
 <		!	!$+"9	:	:;;;	|DK+YPTUUU1ms	h		 WWQY              	   	GaIYZZZ	BAFFF 
G    
 &$s=   *AD +DD DD DD 
E-(;E((E-c                 .   t          | j                  }|                     d|z             t          d                    t
          j                             t          d           	 t          j        | j	        j
                   n-# t          $ r }|j        t          j        k    r Y d }~nd }~ww xY wd}| j        D ]}| j        |                             dd          dk    r_|                     d||fz             |dz  }| j        |         D ]2}|d                             d	          s|                     |           3|                     d
           t          d                    t
          j                             t          d           d S )Nz9----Downloading Picon files (0/%d), please be patient----r'  z/If no Picons exist this will take a few minutesr   r   r$  z:----Downloading Picon files (%d/%d), please be patient----rZ   r1  zPicons download completed...z-Box will need restarted for Picons to show...)r   r   r  r*   r+   r   r   r5   r6   r   r   r8   r9   r:   r   rU   r   r   )r   len_channelsr;   rK  rV   r5  s         r   r  zProvider.download_picons  s   T'((,QT``aaafn%%&&&9:::
;t{$%%%%	 
 
 
g	 
 ! # #c
S!%%ff55??TXY[gWhhiiiFA$ # #m''77 #
"""4555fn%%&&&788888s   )B 
B2B--B2c                    	 i | _         |                                 }|r	 t          j        |          }|                    d          D ]G}|j                            d          }g }|D ]}|                    |j                   || j         |<   Hd S # t          $ r%}d}t          |           t          r|Y d }~d S d }~ww xY wd S )Nr  z.//xmltvextrasources/groupidr  )r   r  r  r  r  r  rU   r  textrL   r*   r   )	r   r  r  r}  
group_nameurllisturlr;   r   s	            r   r  z#Provider.parse_map_xmltvsources_xml$  s   $'')), >|,,,D:;; 4 4,""4((ZW  nnSX,3Tj))4 4    
%C	#JJJ Y      s   A2B 
CB>>Cc                    	 t           j                            t          |                                 dz             }d}d}| j        rt          |d          5 }|                    d           |                    d                    |                     |                    d                    |                     |                    d                    |                     |                    d	                    |                     |                    d
                    |                     |                    d                    ||                                                      |                    d           |                    d           |                    d                    |                     | j	        s|                    d                    d|z                       |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z                       |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                     |                    d                    d|z  d                      |                    d                    d|z                       |                    d                    d|z  d!                     |                    d                    d|z  d"                     |                    d                    d|z  d#                     |                    d                    d|z  d$                     |                    d                    d|z  d%                     |                    d                    d|z  d&                     |                    d                    d|z                       |                    d                    d|z  d'                     |                    d                    d|z  d(                     |                    d                    d|z  d)                     |                    d                    d|z  d*                     |                    d                    d|z  d+                     |                    d                    d|z  d,                     |                    d                    d|z                       |                    d                    d|z  d-                     |                    d                    d|z  d.                     |                    d                    d|z  d/                     |                    d                    d|z  d0                     |                    d                    d|z  d1                     |                    d                    d|z  d2                     |                    d                    d|z                       |                    d                    d|z  d3                     |                    d                    d|z  d4                     |                    d                    d|z  d5                     |                    d                    d|z  d6                     |                    d                    d|z  d7                     |                    d                    d|z  d8                     |                    d                    d|z                       |                    d9                    d|z                       n| j	        D ]}|                    d                    d|z  t          |                               | j	        |         D ];}|                    d                    d|z  t          |                               <|                    d                    d|z                       |                    d:                    |                     |                    d;                    |                     | j        D ]}|| j        v r| j        |                             d<d=          d=k    r| j        |                             d>d?          }|                    d@                    d|z  t          j        t          |                    t          j        t          |                    t!          | j        |                             dAdB                                                    t!          | j        |                             dCd                                                                         ?|sd?}dB}	dD| j        v rB| j        dD                             d>d?          }| j        dD                             dAdB          }	|                    dE                    d|z  dDt          j        t          |                    t!          |	                                                               dB} |                    dF                    |                     |                    dG                    |                     | j        D ]Q}|| j        v rD| j        |                             d<d=          d=k    r|                    dH                    d|z  t%          t          t          j        |                                                   | j        |         D ]}
|
dI                             dJ          sL|                    dK                    d|z  t          j        t          |
dI                             t          j        t          |
                    d>d?                              t          j        t          |
dL                             t!          |
dA                                                   t          j        t          |
dM                             t          j        t          |
                    dNd?                              t          |
dO                   |
dP         rdQndR	  	                   k|                    dS                    d|z  dTt          j        t          |                                         S|                    dU                    |                     |                    dV           d d d            d S # 1 swxY w Y   d S d S )WNz-sort-current.xmlry  Frd  <!--
z&{} E2m3u2bouquet Custom mapping file
z9{} Rearrange bouquets or channels in the order you wish
z?{} Disable bouquets or channels by setting enabled to "false"
z`{} Map DVB EPG to IPTV by changing channel serviceRef attribute to match DVB service reference
zG{} Map XML EPG to different feed by changing channel tvg-id attribute
zB{} Rename this file as {}-sort-override.xml for changes to apply
-->
z<mapping>
z{}<xmltvextrasources>
z{}<!-- Example Config
r   z{}<group id="{}">
zUK - Freeview (xz)z{}<url>{}</url>
r   z'http://www.xmltvepg.nl/rytecUK_Basic.xzz6http://rytecepg.ipservers.eu/epg_data/rytecUK_Basic.xzz-http://rytecepg.wanwizard.eu/rytecUK_Basic.xzz9http://91.121.106.172/~rytecepg/epg_data/rytecUK_Basic.xzz6http://www.vuplus-community.net/rytec/rytecUK_Basic.xzz{}</group>
zUK - FTA (xz)z%http://www.xmltvepg.nl/rytecUK_FTA.xzz4http://rytecepg.ipservers.eu/epg_data/rytecUK_FTA.xzz+http://rytecepg.wanwizard.eu/rytecUK_FTA.xzz7http://91.121.106.172/~rytecepg/epg_data/rytecUK_FTA.xzz4http://www.vuplus-community.net/rytec/rytecUK_FTA.xzzUK - International (xz)z%http://www.xmltvepg.nl/rytecUK_int.xzz4http://rytecepg.ipservers.eu/epg_data/rytecUK_int.xzz+http://rytecepg.wanwizard.eu/rytecUK_int.xzz7http://91.121.106.172/~rytecepg/epg_data/rytecUK_int.xzz4http://www.vuplus-community.net/rytec/rytecUK_int.xzzUK - Sky Live (xz)z)http://www.xmltvepg.nl/rytecUK_SkyLive.xzz8http://rytecepg.ipservers.eu/epg_data/rytecUK_SkyLive.xzz/http://rytecepg.wanwizard.eu/rytecUK_SkyLive.xzz;http://91.121.106.172/~rytecepg/epg_data/rytecUK_SkyLive.xzz8http://www.vuplus-community.net/rytec/rytecUK_SkyLive.xzzUK - Sky Dead (xz)z)http://www.xmltvepg.nl/rytecUK_SkyDead.xzz8http://rytecepg.ipservers.eu/epg_data/rytecUK_SkyDead.xzz/http://rytecepg.wanwizard.eu/rytecUK_SkyDead.xzz;http://91.121.106.172/~rytecepg/epg_data/rytecUK_SkyDead.xzz8http://www.vuplus-community.net/rytec/rytecUK_SkyDead.xzzUK - Sports/Movies (xz)z-http://www.xmltvepg.nl/rytecUK_SportMovies.xzz<http://rytecepg.ipservers.eu/epg_data/rytecUK_SportMovies.xzz3http://rytecepg.wanwizard.eu/rytecUK_SportMovies.xzz?http://91.121.106.172/~rytecepg/epg_data/rytecUK_SportMovies.xzz<http://www.vuplus-community.net/rytec/rytecUK_SportMovies.xzz{}-->
z{}</xmltvextrasources>
z{}<categories>
r   r$  rS   rl   zL{}<category name="{}" nameOverride="{}" enabled="{}" customCategory="{}"/>
r   Tr  r#  z9{}<category name="{}" nameOverride="{}" enabled="{}" />
z{}</categories>
z{}<channels>
z{}<!-- {} -->
rZ   r1  z{}<channel name="{}" nameOverride="{}" tvg-id="{}" enabled="{}" category="{}" categoryOverride="{}" serviceRef="{}" clearStreamUrl="{}" />
r?  r  r;  r   r   r>  r  z'{}<channel name="{}" category="{}" />
r0  z{}</channels>
z
</mapping>)r5   rD   rE   r7   rU  r   rI   rJ   r+   r   rh   r   r   rU   ry   r   r-   r   rk   r   )r   mappingfiler~  vod_category_outputr   r}  r  rV   r  ru  r5  s              r   r  zProvider.save_map_xml8  s   Wd&F&F&H&HK^&^__+&	 P[# O!GGJGG6==fEEFFFGGIPPQWXXYYYGGOVVW]^^___GGpwwx~  A  A  AGGW^^_effgggGGRYYZ`bf  cC  cC  cE  cE  F  F  G  G  GGGIGGOGG'..v66777# F3WW(//V==>>>WW$++AJ8LMMNNNWW"))!f*6_``aaaWW"))!f*6noopppWW"))!f*6effgggWW"))!f*6qrrsssWW"))!f*6noopppWW$$QZ00111WW$++AJHHIIIWW"))!f*6]^^___WW"))!f*6lmmnnnWW"))!f*6cddeeeWW"))!f*6oppqqqWW"))!f*6lmmnnnWW$$QZ00111WW$++AJ8QRRSSSWW"))!f*6]^^___WW"))!f*EG G H H HWW"))!f*6cddeeeWW"))!f*HJ J K K KWW"))!f*EG G H H HWW$$QZ00111WW$++AJ8LMMNNNWW"))!f*6abbcccWW"))!f*IK K L L LWW"))!f*6ghhiiiWW"))!f*LN N O O OWW"))!f*IK K L L LWW$$QZ00111WW$++AJ8LMMNNNWW"))!f*6abbcccWW"))!f*IK K L L LWW"))!f*6ghhiiiWW"))!f*LN N O O OWW"))!f*IK K L L LWW$$QZ00111WW$++AJ8QRRSSSWW"))!f*6effgggWW"))!f*MO O P P PWW"))!f*6kllmmmWW"))!f*PR R S S SWW"))!f*MO O P P PWW$$QZ00111WW[F
++,,,, * 3 3gg%,,QZE9J9JKKLLL,U3 M M&ww$++AJ
68J8JKKLLLLgg%%a&j112222GG(//77888GG ''//000# " "t!!!			$	(	(	8	8F	B	B 237;;NBOOww_
&V>*S//**>*%78899t%c*..y$??@@FFHHt%c*../?GGHHNNPP	     # "{
4)
)
)!3E:>>~rRR,U377	4HHwwL
&V>*%78899{!!##    "GG!((00111GG%%f--...#  t!!!			$	(	(	8	8F	B	Bww"))!f*6FzRUR`adReReGfGf6g6ghhiii"3'  1**>:: 		
  bF1v:^Jq'78899^Jquu^R'@'@AABB^Jq{33449$$&&^Jq'78899^Jquu-?'D'DEEFF,((,3WWV	 	

 

 

 

 

56!f*N:c??++ 
 
 
 
 GG&&v..///GGL_O O O O O O O O O O O O O O O O O OP Ps   {1}}}c                     	                       d           t          d                    t          j                              j        r|t          j        t                    D ]b}d                     	                                          |v r7t          j
        t          j                            t          |                     cg } j        j        r                                 }t!           fd j        D                       }d}d}d}d} j        D ]r} j        |                             dd          dk    r0 j                            |i                               d	d
          }	n/ j                            di                               d	d
          }	| j        v r|	rt)          | j                  }
t+          |
d                    |                    } 	                                }||v r j        j        sd}t          j                            t          d                    ||                    }t.          r"t          d                    |                     ||vs j        j        rt1          |d          5 }d                    t3          j         j        j                  t3          j        t3          j        |
                              } j        |                             dd          dk    rP| j        v rF j        |                             dd          r%t3          j         j        |         d                   }nd j        v r j        d                             dd          r_d                    t3          j         j        d         d                   t3          j        |
                    dd                              }d}|                    d                    t3          j        |                               |sR j        j        sFt?          d          D ]/}|                    d                    t@                               0d
}|dz  } j        |         D ]M}|                    d	          s|d         !                    d          r "                    ||           |dz  }N|dz  dk    r;|                    d                    t@                               |dz  }|dz  dk    ;d d d            n# 1 swxY w Y   n|s j        j        st1          |d          5 }d                    t3          j         j        j                            }d j        v rF j        d                             dd          r%t3          j         j        d         d                   }d}|                    d                    t3          j        |                               |sR j        j        sFt?          d          D ]/}|                    d                    t@                               0d
}|dz  }|D ]}| j        v r|                    d           |                    d                    t3          j        |                                j        |         D ]} "                    ||           |dz  }|dz  dk    r;|                    d                    t@                               |dz  }|dz  dk    ;d
}d d d            n# 1 swxY w Y   ||vs||v r=|s;|#                     $                    ||                     ||v r j        j        sd
}|dz  }t %                    |                                 d           t          t          j                   d S )Nz----Creating bouquets----r'  zuserbouquet.suls_iptv_{}c              3   f   K   | ]+}j         |                             d d          dk    '|V  ,dS r  r  r  s     r   r/  z+Provider.create_bouquets.<locals>.<genexpr>  sI      xxt?UVY?Z?^?^_egm?n?nrw?w?w?w?w?w?wxxr   Fr   r   r$  r   Tr#  zcat{}rm  rn  r@   rz  rS   zVOD - rl   z	#NAME {}
ro  r[  r   rZ   r1  z{} - VODrp  rZ  zbouquets created ...)&r  r*   r+   r   r   r   r5   rA   rB   rU  rC   rD   rE   r   r   rw  r   r   r   rU   rX   r   r   r   rI   ry   r   r   r  rj   rJ   r	   r\  r   r^  r  rb  ri  )r   rM   iptv_bouquet_listr  r  vod_bouquet_entry_output"channel_number_start_offset_outputcat_numrV   ru  rv  r`  ra  rs  r   rr  rt  rK  r5  vodcats   `                   r   r  zProvider.create_bouquets  s!   1222fn%%&&&	 0
:&& 0 0u!(()I)I)K)KLLPUUUYrw||J..///	[ ;88::xxxxt';xxxxx."',$'! S Sc
S!%%ff55??(,,S"5599)TJJKK(,,UB77;;ItLLK	TK"3(>??I$Yw0G0GHHL88::
nT[%:\w||J0PV%|446 6 4
>  !122333
.  DK$9 

&
& !%%cnT[5E&F&FX[XfgpXqXqHrHrssl			$	(	(	8	8F	B	B
'
'
'D,B3,G,K,KN\a,b,b
't'=c'B>'RSS
4)
)
)d.DU.K.O.OP^`e.f.f
) 
&!7!>~!NOO?9,,Xr::;;= = 	 kggl!!#.">">??@@@/ 8O c

 4 41	1223333,0)a{!#&  !
%%	

 'a.99.II '  A&&&a{{31$$wwv}}011222a{ 31$$1              6 ! !)> !

&
& !!&&st{7G'H'HIIl	$(	(	(T-CE-J-N-N~_d-e-e	(od&<U&CN&STT|kggl!!#.">">??@@@/ 8O c

 4 41	1223333,0)a{"  &
D&
&
&	2333	#++CN6,B,BCCDDD#F+ 	 	A		!	!!Q	'	'	'		S Q&&	
233	4	4	4		 S Q&& !5! ! ! ! ! ! ! ! ! ! ! ! ! ! !: .  SN%:%:C[%:d::<IZ[[\\\~dk&;!%
a<77 ""#4555,---s&   JTT!	$T!	
G\55\9	<\9	c                    d}t           rt          d           	 t          j        t                     n-# t
          $ r }|j        t          j        k    r Y d }~nd }~ww xY wt          j        	                    t          d
                    |                                                     }| j        rt          |d          5 }|                    d           | j        D ]}|| j        v r| j                            |i                               dd          r| j        |                             dd	          d	k    rt%          || j                  }|                    d

                    |t'          t)          t+          j        |                                                   | j        |         D ]}|d                             d          s|d         r|d         nt1          |          }|d         r|d         }	|	                    d          }
|
dk    rd
                    |	|
d                    }	|                    d
                    |t)          t+          j        |                    |	t'          t)          t+          j        t1          |                                                             
|                    d           d d d            n# 1 swxY w Y   |                     | j        j        g           | j        D ]%}|                     | j        |         |           $d S d S )Nry  zcreating EPGImporter configr{  r@   z<channels>
r   Tr   r$  z{}<!-- {} -->
rZ   r1  r?  r   r   r   z1{}zB{}<channel id="{}">{}:http%3a//example.m3u8</channel> <!-- {} -->
z</channels>
)r   r*   r5   r6   rG   r8   r9   r:   rD   rE   r+   rU  r   rI   rJ   r   r   rU   rX   rk   rh   ry   r   r   r\   r  r  r   r   r   )r   r~  r;   r  r   rV   rv  r5  tvg_idepg_service_refr   r}  s               r   r  z"Provider.create_epgimporter_config@  sz   &
 (	&'''
;}	 
 
 
g	 
 gll=2M2T2TUYUuUuUwUw2x2xyy	 J%% GGN# S St!!!d&<&@&@b&I&I&M&MiY]&^&^!			$	(	(	8	8F	B	B%c4+ABByww ''0@CN[dLeLeAfAf0g0ghhiii"3' S S1**>:: 
	S!"8F!H++2CA2F2FiL 
SlO/$$S))#BYY"\\/#$$*?@@?
''WVFJs~f'='=>>z#.9J19M9M*N*NOOPPR RS S S GGO)              .   $+"5!6777 ( J Ju!!$":5"A5IIII9J J6J Js'   4 
AAAHK''K+.K+r   )%r#   r$   r%   r   r   r   r   r   r   r	  r!  r%  rS  r  r^  rb  ri  re  rw  r  r  r  r  r  r  rU  r  r  r  r  r  r  r  r  r  r  r  r0   r   r   r   r      sE         "1 "1 "1H/ / /)@ )@ )@V  $( ( (.o o o*) ) )V. . .$h h hT	 	 	/ / /. . .  (" " "0 0 0d   2] ] ]$ $ $	- 	- 	-N N N( ( (Tc c c< < <|  
  0Y Y YvK K KZ  ,9 9 90  (V V Vpn n n`(J (J (J (J (Jr   r   c                   &    e Zd Zd Zd Zd Zd ZdS )Configc                 ,    t                      | _        d S r   )r   	providersr   s    r   r   zConfig.__init__l  s    ==$...r   c                     t          d                    t          j                            t
          d                               t          |d          }|                    d           d S )Nz)Default configuration file created in {}

config.xmlr   a  <!--
	E2m3u2bouquet supplier config file
	Add as many suppliers as required and run the script with no parameters
	this config file will be used and the relevant bouquets set up for all suppliers entered
	0 = No/false
	1 = Yes/true
	For elements with <![CDATA[]] enter value between brackets e.g. <![CDATA[mypassword]]>
-->
<config>
	<supplier>
		<name>Supplier Name 1</name><!-- Supplier Name -->
		<enabled>1</enabled><!-- Enable or disable the supplier (0 or 1) -->
		<m3uurl><![CDATA[http://address.yourprovider.com:80/get.php?username=USERNAME&password=PASSWORD&type=m3u_plus&output=ts]]></m3uurl><!-- Extended M3U url -->
		<epgurl><![CDATA[http://address.yourprovider.com:80/xmltv.php?username=USERNAME&password=PASSWORD]]></epgurl><!-- XMLTV EPG url -->
		<username><![CDATA[]]></username><!-- (Optional) will replace USERNAME placeholder in urls -->
		<password><![CDATA[]]></password><!-- (Optional) will replace PASSWORD placeholder in urls -->
		<iptvtypes>0</iptvtypes><!-- Change all streams to IPTV type (0 or 1) -->
		<streamtypetv></streamtypetv><!-- (Optional) Custom TV stream type (e.g. 1, 4097, 5001 or 5002) -->
		<streamtypevod></streamtypevod><!-- (Optional) Custom VOD stream type (e.g. 4097, 5001 or 5002) -->
		<multivod>0</multivod><!-- Split VOD into seperate categories (0 or 1) -->
		<allbouquet>1</allbouquet><!-- Create all channels bouquet -->
		<picons>0</picons><!-- Automatically download Picons (0 or 1) -->
		<iconpath>/usr/share/enigma2/picon/</iconpath><!-- Location to store picons -->
		<xcludesref>1</xcludesref><!-- Disable service ref overriding from override.xml file (0 or 1) -->
		<bouqueturl><![CDATA[]]></bouqueturl><!-- (Optional) url to download providers bouquet - to map custom service references -->
		<bouquetdownload>0</bouquetdownload><!-- Download providers bouquet (use default url) must have username and password set above - to map custom service references -->
		<bouquettop>0</bouquettop><!-- Place IPTV bouquets at top (0 or 1)-->
	</supplier>
	<supplier>
		<name>Supplier Name</name><!-- Supplier Name -->
		<enabled>0</enabled><!-- Enable or disable the supplier (0 or 1) -->
		<m3uurl><![CDATA[http://address.yourprovider.com:80/get.php?username=USERNAME&password=PASSWORD&type=m3u_plus&output=ts]]></m3uurl><!-- Extended M3U url -->
		<epgurl><![CDATA[http://address.yourprovider.com:80/xmltv.php?username=USERNAME&password=PASSWORD]]></epgurl><!-- XMLTV EPG url -->
		<username><![CDATA[]]></username><!-- (Optional) will replace USERNAME placeholder in urls -->
		<password><![CDATA[]]></password><!-- (Optional) will replace PASSWORD placeholder in urls -->
		<iptvtypes>0</iptvtypes><!-- Change all streams to IPTV type (0 or 1) -->
		<streamtypetv></streamtypetv><!-- (Optional) Custom TV service type (e.g. 1, 4097, 5001 or 5002) -->
		<streamtypevod></streamtypevod><!-- (Optional) Custom VOD service type (e.g. 4097, 5001 or 5002) -->
		<multivod>0</multivod><!-- Split VOD into seperate categories (0 or 1) -->
		<allbouquet>1</allbouquet><!-- Create all channels bouquet -->
		<picons>0</picons><!-- Automatically download Picons (0 or 1) -->
		<iconpath>/usr/share/enigma2/picon/</iconpath><!-- Location to store picons -->
		<xcludesref>1</xcludesref><!-- Disable service ref overriding from override.xml file (0 or 1) -->
		<bouqueturl><![CDATA[]]></bouqueturl><!-- (Optional) url to download providers bouquet - to map custom service references -->
		<bouquetdownload>0</bouquetdownload><!-- Download providers bouquet (use default url) must have username and password set above - to map custom service references -->
		<bouquettop>0</bouquettop><!-- Place IPTV bouquets at top (0 or 1)--> 
	</supplier>
</config>)r*   r+   r5   rD   rE   r7   rI   rJ   )r   
configfiler   s      r   make_default_configzConfig.make_default_configo  sd    4;;BGLLR^<_<_``aaa
:t!'' / / / / / /r   c                 b   	 t                      | _        	 t          j        |          }d}|                    d          D ]}t                      }|}|D ]y}|j        dk    r'|j        dn|j                                        |_	        |j        dk    r|j        dk    rdnd	|_
        |j        d
k    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r'|j        dn|j                                        |_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r|j        dk    rdnd	|_        |j        dk    r'|j        dn|j                                        |_        ||_        {|j	        r|| j        |j	        <   |dz  }d S # t>          $ r2}d}tA          |           tB          rt?          |          Y d }~d S d }~ww xY w) Nr  r   z.//supplierr   rl   r   r   TFsettingslevelm3uurlepgurlr   r   providerupdateproviderhideurls	iptvtypesstreamtypetvstreamtypevodmultivod
allbouquetr   iconpath
xcludesref0
bouqueturlbouquetdownload
bouquettoplastproviderupdater   zCorrupt config.xml file)"r   r  r  r  r  r   tagr  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r*   r   )	r   r  r  provider_numr  providerchildr;   r   s	            r   read_configzConfig.read_config  sy   ==$.;
.j
)
)
)4<||M** 3 3tH +" +"	f		"Z/rrUZ5E5E5G5Gx}	i		"'*"3"3$$x	o	%	%',z'9uz?O?O?Q?Qx	h		 %
 2""
8H8H8J8Jx	h		 %
 2""
8H8H8J8Jx	j	 	 !&!3229I9I9K9Kx	j	 	 !&!3229I9I9K9Kx	&	&	&,1J,>bbEJDTDTDVDVx#	(	(	(-2Z3->->TTEx"	k	!	!%*Z3%6%6TTEx	n	$	$&+j&8ej>N>N>P>Px	o	%	%',z'9uz?O?O?Q?Qx	j	 	 $)J#$5$5DD5x	l	"	"&+jC&7&7ddUx	h		!&s!2!2x	j	 	 "'*"4BB%*:J:J:L:Lx	l	"	"(-
c(9(9ux	l	"	"$)J$6bbEJ<L<L<N<Nx	'	'	'+0:+<+<44%x 	l	"	"&+jC&7&7ddUx	*	*	*,1J,>qqEJDTDTDVDVx$!hll} %-T^HM"Q\g3 3h 
   	"3::: 
C..     s   OO2 2
P.<'P))P.c           
         	 t           j                            t           j                            t          d                    }d}| j        rt          |d          5 }|                    d           |                    d                    |                     |                    d                    |                     |                    d                    |                     |                    d                    |                     |                    d	                    |                     |                    d
                    |                     |                    d           |                    d           t          j	        | j                  D ]\  }}|                    d                    |                     |                    d                    d|z  t          |j                                       |                    d                    d|z  |j        rdnd                     |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j        rdnd                     |                    d                    d|z  |j        rdnd                     |                    d                    d|z  |j                             |                    d                    d|z  |j                             |                    d                    d|z  |j        rdnd                     |                    d                    d|z  |j        rdnd                     |                    d                    d|z  |j        rdnd                     |                    d                     d|z  |j        r|j        nd!                     |                    d"                    d|z  |j        rdnd                     |                    d#                    d|z  |j                             |                    d$                    d|z  |j        rdnd                     |                    d%                    d|z  |j        rdnd                     |                    d&                    d|z  |j                             |                    d'                    |                     |                    d(           d d d            d S # 1 swxY w Y   d S t           j                             t           j                            t          d                    rHtC          d)           t          j"        t           j                            t          d                     d S d S )*Nr  ry  rd  r  z&{}E2m3u2bouquet supplier config file
z%{}Add as many suppliers as required
z\{}this config file will be used and the relevant bouquets set up for all suppliers entered
z{}0 = No/False
z{}1 = Yes/True
z`{}For elements with <![CDATA[]] enter value between empty brackets e.g. <![CDATA[mypassword]]>
r  z
<config>
z{}<supplier>
z){}<name>{}</name><!-- Supplier Name -->
r   zI{}<enabled>{}</enabled><!-- Enable or disable the supplier (0 or 1) -->
r   r  z%{}<settingslevel>{}</settingslevel>
z={}<m3uurl><![CDATA[{}]]></m3uurl><!-- Extended M3U url --> 
z9{}<epgurl><![CDATA[{}]]></epgurl><!-- XMLTV EPG url -->
zd{}<username><![CDATA[{}]]></username><!-- (Optional) will replace USERNAME placeholder in urls -->
zd{}<password><![CDATA[{}]]></password><!-- (Optional) will replace PASSWORD placeholder in urls -->
zZ{}<providerupdate><![CDATA[{}]]></providerupdate><!-- (Optional) Provider update url -->
z[{}<providerhideurls>{}</providerhideurls><!-- (Optional) Hide Provider urls in plugin -->
zQ{}<iptvtypes>{}</iptvtypes><!-- Change all TV streams to IPTV type (0 or 1) -->
zh{}<streamtypetv>{}</streamtypetv><!-- (Optional) Custom TV stream type (e.g. 1, 4097, 5001 or 5002 -->
zh{}<streamtypevod>{}</streamtypevod><!-- (Optional) Custom VOD stream type (e.g. 4097, 5001 or 5002 -->
zO{}<multivod>{}</multivod><!-- Split VOD into seperate categories (0 or 1) -->
zL{}<allbouquet>{}</allbouquet><!-- Create all channels bouquet (0 or 1) -->
zF{}<picons>{}</picons><!-- Automatically download Picons (0 or 1) -->
z={}<iconpath>{}</iconpath><!-- Location to store picons) -->
rl   zf{}<xcludesref>{}</xcludesref><!-- Disable service ref overriding from override.xml file (0 or 1) -->
z{}<bouqueturl><![CDATA[{}]]></bouqueturl><!-- (Optional) url to download providers bouquet - to map custom service references -->
z{}<bouquetdownload>{}</bouquetdownload><!-- Download providers bouquet (uses default url) must have username and password set above - to map custom service references -->
zK{}<bouquettop>{}</bouquettop><!-- Place IPTV bouquets at top (0 or 1) -->
zD{}<lastproviderupdate>{}</lastproviderupdate><!-- Internal use -->
z{}</supplier>
z</config>
zno providers remove config)#r5   rD   rE   r7   r  rI   rJ   r+   ry   	iteritemsrh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   rC   )r   config_filer~  r   r   r  s         r   write_configzConfig.write_config  s	   
 RW\\'<@@AA+&	^ )3[# #!GGJGG6==fEEFFFGG5<<VDDEEEGGlsstz{{|||GG ''//000GG ''//000GGpwwx~  A  A  AGGIGGNt~66 1 1XWW&&v..///WW:AA!f*jYaYfNgNghhiiiWWZaabcflblu}  vF  oOnqnq  LO  P  P  Q  Q  QWW6==a&j(JabbcccWWNUUVWZ`V`bjbrsstttWWJQQRSV\R\^f^noopppWWu||}~  BH  ~H  JR  J[  \  \  ]  ]  ]WWu||}~  BH  ~H  JR  J[  \  \  ]  ]  ]WWkrrstw}s}  @H  @\  ]  ]  ^  ^  ^WWlsstux~t~  HP  Hc  Al  AD  AD  il  m  m  n  n  nWWbiijkntjt  ~F  ~Q  wZvyvy  WZ  [  [  \  \  \WWy  A  A  BC  FL  BL  NV  Nd  e  e  f  f  fWWy  A  A  BC  FL  BL  NV  Ne  f  f  g  g  gWW`gghilrhr  |D  |N  uWtwtw  TW  X  X  Y  Y  YWW]ddefioeo  yA  yM  rVqtqt  SV  W  W  X  X  XWWW^^_`ci_irz  sB  lKknkn  HK  L  L  M  M  MWWNUUVWZ`V`  yA  yK  cSbjbtbt  QS  T  T  U  U  UWWw~~  @A  DJ  @J  S[  Si  Lr  LO  LO  or  s  s  t  t  tWW  U  \  \  ]^  ag  ]g  iq  i}  ~  ~      WW  ~  E  E  FG  JP  FP  Ya  Yr  R{  RU  RU  x{  |  |  }  }  }WW\ccdehndnw  xL  qUpsps  RU  V  V  W  W  WWWU\\]^ag]giq  jG  H  H  I  I  IWW ''//0000GGOG# # # # # # # # # # # # # # # # # #L 	gnnRW\\'<8899 3	
&'''Ibgll7L11222223 3s   W5Y  Y$'Y$N)r#   r$   r%   r   r  r
  r  r0   r   r   r  r  k  sR        ! ! !3 3 3j? ? ?B23 23 23 23 23r   r  c                 D   t          | t                    }|                    d          }|                    ddddd           |                    d	d
ddd           |                    d          }|                    ddddd           |                    ddddd           |                    ddddd           |                    ddddd           |                    dd d!dt          d"#           |                    d$d%d&dt          d'#           |                    d(d)d*dd+           |                    d,d-d.dd/           |                    d0d1d2dd3           |                    d4d5d6dd7           |                    d8d9d:dd;           |                    d<d=d>dd?           |                    d@dAdBddC           |                    dDdEdFddG           |                    dHdIdJddK           |                    dLdMdN|O           |S )PN)descriptionformatter_classzURL Based Setupz-mz--m3uurlr  storez(URL to download m3u data from (required))destactionhelpz-ez--epgurlr  z&URL source for XML TV epg data sourceszProvider Based Setupz-nz--providernameprovidernamez2Host IPTV provider name (e.g. FAB/EPIC) (required)z-uz
--usernamer   zYour IPTV username (required)z-pz
--passwordr   zYour IPTV password (required)z-iz--iptvtypesr  
store_truezQTreat all stream references as IPTV stream type. (required for some enigma boxes)z-sttvz--streamtype_tvsttvzCStream type for TV (e.g. 1, 4097, 5001 or 5002) overrides iptvtypes)r  r  r   r  z-stvodz--streamtype_vodstvodzAStream type for VOD (e.g. 4097, 5001 or 5002) overrides iptvtypesz-Mz
--multivodr  z6Create multiple VOD bouquets rather single VOD bouquetz-az--allbouquetr  zCreate all channels bouquetz-Pz--piconsr   zEAutomatically download of Picons, this option will slow the executionz-qz
--iconpathr  zROption path to store picons, if not supplied defaults to /usr/share/enigma2/picon/z-xsz--xcludesrefr   z5Disable service ref overriding from override.xml filez-bz--bouqueturlr  zDURL to download providers bouquet - to map custom service referencesz-bdz--bouquetdownloadr  zODownload providers bouquet (use default url) - to map custom service referencesz-btz--bouquettopr  zPlace IPTV bouquets at topz-Uz--uninstall	uninstallz)Uninstall all changes made by this scriptz-Vz	--versionversion)r  r  )r   r   add_argument_groupadd_argumentr  )program_licenseprogram_version_messageparserurlgroupprovidergroups        r   get_parser_argsr#    s7   
_Fa
b
b
b%%&788	tZhw7  9 9 9	tZhw5  7 7 7 **+ABBD"2PWC  E E ED,Z.  0 0 0D,Z.  0 0 0 T={<^  ` ` `W/fWSVP  R R RX1VYN  P P PT<jC  E E ET>\(  * * *T:H\R  T T TT<j_  a a aUNlB  D D DT>WQ  S S SU/6GP\\  ^ ^ ^UNl'  ) ) )T={<6  8 8 8T;yBYZZZr   c           	         | t           j        } nt           j                            |            t          j                            t           j        d                   }dt          z  }t          t                    }d	                    ||          }t                              d          d         }d	                    |t          t                              }	 t          ||          }|                                }|j        }	t!          j        d           t%                       |	r@t'                       t)                       t+          d           t          j        d           nt/                       t1                      }
|j        |
_        |j        |
_        |j        |
_        |j        |
_         |j!        |
_"        |j#        |
_$        |j%        |
_&        |j'        |
_'        |j(        |
_)        |j*         |
_+        |j,        |
_-        |j.        |
_/        |j0        |
_0        |j1        |
_1        |j2        |
_3        |j4        |
_5        |
j        rnt+          d	           t+          d
           t+          d           tm          |
          }|7                                 t)                       tq                       d S t+          d           t+          d           t+          d           ts                      }t          j        :                    t          j        ;                    tx          d                    r |=                    t          j        ;                    tx          d                     d}t}          j?        |j@                  D ]w\  }}|jA        rB|j/        B                    d          rZt+          d	                    t          j        ;                    tx          d                               t          j        d           t+          d           t+          d	                    t}          jC        |j/                                       t+          d           tm          |          }t          t          jE                              t          |jF        jG                  z
  dk    r|H                                }|7                                 Pt+          d	                    |j/                             y|r|I                                 t)                       tq                       d S |J                    t          j        ;                    tx          d                     t+          d	                    t          j        ;                    tx          d                               |K                                 t          j        d           d S # t          $ r Y dS t          $ r}}t          r|t          |          dz  }t           jP        Q                    |dz   t          |          z   dz              t           jP        Q                    |dz              Y d }~dS d }~ww xY w)Nr   zv%sz%(prog)s {} ({})r  r   z{}

  Copyright 2017. All rights reserved.
  Created on {}.
  Licensed under GNU GENERAL PUBLIC LICENSE version 3
  Distributed on an "AS IS" basis without warranties
  or conditions of any kind, either express or implied.

USAGE
   z#Uninstall only, program exiting ...z'
**************************************z(E2m3u2bouquet - Command line based setupz'**************************************
r(   z"E2m3u2bouquet - Config based setupr)   r  FzSupplier Namez4Please enter your details in the config file in - {}r   zConfig based setup - {}i`T  z.
Provider: {} is disabled - skipping.........
z}Please ensure correct command line options are passed to the program 
or populate the config file in {} 
for help use --help
rn   z: z  for help use --help)Sr   argvrF  r5   rD   basenamer,   r-   __updated__r+   __doc__r   __date__r#  
parse_argsr  socketsetdefaulttimeoutr1   rQ   rb   r*   exitr<   r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r   r  r   r   r   r  r   r  r   r   r   r  r   r  r   r   r  r3   r  r   rE   r7   r
  ry   r  r  r   r   r   r  r  r   r   r  r  r  print_usageKeyboardInterruptrL   r   r   stderrrJ   repr)r&  program_nameprogram_versionprogram_build_dater  program_shortdescr  r   argsr  args_configargs_providere2m3u2b_configproviders_updatedr   provider_configr  r;   r~  s                      r   mainr=  H  s   L	$$(//$  !--;&+&&-44_FXYY]]4((+	 Fc(mm,, a?,CDD&					$n) 	2 ===	.///8A;;;;   +++>+-+ O+ O+!%!5+{+-+"&/1+ O+&+++"i+#z+ .	3444	3444	3444K((=!!###	-...	-...	-...HH>gnnRW\\'<8899 !rw||G\BBCCC #n.F G G ] ]_ ]			(	(	9	9 #CJJ27<<X_amKnKnooppp
x{{{{1222&--cn_=Q.R.RSSTTT1222?++x
dikk

S!EFF
F
N
N$4466  """">EEoFZ[[\\\\ #  """&&rw||G\'J'JKKK	 %vbgll7L&I&IJJL L L HQKKKKK   	
   
 	
7|s"&*<$&a047888*633444	
s.   GW! <I<W! :B%W! !
Y4.	Y47A2Y//Y4__main__zH:/Satelite Stuff/epgimport/zH:/Satelite Stuff/enigma2/zH:/Satelite Stuff/picons/T)rl   r   )L
__future__r   r  r   r5   r9   r~   r|   r.   r  r   r  r,  PILr   collectionsr   xml.etree.cElementTreeetreecElementTreer  r   xml.etree.ElementTreer  enigmar   argparser   r   	six.movesr	   xml.sax.saxutilsr   ry   r   PY3urllib.parser   r   r   r   __all__r,   r*  r(  r   r^   rB   rG   rD   rE   r7   r  r   r\  r   rL   r   r1   r3   r<   rQ   rX   r\   rb   rh   rk   r   r   r   r   r  r#  r=  r#   r.  r0   r   r   <module>rM     se   & % % % % %  



 				  				                # # # # # #$$$$$$$$$$$ $ $ $###########$   
 # # # # # # 0 0 0 0 0 0       # # # # # # 


 7 <?????????????;;;;;;;;;;;;
	 
!
',,z#3
4
4(
7  w	
    y   - - -	R 	R 	R	 	 	% % %D  b b b! ! !7 7 7% % %

 
 
 
       
               4BJ BJ BJ BJ BJ BJ BJ BJJ$l3 l3 l3 l3 l3 l3 l3 l3^+ + +\w w w wt z 70-+***GLL%566'	$$&&s$   	A AA A' 'A10A1