Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
Ch-_c@sâddlmZmZmZmZmZddlmZmZddl	m
Z
ddlmZddl
mZddlmZddlmZddlmZmZdd	lZdd	lZd
d„Zdefd
„ƒYZd	S(iÿÿÿÿ(tprintDBGtprintExctiptv_systemteConnectCallbackt	E2PrioFix(tenumtstrwithmeta(tm3u8(tBaseDownloader(tDMHelper(t
boundFunction(teConsoleAppContainer(tsleepttimeNs/home/sulge/tmp/m3u8.txtcCs-t|dƒ}|j|dƒWdQXdS(Ntas
(topentwrite(tmessagetfiletmyfile((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytDebugToFile!stM3U8Downloaderc	Bs7eZdZdZdZdZedddddd	d
dƒZedd
ddddƒZd„Z	d„Z
d„Zd„Zd„Z
d„Zid„Zd„Zd„Zdd„Zd„Zdd„Zdd „Zdd!„Zed"„Zd#„Zd$„Zd%„Zed&„Zd'„Zd(„Zd)„ZRS(*iii
ixtNONEt	WGET_NONEt
CONNECTINGtWGET_CONNECTINGtDOWNLOADINGtWGET_DOWNLOADINGtENDEDt
WGET_ENDEDtM3U8t	TYPE_M3U8tSEGMENTtTYPE_SEGMENTtWAITTINGt
TYPE_WAITTINGcCsátdƒtj|ƒ|jj|_tƒ|_d|_	tƒ|_
t|j
j|j
ƒ|_t|j
j|jƒ|_d|_d|_tj|_tj|_d|_t|_d|_d|_g|_d|_dS(Ns:M3U8Downloader.__init__ ----------------------------------tiiÿÿÿÿ( RRt__init__tWGET_STSRt
wgetStatusRtconsoletNonetiptv_systM3U8UpdaterRt	appClosedt_updateM3U8FinishedtM3U8Updater_appClosed_conntstdoutAvailt_updateM3U8DataAvailtM3U8Updater_stdoutAvail_conntM3U8ListDatatM3U8UpdaterRefreshDelayRtMIN_REFRESH_DELAYtrefreshDelaytLIVE_START_OFFSETtstartLiveDurationtskipFirstSegFromListtFalset
addStampToUrlt
totalDurationtdownloadDurationtfragmentDurationListtmaxTriesAtStart(tself((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR%4s$

								cCstdƒdS(Ns9M3U8Downloader.__del__ ----------------------------------(R(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt__del__TscCsdS(Ns	wget m3u8((R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytgetNameWscCs,ttjƒdt|j|ƒƒ|_dS(Ns	 -V 2>&1 (RR	t
GET_WGET_PATHR
t_checkWorkingCallBackR*(R?tcallBackFun((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytisWorkingCorrectlyZscCs|jS(N(t
liveStream(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytisLiveStream]scCsAd}t}|dkr't}|}nd|_|||ƒdS(NR$i(tTrueR9R)R*(R?RDtcodetdatatreasontsts((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyRC`s		cCs¢||_||_d|_tjj|_d|_g|_	d|_
d|_d|_t
|_t|ƒjjddƒ|_||_|jƒ|jƒtjS(s9
            Owervrite start from BaseDownloader
        R$iÿÿÿÿitiptv_m3u8_skip_segN(tfilePathtdownloaderParamst
fileExtensionR	tSTSRtstatusR)tupdateThreadtfragmentListtlastMediaSequencetcurrentFragmentttriesR9RFRtmetatgetR8tm3u8Urlt
_startM3U8tonStartRtCODE_OK(R?turlRNtparams((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytstartis										

cCs|jr|jSd|jSdS(Ni(RFtWGET_TIMEOUT(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt_getTimeouts	cCsD|jr@d|kr"|d7}n
|d7}|dtƒ7}n|S(Nt?s&iptv_stamp=s?iptv_stamp=s%s(R:R
(R?RZ((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt_addTimeStampToUrl…s	

icCs7td|ƒ|jr|jrdt|jƒkr;d|kr;yÉtj|j|jƒ}|jr	|jr	t	|j
ƒ|_|jdkrœd|_ndt|jƒkr	g|jD]}|j
|jƒ^q»}|j||jt|jƒƒtdƒq	nWqEtk
r7td|j|jfƒqEXn
tdƒ|jd7_|j|jksrd|krød|_d|_|j|jƒ}td	|ƒtj|jƒd
|jƒd|d}td
|ƒ|jjt|ƒƒdS|jjtdƒƒdSntdƒtdƒtdƒdS(Ns,m3u8 _updateM3U8Finished update code[%d]--- iis)m3u8 _updateM3U8Finished list updated ---s3m3u8 _updateM3U8Finished exception url[%s] data[%s]s$m3u8 _updateM3U8Finished no data ---iR$sM>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [%s]s --tries=0 --timeout=%d t"s" -O - 2> /dev/nulls)m3u8 _updateM3U8Finished download cmd[%s]ssleep 1s=|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||s=||||||||||||| m3u8 _updateM3U8Finished FINISHED |||||||||||||(RRFR+tlenR2RtinitsRZt
is_varianttintttarget_durationR5tsegmentst_segUritabsolute_uritmergeFragmentsListWithCheckingtmedia_sequencet	ExceptionR3RdR	tgetBaseWgetCmdRORbtexecuteR(R?RItm3u8ObjtsegtnewFragmentsRZtcmd((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR-Œs>!( 
!
		,

cCs4d|kr0dt|ƒkr0|j|7_ndS(Ni(R)RfR2(R?RJ((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR0±siÿÿÿÿcCsûy(|j|jdƒ}||d}Wntk
rEtdƒnXg}x7t|ƒD])}||jkrrPn|jd|ƒqYWdt|ƒkr÷tdt|ƒƒd|jkrä|jd}|j||_d|_n|jj|ƒndS(NiÿÿÿÿisLm3u8 update thread - last fragment from last list not available in new list!iss>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DODANO[%d]ii(	tindexRTRpRtreversedtinsertRfRVtextend(R?RuRotidxttmpListtitem((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt"mergeFragmentsListWithChecking_OLDµs"

c
CsÁg}|jdkrx|dkrx||jkrL||j}|t|ƒkr^t|ƒ}n||}||_qLnÔy|g|jD]}||jdƒd^q…}g|D]}||jdƒd^q¯}|j|dƒ}||d}Wntk
rtdƒnXx7t|ƒD])}	|	|jkr8Pn|jd|	ƒqWdt|ƒkr½tdt|ƒƒd|j	krª|j	d}|j||_d|_	n|jj
|ƒndS(	Nit/iiÿÿÿÿsLm3u8 update thread - last fragment from last list not available in new list!ss>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DODANO[%d]ii(RURfRTtrfindRwRpRRxRyRVRz(
R?RuRoR|ttoAddRtttmpCurrFragmentListttmpNewFragmentsR{R}((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyRnÊs4
-*

cCsÑd|_|jj|_|j|jƒ}tj|jƒd|j	ƒd|d}|dkrsd||}nt
d|ƒt|jj
|jƒ|_t|jj|jƒ|_|jjt|ƒƒdS(NR$s --tries=0 --timeout=%d Res" -O - 2> /dev/nullis
 sleep %s && sDownload cmd[%s](toutDatat
DOWNLOAD_TYPERtdownloadTypeRdRZR	RqRORbRRR(R,t_cmdFinishedtconsole_appClosed_connR/t
_dataAvailtconsole_stdoutAvail_connRrR(R?twaitRZRv((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR[
s	,cCs8td|ƒd|_d|_d|_d|jkrDd|_n|j|_|jj|_d|j
krƒd|_d|_nt
|j
j|jƒ|_t
|j
j|jƒ|_|rí|j|jkrí|jsätjjSt}nd}t|krId|_|jdt|jƒkrh|jd7_|j|j}qhn|jd7_|j|j}d|krè|jj|_tj|j ƒd|j!ƒd|d	|j"d}td
|ƒ|j
j#t$|ƒƒtjj%S|jr*tdƒ|jj&|_|j
j#t$dƒƒtjj%Stjj'SdS(
Ns_startFragment tryAgain[%r]R$iÿÿÿÿtunknowniis --tries=1 --timeout=%d Res" -O - >> "sDownload cmd[%s]sim3u8 downloader - wait for new fragments ----------------------------------------------------------------ssleep 2((RR„tremoteFragmentSizetremoteFragmentTypet
localFileSizetm3u8_prevLocalFileSizeR…R R†R)R(Rˆtconsole_stderrAvail_connRR,R‡tstderrAvailR‰RWtMAX_RETRIESRFR	RQtINTERRUPTEDR9RVRfRTR&RR'RqRORbRNRrRRR"t
DOWNLOADED(R?ttryAgainRVRv((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt_startFragmentsJ					
		7
	

cCs+d|kr'|j|7_|jj|jkr4dS|jj|jkr'|j|7_|jjddƒj	dƒ}x«t
t|ƒƒD]”}||jdƒrît
jd||ƒ}|rt|jdƒƒ|_|jdƒ|_qq‰||jdƒr‰d|_|jj|_Pq‰q‰Wq'ndS(Ns
s
sLength:s)Length: ([0-9]+?) \([^)]+?\) (\[[^]]+?\])iis
Saving to:(R)R„R…RR†R&RR'treplacetsplittrangeRft
startswithtretsearchRitgroupRRŽR‘R(R?RJtlinesR{tmatch((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR‰Us"	cCs~tdƒd|jkr2|jjƒd|_ntjj|jkrw|jrw|jj	ƒ|j
dtƒtj
SntjS(NsM3U8Downloader._terminateiÿÿÿÿ(RR)R*tkillR	RQRRRR(t	sendCtrlCR‡RHRR]tCODE_NOT_DOWNLOADING(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt
_terminateis

	

cCs|jdƒdS(Nt
iptv_stampi(R™(R?turi((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyRlvscCstd|||jfƒtjj}|rHtj|ƒtjj}nª|jj	|jkr¯d|_d|_dt
|jƒkr3y˜tj|j|jƒ}|jrõdt
|jƒkr|j|jdjƒ|_|jƒtjj}qn&dt
|jƒkr|jset|_d|jkrYg|jD]}|j|jƒ^q5|_nãg|_d}|j}xot|jƒD]^}d|j kr¦||j 7}n
||7}|jj!|j|jƒƒ||jkrPqqW|jj"ƒt
|jƒt
|jƒkr<t
|jƒ|j#kr<|j|j#|_n|j$t
|jƒ|_%|j&dƒn§g|jD]}|j|jƒ^qo|_yOd|_'g|_(x6|jD]+}|j'|j 7_'|j(j!|j ƒq¯WWn*t)k
rt*ƒd|_'g|_(nX|j+ƒ}nWq3t)k
r/q3Xntd||j,fƒ|tjjkr£|j,|j-kr£d|_d|_|j,d7_,|j|j.ƒdSd|_,nC|jræ|jj/|jkrætdƒ|j+ƒ}ntj|ƒtd|j|j0|j1|j2fƒd|j1krO|js@tjj}qò|j+ƒ}n£d|j1|j2kr¾|j'dkr¯y|j3|j(|j47_3Wq¯t)k
r«t*ƒq¯Xn|j+ƒ}n4d|j1|j2kræ|j+tƒ}ntjj}||_5tjj|j5krdS|j6r;d|_7d|_8d|_6nt9|_|j:rxd|_d|_|j:j;ƒd|_:n|s‹|j<ƒndS(NsDM3U8Downloader._cmdFinished code[%r] terminated[%r] downloadType[%s]iiÿÿÿÿs->>>>>>>>>>>>>>>>>> localStatus [%s] tries[%d]isAm3u8 liveStream waitting finished--------------------------------s9m3u8 nextFragment finished: live[%r]: r[%d], l[%d], p[%d](=RR†R	RQtERRORRtupdateStatisticR”R…RR)RˆRŠRfR„RRgRZRht	playlistsRlRmR[RRkt
is_endlistRHRFR7RTRjRxtdurationtappendtreverseR8RoRUR-R;R=RpRR—RWR>R4R"RRRR<RVRRR+R.R1R9R(R¢tonFinish(R?RIt
terminatedtlocalStatusRsRttcurrentDurationtmaxFragDuration((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR‡ys¸
			
		.		

6+		
	

$		

&	
								

cCstS(N(RH(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pythasDurationInfoùscCs
t|jƒS(N(RiR;(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytgetTotalFileDurationüscCs
t|jƒS(N(RiR<(R?((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pytgetDownloadedFileDurations( t__name__t
__module__R4R“RaR6RR&R…R%R@RARERGRCR`RbRdR-R0R~RnR[R9R—R‰R¤RlR‡R³R´Rµ(((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyR%sB			 								%	@;		
	€		(t-Plugins.Extensions.IPTVPlayer.tools.iptvtoolsRRRRRt-Plugins.Extensions.IPTVPlayer.tools.iptvtypesRRt"Plugins.Extensions.IPTVPlayer.libsRt3Plugins.Extensions.IPTVPlayer.iptvdm.basedownloaderRt+Plugins.Extensions.IPTVPlayer.iptvdm.iptvdhR	tTools.BoundFunctionR
tenigmaRR
RRœtdatetimeRR(((sN/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/iptvdm/m3u8downloader.pyt<module>s(