From bd18c2b7d6a0c63fbbba0694e16940fe39c1fa80 Mon Sep 17 00:00:00 2001 From: IslandJohn Date: Thu, 31 Dec 2015 15:18:01 -0500 Subject: [PATCH] Initial release --- LICENSE.md | 21 +++++++++++++ plugin.video.DunaTV/addon.py | 52 +++++++++++++++++++++++++++++++ plugin.video.DunaTV/addon.xml | 13 ++++++++ plugin.video.DunaTV/icon.png | Bin 0 -> 2756 bytes plugin.video.DunaWorld/addon.py | 52 +++++++++++++++++++++++++++++++ plugin.video.DunaWorld/addon.xml | 13 ++++++++ plugin.video.DunaWorld/icon.png | Bin 0 -> 3614 bytes plugin.video.MTV1/addon.py | 52 +++++++++++++++++++++++++++++++ plugin.video.MTV1/addon.xml | 13 ++++++++ plugin.video.MTV1/icon.png | Bin 0 -> 2085 bytes plugin.video.MTV2/addon.py | 52 +++++++++++++++++++++++++++++++ plugin.video.MTV2/addon.xml | 13 ++++++++ plugin.video.MTV2/icon.png | Bin 0 -> 2937 bytes 13 files changed, 281 insertions(+) create mode 100644 LICENSE.md create mode 100755 plugin.video.DunaTV/addon.py create mode 100644 plugin.video.DunaTV/addon.xml create mode 100644 plugin.video.DunaTV/icon.png create mode 100755 plugin.video.DunaWorld/addon.py create mode 100755 plugin.video.DunaWorld/addon.xml create mode 100644 plugin.video.DunaWorld/icon.png create mode 100644 plugin.video.MTV1/addon.py create mode 100644 plugin.video.MTV1/addon.xml create mode 100644 plugin.video.MTV1/icon.png create mode 100755 plugin.video.MTV2/addon.py create mode 100644 plugin.video.MTV2/addon.xml create mode 100644 plugin.video.MTV2/icon.png diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..be80112 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 techiejohn/pilotjohn at gearsdown.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugin.video.DunaTV/addon.py b/plugin.video.DunaTV/addon.py new file mode 100755 index 0000000..bce0280 --- /dev/null +++ b/plugin.video.DunaTV/addon.py @@ -0,0 +1,52 @@ +import os +import time +import urllib +import xbmc +import xbmcaddon +from BeautifulSoup import BeautifulSoup + +print "Starting..." + +# setup +cs_url = "http://admin.gamaxmedia.hu/player-inside-full?streamid=dunalive&userid=mtva" +cs_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25" +cs_name = xbmcaddon.Addon().getAddonInfo("id") +cs_file = os.path.join(xbmc.translatePath("special://temp"), cs_name + ".session") +cs_delay = 5 + +class CsatornakURLopener(urllib.FancyURLopener): + version = cs_agent + +print "Session: " + cs_file + +# tries to limit deadlocks due to multiple runs +# fcntl for file locking may not be available on some platforms +if os.path.exists(cs_file) and time.time() - os.path.getmtime(cs_file) < cs_delay: + print "Recently ran, exiting." + sys.exit(0) +else: + with open(cs_file, "a+"): + os.utime(cs_file, None) + +cs_player = xbmc.Player() + +# stop playing and wait +cs_player.stop() +while cs_player.isPlaying(): + xbmc.sleep(10) + +# load and parse stream +print "Loading: " + cs_url + +urllib._urlopener = CsatornakURLopener() +cs_page = urllib.urlopen(cs_url) +cs_soup = BeautifulSoup(cs_page.read()) + +cs_page.close() + +cs_stream = cs_soup.source['src'] + +# play stream +print "Playing: " + cs_stream +cs_player.play(cs_stream) +print "Done." diff --git a/plugin.video.DunaTV/addon.xml b/plugin.video.DunaTV/addon.xml new file mode 100644 index 0000000..c4d5441 --- /dev/null +++ b/plugin.video.DunaTV/addon.xml @@ -0,0 +1,13 @@ + + + + + + + + + Duna TV + Stream Duna TV live. + all + + diff --git a/plugin.video.DunaTV/icon.png b/plugin.video.DunaTV/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..51527545f3933a34c61b6fba8ec541c78a33586f GIT binary patch literal 2756 zcmV;#3On_QP)Z|>c@cQ-lT%x^Y#vwP0>{r24NoU`XU-;KrN zamPw<(#cX_3Acn>v4mT~tysb>;Z`i+mT*hB6E0>Akt9CgNk zYk_y;xf7Os4eRRAgrmN(z}k3l!n(%hlkk{Mau7Zob@s(!E^u{rzm57vR|>1T+A5WkPZa^6!$ey@Wb-X;*}!-0r|?4}+V4JAtAc8eJrHG>uP#4ijmwAyQ9OXPJ8UnLsFUcX%fv_! zjxu@!2Q}qefT3Z1gGb#&M^(O|Em0u+MMG=3GwiQTW!R|8i=ieQ_tzMde#ME1P*;Qg zHDM-vxu)zPpfW;)SBlQ6EDt5&xOar1bL-+_d5|4>TVcim4%7$X@(`PUJ)j|mtl$Tc0UOBYt>#~NO(IIi*1i8;iCK7 zDQwJ0I{DBVxbim@2A)9id;8dWmNAb-l|KB)%2&@K{;{j~Wvs?KLWbMJ9J(Sbu z04uX8w;&CoOK`XimVQ8=>oiJb#VHA&H*ah7%h)r3@dE1eU#E4oonzuvcmP4fbbJP=lb$ov zXrKkq?SE||95*qf>^XK6DavmyFYDTZ;}5L&uPl8Qhj~DYoGO+UTp}d)5_eR^FNl*m zq`{T*1T%myp(8uB1;A1mcq~VRf2n;gO+j`w4zJ?)JdXF9^g6E7tgd;KM!gPHc$C`! zkkr?J6I9^T+rz+a_dIr44%CHUE&if{(rTx6(!74TbNk!lndh;cYexvmaM{WDV|p*%wt zhRRp@a``*m2e4Zj!kZjNL(e@~5`GH~|4>eCfNcXcqHBTs)c!}2l^}dbDwo0n9s{nI z&veRn08e@N%|qJfQ?fA)Mee(8s55cgxj(+ISk>Uv z&3ZlAEnka!`Mc|O+cfb>^XsR#{((UZkj0=S1jxTtI^3}`DI4TR9euSqM#IhnUYD}3 z_!~P-=+%_f#3v2ekPpHQX%Qy-G;QQXS>#vYezfr3 zh9#-#5hi@PVac$!FZ}wrYQMy=qoF8*WEUBBOf2!OLHkJf&kXS#QzJ`|hFF4VQ3&vga96M2xwen?K2e-CsHkm$}*=P{4{ql0o#XI}Q&a}-eTvE_Or zP#XZ*wNjT!w&ZFQmCtMv6~KxlSsj)MDKQ`Gb`76xc%=(4)GS$nqSkmzlGXB&zv z;o9t!JDHzIlDVfX(kNxs_%&;ctPf8^Nro^F7JtkvZ3Dzld*!A&B>tT-GHb-|e*#;M zhQO9Ye#1z366L!o9i`)TpwPJ~#5zZp@Fee6Pcl>mD%W@K#b}*UM)&&Sj?>uZX`(+~4fc?k|&I zAJ+Suj?lunaO*B0a7!;V)b&}y4H&M)! zsE>=x3@Tz+U7wCRN^$qEAI;!_aUppEaKvfN8Zk$6Cv;tIcB5|c+YZdz6_amQ$08gA zu+wwX(=lzGo1sD9Zs@k$g9g(1qor=H@(J3%Cptgo%zBU=Ea1kb*GWi5U{a6=jv4Ud zCL-ZZh`I9MnRb+Usa!vN1%G@LWY)`$=AX;?bspu?H#2kSPYs==Bb~FF(}W3an7)Gv zZ59UE!h#A{zCKBmRFnH-N)r0ERoO|#nC=5g9`7N_IJ{n~gBzswD8HRKO8)-XpwIMd zld)&SZ-9i46cSW?AQPQx?OG;Fcna7jq%_N3{>znX77~VfYNhP?l6akePcU3}s{D-a z8sOxh2#@9acaZJW-ijsM5^lv3ZV9(y3Acn>!mU`s+nM}dfB^thQ>rg*oi~O60000< KMNUMnLSTaMnMJJt literal 0 HcmV?d00001 diff --git a/plugin.video.DunaWorld/addon.py b/plugin.video.DunaWorld/addon.py new file mode 100755 index 0000000..f6c0db5 --- /dev/null +++ b/plugin.video.DunaWorld/addon.py @@ -0,0 +1,52 @@ +import os +import time +import urllib +import xbmc +import xbmcaddon +from BeautifulSoup import BeautifulSoup + +print "Starting..." + +# setup +cs_url = "http://admin.gamaxmedia.hu/player-inside-full?streamid=dunaworldlive&userid=mtva" +cs_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25" +cs_name = xbmcaddon.Addon().getAddonInfo("id") +cs_file = os.path.join(xbmc.translatePath("special://temp"), cs_name + ".session") +cs_delay = 5 + +class CsatornakURLopener(urllib.FancyURLopener): + version = cs_agent + +print "Session: " + cs_file + +# tries to limit deadlocks due to multiple runs +# fcntl for file locking may not be available on some platforms +if os.path.exists(cs_file) and time.time() - os.path.getmtime(cs_file) < cs_delay: + print "Recently ran, exiting." + sys.exit(0) +else: + with open(cs_file, "a+"): + os.utime(cs_file, None) + +cs_player = xbmc.Player() + +# stop playing and wait +cs_player.stop() +while cs_player.isPlaying(): + xbmc.sleep(10) + +# load and parse stream +print "Loading: " + cs_url + +urllib._urlopener = CsatornakURLopener() +cs_page = urllib.urlopen(cs_url) +cs_soup = BeautifulSoup(cs_page.read()) + +cs_page.close() + +cs_stream = cs_soup.source['src'] + +# play stream +print "Playing: " + cs_stream +cs_player.play(cs_stream) +print "Done." diff --git a/plugin.video.DunaWorld/addon.xml b/plugin.video.DunaWorld/addon.xml new file mode 100755 index 0000000..0578643 --- /dev/null +++ b/plugin.video.DunaWorld/addon.xml @@ -0,0 +1,13 @@ + + + + + + + + + Duna World + Stream Duna World live. + all + + diff --git a/plugin.video.DunaWorld/icon.png b/plugin.video.DunaWorld/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4e67cd00e6434d31f68f06071e1cc53c016066c3 GIT binary patch literal 3614 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 + + + + + + + + MTV 1 + Stream MTV 1 live. + all + + diff --git a/plugin.video.MTV1/icon.png b/plugin.video.MTV1/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65038259acada82c673bb9c8f21b6236ddc94695 GIT binary patch literal 2085 zcmV+=2-^3FP)vgthQ2 z!y*XRvizPP7K?@E?16h0+>1@URQz!1+4!-reDK>M*bKK#iUn@X0=K}eS>P79wRH5u z!?gaxhh}zlToPG>2lnh=Ywr}Xtc*-?)|?n(emn9(41C}dopc;D4Jv{jVBL9xU%3GN z#G*maKIjB|O9bFsG=MYY$Dwj)4m8Z?DbGPWpiiONbiwyM_e3Y~qcj9C09panCxWwj zu46ztfcxU53OIhZAG8W;NrY!DTxUO3z?C#9sIwHCbx@(lN2zVDfqtO&xn=ivooCi; zuI}o*)N?R%V7ACx_GJ0U#nZdEjeiK5+)G=3-A+Nv;roF|x8bPkHf-L3R`&9-KcLT` zINbno{_g7s{?BY7>d0X53!z2O$X@DN3%!Oqu7m|Vw0<}o9gWSQUSNL@Jp+vffLEa- zPS`h*0Nv10ItQH#n#<>QvscI`_ANRC9|ZIuHg!<3%i#vksNRCOzmJ>c)4b92w9 z!R2Fgtd4y&A2IVzWF2FY_TSZuY@xuK5g9aWeq~h~X83Jt4ZuTze({%RHX)8DueS!0kdA&<-WDx@UO=xQD+jB0xm-T+8 z0m8`emtBVI?<1f+LUV(UUy-j;aUsW~A8?+DlSh%iLvIOljC_@^#FgooWeg(2UxIRF zXOTG_rqE_zS4qXW9GgDC`OAX}shDQuwh8l$d_F0aRd9^jWcXuHzEt*h5MObHkmcm_ zYNY)+l>(n3?Qce=TsD<9`yQ8yXKDc)Z5v%~qom^P!hDls z$m3X*XLzZ!PuWoy0pN8UOK-6%0X|OJKa5MV({$P#!(oqDl>jf0_D_oF*h!CAl>om_ z+CLp3;HN!eRRVmdwBHyZ;Ef)!Dgi!7+W$8~!2j`xRS9r;1#U-#fOmStssy+^e9w*$ z@NAD*l>l#-_H!ZxJjWweCBQF8`?(PUp6d~-65tKe{+I{>AL9|L65w)QwJ<`!3)4Nu zNC)s!(*A@*B9Ub}X^vrnN32SK*Sg$j#z!E#i(PJ-wK@R*Q6!(IaoST60RFVJe~x2S z3!Il1?~{rb^TK#jn-lWATq@p|j-}M;g0fNC&lAZ<{!BIUeUwLxN`ccN8hQEe>jndt zeQ)L%^#G1b?HV>4q~b|Itj!CdIhjPhOT`;FMr|^jtWu;-T&*>!i^#rKO2r*6W$J0;?2FUL*Lm!_FbX(B{}P*}P`68W@dyGhR{)z{ zcyPp}`$s-5WuJwSz!~}`Y-YPOFEsVJ5dii=1tEYgpt?lz4M90B&B$!_RTvGNq3;sO zg^+)`9Hxn)-JJL%2_hW;&I#%@ovWs2m2_v4)LOQ0Md zkaPGPl+h>n+?g&PC0~lzHxVh|4E-;WT)a=i{WiCca28TVwgMQv;bAp2k4A!bj4w=i znk=VabT%F1&(LS-%@wVDj%j>O+1l8L8SGQ2HxX6uyt*6u2)cGNFRkkC>P}p3@8}Wz ze3M3XeN1&L}?L*&_=_y*TS2{AdixkG=t%%>L62YZkZ#Zp{L>z%6iV7I;L=w1x9c zBJ~U3Urh?YsDY0TW(PjD4Yy{2Ti_PBwZ0AxfT3-s|0Eda + + + + + + + + MTV 2 + Stream MTV 2 live. + all + + diff --git a/plugin.video.MTV2/icon.png b/plugin.video.MTV2/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dcaec69c99dcfa6fae3a6ea7708a2a709023092b GIT binary patch literal 2937 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 LqZ_%*{%F!)%rXeG literal 0 HcmV?d00001