From dbbb9e3060f17864016ca3c0a9b42319c3239c15 Mon Sep 17 00:00:00 2001 From: sofaking Date: Sun, 9 Jun 2024 15:33:33 +0200 Subject: [PATCH] orf on addon merge --- .github/workflows/check.yml | 30 + README.md | 75 +- addon.xml | 30 +- changelog.txt | 22 +- resources/banner.jpg | Bin 0 -> 7397 bytes resources/fanart.jpg | Bin 150012 -> 24337 bytes resources/icon.png | Bin 77264 -> 30406 bytes resources/landscape.jpg | Bin 0 -> 10691 bytes .../resource.language.de_de/strings.po | 347 ++--- .../resource.language.en_gb/strings.po | 261 ++-- resources/lib/Addon.py | 599 ++++---- resources/lib/Base.py | 247 ---- resources/lib/Common.py | 295 ---- resources/lib/Directory.py | 428 ++++++ resources/lib/Helpers.py | 71 - resources/lib/HtmlScraper.py | 1257 ----------------- resources/lib/Kodi.py | 423 ++++++ resources/lib/OrfOn.py | 689 +++++++++ resources/lib/Scraper.py | 45 - resources/lib/ServiceApi.py | 551 -------- resources/lib/Settings.py | 38 - default.py => resources/lib/default.py | 2 +- resources/media/archive_banner_v2.jpg | Bin 121544 -> 0 bytes resources/media/blacklist_banner_v2.jpg | Bin 139749 -> 0 bytes resources/media/default_banner_v2.jpg | Bin 143115 -> 0 bytes resources/media/fanart_v2.jpg | Bin 150012 -> 0 bytes resources/media/focus_banner_v2.jpg | Bin 139546 -> 0 bytes resources/media/live_banner_v2.jpg | Bin 146029 -> 0 bytes resources/media/most_popular_banner_v2.jpg | Bin 136634 -> 0 bytes resources/media/news_banner_v2.jpg | Bin 132293 -> 0 bytes resources/media/recently_added_banner_v2.jpg | Bin 133412 -> 0 bytes resources/media/schedule_banner_v2.jpg | Bin 126267 -> 0 bytes resources/media/search_banner_v2.jpg | Bin 134279 -> 0 bytes resources/media/shows_banner_v2.jpg | Bin 123334 -> 0 bytes resources/media/tips_banner_v2.jpg | Bin 130140 -> 0 bytes resources/media/topics_banner_v2.jpg | Bin 127239 -> 0 bytes resources/media/trailer_banner_v2.jpg | Bin 135481 -> 0 bytes resources/poster.jpg | Bin 0 -> 18907 bytes resources/settings.xml | 26 +- 39 files changed, 2175 insertions(+), 3261 deletions(-) create mode 100644 .github/workflows/check.yml create mode 100644 resources/banner.jpg create mode 100644 resources/landscape.jpg delete mode 100644 resources/lib/Base.py delete mode 100644 resources/lib/Common.py create mode 100644 resources/lib/Directory.py delete mode 100644 resources/lib/Helpers.py delete mode 100644 resources/lib/HtmlScraper.py create mode 100644 resources/lib/Kodi.py create mode 100644 resources/lib/OrfOn.py delete mode 100644 resources/lib/Scraper.py delete mode 100644 resources/lib/ServiceApi.py delete mode 100644 resources/lib/Settings.py rename default.py => resources/lib/default.py (63%) delete mode 100644 resources/media/archive_banner_v2.jpg delete mode 100644 resources/media/blacklist_banner_v2.jpg delete mode 100644 resources/media/default_banner_v2.jpg delete mode 100644 resources/media/fanart_v2.jpg delete mode 100644 resources/media/focus_banner_v2.jpg delete mode 100644 resources/media/live_banner_v2.jpg delete mode 100644 resources/media/most_popular_banner_v2.jpg delete mode 100644 resources/media/news_banner_v2.jpg delete mode 100644 resources/media/recently_added_banner_v2.jpg delete mode 100644 resources/media/schedule_banner_v2.jpg delete mode 100644 resources/media/search_banner_v2.jpg delete mode 100644 resources/media/shows_banner_v2.jpg delete mode 100644 resources/media/tips_banner_v2.jpg delete mode 100644 resources/media/topics_banner_v2.jpg delete mode 100644 resources/media/trailer_banner_v2.jpg create mode 100644 resources/poster.jpg diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..de04f93 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,30 @@ +on: [push, pull_request] + +jobs: + kodi-addon-checker: + runs-on: ubuntu-latest + name: Kodi Addon-Checker + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Run Kodi Addon-Checker + id: kodi-addon-checker + uses: xbmc/action-kodi-addon-checker@v1.1 + with: + kodi-version: matrix + addon-id: ${{ github.event.repository.name }} + + autopep8: + runs-on: ubuntu-latest + name: autopep8 + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Run autopep8 + id: autopep8 + uses: peter-evans/autopep8@v2 + with: + args: --aggressive --diff --exit-code --experimental --max-line-length 173 --recursive resources/lib + - name: Fail if autopep8 made changes + if: steps.autopep8.outputs.exit-code == 2 + run: exit 1 diff --git a/README.md b/README.md index e84c4d5..91a9cd9 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,41 @@ -ORF TVthek KODI Addon -======= -ORF TVthek is an addon that gives you access to the ORF TVthek Video Platform. +# ORF ON Addon for Kodi (plugin.video.orftvthek) +ORF ON is an addon that provides access to the ORF ON Video Platform (Austrian Television, formerly ORF TVthek) -Supported platforms -------------------- -Windows, Linux , Android and OSX +[![Kodi version](https://img.shields.io/badge/kodi%20versions-20--21-blue)](https://kodi.tv/) Current Features ---------------- * Livestream -* All Shows -* Schedule Search -* HTTP Stream H264 (Stable) -* Search Function -* Missed Shows -* Blacklist Shows -* JSON(Service API V3) or HTML Scraper -* Restart Livestream - inputstream.adaptive needed +* Shows +* Schedule +* Search +* DRM Streams +* Accessibility Broadcasts +* Simple IPTV Integration + +Todos +---------------- +- [X] Subtitles +- [X] Add Settings +- [X] Add option to show related content +- [X] Add a main menu entry for latest uploads +- [X] Kodi translation still missing +- [X] Accessibility Known Issues ------------ -* you tell me +* A curl bug (http2) on KODI 19 prevents the streaming therefore the Addon is only supported on KODI 20+ (A workaround on the advancedsettings.xml seems to fix the issue, but further testing will be required) +``` + + + true + + +``` Simple IPTV Integration ----------------- @@ -32,52 +43,50 @@ Simple IPTV Integration Playlist Content ``` #EXTINF:-1 tvg-name="ORF 1" tvg-id="orf1" group-title="ORF",ORF 1 -plugin://plugin.video.orftvthek/?channel=orf1&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf1 #EXTINF:-1 tvg-name="ORF 2" tvg-id="orf2" group-title="ORF",ORF 2 -plugin://plugin.video.orftvthek/?channel=orf2&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2 #EXTINF:-1 tvg-name="ORF 3" tvg-id="orf3" group-title="ORF",ORF 3 -plugin://plugin.video.orftvthek/?channel=orf3&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf3 #EXTINF:-1 tvg-name="ORF Sport+" tvg-id="orfs" group-title="ORF",ORF Sport+ -plugin://plugin.video.orftvthek/?channel=orfs&mode=pvr +plugin://plugin.video.orftvthek/pvr/orfs +#EXTINF:-1 tvg-name="ORF Kids" tvg-id="orfkids" group-title="ORF",ORF Kids +plugin://plugin.video.orftvthek/pvr/orfkids #EXTINF:-1 tvg-name="ORF 2 Burgenland" tvg-id="orf2b" group-title="ORF",ORF 2 Burgenland -plugin://plugin.video.orftvthek/?channel=orf2b&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2b #EXTINF:-1 tvg-name="ORF 2 Steiermark" tvg-id="orf2stmk" group-title="ORF",ORF 2 Steiermark -plugin://plugin.video.orftvthek/?channel=orf2stmk&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2stmk #EXTINF:-1 tvg-name="ORF 2 Wien" tvg-id="orf2w" group-title="ORF",ORF 2 Wien -plugin://plugin.video.orftvthek/?channel=orf2w&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2w #EXTINF:-1 tvg-name="ORF 2 Oberösterreich" tvg-id="orf2ooe" group-title="ORF",ORF 2 Oberösterreich -plugin://plugin.video.orftvthek/?channel=orf2ooe&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2ooe #EXTINF:-1 tvg-name="ORF 2 Kärnten" tvg-id="orf2k" group-title="ORF",ORF 2 Kärnten -plugin://plugin.video.orftvthek/?channel=orf2k&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2k #EXTINF:-1 tvg-name="ORF 2 Niederösterreich" tvg-id="orf2n" group-title="ORF",ORF 2 Niederösterreich -plugin://plugin.video.orftvthek/?channel=orf2n&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2n #EXTINF:-1 tvg-name="ORF 2 Salzburg" tvg-id="orf2s" group-title="ORF",ORF 2 Salzburg -plugin://plugin.video.orftvthek/?channel=orf2s&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2s #EXTINF:-1 tvg-name="ORF 2 Vorarlberg" tvg-id="orf2v" group-title="ORF",ORF 2 Vorarlberg -plugin://plugin.video.orftvthek/?channel=orf2v&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2v #EXTINF:-1 tvg-name="ORF 2 Tirol" tvg-id="orf2t" group-title="ORF",ORF 2 Tirol -plugin://plugin.video.orftvthek/?channel=orf2t&mode=pvr +plugin://plugin.video.orftvthek/pvr/orf2t ``` Legal ----- -This addon provides access to videos on the ORF TVthek Website but is not endorsed, certified or otherwise approved in any way by ORF. - -Icons ------ -https://uxwing.com +This addon provides access to videos on the ORF ON Website but is not endorsed, certified or otherwise approved in any way by ORF. diff --git a/addon.xml b/addon.xml index 22bf69a..4b343f0 100644 --- a/addon.xml +++ b/addon.xml @@ -1,34 +1,34 @@ - + - - - - + + - + video + all de en - ORF TVthek - ORF TVthek - ORF TVthek - Ermöglicht Ihnen den Zugriff auf die ORF TVthek Video Platform - ORF TVthek - This plugin provides access to the Austrian "ORF TVthek" + ORF ON + ORF ON + ORF ON - Dieses Plugin ermöglicht den Zugriff auf den österreichischen Streamingdienst ORF ON + ORF ON - This plugin provides access to the Austrian ORF ON streaming service GPL-2.0-only - https://forum.kodi.tv/showthread.php?tid=159835 + https://forum.kodi.tv/ sofaking@gettingmoney.at - https://tvthek.orf.at + https://on.orf.at https://github.com/s0faking/plugin.video.orftvthek resources/icon.png resources/fanart.jpg - v0.12.12 (23/05/2024) - [info] ORF TVthek is down and replaced by ORF On - [fix] ServiceAPI is forced on this version + v1.0.2 + - new Livestream (timeshift) + - added setting to use old livestream format + - LF conversion diff --git a/changelog.txt b/changelog.txt index ca278d2..8877648 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,23 @@ +v1.0.2 (2024-06-08) +- new Livestream (timeshift) +- added setting to use old livestream format +- LF conversion + +v1.0.1 beta (2024-06-05) +- fix routing requirement +- show segment option added +- cache reload fix +- related video option +- fix UA stream errors (#6) +- orf tvthek has been disabled + +v1.0.0 beta (2024-01-06) +- inital ORF ON addon +- beta version +- most stuff is working but everything needs to be tested a little more +- orf on is still in beta so stuff might change until the final release in april 2024 +- translation stuff is still missing + * 0.12.12 - ORF TVthek is down and replaced by ORF On - ServiceAPI is forced on this version @@ -250,4 +270,4 @@ - Streaming Video from http://tvthek.orf.at (mms) - Experimental High Quality MP4 Streaming from http://tvthek.orf.at (rtmp) - Livestream -- Missed Shows +- Missed Shows \ No newline at end of file diff --git a/resources/banner.jpg b/resources/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e123f0a48c1d60b6be105cd3b662aa5a9b510638 GIT binary patch literal 7397 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"t<+6p>Lezbv7&+s(Yl;C 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 Y0PAzKT7{q2oB#j-07*qoM6N<$f(#}{dH?_b diff --git a/resources/landscape.jpg b/resources/landscape.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c9ff23d09a409d35317f387d03328d9bf68714d GIT binary patch literal 10691 zcmd6Ndt6N2_y0bpIT{l+qnSdfDP$yaE0jNHiuN zjfpO9l~7V5C4`bf7om$pg;M?2nI4bl`}+Mpzt`*c-*3-r&RJ()*Is+AwJ-18Ti*K? zF&EBVFc)DMhUUW$_15623+BvOC0x2>?g9q^Bp`&#{k;N0XyXwI2;3CBbelgaVMKx;&!B0P;ZiE!z<9 zNfXsk*Z@0(h}XTnUq>ROc?6;EnBLy5v%S6D3WPK&5y}btT|P*T(A0K_kNF)pA|4@~ zJqTUT`yIFXI6~=vAT;>p2G3wmbvqjH#J#-{`jUvyz-0*OK1PV))+aYeqta1A8A4)^ zl|wN?Cu0#Z^MSfo{Fi>yp};?K`@iP-TYkN-&>Tc)&}cLb0v-fG^wS(b*My*>rPY4` zOJ~p^mJW-ht7oXM%O1*Mu?CwA9y)B8v9YnPzUc^4qY;Ki#zs^n7!=j)r>RY+Ya6jy zY@`3@(3^u;bbO-52Mx>=;Vevph4tp4VU!Kw8kB|o3K&lBr`aEPhU5iI3}HA8*U;+U z516MiVYmj3=*QBurJFbp(j7cuiqoG*j;1|j>*DwVmi@Evg_>drJJ9KgAZT6 z!M> zKByl}kI&)@xCl*)%Yj%bj9`k<%5?~tlIqX%IZ{$e?oUNB#H8xr%DI;{zG6f@!l53e z9GZZ9a;1_x9~=$BH7gK}DhL)#+e4bl86-k+&uBt0XA+eY2nlTkkc{!EXZ&C}RXbFR zFC=BitPp452Ij~d=V3f0;+e|m$S@Kk5S16|6VilC_!-C05lSU_RF4>@Bo~?`@5jCvtq^&K@eV0&Z&*l);G-O<;!A(U5 zBuJ)jP@vfV2!}Pt!#9^sAYzXY11S@rT$I=mfpjuJw<%J{re1=-3)%qUKRqVOkpe^p;g^0>G*}i^w3vT01{02;zWEp*2AI&6 z6Vza{*{F_B3EWOWss+#E%1xy}!uVLg5NoA^3@jj>haiPy;FR8j?B%3FE{_6bqeI~y z6HX)-nB}lB=nCS1U6N3M4zgzSe*twtkdaC#N5W|H;04l#a;Y(LXcN?&gh3|xkPGUC zhdETtlQNY^&IJ;sf+8?XL9H2@<5Kz9VmneQH38Me5zm~C#(YPf0={~* zt`2-5HFUraNK}ZhrEKW4_Cg*4^MW>0NjaDj!WF<7&y)lP6qJIH=JbArcrGO5A_i7O zBkCDgD%h6PtWaGkk6}vngbp2&6rK@#LH0fCt8xw)HmzU?BDHeLFeR<0k-?7Cu_C-NmqDc?N9_gBUdqGz44(+x?|0})7#jAS8Z_?)q=lS~U zwZBt+ey93WFD`O)J{5TB!RHxIPp6f1yT|YOO*Q2`U!PhTuTebum0>S>{_^{h-=w-+ z^!?8>|0(v1irhZIYI)$Lf`5`Ccj#hSmfw`kMyur;rWoh+qF;IcMMAMejg3Eb z+ERWM`$bX3f&(jqG`h!B{G=LN0@SMk6t%e0(K#-<;PdRKw^B=PQR3h~J)Kgr6R2ho zM{c^o9gT$@eaur-_Drf9R8!-psFV64?r8oyY0k!*%uOkNU*Ay7|3j^WrcMWDrR(0& zTG)|A)uX?(E&A;vQEpSeWl;}9;=(cvQ?mY??5}mOt$jisG45PKcpVN483sqWR#1OhDU( zd~iaD#fJ*O*@6Qi9CHXrlhnni7<;60^g4X^toecAq3>@mANTs;FM8#Q+eyPZHBQUb z<^H$F&^x8I-_6ea^zAN=_w7YX4!w=t-kS7nN2l}*OsG5t_;DVOixRm)TaiG31k`GP14|Q(;1eukuI7F|SP>~#rouu6(I_X)pq3x% z6%drexH2T?rCtDI!_jYUmyaF$@x!FLz3<-#Zh!agVME#*`Lqh`@h#JgUbO4+>8~cG zRV@bb4go7l+z0RcQSz$8;;&xB{WMmjn%r|DM{=;_>khM3tK)mhk_9#;&&!IRO+WG< z%Yk2RG+dLW42fNFeuwi|2dCMaoeUyEkNOr%lvd83A;aRmPaFuSXoyveN%oEnd&ep? z<}^-C?0od<wMp(+B9pu->{ha zu#2Svx96*UPhJb2bz$$94LZ?7rVRSha%9D)4a=%xBktXmh{MZzkt#f6>)OctwV^o! zc(pfeUu-qndq2DVl5Ldgp3d!3Uq4w`g(`7f&nNp2D^Jg|9~Yslj&MG9FYx}X>^<>X z5vQu!CvI8rIsM12H%^wb3$n#NLHrpbGTeT?Zn(J&oL34wRrhP7$ zn&)=6{Mq+KQvw%1D-BmBZ0)>JwSRA(YhK0qPe$$f0nZKc#gdy2GtM3|xH5I-Jx9^q zrl)1w^Q-Q?lQ=kS?;o0ZLKfCqnk`%QaDR2W;%@aiN2g-O8{m*bWW)(~&>EB?>wu)g?22kW+Z z3tCJ5=!_S>{bHCnF*9t~fs~9Z_7x{yho1aqpEd3MlDRsT%a?rJ+;c2QaAw7cqQJl0 zqgQ?W`crpFxK()lW2=b7lFyDazd!FfID6fydy2a}&jHotg}J$Qxe94iJ}9~nRwuY3y{v*&Is}|&xC`4F z1+zJgr`nGghw+8-fge6hP@6(T)mXj1+S-PEnG^CgefFp0$1PO_;pF@E&u@*)_|wp) zy1U6)-}mc`HQx@59QLAAcczm|TkFl%q6sH1-Zcm_h|XJ)x7t!-RhhY>MdCE$U6uP} zt69TsYVwPcZkId=&f4@!5#5<}A-X=i=hkV%548oN*uvthJ?op-1IaISLyvVZ0$pXQ3_ zj!gxe=`$Mxw05UVIQT8@U7N$Vu+;1IW>vFSl-_LLnPOYM>RMoTY}4y>$A_EmJ$DiZ z=?-}0aD2(A87t!57Wn-5>%_CE4lSdzC2`I}>s%c2+9ifH;RPGpvZ@14b1qzZ|HIno z)Uvs2SF{91HCzcPn9yP0i{3qM+3GEdFGw^T{$h*c*0aIgwvno+|XBPrnX4GUL?xxxiqGrS?}tyqVMzW7M1RsF6~%!w08XWMK3Oey-aSOBn~JmG@F$; zz~9(*iTR0^`#%>SNIqYF=)>oEFS-?lx6Y(Qk5bIdc-4#kT)R?{5}h^tZo1huqYWF~ zc6Vm~G1)E8$9n9WoXRuxagsw-ZyHY2HI^l~n{6mJoTsr_T&p-(|6*0}yBmoGjvI$L z8T&nQNjGvC-Mz@b^0AYvdv3$c@I!eu=BEZ{=|UaxLuO|=GNH4t))+-No^Y+ zI)01pMZP~vLxR2ply!G(vuJ%6`@ln^c;)6c#h3TW>_KlnK5d+KIw8z^lj6%eWwsvm zZQhH5!{2)wrO8^NM?Lw&xxsPTu9ERLc3Y(R4Dmg6)h#(+B5`mCx>~YX=fd0QOWT(m z?Xrq6SeIc^m$0~J?wcEi#noGb{Y3v+Nv|lo`eVrzm)0}?Q0d~umC%jc zVbg(&=5u&rJ-$6`P6Zg^z`|PyYdp+$;8B)(tq1FTdn6PiHas!o!J516cpX{}@=aYZKxP2AbnyRUbj#oEVo!@wJ&5q-`LE$&H$5*wLUWMgm zU}jLG2YvdS^N;Wsmb*?=+BZ8^T3hN!I7=*BN57tZar5MnH{54fS?lV^Q)8ViOQ&88 zHLGg4l-HiG*C12)G`$|W{6kHR%(UL%(2$v-^$~&jjUmQs@-6KuhCDtsGVA2V z*tmPVlWBjwZB#XV*_Wbpm|IAs4@@&!GO|v)SBA)j$8}$d7{9OceRsc20hNK5@A>|8 zHp)KYak2QoOo>yMm5X!fBxC=8CFkAFe2+C=^ltfV$Le5<*u3R;JwLu`R&6cnzT6e) zfB8$6FPfNQGhMVb_}QxcL2Vy5A0Oon=JLxtMp2gWeu#_S_e00tbp-#+mVh^KV+-^y zl?pOt>kqLvKkbP>pFFywWLQJ3xMk8xC?_IJx-?u5?m44dwOO=Xs=`6`4v3-GLT+$EgQ9VPyB^|G- zt~X{4Z842a{iYZ`{>sf_-JUIr4m@sa(V66IROMt-^h9^o-k=h#UUdChFB-8uKH<-_ zr0!X>rR!VnrBqh*OKJPj(?2nLXm-es@F$kFB9piYlmSh2oi71PAuu6<415$8mC= zXX~w^pzB||td?{f`tYnwRdK{D$9KRH&XM}i^|vDP-A;v#R!wO*ekLxo+Ir*No%2HX zT?y@R+?E+=JEkEa?6^wT=hGA~Vzh?J&@B`cmk+<8;f@zC~@-)XPl zyy{QB{*RK}0xBIpzVgY<3VqjjB)GjW*~R6cDsk&yKKiABws||fPWfGu?0Yuk*7n!8 zY(#;hIs!@yPi(yNdf3p6F(>@uK0OMHt8Tpe@u$^&Rr05k`|=z%=gli`zwV{m{`xdy zli6^`4{n`*j8DkS_u=F}6c+_dUJf&Le0D%DO7d8BMlU~Z+|btsI==gz14`LX1gxu0 zteU7lKDoYV5wWS+5P z?Y-uw^JaC@B!i;%?v1mZE}kMDI~AU>`7&EK!RDeL>tzqUbIy-X(5z&(*2*otD7VRF zK)cwZxwvVrBr5SnZjIj|<1&Y$kV8Lj>2CVSKN*Yq5bUaQ!ly^J+XQc#xNm9_q%ck(G@`+n6z%W>QGw+8f_9(OtE+o(^W zK@hRLFCs04itub4oHB3f*u=|YevU2u7PO{Z>$v$Hw^&t@jziI-CnY}Pe_Tn7`19TE z;(1-O^l3AWu77j?)wek(Gc6l~j(qi5+>3@k+!=eQWBKIzc*PCBgb@!fs7}5%8~@Bc zuhUq}kBW*;$U`vgwf<`jThO9MI>l5Zs*b#m$Y^dWjd?m?6F zKOI9u297=9AhL0MWqtl#W|!(<;`#pWY!?F;N2__yCuBVhc8%TYGt^~iv3t>)Wd~u} zd(hB}d`3UrF{EbJxopRqMzQ(T%_XbC^F`LmS4}5dZyEm>XV7C*(#`B1eLmL9cYV|$ zmC5$?=Tkl(Q6y`P%MO}Y=K5-DbcL_%Qnf{1Y2fVo#_p7`@|PF;>GUUa-EuurJ5s-I z-;_VuE#1M%aYDQOoNq>9V)aB5UM=G|bedF} zK1@n`KjrZ%_IAsNr=P;3ZccfzZBEpdi{bJIfp1gG#vc(_J)h~;-X0P9a^UMl-beU4 zR(?ws&C;sfY;At;!qY9IvrkGU_;FUBN&d0K{PuUhmd8Hos@goZEnZ}H#BosdVri|> zt{1KjU6!R=l51p&IDs-r)qH#7*t)`2iC1vfU{#a*-RHqksw5XLUuC>%)ze9Ttz3xi zKbsTuF`No1XD-!8ev&g(^6HcZdZ&mVGr_2gSU8J({W=qz}+ z=IQ$Uj77(5C*C%!+ZsMA-+6-d_@koWs+H5dhbJ4JGx7y>f&Em$XLo8pb&CH&`%Evo zGx=Ms%cmgqddz}ak2QOGE@kUsVp|Wy5z+}b`eXyxf${mUB7<{n8e2#KrEsnQPg~nn zbWJIV)L4ZfiKYQei7@q9Ju+E}v^@Yq_$t6WIkqBxB*B5xOGq{-`9~|~8WcYczA?I* zb6<61b+}td!EFDVKR`LZd%X$xQ8;td&h+=Zw#?Wy6I!nSd}nmz_N%W)x7o%NsNajb zf*y%J_M2m*e%mx>Pn&mc$bjwYw>o>w|F6ZYb|+^4Jq9-FevbA0_)%iD=En9+)yZBo zG@IQW-P&cJ9X)Ta@W9!M+}v{(^weNN1gAV~M8LTy%=IRG^)i{p#^CG{ln%mnARDVBlk!#F<>9YK4#CC9~qhZNPl$6gzpBr zGoQV>vTc20M2b(rNUO95;W3*F{3b=LS9aQ#4ZB#}eLiuh&fsa5Pqj0fR|Yj(8PA_y zd+lWQ)n~PH3l4mT_g#)ImP)#VDsH~1@SPRW7~WUl6jf3D?DlNmE6}kYz35UGRdVrE zDn5dW{~EFWLij)VoBX$w>^{7s7rp4FSWS4}ldkUM)Ys6rS=#fy_9C~AB`x5+btC_l%PBBF#1pb|nrg`9dz=Po{ z8v~!!zbqw_oFPwzi0wI*zM7m0k~s_2t)_?gUzmo z1t_Jh>T_6s8lnSGOraNaH1)goW=PowwjKRl0;rnq53OVA*82Ek$DNEgh!;bZw8bem%dvGXh zt^}|d7W0S+ju-f+v8Nwf0A`PQ(7DuMH3>~I*(|=UC*Kw@n?V9wSR`NtG?(dd$H3}= zlYa-o4wIPh#r1Lvs9UC#^DyA*9OCii=a>v+K||+gIH^$aqza{F#eM+NNH}JW0^Sj0 zm&ttz8Hvb90$LXfaY~>B0Z1SX;5)h;OS>$!fTl)YRsg6d$493c3?Bj00w2&#Y=yt= zqa*|~0$@b&0~!7kI4~UuFb}q5k1HaE09q#n6jGW)No6#Kmf>s#FR3Vkg zxcGj=S4gF#;WH$TWD;yK37k-f83DQsz-zg^P^i5SP%bLKuA5g!V!OsdbscAaN4Vf7J*|iRIF`oCU6ITR_&} z3&gS&w5I0mH0rvJhydV{$>st{-TwjeBZZhJB^aWPsnYre7@x|bzg7{k$CW_RJGhe4 zA6!9MV~k=n#^Av)a*>Kj=kb{r7(5yeY(#aA$uq!7EhNJk3;1h6wqY1Hant8BLVk;243Wb;* z#wQ4pL+Ek9)*>;Ol!UGVQ=U1Xn@WWm2~9$Db91F!4iF`^fwVvjrd*CtDh~s#q4NNG zWGE=UEV(Setpy+!xK07n7@Jl{al_O2^K2NO!@z=%kBRtPB(eoFiWHfM z_yGG80upST5&$6efBy(jAuJySPX->$ktP?65OfWE0R#?5K;RT7dN^BR$Ce1d--3a; z0zfO`y9!7)=E1S!umzZ{C&0*hh%FWhX&gO{m;hJAg%~*J5`!@d;T8(p-W6h@bC@k# z2%?~F1Pt7Vv{y^Pli&<;5a=!VnkJ2X=Gt?Qs+*@EX~3lc?12j)9&F0vNd&|$6TVO+ zG4ZtZ)Wi6stJ)a~s13n%k#lmt*)+ z85o^h4p##}MR0)pxpHXDfX2Y1xEHvLaeFvS_}<7gjD{Cn@cA7U=JFUZDj19yxw)Nm z50g5FQ%F@zK+5gT@wDiWBnJ!Ef+Go2sglX6VR?%91ZlFABL=l%gKqJ;LQFykKwL1$ zAV#o1ILm{2=@)2Qn@^njG2gVSTP>0%gZIEf@EZYVZLLO@Y4WEwG)5Q5=K0&^MMCAmv(yo&Izh+7BO`QVC4 z9rz-$|9z6!gCuC$MO=m~c#y28?V*T4NuZ<*In9zQL_=)v1C${lh|ZiSIWLK;X;lXo zWK#JIIqyDUN@~%z\n" -"Language-Team: LANGUAGE\n" +"POT-Creation-Date: 2024-01-06 00:00+0000\n" +"PO-Revision-Date: 2024-01-06 00:00+0000\n" +"Last-Translator: sofaking \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -msgctxt "Addon Summary" -msgid "ORF TVthek" -msgstr "ORF TVthek" - -msgctxt "Addon Description" -msgid "ORF TVthek - This plugin provides access to the Austrian \"ORF TVthek\"" -msgstr "ORF TVthek - Ermöglicht Ihnen den Zugriff auf die ORF TVthek Video Platform" - -msgctxt "#30000" -msgid "Recently Added Shows" -msgstr "Neuste Sendungen" - -msgctxt "#30001" -msgid "Frontpage" -msgstr "Startseite" - -msgctxt "#30002" -msgid "Shows" -msgstr "Sendungen" - -msgctxt "#30003" -msgid "Topics" -msgstr "Themen" - -msgctxt "#30004" -msgid "Livestream" -msgstr "Live" - -msgctxt "#30005" -msgid "ORF Recommendations" -msgstr "ORF Tipps" - -msgctxt "#30006" -msgid "Most Viewed" -msgstr "Meist gesehen" - -msgctxt "#30007" -msgid "Search" -msgstr "Suchen" - -msgctxt "#30009" -msgid "Broadcasted: " -msgstr "Sendung vom" - -msgctxt "#30011" -msgid "Runtime" -msgstr "Laufzeit" - -msgctxt "#30014" -msgid "No Results" -msgstr "Keine Ergebnisse" - -msgctxt "#30015" -msgid "Play all" -msgstr "Alle Beiträge abspielen" - -msgctxt "#30018" -msgid "Missed a Show?" -msgstr "Sendung verpasst?" - -msgctxt "#30019" -msgid "Streaming" -msgstr "Livestream läuft bereits" - -msgctxt "#30020" -msgid "Stream Offline" -msgstr "Livestream läuft noch nicht" - -msgctxt "#30022" -msgid "Video Resolution" -msgstr "Videoqualität" +msgctxt "#30101" +msgid "General" +msgstr "Allgemein" -msgctxt "#30023" -msgid "Low" -msgstr "Niedrig" +msgctxt "#30102" +msgid "Use subtitles" +msgstr "Untertitel anzeigen" -msgctxt "#30024" -msgid "Medium" -msgstr "Mittel" +msgctxt "#30103" +msgid "Hide sign language content" +msgstr "Gebärdensprache Inhalte ausblenden" -msgctxt "#30025" -msgid "High" -msgstr "Hoch" +msgctxt "#30104" +msgid "Hide Audio description content" +msgstr "Audiodeskription Inhalte ausblenden" -msgctxt "#30026" -msgid "Use ServiceAPI (mad props to @Rechi)" -msgstr "ServiceAPI verwenden (mad props to @Rechi)" +msgctxt "#30105" +msgid "Items per page" +msgstr "Inhalte pro Seite" -msgctxt "#30027" -msgid "Trailers" -msgstr "TV-Vorschau" +msgctxt "#30106" +msgid "Cache" +msgstr "Cache" -msgctxt "#30028" -msgid "Show Autoplay Prompt" -msgstr "Beim Öffnen Aktion nachfragen" +msgctxt "#30107" +msgid "Reload channel/settings Cache" +msgstr "Sender/Konfigurations Cache neu laden" -msgctxt "#30029" -msgid "Use Subtitles" -msgstr "Untertitel verwenden" +msgctxt "#30108" +msgid "Cache validity (days)" +msgstr "Cache Gültigkeit (Tage)" -msgctxt "#30030" -msgid "The broadcast hasn't started yet" -msgstr "Livestream noch nicht gestartet" +msgctxt "#30109" +msgid "Clear search history" +msgstr "Suchverlauf löschen" -msgctxt "#30031" -msgid "The broadcast starts at" -msgstr "Der Livestream startet erst um" +msgctxt "#30110" +msgid "Frontpage" +msgstr "Startseite" -msgctxt "#30032" -msgid "Do you want the stream to start automatically?" -msgstr "Soll der Livesteam automatisch starten?" +msgctxt "#30111" +msgid "Schedule" +msgstr "Sendung verpasst" -msgctxt "#30033" -msgid "Waiting for the broadcast to start" -msgstr "Warte auf Sendungsbeginn" +msgctxt "#30112" +msgid "Shows" +msgstr "Sendungen" -msgctxt "#30034" -msgid "Time till broadcast:" -msgstr "Zeit bis zum Start:" +msgctxt "#30113" +msgid "Livestream" +msgstr "Livestream" -msgctxt "#30035" -msgid "Start the stream?" -msgstr "Den Livestream Starten?" +msgctxt "#30114" +msgid "Search" +msgstr "Suche" -msgctxt "#30037" -msgid "Blacklist" -msgstr "Ausgeblendete Sendungen" +msgctxt "#30115" +msgid "Highlights" +msgstr "Highlights" -msgctxt "#30038" -msgid "# Blacklist" -msgstr "# " +msgctxt "#30116" +msgid "Categories" +msgstr "Kategorien" -msgctxt "#30040" -msgid "# Remove %s from the Blacklist #" -msgstr "# %s von der Liste entfernen #" +msgctxt "#30124" +msgid "All episode results" +msgstr "Alle Episoden Ergebnisse" -msgctxt "#30042" -msgid " #" -msgstr "ausblenden #" +msgctxt "#30125" +msgid "All chapter results" +msgstr "Alle Kapitel Ergebnisse" -msgctxt "#30043" -msgid "Use Blacklist Feature" -msgstr "\"Sendungen ausblenden\" aktivieren" +msgctxt "#30126" +msgid "All history results" +msgstr "Alle ORF History Ergebnisse" -msgctxt "#30044" -msgid "HD" -msgstr "Sehr Hoch(HD)" +msgctxt "#30127" +msgid "Next page" +msgstr "Nächste Seite" -msgctxt "#30045" -msgid "The ServiceAPI is currently offline" -msgstr "Die ServiceAPI ist zurzeit Offline" +msgctxt "#30128" +msgid "Geo lock active" +msgstr "Geo Lock aktiv" -msgctxt "#30046" -msgid "Switch back to HTML Parsing in the Addon Settings" -msgstr "Deaktivieren Sie die Option in den Einstellungen" +msgctxt "#30129" +msgid "Some content may not be available in your country" +msgstr "Einige Inhalte sind in Ihrem Land unter Umständen nicht verfügbar" -msgctxt "#30047" -msgid "Play Video" -msgstr "Video abspielen" +msgctxt "#30130" +msgid "Select a date" +msgstr "Datum auswählen" -msgctxt "#30048" -msgid "Do you want the playlist to start immediately?" -msgstr "Soll die Playlist sofort gestartet werden?" +msgctxt "#30131" +msgid "Enter search" +msgstr "Suchbegriff eingeben" -msgctxt "#30049" -msgid "Archive" -msgstr "Archiv" +msgctxt "#30132" +msgid "Clearing search history" +msgstr "Suchverlauf löschen" -msgctxt "#30050" -msgid "An Error occured while loading the selected playlist" -msgstr "Die Playlist konnte nicht abgespielt werden." +msgctxt "#30133" +msgid "Clearing" +msgstr "Wird gelöscht" -msgctxt "#30051" -msgid "Error" -msgstr "Fehler" +msgctxt "#30134" +msgid "Done" +msgstr "Fertig" -msgctxt "#30052" -msgid "This Video is offline" -msgstr "Dieses Video ist offline" +msgctxt "#30136" +msgid "Reloading cache" +msgstr "Lade Cache neu" -msgctxt "#30053" -msgid "Adaptive" -msgstr "Adaptiv" +msgctxt "#30137" +msgid "Loading channels" +msgstr "Sender werden geladen" -msgctxt "#30054" -msgid "Stream Method" -msgstr "Stream Methode" +msgctxt "#30138" +msgid "Loading settings" +msgstr "Einstellungen werden geladen" -msgctxt "#30055" -msgid "HLS" -msgstr "" - -msgctxt "#30056" -msgid "Enable Progressive Streaming Method" -msgstr "Progressive Streaming aktivieren" +msgctxt "#30139" +msgid "Restart" +msgstr "Restart" -msgctxt "#30057" -msgid "In Focus" -msgstr "Im Fokus" +msgctxt "#30140" +msgid "All episodes" +msgstr "Alle Folgen" -msgctxt "#30058" -msgid "Show 'Play Chapters'" -msgstr "'Kapitel abspielen' anzeigen" +msgctxt "#30141" +msgid "Episodes" +msgstr "Folgen" -msgctxt "#30059" -msgid "Play Full Video" -msgstr "Ganzes Video abspielen" +msgctxt "#30142" +msgid "Channel" +msgstr "Sender" -msgctxt "#30060" -msgid "Play Chapters" -msgstr "Kapitel abspielen" +msgctxt "#30143" +msgid "Starts in" +msgstr "Startet in" -msgctxt "#30061" -msgid "Show Full Livestream Schedule" -msgstr "Livestream Programm anzeigen" +msgctxt "#30144" +msgid "Recently added" +msgstr "Neuste Sendungen" -msgctxt "#30062" -msgid "General" -msgstr "Allgemein" +msgctxt "#30145" +msgid "Broadcasts using sign language" +msgstr "Sendungen mit Gebärdensprache" -msgctxt "#30063" -msgid "Restart" -msgstr "Restart" +msgctxt "#30146" +msgid "Broadcasts with audio description" +msgstr "Sendungen mit Audiodeskription" -msgctxt "#30064" -msgid "older than" -msgstr "älter als" +msgctxt "#30147" +msgid "Accessibility" +msgstr "Barrierefrei" -msgctxt "#30065" -msgid "Aktivieren Sie Inputstream Adaptive um alle Livestreams zu sehen" -msgstr "" +msgctxt "#30148" +msgid "Broadcasts with subtitles" +msgstr "Sendungen mit Untertitel" -msgctxt "#30066" -msgid "Inputstream Adaptive ist nicht aktiviert. DRM Inhalte können nicht abgespielt werden." -msgstr "" +msgctxt "#30149" +msgid "Use segements" +msgstr "Kapitel verwenden" -msgctxt "#30067" -msgid "Inputstream Helper ist nicht aktiviert. DRM Inhalte können nicht abgespielt werden." -msgstr " +msgctxt "#30150" +msgid "Related content" +msgstr "Ähnliche Inhalte" -msgctxt "#30068" -msgid "ORF TVthek offline" -msgstr " +msgctxt "#30151" +msgid "Show segements" +msgstr "Kapitel anzeigen" -msgctxt "#30069" -msgid "Die ORF TVthek wurde eingestellt und wird von ORF ON ersetzt. Das Addon funktioniert ab sofort nur mehr mit der ServiceAPI." -msgstr " \ No newline at end of file +msgctxt "#30152" +msgid "Use timeshift" +msgstr "Timeshift verwenden" \ No newline at end of file diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 327f1f6..b291dc8 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -1,266 +1,193 @@ # XBMC Media Center language file -# Addon Name: ORF TVthek +# Addon Name: ORF ON # Addon id: plugin.video.orftvthek -# Addon version: 0.9.0 +# Addon version: 1.0.2 # Addon Provider: sofaking msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" -"POT-Creation-Date: 2017-02-05 22:17+0000\n" -"PO-Revision-Date: 2019-11-09 14:00+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE\n" +"POT-Creation-Date: 2024-01-06 00:00+0000\n" +"PO-Revision-Date: 2024-01-06 00:00+0000\n" +"Last-Translator: sofaking \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -msgctxt "Addon Summary" -msgid "ORF TVthek" -msgstr "" - -msgctxt "Addon Description" -msgid "ORF TVthek - This plugin provides access to the Austrian \"ORF TVthek\"" -msgstr "" - -msgctxt "#30000" -msgid "Recently Added Shows" -msgstr "" - -msgctxt "#30001" -msgid "Frontpage" -msgstr "" - -msgctxt "#30002" -msgid "Shows" -msgstr "" - -msgctxt "#30003" -msgid "Topics" -msgstr "" - -msgctxt "#30004" -msgid "Livestream" -msgstr "" - -msgctxt "#30005" -msgid "ORF Recommendations" -msgstr "" - -msgctxt "#30006" -msgid "Most Viewed" -msgstr "" - -msgctxt "#30007" -msgid "Search" -msgstr "" - -msgctxt "#30009" -msgid "Broadcasted: " -msgstr "" - -msgctxt "#30011" -msgid "Runtime" -msgstr "" - -msgctxt "#30014" -msgid "No Results" -msgstr "" - -msgctxt "#30015" -msgid "Play all" -msgstr "" - -msgctxt "#30018" -msgid "Missed a Show?" -msgstr "" - -msgctxt "#30019" -msgid "Streaming" -msgstr "" - -msgctxt "#30020" -msgid "Stream Offline" -msgstr "" - -msgctxt "#30022" -msgid "Video Resolution" +msgctxt "#30101" +msgid "General" msgstr "" -msgctxt "#30023" -msgid "Low" +msgctxt "#30102" +msgid "Use subtitles" msgstr "" -msgctxt "#30024" -msgid "Medium" +msgctxt "#30103" +msgid "Hide sign language content" msgstr "" -msgctxt "#30025" -msgid "High" +msgctxt "#30104" +msgid "Hide Audio description content" msgstr "" -msgctxt "#30026" -msgid "Use ServiceAPI (mad props to @Rechi)" +msgctxt "#30105" +msgid "Items per page" msgstr "" -msgctxt "#30027" -msgid "Trailers" +msgctxt "#30106" +msgid "Cache" msgstr "" -msgctxt "#30028" -msgid "Show Autoplay Prompt" +msgctxt "#30107" +msgid "Reload channel/settings Cache" msgstr "" -msgctxt "#30029" -msgid "Use Subtitles" +msgctxt "#30108" +msgid "Cache validity (days)" msgstr "" -msgctxt "#30030" -msgid "The broadcast hasn't started yet" +msgctxt "#30109" +msgid "Clear search history" msgstr "" -msgctxt "#30031" -msgid "The broadcast starts at" +msgctxt "#30110" +msgid "Frontpage" msgstr "" -msgctxt "#30032" -msgid "Do you want the stream to start automatically?" +msgctxt "#30111" +msgid "Schedule" msgstr "" -msgctxt "#30033" -msgid "Waiting for the broadcast to start" +msgctxt "#30112" +msgid "Shows" msgstr "" -msgctxt "#30034" -msgid "Time till broadcast:" +msgctxt "#30113" +msgid "Livestream" msgstr "" -msgctxt "#30035" -msgid "Start the stream?" +msgctxt "#30114" +msgid "Search" msgstr "" -msgctxt "#30037" -msgid "Blacklist" +msgctxt "#30115" +msgid "Highlights" msgstr "" -msgctxt "#30038" -msgid "# Blacklist" +msgctxt "#30116" +msgid "Categories" msgstr "" -msgctxt "#30040" -msgid "# Remove %s from the Blacklist #" +msgctxt "#30124" +msgid "All episode results" msgstr "" -msgctxt "#30042" -msgid " #" +msgctxt "#30125" +msgid "All chapter results" msgstr "" -msgctxt "#30043" -msgid "Use Blacklist Feature" +msgctxt "#30126" +msgid "All history results" msgstr "" -msgctxt "#30044" -msgid "HD" +msgctxt "#30127" +msgid "Next page" msgstr "" -msgctxt "#30045" -msgid "The ServiceAPI is currently offline" +msgctxt "#30128" +msgid "Geo lock active" msgstr "" -msgctxt "#30046" -msgid "Switch back to HTML Parsing in the Addon Settings" +msgctxt "#30129" +msgid "Some content may not be available in your country" msgstr "" -msgctxt "#30047" -msgid "Play Video" +msgctxt "#30130" +msgid "Select a date" msgstr "" -msgctxt "#30048" -msgid "Do you want the playlist to start immediately?" +msgctxt "#30131" +msgid "Enter search" msgstr "" -msgctxt "#30049" -msgid "Archive" +msgctxt "#30132" +msgid "Clearing search history" msgstr "" -msgctxt "#30050" -msgid "An Error occured while loading the selected playlist" +msgctxt "#30133" +msgid "Clearing" msgstr "" -msgctxt "#30051" -msgid "Error" +msgctxt "#30134" +msgid "Done" msgstr "" -msgctxt "#30052" -msgid "This Video is offline" +msgctxt "#30136" +msgid "Reloading cache" msgstr "" -msgctxt "#30053" -msgid "Adaptive" +msgctxt "#30137" +msgid "Loading channels" msgstr "" -msgctxt "#30054" -msgid "Stream Method" +msgctxt "#30138" +msgid "Loading settings" msgstr "" -msgctxt "#30055" -msgid "HLS" +msgctxt "#30139" +msgid "Restart" msgstr "" -msgctxt "#30056" -msgid "Enable Progressive Streaming Method" +msgctxt "#30140" +msgid "All episodes" msgstr "" -msgctxt "#30057" -msgid "In Focus" +msgctxt "#30141" +msgid "Episodes" msgstr "" -msgctxt "#30058" -msgid "Show 'Play Chapters'" +msgctxt "#30142" +msgid "Channel" msgstr "" -msgctxt "#30059" -msgid "Play Full Video" +msgctxt "#30143" +msgid "Starts in" msgstr "" -msgctxt "#30060" -msgid "Play Chapters" +msgctxt "#30144" +msgid "Recently added" msgstr "" -msgctxt "#30061" -msgid "Show Full Livestream Schedule" +msgctxt "#30145" +msgid "Broadcasts using sign language" msgstr "" -msgctxt "#30062" -msgid "General" +msgctxt "#30146" +msgid "Broadcasts with audio description" msgstr "" -msgctxt "#30063" -msgid "Restart" +msgctxt "#30147" +msgid "Accessibility" msgstr "" -msgctxt "#30064" -msgid "older than" +msgctxt "#30148" +msgid "Broadcasts with subtitles" msgstr "" -msgctxt "#30065" -msgid "Install Inputstream Adaptive to see more Livestreams" +msgctxt "#30149" +msgid "Use segements" msgstr "" -msgctxt "#30066" -msgid "Inputstream Adaptive not installed. Cant play DRM content." +msgctxt "#30150" +msgid "Related content" msgstr "" -msgctxt "#30067" -msgid "Inputstream Helper not installed. Cant play DRM content." +msgctxt "#30151" +msgid "Show segements" msgstr "" -msgctxt "#30068" -msgid "ORF TVthek offline" -msgstr " - -msgctxt "#30069" -msgid "The ORF TVthek has been discontinued and is being replaced by ORF ON. From now on the addon only works with the ServiceAPI." -msgstr " \ No newline at end of file +msgctxt "#30152" +msgid "Use timeshift" +msgstr "" \ No newline at end of file diff --git a/resources/lib/Addon.py b/resources/lib/Addon.py index 07692a0..7edc1c2 100644 --- a/resources/lib/Addon.py +++ b/resources/lib/Addon.py @@ -1,324 +1,283 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import socket -import traceback -import xbmcplugin - -from resources.lib.ServiceApi import * -from resources.lib.HtmlScraper import * - -socket.setdefaulttimeout(30) - -plugin = "ORF-TVthek-" + xbmcaddon.Addon().getAddonInfo('version') - -# initial -settings = xbmcaddon.Addon() -pluginhandle = int(sys.argv[1]) -basepath = settings.getAddonInfo('path') -translation = settings.getLocalizedString - -# hardcoded -videoProtocol = "http" -videoQuality = "QXB" -videoDelivery = "HLS" - -input_stream_protocol = 'mpd' -input_stream_drm_version = 'com.widevine.alpha' -input_stream_mime = 'application/dash+xml' -input_stream_lic_content_type = 'application/octet-stream' - -# media resources -resource_path = os.path.join(basepath, "resources") -media_path = os.path.join(resource_path, "media") -defaultbanner = os.path.join(media_path, "default_banner_v2.jpg") -news_banner = os.path.join(media_path, "news_banner_v2.jpg") -recently_added_banner = os.path.join(media_path, "recently_added_banner_v2.jpg") -shows_banner = os.path.join(media_path, "shows_banner_v2.jpg") -topics_banner = os.path.join(media_path, "topics_banner_v2.jpg") -live_banner = os.path.join(media_path, "live_banner_v2.jpg") -tips_banner = os.path.join(media_path, "tips_banner_v2.jpg") -most_popular_banner = os.path.join(media_path, "most_popular_banner_v2.jpg") -schedule_banner = os.path.join(media_path, "schedule_banner_v2.jpg") -archive_banner = os.path.join(media_path, "archive_banner_v2.jpg") -search_banner = os.path.join(media_path, "search_banner_v2.jpg") -trailer_banner = os.path.join(media_path, "trailer_banner_v2.jpg") -blacklist_banner = os.path.join(media_path, "blacklist_banner_v2.jpg") -focus_banner = os.path.join(media_path, "focus_banner_v2.jpg") -defaultbackdrop = os.path.join(media_path, "fanart_v2.jpg") - -# load settings -useServiceAPI = True -autoPlayPrompt = Settings.autoPlayPrompt() -usePlayAllPlaylist = Settings.playAllPlaylist() -showWarning = Settings.showWarning() - -# init scrapers -if useServiceAPI: - debugLog("Service API activated") - scraper = serviceAPI(xbmc, settings, pluginhandle, videoQuality, videoProtocol, videoDelivery, defaultbanner, defaultbackdrop, usePlayAllPlaylist) -else: - debugLog("HTML Scraper activated") - scraper = htmlScraper(xbmc, settings, pluginhandle, videoQuality, videoProtocol, videoDelivery, defaultbanner, defaultbackdrop, usePlayAllPlaylist) - - -def getMainMenu(): - if showWarning: - d = xbmcgui.Dialog() - d.ok((translation(30068)).encode("utf-8"), (translation(30069)).encode("utf-8")) - xbmcaddon.Addon('plugin.video.orftvthek').setSettingBool('showWarning', 0) - debugLog("Building Main Menu") - addDirectory((translation(30001)).encode("utf-8"), news_banner, defaultbackdrop, "", "", "getAktuelles", pluginhandle) - addDirectory((translation(30000)).encode("utf-8"), recently_added_banner, defaultbackdrop, "", "", "getNewShows", pluginhandle) - addDirectory((translation(30002)).encode("utf-8"), shows_banner, defaultbackdrop, "", "", "getSendungen", pluginhandle) - if useServiceAPI: - addDirectory((translation(30003)).encode("utf-8"), topics_banner, defaultbackdrop, "", "", "getThemen", pluginhandle) - addDirectory((translation(30004)).encode("utf-8"), live_banner, defaultbackdrop, "", "", "getLive", pluginhandle) - if not useServiceAPI: - addDirectory((translation(30057)).encode("utf-8"), focus_banner, defaultbackdrop, "", "", "getFocus", pluginhandle) - addDirectory((translation(30006)).encode("utf-8"), most_popular_banner, defaultbackdrop, "", "", "getMostViewed", pluginhandle) - addDirectory((translation(30018)).encode("utf-8"), schedule_banner, defaultbackdrop, "", "", "getSchedule", pluginhandle) - if not useServiceAPI: - addDirectory((translation(30049)).encode("utf-8"), archive_banner, defaultbackdrop, "", "", "getArchiv", pluginhandle) - addDirectory((translation(30027)).encode("utf-8"), trailer_banner, defaultbackdrop, "", "", "openTrailers", pluginhandle) - if not useServiceAPI: - addDirectory((translation(30007)).encode("utf-8"), search_banner, defaultbackdrop, "", "", "getSearchHistory", pluginhandle) - if Settings.blacklist() and not useServiceAPI: - addDirectory((translation(30037)).encode("utf-8"), blacklist_banner, defaultbackdrop, "", "", "openBlacklist", pluginhandle) - listCallback(False, pluginhandle) - - -def listCallback(sort, pluginhandle): - xbmcplugin.setContent(pluginhandle, 'episodes') - if sort: - xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_VIDEO_TITLE) - xbmcplugin.endOfDirectory(pluginhandle) - - -def startPlaylist(player, playlist): - if playlist is not None: - player.play(playlist) +import sys + +from Kodi import * +import routing + +settings_file = 'settings.json' +channel_map_file = 'channels.json' +search_history_file = 'search_history' + +route_plugin = routing.Plugin() +kodi_worker = Kodi(route_plugin) +if not sys.argv[0].startswith('plugin://' + kodi_worker.addon_id + '/dialog'): + channel_map, channel_map_cached = kodi_worker.get_cached_file(channel_map_file) + settings, settings_cached = kodi_worker.get_cached_file(settings_file) + api = OrfOn(channel_map=channel_map, settings=settings, useragent=kodi_worker.useragent, kodi_worker=kodi_worker) + api.set_pager_limit(kodi_worker.pager_limit) + api.set_segments_behaviour(kodi_worker.use_segments) + + kodi_worker.set_geo_lock(api.is_geo_locked()) + channel_map = api.get_channel_map() + settings = api.get_settings() + + # Only overwrite if cache was invalidated + if not channel_map_cached: + kodi_worker.save_json(channel_map, channel_map_file) + + if not settings_cached: + kodi_worker.save_json(settings, settings_file) + + +@route_plugin.route('/') +def get_main_menu(): + kodi_worker.log("Loading Main Menu", 'route') + if kodi_worker.is_geo_locked(): + kodi_worker.render( + Directory( + kodi_worker.get_translation(30128, 'Geo lock active', ' [COLOR red]*** %s ***[/COLOR]'), + kodi_worker.get_translation(30129, 'Some content may not be available in your country'), + '/', translator=kodi_worker)) + index_directories = api.get_main_menu() + for index_directory in index_directories: + kodi_worker.render(index_directory) + if not kodi_worker.hide_accessibility_menu(): + kodi_worker.render(Directory(kodi_worker.get_translation(30147, 'Accessibility'), '', '/accessibility', '', 'accessibility', translator=kodi_worker)) + kodi_worker.list_callback() + + +@route_plugin.route('/page/start') +def get_frontpage(): + kodi_worker.log("Loading Frontpage Teasers", 'route') + teasers = api.get_frontpage() + for teaser in teasers: + kodi_worker.render(teaser) + kodi_worker.list_callback() + + +@route_plugin.route('/accessibility') +def get_accessibility_menu(): + if not kodi_worker.hide_sign_language(): + kodi_worker.render(api.get_sign_language_menu()) + if not kodi_worker.hide_audio_description(): + kodi_worker.render(api.get_audio_description_menu()) + if kodi_worker.use_subtitles: + kodi_worker.render(api.get_subtitles_menu()) + kodi_worker.list_callback() + + +@route_plugin.route('/livestreams') +def get_livestreams(): + kodi_worker.log("Loading Livestream Overview", 'route') + streams = api.get_live_schedule() + for stream in streams: + kodi_worker.render(stream) + kodi_worker.list_callback() + + +@route_plugin.route('/restart/') +def get_live_restart(livestreamid): + kodi_worker.log("Playing Livestream Restart %s" % livestreamid, 'route') + livestream_item = api.get_livestream(livestreamid) + livestream_item = api.get_restart_stream(livestream_item) + kodi_worker.restart(livestream_item) + + +@route_plugin.route('/profile/') +def get_profile(profileid): + kodi_worker.log("Loading Profile %s" % profileid, 'route') + request_url = '/profile/%s' % profileid + directories = api.get_url(request_url) + if len(directories) > 1: + for directory in directories: + kodi_worker.render(directory) + kodi_worker.list_callback() else: - d = xbmcgui.Dialog() - d.ok((translation(30051)).encode("utf-8"), (translation(30050)).encode("utf-8")) + videos = api.load_stream_data('/profile/%s/episodes' % profileid) + kodi_worker.play(videos) -def run(): - # video playback - tvthekplayer = xbmc.Player() - playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) - - # parameters - params = parameters_string_to_dict(sys.argv[2]) - mode = params.get('mode') - link = params.get('link') - if mode == 'openSeries': - playlist.clear() - playlist = scraper.getLinks(link, params.get('banner'), playlist) - if autoPlayPrompt and playlist is not None: - listCallback(False, pluginhandle) - ok = xbmcgui.Dialog().yesno((translation(30047)).encode("utf-8"), (translation(30048)).encode("utf-8")) - listCallback(False, pluginhandle) - if ok: - debugLog("Starting Playlist for %s" % unqoute_url(link)) - tvthekplayer.play(playlist) - else: - debugLog("Running Listcallback from no autoplay openseries") - listCallback(False, pluginhandle) - elif mode == 'unblacklistShow': - heading = translation(30040).encode('UTF-8') % unqoute_url(link).replace('+', ' ').strip() - if isBlacklisted(link) and xbmcgui.Dialog().yesno(heading, heading): - unblacklistItem(link) - xbmc.executebuiltin('Container.Refresh') - elif mode == 'blacklistShow': - blacklistItem(link) - xbmc.executebuiltin('Container.Refresh') - if mode == 'openBlacklist': - printBlacklist(defaultbanner, defaultbackdrop, translation, pluginhandle) - xbmcplugin.endOfDirectory(pluginhandle) - elif mode == 'getSendungen': - scraper.getCategories() - listCallback(True, pluginhandle) - elif mode == 'getAktuelles': - scraper.getHighlights() - listCallback(False, pluginhandle) - elif mode == 'getLive': - scraper.getLiveStreams() - listCallback(False, pluginhandle) - elif mode == 'getTipps': - scraper.getTips() - listCallback(False, pluginhandle) - elif mode == 'getFocus': - scraper.getFocus() - listCallback(False, pluginhandle) - elif mode == 'getNewShows': - scraper.getNewest() - listCallback(False, pluginhandle) - elif mode == 'getMostViewed': - scraper.getMostViewed() - listCallback(False, pluginhandle) - elif mode == 'getThemen': - scraper.getThemen() - listCallback(True, pluginhandle) - elif mode == 'getSendungenDetail': - scraper.getCategoriesDetail(link, params.get('banner')) - listCallback(False, pluginhandle) - elif mode == 'getThemenDetail': - scraper.getArchiveDetail(link) - listCallback(False, pluginhandle) - elif mode == 'getArchiveDetail': - scraper.getArchiveDetail(link) - listCallback(False, pluginhandle) - elif mode == 'getSchedule': - scraper.getSchedule() - listCallback(False, pluginhandle) - elif mode == 'getArchiv': - scraper.getArchiv() - listCallback(False, pluginhandle) - elif mode == 'getScheduleDetail': - scraper.openArchiv(link) - listCallback(True, pluginhandle) - elif mode == 'openTrailers': - scraper.getTrailers() - listCallback(False, pluginhandle) - elif mode == 'getSearchHistory': - scraper.getSearchHistory() - listCallback(False, pluginhandle) - elif mode == 'getSearchResults': - if link is not None: - scraper.getSearchResults(unqoute_url(link)) - else: - scraper.getSearchResults("") - listCallback(False, pluginhandle) - elif mode == 'openDate': - scraper.getDate(link, params.get('from')) - listCallback(False, pluginhandle) - elif mode == 'openProgram': - scraper.getProgram(link, playlist) - listCallback(False, pluginhandle) - elif mode == 'openTopic': - scraper.getTopic(link) - listCallback(False, pluginhandle) - elif mode == 'openEpisode': - scraper.getEpisode(link, playlist) - listCallback(False, pluginhandle) - elif mode == 'liveStreamRestart': - try: - import inputstreamhelper - is_helper = inputstreamhelper.Helper(input_stream_protocol, drm=input_stream_drm_version) - if is_helper.check_inputstream(): - link = unqoute_url(link) - debugLog("Restart Source Link: %s" % link) - headers = "User-Agent=%s&Content-Type=%s" % (Settings.userAgent(), input_stream_lic_content_type) - - if params.get('lic_url'): - lic_url = unqoute_url(params.get('lic_url')) - debugLog("Playing DRM protected Restart Stream") - debugLog("Restart License URL: %s" % lic_url) - streaming_url, play_item = scraper.liveStreamRestart(link, 'dash') - play_item.setContentLookup(False) - play_item.setMimeType(input_stream_mime) - play_item.setProperty('inputstream.adaptive.stream_headers', headers) - play_item.setProperty('inputstream', is_helper.inputstream_addon) - play_item.setProperty('inputstream.adaptive.manifest_type', input_stream_protocol) - play_item.setProperty('inputstream.adaptive.license_type', input_stream_drm_version) - play_item.setProperty('inputstream.adaptive.license_key', lic_url + '|' + headers +'|R{SSM}|') - else: - streaming_url, play_item = scraper.liveStreamRestart(link, 'hls') - debugLog("Playing Non-DRM protected Restart Stream") - play_item.setProperty('inputstreamaddon', 'inputstream.adaptive') - play_item.setProperty('inputstream.adaptive.stream_headers', headers) - play_item.setProperty('inputstream.adaptive.manifest_type', 'hls') - debugLog("Restart Stream Url: %s; play_item: %s" % (streaming_url, play_item)) - xbmc.Player().play(streaming_url, play_item) - else: - userNotification((translation(30066)).encode("utf-8")) - except Exception as e: - debugLog("Exception: %s" % ( e, ), xbmc.LOGINFO) - debugLog("TB: %s" % ( traceback.format_exc(), ), xbmc.LOGINFO) - userNotification((translation(30067)).encode("utf-8")) - elif mode == 'playlist': - startPlaylist(tvthekplayer, playlist) - elif mode == 'play': - link = "%s|User-Agent=%s" % (link, Settings.userAgent()) - play_item = xbmcgui.ListItem(path=link, offscreen=True) - xbmcplugin.setResolvedUrl(pluginhandle, True, listitem=play_item) - listCallback(False, pluginhandle) - elif mode == 'playDRM': - try: - import inputstreamhelper - stream_url = unqoute_url(params.get('link')) - lic_url = unqoute_url(params.get('lic_url')) - - is_helper = inputstreamhelper.Helper(input_stream_protocol, drm=input_stream_drm_version) - if is_helper.check_inputstream(): - debugLog("Video Url: %s" % stream_url) - debugLog("DRM License Url: %s" % lic_url) - play_item = xbmcgui.ListItem(path=stream_url, offscreen=True) - headers = "User-Agent=%s&Content-Type=%s" % (Settings.userAgent(), input_stream_lic_content_type) - - play_item.setContentLookup(False) - play_item.setMimeType(input_stream_mime) - play_item.setProperty('inputstream.adaptive.stream_headers', headers) - play_item.setProperty('inputstream', is_helper.inputstream_addon) - play_item.setProperty('inputstream.adaptive.manifest_type', input_stream_protocol) - play_item.setProperty('inputstream.adaptive.license_type', input_stream_drm_version) - play_item.setProperty('inputstream.adaptive.license_key', lic_url + '|' + headers + '|R{SSM}|') - xbmcplugin.setResolvedUrl(pluginhandle, True, listitem=play_item) - else: - userNotification((translation(30066)).encode("utf-8")) - listCallback(False, pluginhandle) - except: - userNotification((translation(30067)).encode("utf-8")) - elif mode == 'pvr': - channel = params.get('channel') - debugLog("Loading channel %s" % channel) - data = scraper.getLivestreamByChannel(channel) - if data: - video_url = "%s|User-Agent=%s" % (data['url'], Settings.userAgent()) - - if 'license' in data: - import inputstreamhelper - license = data['license'] - - is_helper = inputstreamhelper.Helper(input_stream_protocol, drm=input_stream_drm_version) - if is_helper.check_inputstream(): - debugLog("Video Url: %s" % video_url) - debugLog("DRM License Url: %s" % license) - play_item = xbmcgui.ListItem(path=video_url) - play_item.setLabel(data['title']) - play_item.setLabel2(channel) - play_item.setProperty('IsPlayable', 'true') - item_infos = { - 'title': data['title'], - 'plot': data['description'], - 'plotoutline': data['description'], - } - play_item.setInfo(type="Video", infoLabels=item_infos) - - if 'logo' in data: - item_art = { - 'clearlogo': data['logo'], - 'icon': data['logo'], - } - play_item.setArt(item_art) - - headers = "User-Agent=%s&Content-Type=%s" % (Settings.userAgent(), input_stream_lic_content_type) - - play_item.setContentLookup(False) - play_item.setMimeType(input_stream_mime) - play_item.setProperty('inputstream.adaptive.stream_headers', headers) - play_item.setProperty('inputstream', is_helper.inputstream_addon) - play_item.setProperty('inputstream.adaptive.manifest_type', input_stream_protocol) - play_item.setProperty('inputstream.adaptive.license_type', input_stream_drm_version) - play_item.setProperty('inputstream.adaptive.license_key', license + '|' + headers + '|R{SSM}|') - xbmcplugin.setResolvedUrl(pluginhandle, True, listitem=play_item) - else: - userNotification((translation(30066)).encode("utf-8")) - else: - play_item = xbmcgui.ListItem(path=video_url) - xbmcplugin.setResolvedUrl(pluginhandle, True, listitem=play_item) - elif sys.argv[2] == '': - getMainMenu() +@route_plugin.route('/episode/') +def get_episode(episodeid): + kodi_worker.log("Playing Episode %s" % episodeid, 'route') + videos = api.load_stream_data('/episode/%s' % episodeid) + kodi_worker.play(videos) + + +@route_plugin.route('/episode//more') +def get_show_from_episode(episodeid): + kodi_worker.log("Loading Shows from Episode %s" % episodeid, 'route') + other_episodes = api.get_related(episodeid) + for other_episode in other_episodes: + kodi_worker.render(other_episode) + kodi_worker.list_callback() + + +@route_plugin.route('/episode//segments') +def get_segements(episodeid): + kodi_worker.log("Playing Episode %s" % episodeid, 'route') + videos = api.load_stream_data('/episode/%s/segments?limit=500' % episodeid) + if kodi_worker.use_segments and kodi_worker.show_segments: + for video in videos: + kodi_worker.render(video) + kodi_worker.list_callback() else: - listCallback(False, pluginhandle) + kodi_worker.play(videos) + + +@route_plugin.route('/segment/') +def get_segement(segmentid): + kodi_worker.log("Playing Segment %s" % segmentid, 'route') + videos = api.load_stream_data('/segment/%s' % segmentid) + kodi_worker.play(videos) + + +@route_plugin.route('/videoitem/') +def get_videoitem(videoid): + kodi_worker.log("Playing Video %s" % videoid, 'route') + videos = api.load_stream_data('/videoitem/%s' % videoid) + kodi_worker.play(videos) + + +@route_plugin.route('/livestream/') +def get_livestream(videoid): + kodi_worker.log("Playing Livestream %s" % videoid, 'route') + videos = api.load_stream_data('/livestream/%s' % videoid) + kodi_worker.play(videos) + + +@route_plugin.route('/pvr/') +def get_pvr_livestream(channelreel): + kodi_worker.log("Playing PVR Livestream %s" % channelreel, 'route') + livestream = api.get_pvr(channelreel) + if livestream: + kodi_worker.play([livestream]) + + +@route_plugin.route('/recent') +def get_recently_added(): + videos = api.get_last_uploads() + for video in videos: + kodi_worker.render(video) + kodi_worker.list_callback() + + +@route_plugin.route('/schedule') +def get_schedule_selection(): + kodi_worker.log("Opening Schedule Selection", 'route') + items, filters = api.get_schedule_dates() + selected = kodi_worker.select_dialog(kodi_worker.get_translation(30130, 'Select a date'), items) + api.log(selected) + if selected is not False and selected > -1: + api.log("Loading %s Schedule" % filters[selected]) + request_url = api.api_endpoint_schedule % filters[selected] + target_url = kodi_worker.plugin.url_for_path(request_url) + kodi_worker.list_callback() + kodi_worker.execute('Container.Update(%s, replace)' % target_url) + else: + api.log("Canceled selection") + + +@route_plugin.route('/schedule/') +def get_schedule(scheduledate): + kodi_worker.log("Opening Schedule %s" % scheduledate, 'route') + request_url = api.api_endpoint_schedule % scheduledate + directories = api.get_url(request_url) + for directory in directories: + directory.annotate_channel() + directory.annotate_time() + kodi_worker.render(directory) + kodi_worker.list_callback() + + +@route_plugin.route('/search') +def get_search(): + kodi_worker.log("Opening Search History", 'route') + search_link = '/search/query' + search_dir = Directory(kodi_worker.get_translation(30131, 'Enter search ...', '%s ...'), "", search_link, translator=kodi_worker) + kodi_worker.render(search_dir) + directories = kodi_worker.get_stored_directories(search_history_file) + for directory in directories: + kodi_worker.render(directory) + kodi_worker.list_callback() + + +@route_plugin.route('/search/results/') +def get_search_results(query): + directories = api.get_search(query) + for directory in directories: + kodi_worker.render(directory) + kodi_worker.list_callback() + + +@route_plugin.route('/search-partial/

/') +def get_search_partial(section, query): + directories = api.get_search_partial(section, query, route_plugin.args) + for directory in directories: + kodi_worker.render(directory) + kodi_worker.list_callback() + + +@route_plugin.route('/search/query') +def get_search_dialog(): + kodi_worker.log("Opening Search Dialog", 'route') + query = kodi_worker.get_keyboard_input() + search_url = "/search/results/%s" % query + search_history_dir = Directory(query, "", search_url, translator=kodi_worker) + kodi_worker.list_callback() + if query and query.strip() != "": + kodi_worker.store_directory(search_history_dir, 'search_history') + target_url = kodi_worker.plugin.url_for_path(search_url) + else: + error_url = '/search' + target_url = kodi_worker.plugin.url_for_path(error_url) + kodi_worker.execute('Container.Update(%s, replace)' % target_url) + + +@route_plugin.route('/dialog/clear_search_history') +def clear_search_history(): + dialog = kodi_worker.get_progress_dialog(kodi_worker.get_translation(30132, 'Clearing search history')) + dialog.update(0, kodi_worker.get_translation(30133, 'Clearing ...', '%s ...')) + kodi_worker.clear_stored_directories(search_history_file) + dialog.update(100, kodi_worker.get_translation(30134, 'Done')) + dialog.close() + + +@route_plugin.route('/dialog/reload_cache') +def clear_cache(): + dialog = kodi_worker.get_progress_dialog('Reloading cache') + dialog.update(0, kodi_worker.get_translation(30136, 'Reloading cache ...', '%s ...')) + kodi_worker.log("Reloading channel/settings cache", 'route') + tmp_channel_map, tmp_channel_map_cached = kodi_worker.get_cached_file(channel_map_file) + tmp_settings, tmp_settings_cached = kodi_worker.get_cached_file(settings_file) + kodi_worker.remove_file(settings_file) + kodi_worker.remove_file(channel_map_file) + tmp_api = OrfOn(channel_map=tmp_channel_map, settings=tmp_settings, useragent=kodi_worker.useragent, kodi_worker=kodi_worker) + tmp_api.channel_map = False + tmp_api.settings = False + dialog.update(33, kodi_worker.get_translation(30137, 'Loading channels')) + tmp_channel_map = tmp_api.get_channel_map() + kodi_worker.save_json(tmp_channel_map, channel_map_file) + dialog.update(66, kodi_worker.get_translation(30138, 'Loading settings')) + tmp_settings = tmp_api.get_settings() + kodi_worker.save_json(tmp_settings, settings_file) + dialog.update(100, kodi_worker.get_translation(30134, 'Done')) + dialog.close() + + +@route_plugin.route('') +def get_url(url): + if re.search(r"^/https?://", url): + url = url[1:] + kodi_worker.log("Opening Video Url %s" % url, 'route') + kodi_worker.play_url(url) + else: + kodi_worker.log("Opening Generic Url %s" % url, 'route') + request_url = kodi_worker.build_url(url, route_plugin.args) + directories = api.get_url(request_url) + for directory in directories: + kodi_worker.render(directory) + kodi_worker.list_callback() + + +def run(): + route_plugin.run() diff --git a/resources/lib/Base.py b/resources/lib/Base.py deleted file mode 100644 index 85803d1..0000000 --- a/resources/lib/Base.py +++ /dev/null @@ -1,247 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import os -import re - -import simplejson as json -from kodi_six import xbmcplugin, xbmcgui, xbmcvfs -from kodi_six.utils import py2_encode, py2_decode -from . import Settings -from .Helpers import * - - -def showDialog(title, description): - xbmcgui.Dialog().notification(title, description, xbmcaddon.Addon().getAddonInfo('icon')) - - -def addDirectory(title, banner, backdrop, description, link, mode, pluginhandle): - parameters = {"link": link, "mode": mode} - u = build_kodi_url(parameters) - createListItem(title, banner, description, '', '', '', u, False, True, backdrop, pluginhandle, None) - - -def generateAddonVideoUrl(videourl): - videourl = buildLink(videourl) - return "plugin://%s/?mode=play&link=%s" % (xbmcaddon.Addon().getAddonInfo('id'), videourl) - - -def generateDRMVideoUrl(videourl, drm_lic_url): - parameters = {"link": videourl, "mode": "playDRM", "lic_url": drm_lic_url} - return build_kodi_url(parameters) - - -def buildLink(link): - link = link.replace("https://apasfpd.apa.at", "https://apasfpd.sf.apa.at") - if link: - return "%s|User-Agent=%s" % (link, Settings.userAgent()) - else: - return link - - -def createPlayAllItem(name, pluginhandle, stream_info=False): - play_all_parameters = {"mode": "playlist"} - play_all_url = build_kodi_url(play_all_parameters) - play_all_item = xbmcgui.ListItem(label=name, offscreen=True) - if stream_info: - description = stream_info['description'] - play_all_item.setArt({'thumb': stream_info['teaser_image'], 'poster': stream_info['teaser_image']}) - else: - description = "" - play_all_item.setInfo(type="Video", infoLabels={"Title": name, "Plot": description}) - xbmcplugin.addDirectoryItem(pluginhandle, play_all_url, play_all_item, isFolder=False, totalItems=-1) - - -def createListItem(title, banner, description, duration, date, channel, videourl, playable, folder, backdrop, pluginhandle, subtitles=None, blacklist=False, contextMenuItems=None): - contextMenuItems = contextMenuItems or [] - - liz = xbmcgui.ListItem(label=title, label2=channel, offscreen=True) - liz.setInfo(type="Video", infoLabels={"Title": title}) - liz.setInfo(type="Video", infoLabels={"Tvshowtitle": title}) - liz.setInfo(type="Video", infoLabels={"Sorttitle": title}) - liz.setInfo(type="Video", infoLabels={"Plot": description}) - liz.setInfo(type="Video", infoLabels={"Plotoutline": description}) - liz.setInfo(type="Video", infoLabels={"Aired": date}) - liz.setInfo(type="Video", infoLabels={"Studio": channel}) - liz.setProperty('fanart_image', backdrop) - liz.setProperty('IsPlayable', str(playable and not folder)) - liz.setArt({'thumb': banner, 'poster': banner, 'fanart': backdrop, "icon": banner}) - - if not folder: - liz.setInfo(type="Video", infoLabels={"mediatype": 'video'}) - videoStreamInfo = {'codec': 'h264', 'aspect': 1.78} - try: - videoStreamInfo.update({'duration': int(duration)}) - except (TypeError, ValueError): - debugLog("No Duration found in Video") - if videourl.lower().endswith('_qxb.mp4') or '_qxb' in videourl.lower(): - videoStreamInfo.update({'width': 1280, 'height': 720}) - if videourl.lower().endswith('_q8c.mp4') or '_q8c' in videourl.lower(): - videoStreamInfo.update({'width': 1280, 'height': 720}) - elif videourl.lower().endswith('_q6a.mp4') or '_q6a' in videourl.lower(): - videoStreamInfo.update({'width': 960, 'height': 540}) - elif videourl.lower().endswith('_q4a.mp4') or '_q4a' in videourl.lower(): - videoStreamInfo.update({'width': 640, 'height': 360}) - else: - videoStreamInfo.update({'width': 320, 'height': 180}) - liz.addStreamInfo('video', videoStreamInfo) - - liz.addStreamInfo('audio', {"codec": "aac", "language": "de", "channels": 2}) - if subtitles is not None and Settings.subtitles(): - if len(subtitles) > 0 and subtitles[0].endswith('.srt'): - subtitles.pop(0) - liz.addStreamInfo('subtitle', {"language": "de"}) - try: - liz.setSubtitles(subtitles) - except AttributeError: - # setSubtitles was introduced in Helix (v14) - # catch the error in Gotham (v13) - pass - - if blacklist: - match = re.search(r'( - \w\w, \d\d.\d\d.\d\d\d\d)', title) - if match is not None: - bltitle = title.split(" - ") - bltitle = bltitle[0].split(": ") - - bl_title = bltitle[0].replace("+", " ").strip() - else: - bl_title = title.replace("+", " ").strip() - - blparameters = {"mode": "blacklistShow", "link": bl_title} - blurl = build_kodi_url(blparameters) - contextMenuItems.append(('%s %s %s' % (Settings.localizedString(30038).encode("utf-8"), bl_title, Settings.localizedString(30042).encode("utf-8")), 'XBMC.RunPlugin(%s)' % blurl)) - if checkBlacklist(bl_title): - return - - liz.addContextMenuItems(contextMenuItems) - xbmcplugin.addDirectoryItem(pluginhandle, url=videourl, listitem=liz, isFolder=folder) - return liz - - -def checkBlacklist(title): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - bl_json_file = os.path.join(addonUserDataFolder, 'blacklist.json') - if os.path.exists(bl_json_file): - if os.path.getsize(bl_json_file) > 0: - data = getJsonFile(bl_json_file) - tmp = data - for item in tmp: - if py2_decode(item) == py2_decode(title): - return True - return False - - -def removeBlacklist(title): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - bl_json_file = os.path.join(addonUserDataFolder, 'blacklist.json') - if os.path.exists(bl_json_file): - if os.path.getsize(bl_json_file) > 0: - data = getJsonFile(bl_json_file) - tmp = data - for item in tmp: - if item.encode('UTF-8') == title: - tmp.remove(item) - saveJsonFile(tmp, bl_json_file) - - -def printBlacklist(banner, backdrop, translation, pluginhandle): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - bl_json_file = os.path.join(addonUserDataFolder, 'blacklist.json') - if os.path.exists(bl_json_file): - if os.path.getsize(bl_json_file) > 0: - data = getJsonFile(bl_json_file) - for item in data: - item = item.encode('UTF-8') - description = translation(30040).encode('UTF-8') % item - parameters = {'link': item, 'mode': 'unblacklistShow'} - url = build_kodi_url(parameters) - createListItem(item, banner, description, None, None, None, url, False, False, backdrop, pluginhandle) - - -def saveJsonFile(data, file): - with open(file, 'w') as data_file: - data_file.write(json.dumps(data, 'utf-8')) - data_file.close() - - -def getJsonFile(file): - with open(file, 'r') as data_file: - data = json.load(data_file, 'UTF-8') - return data - - -def blacklistItem(title): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - bl_json_file = os.path.join(addonUserDataFolder, 'blacklist.json') - title = unqoute_url(title) - title = title.replace("+", " ").strip() - # check if file exists - if os.path.exists(bl_json_file): - # check if file already has an entry - if os.path.getsize(bl_json_file) > 0: - # append value to JSON File - if not checkBlacklist(title): - data = getJsonFile(bl_json_file) - data.append(title) - saveJsonFile(data, bl_json_file) - # found empty file - writing first record - else: - data = [] - data.append(title) - saveJsonFile(data, bl_json_file) - # create json file - else: - if not os.path.exists(addonUserDataFolder): - os.makedirs(addonUserDataFolder) - data = [] - data.append(title) - saveJsonFile(data, bl_json_file) - - -def unblacklistItem(title): - title = unqoute_url(title) - title = title.replace("+", " ").strip() - removeBlacklist(title) - - -def isBlacklisted(title): - title = unqoute_url(title) - title = py2_decode(title.replace("+", " ").strip()) - return checkBlacklist(title) - - -def searchHistoryPush(title): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - json_file = os.path.join(addonUserDataFolder, 'searchhistory.json') - title = unqoute_url(title) - title = title.replace("+", " ").strip() - # check if file exists - if os.path.exists(json_file): - # check if file already has an entry - if os.path.getsize(json_file) > 0: - # append value to JSON File - data = getJsonFile(json_file) - data.append(title) - saveJsonFile(data, json_file) - # found empty file - writing first record - else: - data = [] - data.append(title) - saveJsonFile(data, json_file) - # create json file - else: - if not os.path.exists(addonUserDataFolder): - os.makedirs(addonUserDataFolder) - data = [] - data.append(title) - saveJsonFile(data, json_file) - -def searchHistoryGet(): - addonUserDataFolder = xbmcvfs.translatePath("special://profile/addon_data/plugin.video.orftvthek") - json_file = os.path.join(addonUserDataFolder, 'searchhistory.json') - if os.path.exists(json_file): - if os.path.getsize(json_file) > 0: - data = getJsonFile(json_file) - return data - return [] \ No newline at end of file diff --git a/resources/lib/Common.py b/resources/lib/Common.py deleted file mode 100644 index 456525c..0000000 --- a/resources/lib/Common.py +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -""" - Parsedom for XBMC plugins - Copyright (C) 2010-2011 Tobias Ussing And Henrik Mosgaard Jensen - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -""" - -from kodi_six.utils import py2_encode, py2_decode -from future.builtins import str -from future.builtins import range -import sys -import xbmc - -PY3 = sys.version_info.major >=3 -if PY3: - from urllib.parse import unquote, urlencode - from urllib.request import urlopen as OpenRequest - from urllib.request import Request as HTTPRequest - from urllib.error import HTTPError - from html.parser import HTMLParser - from html import unescape -else: - from urllib import unquote, urlencode - from urllib2 import urlopen as OpenRequest - from urllib2 import Request as HTTPRequest - from urllib2 import HTTPError - from HTMLParser import HTMLParser - parser = HTMLParser() - unescape = parser.unescape - -import re - -USERAGENT = u"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1" -DEBUG_SCRAPER = False - -def replaceHTMLCodes(txt): - log(repr(txt)) - txt = re.sub('(&#[0-9]+)([^;^0-9]+)', '\\1;\\2', txt) - txt = unescape(txt) - txt = txt.replace("&", "&") - log(repr(txt)) - return txt - - -def stripTags(html): - log(repr(html)) - sub_start = html.find("<") - sub_end = html.find(">") - while sub_end > sub_start > -1: - html = html.replace(html[sub_start:sub_end + 1], "").strip() - sub_start = html.find("<") - sub_end = html.find(">") - - log(repr(html)) - return html - - -def _getDOMContent(html, name, match, ret): # Cleanup - log("match: " + match) - - endstr = u"" - - start = html.find(match) - end = html.find(endstr, start) - pos = html.find("<" + name, start + 1 ) - - log(str(start) + " < " + str(end) + ", pos = " + str(pos) + ", endpos: " + str(end)) - - while pos < end and pos != -1: # Ignore too early return - tend = html.find(endstr, end + len(endstr)) - if tend != -1: - end = tend - pos = html.find("<" + name, pos + 1) - log("loop: " + str(start) + " < " + str(end) + " pos = " + str(pos)) - - log("start: %s, len: %s, end: %s" % (start, len(match), end)) - if start == -1 and end == -1: - result = u"" - elif start > -1 and end > -1: - result = html[start + len(match):end] - elif end > -1: - result = html[:end] - elif start > -1: - result = html[start + len(match):] - - if ret: - endstr = html[end:html.find(">", html.find(endstr)) + 1] - result = match + result + endstr - - log("done result length: " + str(len(result))) - return result - -def _getDOMAttributes(match, name, ret): - lst = re.compile('<' + name + '.*?' + ret + '=([\'"].[^>]*?[\'"])>', re.M | re.S).findall(match) - if len(lst) == 0: - lst = re.compile('<' + name + '.*?' + ret + '=(.[^>]*?)>', re.M | re.S).findall(match) - ret = [] - for tmp in lst: - cont_char = tmp[0] - if cont_char in "'\"": - log("Using %s as quotation mark" % cont_char) - - # Limit down to next variable. - if tmp.find('=' + cont_char, tmp.find(cont_char, 1)) > -1: - tmp = tmp[:tmp.find('=' + cont_char, tmp.find(cont_char, 1))] - - # Limit to the last quotation mark - if tmp.rfind(cont_char, 1) > -1: - tmp = tmp[1:tmp.rfind(cont_char)] - else: - log("No quotation mark found") - if tmp.find(" ") > 0: - tmp = tmp[:tmp.find(" ")] - elif tmp.find("/") > 0: - tmp = tmp[:tmp.find("/")] - elif tmp.find(">") > 0: - tmp = tmp[:tmp.find(">")] - - ret.append(tmp.strip()) - - log("Done: " + repr(ret)) - return ret - -def _getDOMElements(item, name, attrs): - lst = [] - for key in attrs: - lst2 = re.compile('(<' + name + '[^>]*?(?:' + key + '=[\'"]' + attrs[key] + '[\'"].*?>))', re.M | re.S).findall(item) - if len(lst2) == 0 and attrs[key].find(" ") == -1: # Try matching without quotation marks - lst2 = re.compile('(<' + name + '[^>]*?(?:' + key + '=' + attrs[key] + '.*?>))', re.M | re.S).findall(item) - if len(lst) == 0: - log("Setting main list " + repr(lst2)) - lst = lst2 - lst2 = [] - else: - log("Setting new list " + repr(lst2)) - test = list(range(len(lst))) - test.reverse() - for i in test: # Delete anything missing from the next list. - if not lst[i] in lst2: - log("Purging mismatch " + str(len(lst)) + " - " + repr(lst[i])) - del(lst[i]) - - if len(lst) == 0 and attrs == {}: - log("No list found, trying to match on name only") - lst = re.compile('(<' + name + '>)', re.M | re.S).findall(item) - if len(lst) == 0: - lst = re.compile('(<' + name + ' .*?>)', re.M | re.S).findall(item) - - log("Done: " + str(type(lst))) - return lst - - -def parseDOM(html, name=u"", attrs={}, ret=False): - log("Name: " + repr(name) + " - Attrs:" + repr(attrs) + " - Ret: " + repr(ret) + " - HTML: " + str(type(html))) - ret = py2_decode(ret) - if isinstance(name, str): - try: - name = name - except: - log("Couldn't decode name binary string: " + repr(name)) - - if isinstance(html, str): - try: - html = [py2_decode(html)] - except: - log("Couldn't decode html binary string. Data length: " + repr(len(html))) - html = [html] - elif isinstance(html, bytes): - html = [html.decode('ascii')] - elif str(type(html)) == "": - html = [str(html)] - elif not isinstance(html, list): - log("Input isn't list or string/unicode.") - return u"" - - if not name.strip(): - log("Missing tag name") - return u"" - - ret_lst = [] - for item in html: - temp_item = re.compile('(<[^>]*?\n[^>]*?>)').findall(item) - for match in temp_item: - item = item.replace(match, match.replace("\n", " ")) - - lst = _getDOMElements(item, name, attrs) - - if isinstance(ret, str): - log("Getting attribute %s content for %s matches " % (ret, len(lst))) - lst2 = [] - for match in lst: - lst2 += _getDOMAttributes(match, name, ret) - lst = lst2 - else: - log("Getting element content for %s matches " % len(lst)) - lst2 = [] - for match in lst: - log("Getting element content for %s" % match) - temp = _getDOMContent(item, name, match, ret).strip() - item = item[item.find(temp, item.find(match)) + len(temp):] - lst2.append(temp) - lst = lst2 - ret_lst += lst - - log("Done: " + repr(ret_lst)) - return ret_lst - -def fetchPage(params={}): - get = params.get - link = get("link") - ret_obj = {} - if get("post_data"): - log("called for : " + repr(params['link'])) - else: - log("called for : " + repr(params)) - - if not link or int(get("error", "0")) > 2: - log("giving up") - ret_obj["status"] = 500 - return ret_obj - - if get("post_data"): - if get("hide_post_data"): - log("Posting data") - else: - log("Posting data: " + urlencode(get("post_data"))) - - request = HTTPRequest(link, urlencode(get("post_data"))) - request.add_header('Content-Type', 'application/x-www-form-urlencoded') - else: - log("Got request") - request = HTTPRequest(link) - - if get("headers"): - for head in get("headers"): - request.add_header(head[0], head[1]) - - request.add_header('User-Agent', USERAGENT) - - if get("cookie"): - request.add_header('Cookie', get("cookie")) - - if get("refering"): - request.add_header('Referer', get("refering")) - - try: - log("connecting to server...") - - con = OpenRequest(request) - ret_obj["header"] = con.info() - ret_obj["new_url"] = con.geturl() - if get("no-content", "false") == u"false" or get("no-content", "false") == "false": - inputdata = con.read() - ret_obj["content"] = inputdata.decode("utf-8") - - con.close() - - log("Done") - ret_obj["status"] = 200 - return ret_obj - - except HTTPError as e: - err = str(e) - log("HTTPError : " + err) - log("HTTPError - Headers: " + str(e.headers) + " - Content: " + e.fp.read()) - - params["error"] = str(int(get("error", "0")) + 1) - ret = fetchPage(params) - - if not "content" in ret and e.fp: - ret["content"] = e.fp.read() - return ret - - ret_obj["status"] = 500 - return ret_obj - - -def log(msg): - if DEBUG_SCRAPER: - output = py2_encode(msg) - xbmc.log(output, xbmc.LOGDEBUG) diff --git a/resources/lib/Directory.py b/resources/lib/Directory.py new file mode 100644 index 0000000..5e580b7 --- /dev/null +++ b/resources/lib/Directory.py @@ -0,0 +1,428 @@ +import re +from datetime import datetime, timedelta + + +class Directory: + def __init__(self, title, description, link, content_id="", content_type="", thumbnail="", backdrop="", poster="", source={}, translator=None, proxy=False): + self.translator = translator + self.title = title + if description: + self.description = description.strip() + else: + self.description = " " + self.link = link + self.content_id = content_id + self.content_type = content_type + self.thumbnail = thumbnail + self.backdrop = backdrop + self.poster = poster + self.meta = self.build_meta(source) + self.source = source + self.videos = {} + self.context_menu = self.build_content_menu() + self.pvr_mode = False + + def has_segments(self): + seg_matcher = r"\/episode\/[1-10].*\/segments" + if re.search(seg_matcher, self.link): + return True + return False + + def build_content_menu(self) -> list: + context_menu_items = [] + + if self.is_livestream(): + restart_url = self.get_restart() + if restart_url: + context_menu_items.append({ + 'title': self.translate_string(30139, 'Restart'), + 'url': "restart/%s" % self.source.get('id'), + 'type': 'run' + }) + + if self.type() == 'episode': + context_menu_items.append({ + 'title': self.translate_string(30140, 'All episodes'), + 'url': "episode/%s/more" % self.source.get('id'), + 'type': 'update' + }) + + if self.type() == 'segment' and self.source.get('episode_id'): + context_menu_items.append({ + 'title': self.translate_string(30140, 'All episodes'), + 'url': "episode/%s/more" % self.source.get('episode_id'), + 'type': 'update' + }) + + if 'genre_id' in self.source and 'id' in self.source: + related_link = "/lane/related_content/%s/%s" % (self.source.get('genre_id'), self.source.get('id')) + context_menu_items.append({ + 'title': self.translate_string(30150, 'Related content'), + 'url': related_link, + 'type': 'update' + }) + + return context_menu_items + + def get_context_menu(self) -> list: + return self.context_menu + + def translate_string(self, translation_id, fallback, replace=None): + if self.translator: + return self.translator.get_translation(translation_id, fallback, replace) + else: + return fallback + + @staticmethod + def build_meta(item) -> dict: + meta = {} + if 'online_episode_count' in item: + meta['episodes'] = item['online_episode_count'] + + # Show Meta + if 'genre_title' in item and item['genre_title'] is not None: + if item['genre_title'] == 'Film & Serie' and 'sub_headline' in item and item['sub_headline'] is not None: + meta['genre'] = item['sub_headline'] + else: + meta['genre'] = item['genre_title'] + + if 'genre_id' in item and item['genre_id'] is not None: + meta['genre_id'] = item['genre_id'] + if 'production_year' in item and item['production_year'] is not None: + meta['year'] = item['production_year'] + if 'production_country' in item and item['production_country'] is not None: + meta['country'] = item['production_country'] + + # Build Release Infos + if 'date' in item and item['date'] is not None: + meta['release_date'] = item['date'] + elif 'episode_date' in item and item['episode_date'] is not None: + meta['release_date'] = item['episode_date'] + elif 'updated_at' in item and item['updated_at'] is not None: + meta['release_date'] = item['updated_at'] + + # Build additional Title Infos + if 'headline' in item and item['headline'] is not None: + meta['headline'] = item['headline'] + if 'sub_headline' in item and item['sub_headline'] is not None: + meta['sub_headline'] = item['sub_headline'] + if 'episode_title' in item and item['episode_title'] is not None: + meta['episode'] = item['episode_title'] + + # Build Channel Info + if 'main_channel_id' in item and item['main_channel_id'] is not None: + if str(item['main_channel_id']) in item['channel_meta']: + meta['channel'] = item['channel_meta'][str(item['main_channel_id'])] + meta['channel_id'] = item['main_channel_id'] + elif 'channel_id' in item and item['channel_id'] is not None: + if str(item['channel_id']) in item['channel_meta']: + meta['channel'] = item['channel_meta'][str(item['channel_id'])] + meta['channel_id'] = item['channel_id'] + elif 'SSA' in item and 'channel' in item['SSA']: + for channel in item['channel_meta']: + if item['channel_meta'][channel]['reel'] == item['SSA']['channel']: + meta['channel'] = item['channel_meta'][channel] + break + + # Build Accessibility infos + if 'audio_description_service_available' in item and item['audio_description_service_available'] is not None: + meta['audio_description_available'] = item['audio_description_service_available'] + if 'has_subtitle' in item and item['has_subtitle'] is not None: + meta['subtitles'] = item['has_subtitle'] + else: + meta['subtitles'] = False + + # Stream Meta + if 'two_channel_audio' in item and item['two_channel_audio'] is not None: + meta['multiaudio'] = item['two_channel_audio'] + if 'restart' in item and item['restart'] is not None: + meta['restart'] = item['restart'] + if 'uhd' in item and item['uhd'] is not None: + meta['uhd'] = item['uhd'] + if 'duration_seconds' in item and item['duration_seconds'] is not None: + meta['duration'] = int(item['duration_seconds']) + if 'audio_description' in item and item['audio_description'] is not None: + meta['audio_description'] = item['audio_description'] + elif 'audio_description_service_available' in item and item.get('title').startswith("AD | "): + meta['audio_description'] = True + else: + meta['audio_description'] = False + if 'oegs' in item and item['oegs'] is not None: + meta['oegs'] = item['oegs'] + elif 'is_oegs' in item and item['is_oegs'] is not None: + meta['oegs'] = item['is_oegs'] + else: + meta['oegs'] = False + + if 'right' in item and item['right'] is not None and item['right'] == 'austria': + meta['geo_lock'] = True + else: + meta['geo_lock'] = False + return meta + + def label(self) -> str: + if self.meta.get('headline') and self.meta.get('headline') != self.title and self.meta.get('headline') not in self.title: + label = "%s | %s" % (self.title, self.meta.get('headline')) + else: + label = self.title + + if self.is_livestream() and self.get_channel() and not self.is_pvr_mode(): + channel = self.get_channel() + if self.meta.get('restart'): + label = "[LIVE] [R] [%s] %s" % (channel, label) + else: + label = "[LIVE] [%s] %s" % (channel, label) + elif self.is_pvr_mode(): + channel = self.get_channel() + label = "%s | %s" % (channel, label) + return label + + def label2(self) -> str: + if self.meta.get('sub_headline') and self.meta.get('sub_headline') != self.title and self.meta.get('sub_headline') not in self.title: + return self.meta.get('sub_headline') + + def is_livestream(self) -> bool: + return self.type() == 'timeshift' or self.type() == 'livestream' + + def livestream_active(self) -> bool: + current_time = datetime.now() + start_time = self.get_start_time() + end_time = self.get_end_time() + if start_time < current_time < end_time: + return True + + def is_geo_locked(self): + return self.meta.get('geo_lock') + + def has_audio_description(self): + return self.meta.get('audio_description') + + def has_sign_language(self): + return self.meta.get('oegs') + + def get_start_time(self): + return datetime.fromisoformat(self.get_source().get('start')).replace(tzinfo=None) + + def get_start_time_iso(self): + ref_date = datetime.fromisoformat(self.get_source().get('start')) - timedelta(hours=2) + d_date = ref_date.strftime("%Y%m%d") + d_time = ref_date.strftime("%H%M%S") + return "%sT%s" % (d_date, d_time) + + def get_end_time(self): + return datetime.fromisoformat(self.get_source().get('end')).replace(tzinfo=None) + + def set_channel(self, channel_reel): + for channel in self.source['channel_meta']: + if self.source['channel_meta'][channel]['reel'] == channel_reel: + self.meta['channel'] = self.source['channel_meta'][channel] + break + + def has_timeshift(self): + if 'timeshift_available_livestream' in self.source and 'video_type' in self.source: + if self.source['timeshift_available_livestream'] and self.source['video_type'] == 'timeshift': + return True + return False + + def get_restart(self): + if 'restart' in self.source: + if self.source['restart'] and '_embedded' in self.source and 'channel' in self.source['_embedded']: + restart_url = self.source['_embedded']['channel']['channel_restart_url_hbbtv'] + return restart_url + return False + + def get_channel(self): + special_regex = r"^web\d*" + if self.meta.get('channel'): + if re.search(special_regex, self.meta.get('channel').get('name')): + return "Special" + return self.meta.get('channel').get('name') + + def get_channel_logo(self): + if self.meta.get('channel'): + return self.meta.get('channel').get('logo') + + def get_resolution(self): + if self.meta.get('uhd'): + return 3840, 2160 + else: + return 1280, 720 + + def set_stream(self, sources): + self.videos = sources + + def get_stream(self): + return self.videos + + def date(self): + return self.meta.get('release_date') + + def time(self): + try: + return datetime.fromisoformat(self.date()).strftime("%H:%M") + except TypeError: + self.log('No time set for %s' % self.label()) + + def get_description(self) -> str: + if self.description is not None: + return self.description + else: + return "" + + def get_meta_description(self): + meta_description = {} + if not self.is_pvr_mode(): + if self.get_episodes() > 1: + meta_description[self.translate_string(30141, 'Episodes')] = self.get_episodes() + if self.get_channel(): + meta_description[self.translate_string(30142, 'Channel')] = self.get_channel() + if self.is_livestream() and self.get_stream_runtime(): + meta_description[self.translate_string(30113, 'Livestream')] = self.get_stream_runtime() + if not self.livestream_active(): + meta_description[self.translate_string(30114, 'Starts in')] = "%d min" % self.get_stream_start_delta() + if 'episode_title' in self.get_source() and 'sub_headline' in self.get_source(): + meta_description[self.meta.get('sub_headline')] = "" + + return meta_description + + def get_stream_start_delta(self): + current_time = datetime.now() + start_time = self.get_start_time() + return int((start_time - current_time).total_seconds() / 60) + + def get_stream_runtime(self): + start_time = self.get_start_time().strftime("%H:%M") + end_time = self.get_start_time().strftime("%H:%M") + if start_time != end_time: + return "%s - %s" % (start_time, end_time) + + def annotate_time(self): + self.title = "%s | %s" % (self.time(), self.title) + + def annotate_channel(self): + self.title = "[%s] %s" % (self.get_channel(), self.title) + + def country(self): + return self.meta.get('country') + + def year(self): + return self.meta.get('year') + + def genre(self) -> str: + if 'genre' in self.meta: + return self.meta.get('genre') + + def has_art(self) -> bool: + if self.poster or self.thumbnail or self.backdrop: + return True + return False + + def is_playable(self) -> bool: + if self.type() == 'episode': + return True + if self.type() == 'segment': + return True + if self.is_livestream(): + return True + if self.get_episodes() == 1 and self.type() == 'temporary': + return True + return False + + def get_episodes(self): + if self.meta.get('episodes') is not None: + return int(self.meta.get('episodes')) + return 1 + + def get_cast(self): + cast = [] + part = None + cast_extract_pattern = r'(?P.*?)(\s\((?P.*?)\)|,|u.v.m| u.a.|u. a.)' + if 'Besetzung:' in self.description: + part = self.description.split('Besetzung:') + elif 'Hauptdarsteller:' in self.description: + part = self.description.split('Hauptdarsteller:') + elif 'Besetzung\r\n' in self.description: + part = self.description.split('Besetzung\r\n') + elif 'Hauptdarsteller\r\n' in self.description: + part = self.description.split('Hauptdarsteller\r\n') + elif 'Mit:' in self.description: + part = self.description.split('Mit:') + elif '\r\nMit ' in self.description: + part = self.description.split('\r\nMit ') + + try: + if part is not None and len(part) > 1: + matches = re.findall(cast_extract_pattern, part[1], re.DOTALL) + for name, dirty_role, role in matches: + if name.strip() != "": + if '\r\n' in name.strip() or 'Regie:' in name.strip(): + break + if role.strip() != "": + cast.append((name.strip(), role.strip())) + else: + cast.append(name.strip()) + return cast + except re.error as e: + return cast + + def url(self) -> str: + return self.link + + def set_url(self, url): + self.link = url + + def type(self) -> str: + return self.content_type + + def get_duration(self): + if self.meta.get('duration') is not None: + return int(self.meta.get('duration')) + + def is_pvr_mode(self): + return self.pvr_mode + + def set_pvr_mode(self): + self.pvr_mode = True + + def media_type(self) -> str: + contenttype = self.type() + if self.label2() == 'Fernsehfilm': + return 'movie' + if self.get_duration() is not None and self.get_duration() > 60 * 60: + return 'movie' + if contenttype == 'lane': + return 'video' + if contenttype == 'episode': + return 'episode' + if contenttype == 'segment': + return 'episode' + if contenttype == 'temporary': + return 'tvshow' + return 'movie' + + def get_source(self): + return self.source + + def debug(self): + self.log('Title: %s' % self.title) + self.log('Playable: %s' % self.is_playable()) + self.log('Description: %s' % self.description) + self.log('Link: %s' % self.link) + self.log('ID: %s' % self.content_id) + self.log('Type: %s' % self.content_type) + self.log('Playable: %s' % self.is_playable()) + self.log('Thumbnail: %s' % self.thumbnail) + self.log('Backdrop: %s' % self.backdrop) + self.log('Poster: %s' % self.poster) + for item in self.meta: + self.log("%s: %s" % (item.capitalize().replace("_", " "), self.meta[item])) + + for context_menu_item in self.context_menu: + self.log('Context Menu Item: %s' % context_menu_item.get('title')) + + if len(self.get_stream()): + self.log('Stream Data available %d' % len(self.get_stream())) + + def log(self, msg, msg_type='info'): + if self.translator: + self.translator.log("[%s][ORFON][DIRECTORY] %s" % (msg_type.upper(), msg)) diff --git a/resources/lib/Helpers.py b/resources/lib/Helpers.py deleted file mode 100644 index cc0165d..0000000 --- a/resources/lib/Helpers.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -from kodi_six.utils import py2_encode, py2_decode - -import xbmc -import xbmcgui -import xbmcaddon -import sys - -PY3 = sys.version_info.major >=3 -if PY3: - from urllib.parse import unquote, urlencode - from urllib.request import urlopen as OpenRequest - from urllib.request import Request as HTTPRequest - from urllib.error import HTTPError -else: - from urllib import unquote, urlencode - from urllib2 import HTTPError - from urllib2 import urlopen as OpenRequest - from urllib2 import Request as HTTPRequest - - -def unqoute_url(url): - try: - return unquote(url) - except: - return unquote(url.encode('utf-8')) - - -def build_kodi_url(parameters): - return sys.argv[0] + '?' + encode_parameters(parameters) - - -def encode_parameters(parameters): - parameters = { k: v if v is not None else "" - for k, v in parameters.items() } - try: - return urlencode(parameters) - except: - parameters = {k: unicode(v).encode("utf-8") for k, v in list(parameters.items())} - return urlencode(parameters) - - -def url_get_request(url, authorization=False): - if authorization: - request = HTTPRequest(url) - request.add_header('Authorization', 'Basic %s' % authorization) - else: - request = url - return OpenRequest(request) - - -def parameters_string_to_dict(parameters): - paramDict = {} - if parameters: - paramPairs = parameters[1:].split("&") - for paramsPair in paramPairs: - paramSplits = paramsPair.split('=') - if (len(paramSplits)) == 2: - paramDict[paramSplits[0]] = paramSplits[1] - return paramDict - - -def debugLog(message, loglevel=xbmc.LOGDEBUG): - output = py2_encode(message) - xbmc.log(msg=output, level=loglevel) - -def userNotification(message, title="ORF TVThek"): - output = py2_encode(message) - xbmcgui.Dialog().notification(title, output, icon=xbmcgui.NOTIFICATION_ERROR) diff --git a/resources/lib/HtmlScraper.py b/resources/lib/HtmlScraper.py deleted file mode 100644 index 84b7923..0000000 --- a/resources/lib/HtmlScraper.py +++ /dev/null @@ -1,1257 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -import datetime -from .Common import * - -from .Base import * -from .Scraper import * - - -class htmlScraper(Scraper): - __urlBase = 'https://tvthek.orf.at' - __urlLive = __urlBase + '/live' - __urlMostViewed = __urlBase + '/most-viewed' - __urlNewest = __urlBase + '/newest' - __urlSchedule = __urlBase + '/schedule' - __urlSearch = __urlBase + '/search' - __urlShows = __urlBase + '/profiles' - __urlTips = __urlBase + '/tips' - __urlFocus = __urlBase + '/in-focus' - __urlTopics = __urlBase + '/topics' - __urlTopicLane = __urlBase + '/lane/topic/' - __urlArchive = __urlBase + '/history' - __urlTrailer = __urlBase + '/coming-soon' - - __videoQualities = ["Q1A", "Q4A", "Q6A", "Q8C", "QXB", "QXA"] - - _bundeslandMap = { - 'orf2b': 'Burgenland', - 'orf2stmk': 'Steiermark', - 'orf2w': 'Wien', - 'orf2ooe': 'Oberösterreich', - 'orf2k': 'Kärnten', - 'orf2n': 'Niederösterreich', - 'orf2s': 'Salzburg', - 'orf2v': 'Vorarlberg', - 'orf2t': 'Tirol', - } - - def __init__(self, xbmc, settings, pluginhandle, quality, protocol, delivery, defaultbanner, defaultbackdrop, usePlayAllPlaylist): - self.translation = settings.getLocalizedString - self.xbmc = xbmc - self.videoQuality = quality - self.videoDelivery = delivery - self.videoProtocol = protocol - self.pluginhandle = pluginhandle - self.defaultbanner = defaultbanner - self.defaultbackdrop = defaultbackdrop - self.enableBlacklist = settings.getSetting("enableBlacklist") == "true" - self.usePlayAllPlaylist = usePlayAllPlaylist - debugLog('HTML Scraper - Init done') - - def getLivestreamByChannel(self, channel): - html = fetchPage({'link': self.__urlLive}) - wrapper = parseDOM(html.get("content"), name='div', attrs={'class': 'b-livestream-per-channel'}) - channels = parseDOM(wrapper, name='div', attrs={'class': 'b-lane.*?'}) - - for result in channels: - channel_detail_url = False - channel_logo = parseDOM(result, name='img', attrs={'class': 'channel-logo'}, ret='src') - channel_id = re.findall(r'[^\/]+(?=\.)', str(channel_logo))[0].replace('-logo', '') - channel_program = parseDOM(result, name='a', attrs={'class': 'js-link-box'}, ret='title')[0] - - if channel in self._bundeslandMap: - channel = 'orf2' - bundesland_article = parseDOM(result, name='li', attrs={'class': '.*?is-bundesland-heute.*?'}, ret='data-jsb') - if len(bundesland_article): - bundesland_data = replaceHTMLCodes(bundesland_article[0]) - bundesland_data = json.loads(bundesland_data) - for bundesland_item_key in bundesland_data: - bundesland_item = bundesland_data.get(bundesland_item_key) - if bundesland_item and bundesland_item is not True and len(bundesland_item): - if self._bundeslandMap[channel] == bundesland_item.get('bundesland'): - channel_detail_url = bundesland_item.get('url') - - if not channel_detail_url and channel_id == channel: - channel_detail_url = parseDOM(result, name='a', attrs={'class': 'js-link-box'}, ret='href')[0] - - if channel_detail_url: - channel_html = fetchPage({'link': channel_detail_url}) - player = parseDOM(channel_html.get("content"), name='div', attrs={'class': "player_viewport.*?"}) - player_meta = parseDOM(channel_html.get("content"), name='section', attrs={'class': "b-video-details.*?"}) - if len(player): - data = parseDOM(player[0], name='div', attrs={}, ret="data-jsb") - channel_description = parseDOM(player_meta[0], name='p', attrs={'class': "description-text.*?"})[0] - license_url = self.getLivestreamDRM(data) - video_url = self.getLivestreamUrl(data, self.videoQuality) - # Remove Get Parameters because InputStream Adaptive cant handle it. - video_url = re.sub(r"\?[\S]+", '', video_url, 0) - - uhd_25_video_url = self.getLivestreamUrl(data, 'UHD', True) - if uhd_25_video_url: - uhd_50_video_url = uhd_25_video_url.replace('_uhd_25/', '_uhd_50/') - video_url = uhd_50_video_url - if license_url: - return {'title': channel_program, 'description': channel_description, 'url': video_url,'license': license_url} - else: - return {'title': channel_program, 'description': channel_description, 'url': video_url} - return [] - - def getMostViewed(self): - self.getTeaserList(self.__urlMostViewed, "b-teasers-list") - - def getNewest(self): - self.getTeaserList(self.__urlNewest, "b-teasers-list") - - def getTips(self): - self.getTeaserList(self.__urlTips, "b-teasers-list") - - # Parses the Frontpage Carousel - def getHighlights(self): - self.getTeaserSlideshow(self.__urlBase) - self.getTeaserList(self.__urlBase, "stage-subteaser-list") - - def getTrailers(self): - self.getTeaserList(self.__urlTrailer, "b-teasers-list") - - def getFocus(self): - self.getLaneTopicOverview(self.__urlFocus) - - # Extracts VideoURL from JSON String - def getVideoUrl(self, sources, drm_license=None): - for source in sources: - if drm_license and source['quality'].lower()[0:3] == self.videoQuality.lower() and source['delivery'].lower() == 'dash': - debugLog("Found DRM Video Url %s" % source["src"]) - return generateDRMVideoUrl(source["src"], drm_license) - elif source["protocol"].lower() == self.videoProtocol.lower() and source["delivery"].lower() == self.videoDelivery.lower() and source["quality"].lower() == self.videoQuality.lower(): - debugLog("Found Simple Video Url %s" % source["src"]) - return generateAddonVideoUrl(source["src"]) - return False - - # Parses teaser lists - def getTeaserList(self, url, list_class, list_type="ul"): - url = unqoute_url(url) - html = fetchPage({'link': url}) - container = parseDOM(html.get("content"), name='main', attrs={'class': "main"}, ret=False) - teasers = parseDOM(container, name=list_type, attrs={'class': list_class}, ret=False) - items = parseDOM(teasers, name='article', attrs={'class': "b-teaser"}, ret=False) - - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "profile"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='p', attrs={'class': "description.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - else: - desc = "" - - channel = parseDOM(item, name='p', attrs={'class': "channel"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - date = parseDOM(item, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='data-src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', attrs={'class': 'teaser-link.*?'}, ret='href') - link = link[0] - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - def getLaneTopicOverview(self, url): - html = fetchPage({'link': url}) - container = parseDOM(html.get("content"), name='section', attrs={'class': "b-list-container"}, ret=False) - - items = parseDOM(container, name='div', attrs={'class': "b-lane.*?"}, ret=False) - - for item in items: - title_link = parseDOM(item, name='h3', attrs={'class': "title"}, ret=False) - - title = parseDOM(title_link, name='a', attrs={}, ret=False) - title = replaceHTMLCodes(title[0]) - - link = parseDOM(title_link, name='a', attrs={}, ret='href') - link = link[0] - link = "%s%s" % (self.__urlBase, link) - - desc = "" - desc = self.formatDescription(title, "", "", desc, "", "") - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - parameters = {"link": link, "banner": image, "mode": "getArchiveDetail"} - - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - def formatDescription(self, title, channel, subtitle, desc, date, time): - date_prefix = self.translation(30009) - - # Reformat Title - if subtitle != title: - if len(subtitle): - title = "%s | %s" % (title, subtitle) - if date != "": - title = "%s - %s" % (title, date) - - # Reformat - if len(subtitle): - subtitle = re.sub("\s\s+", " ", str(subtitle)) - if subtitle == title: - subtitle = "" - else: - if len(channel): - subtitle = " | [LIGHT]%s[/LIGHT]" % subtitle - else: - subtitle = "[LIGHT]%s[/LIGHT]" % subtitle - else: - subtitle = "" - - if len(desc): - desc = "[CR]%s" % desc - else: - desc = "" - - if len(channel): - channel = "[B]%s[/B]" % channel - else: - channel = "" - - if len(date): - return "%s%s[CR]%s[CR][I]%s %s - %s[/I]" % (channel, subtitle, desc, date_prefix, date, time) - else: - return "%s%s[CR]%s" % (channel, subtitle, desc) - - # Parses the frontpage teaser slider - def getTeaserSlideshow(self, url): - url = unqoute_url(url) - html = fetchPage({'link': url}) - container = parseDOM(html.get("content"), name='main', attrs={'class': "main"}, ret=False) - teasers = parseDOM(container, name='div', attrs={'class': "stage-item-list.*?"}, ret=False) - items = parseDOM(teasers, name='a', attrs={'class': "stage-item.*?"}, ret=False) - items_href = parseDOM(teasers, name='a', attrs={'class': "stage-item.*?"}, ret='href') - current = 0 - for item in items: - subtitle = parseDOM(item, name='h2', attrs={'class': "stage-item-profile-title"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h3', attrs={'class': "stage-item-teaser-title"}, ret=False) - title = replaceHTMLCodes(title[0]) - - figure = parseDOM(item, name='figure', attrs={'class': 'stage-item-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={'class': "lazyload"}, ret='data-src') - - image = replaceHTMLCodes(image[0]) - - link = items_href[current] - link = link - - # Reformat Title - if subtitle != title: - title = "%s | %s" % (subtitle, title) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", "", "", "", "", url) - current += 1 - - # Scrapes the detail page for a schedule day selection (missed a show) - def openArchiv(self, url): - url = unqoute_url(url) - html = fetchPage({'link': url}) - container = parseDOM(html.get("content"), name='main', attrs={'class': "main"}, ret=False) - teasers = parseDOM(container, name='div', attrs={'class': "b-schedule-list"}, ret=False) - items = parseDOM(teasers, name='article', attrs={'class': "b-schedule-episode.*?"}, ret=False) - - date = parseDOM(teasers, name='h2', attrs={'class': 'day-title.*?'}, ret=False) - if len(date): - date = date[0] - else: - date = "" - - for item in items: - title = parseDOM(item, name='h4', attrs={'class': "item-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='div', attrs={'class': "item-description.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - desc = stripTags(desc) - else: - desc = "" - - channel = parseDOM(item, name='span', attrs={'class': "small-information.meta.meta-channel-name"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - - time = parseDOM(item, name='span', attrs={'class': 'meta.meta-time'}, ret=False) - time = time[0] - - title = "[%s] %s" % (time, title) - - subtitle = time - - image = parseDOM(item, name='img', attrs={}, ret='src') - if len(image): - image = replaceHTMLCodes(image[0]) - else: - image = "" - - link = parseDOM(item, name='a', attrs={'class': 'episode-content'}, ret='href') - link = link[0] - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # Parses the Frontpage Show Overview Carousel - def getCategories(self): - html = fetchPage({'link': self.__urlShows}) - container = parseDOM(html.get("content"), name='main', attrs={'class': "main"}, ret=False) - teasers = parseDOM(container, name='div', attrs={'class': "b-profile-results-container.*?"}, ret=False) - items = parseDOM(teasers, name='article', attrs={'class': "b-teaser"}, ret=False) - - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "profile"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='p', attrs={'class': "description.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - else: - desc = "" - - channel = parseDOM(item, name='p', attrs={'class': "channel"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - date = parseDOM(item, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', attrs={'class': 'teaser-link.*?'}, ret='href') - link = link[0] - - try: - regex = r"https://tvthek.orf.at/profile/(.*)/(.*)/(.*)/(.*)" - matches = re.search(regex, link) - name_path = matches.group(1) - id_path = matches.group(2) - link = "%s/%s/%s/%s" % (self.__urlBase, "profile", name_path, id_path) - except IndexError: - debugLog("Not a standard show link. Using default url: %s" % link) - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - debugLog("Link: %s" % link) - parameters = {"link": link, "banner": image, "mode": "getSendungenDetail"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # Parses Details for the selected Show - def getCategoriesDetail(self, category, banner): - url = unqoute_url(category) - banner = unqoute_url(banner) - html = fetchPage({'link': url}) - container = parseDOM(html.get("content"), name='main', attrs={'class': "main"}, ret=False) - - # Main Episode - main_episode_container = parseDOM(container, name='section', attrs={'class': "b-video-details.*?"}, ret=False) - - title = parseDOM(main_episode_container, name='h2', attrs={'class': "description-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - subtitle = parseDOM(main_episode_container, name='span', attrs={'class': "js-subheadline"}, ret=False) - if len(subtitle): - subtitle = replaceHTMLCodes(subtitle[0]) - else: - subtitle = "" - - desc = parseDOM(main_episode_container, name='p', attrs={'class': "description-text.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - else: - desc = "" - - channel = parseDOM(main_episode_container, name='span', attrs={'class': "channel.*?"}, ret="aria-label") - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - - date = parseDOM(main_episode_container, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(main_episode_container, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - image = banner - - if date != "": - title = "%s - %s" % (title, date) - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": url, "banner": image, "mode": "openSeries"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # More Episodes - more_episode_container = parseDOM(container, name='section', attrs={'class': "related-videos"}, ret=False) - more_episode_json = parseDOM(more_episode_container, name="div", attrs={'class': 'more-episodes.*?'}, ret='data-jsb') - if len(more_episode_json): - more_episode_json_raw = replaceHTMLCodes(more_episode_json[0]) - more_episode_json_data = json.loads(more_episode_json_raw) - more_episodes_url = "%s%s" % (self.__urlBase, more_episode_json_data.get('url')) - - additional_html = fetchPage({'link': more_episodes_url}) - - items = parseDOM(additional_html.get("content"), name='article', attrs={'class': "b-teaser"}, ret=False) - - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "profile"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='p', attrs={'class': "description.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - else: - desc = "" - - channel = parseDOM(item, name='p', attrs={'class': "channel"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - date = parseDOM(item, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', attrs={'class': 'teaser-link.*?'}, ret='href') - link = link[0] - - if date != "": - title = "%s - %s" % (title, date) - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - def getLaneTeasers(self, html): - items = parseDOM(html.get("content"), name='article', attrs={'class': "b-topic-teaser"}, ret=False) - - lane_title = parseDOM(html.get("content"), name='h3', attrs={'class': "title"}, ret=False) - lane_title = replaceHTMLCodes(lane_title[0]) - lane_title = stripTags(lane_title) - - for item in items: - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - title = "[%s] %s" % (lane_title, title) - - video_count = parseDOM(item, name='p', attrs={'class': "topic-video-count"}, ret=False) - desc = replaceHTMLCodes(video_count[0]) - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', ret='href') - link = link[0] - link = "%s%s" % (self.__urlBase, link) - - desc = self.formatDescription(title, "", "", desc, "", "") - - parameters = {"link": link, "banner": image, "mode": "getArchiveDetail"} - - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # Parses Teaserblock Titles and returns links for every category - def getLaneItems(self, url): - html = fetchPage({'link': url}) - items = parseDOM(html.get("content"), name='article', attrs={'class': "b-teaser"}, ret=False) - - if len(items) < 1: - self.getLaneTeasers(html) - else: - lane_title = parseDOM(html.get("content"), name='h3', attrs={'class': "title"}, ret=False) - lane_title = replaceHTMLCodes(lane_title[0]) - lane_title = stripTags(lane_title) - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "profile"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - title = "[%s] %s" % (lane_title, title) - - desc = parseDOM(item, name='p', attrs={'class': "description.*?"}, ret=False) - if len(desc): - desc = replaceHTMLCodes(desc[0]) - else: - desc = "" - - channel = parseDOM(item, name='p', attrs={'class': "channel"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - date = parseDOM(item, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', attrs={'class': 'teaser-link.*?'}, ret='href') - link = link[0] - - if date != "": - title = "%s - %s" % (title, date) - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # Parses "Sendung verpasst?" Date Listing - def getSchedule(self): - html = fetchPage({'link': self.__urlSchedule}) - container = parseDOM(html.get("content"), name='div', attrs={'class': 'b-select-box.*?'}) - list_container = parseDOM(container, name='select', attrs={'class': 'select-box-list.*?'}) - items = parseDOM(list_container, name='option', attrs={'class': 'select-box-item.*?'}) - data_items = parseDOM(list_container, name='option', attrs={'class': 'select-box-item.*?'}, ret="data-custom-properties") - i = 0 - for item in items: - title = replaceHTMLCodes(item) - link = replaceHTMLCodes(data_items[i]) - link = "%s%s" % (self.__urlBase, link) - - parameters = {"link": link, "mode": "getScheduleDetail"} - url = build_kodi_url(parameters) - self.html2ListItem(title, "", "", "", "", "", "", url) - i += 1 - - def getArchiv(self): - html = fetchPage({'link': self.__urlArchive}) - html_content = html.get("content") - - wrapper = parseDOM(html_content, name='main', attrs={'class': 'main'}) - items = parseDOM(wrapper, name='article', attrs={'class': 'b-topic-teaser.*?'}) - - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "sub-headline"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - video_count = parseDOM(item, name='p', attrs={'class': "topic-video-count"}, ret=False) - desc = replaceHTMLCodes(video_count[0]) - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', ret='href') - link = link[0] - - desc = self.formatDescription(title, "", subtitle, desc, "", "") - - parameters = {"link": link, "banner": image, "mode": "getArchiveDetail"} - - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - # Creates a XBMC List Item - def html2ListItem(self, title, banner, backdrop, description, duration, date, channel, videourl, subtitles=None, folder=True, playable=False, contextMenuItems=None): - if banner == '': - banner = self.defaultbanner - if backdrop == '': - backdrop = self.defaultbackdrop - params = parameters_string_to_dict(videourl) - mode = params.get('mode') - if not mode: - mode = "play" - - blacklist = False - if self.enableBlacklist: - if mode == 'openSeries' or mode == 'getSendungenDetail': - blacklist = True - debugLog("Adding List Item") - debugLog("Mode: %s" % mode) - debugLog("Videourl: %s" % videourl) - debugLog("Duration: %s" % duration) - debugLog("Banner: %s" % banner) - debugLog("Backdrop: %s" % backdrop) - debugLog("Playable: %s" % playable) - - return createListItem(title, banner, description, duration, date, channel, videourl, playable, folder, backdrop, self.pluginhandle, subtitles, blacklist, contextMenuItems) - - def getMainStreamInfos(self, html, data_json, banner): - stream_info = {} - try: - html_data = parseDOM(html.get("content"), name='section', attrs={'class': "b-video-details.*?"}, ret=False) - playlist_json = data_json.get('playlist') - drm_license_url = self.getDRMLicense(data_json) - - current_channel = parseDOM(html_data, name='span', attrs={'class': "channel.*?"}, ret='aria-label') - if len(current_channel): - stream_info['channel'] = replaceHTMLCodes(current_channel[0]) - else: - stream_info['channel'] = "" - - current_date = parseDOM(html_data, name='span', attrs={'class': 'date'}, ret=False) - stream_info['date'] = current_date[0] - - current_time = parseDOM(html_data, name='span', attrs={'class': 'time'}, ret=False) - if len(current_time): - stream_info['time'] = current_time[0] - else: - stream_info['time'] = "" - - stream_info['second_headline'] = "" - current_subtitle = parseDOM(html_data, name='p', attrs={'class': "profile.*?"}, ret=False) - current_subheadline = parseDOM(current_subtitle, name='span', attrs={'class': "js-subheadline"}, ret=False) - if len(current_subheadline): - stream_info['second_headline'] = stripTags(replaceHTMLCodes(current_subheadline[0])) - else: - if len(current_subtitle): - stream_info['second_headline'] = stripTags(replaceHTMLCodes(current_subtitle[0])) - - if len(html_data): - html_desc = parseDOM(html_data, name='p', attrs={'class': "description-text.*?"}, ret=False) - stream_info['description'] = stripTags(replaceHTMLCodes(html_desc[0])) - - stream_info['main_title'] = playlist_json['title'] - if "preview_image_url" in playlist_json: - stream_info['teaser_image'] = playlist_json['preview_image_url'] - else: - stream_info['teaser_image'] = banner - - stream_info['title'] = data_json.get("selected_video")["title"] - stream_info['full_description'] = self.formatDescription(stream_info['title'], stream_info['channel'], stream_info['second_headline'], stream_info['description'], stream_info['date'], stream_info['time']) - - if data_json.get("selected_video")["description"]: - stream_info['description'] = data_json.get("selected_video")["description"] - - if data_json.get("selected_video")["duration"]: - tmp_duration = float(data_json.get("selected_video")["duration"]) - stream_info['duration'] = int(tmp_duration / 1000) - - if "subtitles" in data_json.get("selected_video"): - main_subtitles = [] - for sub in data_json.get("selected_video")["subtitles"]: - main_subtitles.append(sub.get(u'src')) - stream_info['subtitles'] = main_subtitles - else: - stream_info['subtitles'] = None - stream_info['main_videourl'] = self.getVideoUrl(data_json.get("selected_video")["sources"], drm_license_url) - except: - debugLog("Error fetching stream infos from html") - return stream_info - - # Parses a Video Page and extracts the Playlist/Description/... - def getLinks(self, url, banner, playlist): - url = unqoute_url(url) - debugLog("Loading Videos from %s" % url) - if banner is not None: - banner = unqoute_url(banner) - - stream_infos = {} - playlist_json = {} - video_items = [] - html = fetchPage({'link': url}) - data = parseDOM(html.get("content"), name='div', attrs={'class': "jsb_ jsb_VideoPlaylist"}, ret='data-jsb') - - if len(data): - try: - data = data[0] - data = replaceHTMLCodes(data) - data_json = json.loads(data) - playlist_json = data_json.get('playlist') - stream_infos = self.getMainStreamInfos(html, data_json, banner) - video_items = playlist_json["videos"] - except Exception as e: - debugLog("Error Loading Episode from %s" % url) - - # Add the gapless video if available - try: - drm_license_url = self.getDRMLicense(data_json) - if "is_gapless" in playlist_json: - gapless_subtitles = [] - gapless_name = '-- %s --' % self.translation(30059) - if playlist_json['is_gapless']: - gapless_videourl = self.getVideoUrl(playlist_json['gapless_video']['sources'], drm_license_url) - if gapless_videourl: - if "subtitles" in playlist_json['gapless_video']: - for sub in playlist_json['gapless_video']["subtitles"]: - gapless_subtitles.append(sub.get(u'src')) - else: - global_subtitles = None - if "duration_in_seconds" in playlist_json: - gapless_duration = playlist_json["duration_in_seconds"] - else: - gapless_duration = "" - liz = self.html2ListItem(gapless_name, stream_infos['teaser_image'], "", stream_infos['full_description'], gapless_duration, '', '', gapless_videourl, gapless_subtitles, False, True) - except IndexError as e: - debugLog("No gapless video added for %s" % url) - - - # Multiple chapters available - if len(video_items) > 1: - play_all_name = '-- %s --' % self.translation(30060) - debugLog("Found Video Playlist with %d Items" % len(video_items)) - if self.usePlayAllPlaylist: - createPlayAllItem(play_all_name, self.pluginhandle, stream_infos) - for video_item in video_items: - try: - title = video_item["title"] - if video_item["description"]: - desc = video_item["description"] - else: - debugLog("No Video Description for %s" % title) - desc = "" - - if video_item["duration"]: - duration = float(video_item["duration"]) - duration = int(duration / 1000) - else: - duration = 0 - - preview_img = video_item["preview_image_url"] - sources = video_item["sources"] - if "subtitles" in video_item: - debugLog("Found Subtitles for %s" % title) - subtitles = [] - for sub in video_item["subtitles"]: - subtitles.append(sub.get(u'src')) - else: - subtitles = None - videourl = self.getVideoUrl(sources, drm_license_url) - liz = self.html2ListItem(title, preview_img, "", desc, duration, '', '', videourl, subtitles, False, True) - playlist.add(videourl, liz) - except Exception as e: - debugLog("Error on getLinks") - debugLog(str(e), self.xbmc.LOGERROR) - continue - return playlist - else: - debugLog("No Playlist Items found for %s. Setting up single video view." % stream_infos['title']) - liz = self.html2ListItem(stream_infos['title'], stream_infos['teaser_image'], "", stream_infos['full_description'], stream_infos['duration'], '', '', stream_infos['main_videourl'], stream_infos['subtitles'], False, True) - playlist.add(stream_infos['main_videourl'], liz) - return playlist - else: - showDialog((self.translation(30052))) - sys.exit() - - # Returns Livestream Specials - def getLiveSpecials(self, html): - wrapper = parseDOM(html.get("content"), name='main', attrs={'class': 'main'}) - section = parseDOM(wrapper, name='div', attrs={'class': 'b-special-livestreams-container.*?'}) - items = parseDOM(section, name='div', attrs={'class': 'b-intro-teaser.*?'}) - try: - xbmcaddon.Addon('inputstream.adaptive') - except RuntimeError: - self.html2ListItem("[COLOR red][I] -- %s -- [/I][/COLOR]" % self.translation(30067), self.defaultbanner, "", "", "", "", "Info", "addons://user/kodi.inputstream", None, True, False) - - if items: - debugLog("Found %d Livestream Channels" % len(items)) - for item in items: - channel = "Special" - - debugLog("Processing %s Livestream" % channel) - - figure = parseDOM(item, name='div', attrs={'class': 'img-container'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = replaceHTMLCodes(time[0]) - time = stripTags(time) - - title = parseDOM(item, name='h4', attrs={'class': 'special-livestream-headline.*?'}) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='p', attrs={'class': 'description.*?'}, ret=False) - desc = replaceHTMLCodes(desc[0]) - desc = stripTags(desc) - - link = parseDOM(figure, name='a', attrs={}, ret="href") - link = replaceHTMLCodes(link[0]) - - online = parseDOM(item, name='span', attrs={'class': 'status-online'}) - if len(online): - online = True - else: - online = False - - restart = parseDOM(item, name='span', attrs={'class': 'is-restartable'}) - if len(restart): - restart = True - else: - restart = False - self.buildLivestream(title, link, time, restart, channel, image, online, desc) - - # Returns Live Stream Listing - def getLiveStreams(self): - html = fetchPage({'link': self.__urlLive}) - wrapper = parseDOM(html.get("content"), name='div', attrs={'class': 'all-livestream-container'}) - items = parseDOM(wrapper, name='div', attrs={'class': 'b-lane.*?'}) - - try: - xbmcaddon.Addon('inputstream.adaptive') - except RuntimeError: - self.html2ListItem("[COLOR red][I] -- %s -- [/I][/COLOR]" % self.translation(30067), self.defaultbanner, "", "", "", "", "Info", "addons://user/kodi.inputstream", None, True, False) - - if items: - debugLog("Found %d Livestream Channels" % len(items)) - for item in items: - channel = parseDOM(item, name='img', attrs={'class': 'channel-logo'}, ret="alt") - channel = replaceHTMLCodes(channel[0]) - - debugLog("Processing %s Livestream" % channel) - articles = parseDOM(item, name='li', attrs={'class': 'lane-item.*?'}) - article_links = parseDOM(item, name='a', attrs={'class': 'js-link-box'}, ret='href') - for article_index, article in enumerate(articles): - livestream = parseDOM(article, name='article', attrs={'class': 'b-livestream-teaser is-live'}, ret=False) - if livestream: - figure = parseDOM(livestream, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='data-src') - if len(image) > 0: - image = replaceHTMLCodes(image[0]) - else: - image = "" - - time = parseDOM(livestream, name='h4', attrs={'class': 'time'}, ret=False) - time = replaceHTMLCodes(time[0]) - time = stripTags(time) - - title = parseDOM(livestream, name='h4', attrs={'class': 'livestream-title.*?'}) - title = replaceHTMLCodes(title[0]) - title = stripTags(title) - - link = article_links[article_index] - link = replaceHTMLCodes(link) - - restart = parseDOM(article, name='span', attrs={'class': 'is-restartable'}) - if len(restart): - restart = True - else: - restart = False - - if link.strip() != "" and link != "#": - self.buildLivestream(title, link, time, restart, channel, image, True) - self.getLiveBundesland(items) - self.getLiveSpecials(html) - - def getLiveBundesland(self, items): - for item in items: - channel = parseDOM(item, name='img', attrs={'class': 'channel-logo'}, ret="alt") - channel = replaceHTMLCodes(channel[0]) - - debugLog("Processing %s Livestream" % channel) - articles = parseDOM(item, name='li', attrs={'class': 'lane-item.*?', 'data-jsb': '*'}) - articles_data = parseDOM(item, name='li', attrs={'class': 'lane-item.*?'}, ret='data-jsb') - for article_index, article in enumerate(articles): - livestream = parseDOM(article, name='article', attrs={'class': 'b-livestream-teaser is-live'}, ret=False) - if livestream: - data = articles_data[article_index] - bundesland_data = replaceHTMLCodes(data) - bundesland_data = json.loads(bundesland_data) - for bundesland_stream in bundesland_data: - bundesland_title = bundesland_data[bundesland_stream]['title'] - bundesland_link = bundesland_data[bundesland_stream]['url'] - bundesland_image = bundesland_data[bundesland_stream]['img'] - self.buildLivestream(bundesland_title, bundesland_link, "", True, channel, bundesland_image, True) - - - def buildLivestream(self, title, link, time, restart, channel, banner, online, description = ""): - html = fetchPage({'link': link}) - debugLog("Loading Livestream Page %s for Channel %s" % (link, channel)) - container = parseDOM(html.get("content"), name='div', attrs={'class': "player_viewport.*?"}) - if len(container): - data = parseDOM(container[0], name='div', attrs={}, ret="data-jsb") - - if online: - state = (self.translation(30019)) - else: - state = (self.translation(30020)) - - if description: - description = "%s \n\n %s" % (description, state) - else: - description = state - - if time: - time_str = " (%s)" % time - else: - time_str = "" - - try: - xbmcaddon.Addon('inputstream.adaptive') - inputstreamAdaptive = True - except RuntimeError: - inputstreamAdaptive = False - - if channel: - channel = "[%s]" % channel - else: - channel = "LIVE" - - streaming_url = self.getLivestreamUrl(data, self.videoQuality) - # Remove Get Parameters because InputStream Adaptive cant handle it. - streaming_url = re.sub(r"\?[\S]+", '', streaming_url, 0) - drm_lic_url = self.getLivestreamDRM(data) - uhd_streaming_url = self.getLivestreamUrl(data, 'UHD', True) - if uhd_streaming_url: - uhd50_streaming_url = uhd_streaming_url.replace('_uhd_25/', '_uhd_50/') - - final_title = "[%s] %s - %s%s" % (self.translation(30063), channel, title, time_str) - - debugLog("DRM License: %s" % drm_lic_url) - if uhd_streaming_url: - debugLog("Adding UHD Livestream from %s" % uhd_streaming_url) - uhdContextMenuItems = [] - if inputstreamAdaptive and restart and online: - uhd_restart_parameters = {"mode": "liveStreamRestart", "link": link, "lic_url": drm_lic_url} - uhd_restart_url = build_kodi_url(uhd_restart_parameters) - uhdContextMenuItems.append(('Restart', 'RunPlugin(%s)' % uhd_restart_url)) - uhd_final_title = "[%s] %s [UHD] - %s%s" % (self.translation(30063), channel, title, time_str) - uhd50_final_title = "[%s] %s [UHD 50fps] - %s%s" % (self.translation(30063), channel, title, time_str) - else: - uhd_final_title = "%s[UHD] - %s%s" % (channel, title, time_str) - uhd50_final_title = "%s[UHD 50fps] - %s%s" % (channel, title, time_str) - - if not drm_lic_url: - self.html2ListItem(uhd_final_title, banner, "", description, time, channel, channel, generateAddonVideoUrl(uhd_streaming_url), None, False, True, uhdContextMenuItems) - self.html2ListItem(uhd50_final_title, banner, "", description, time, channel, channel, generateAddonVideoUrl(uhd50_streaming_url), None, False, True, uhdContextMenuItems) - elif inputstreamAdaptive: - drm_video_url = generateDRMVideoUrl(uhd_streaming_url, drm_lic_url) - self.html2ListItem(uhd_final_title, banner, "", description, time, channel, channel, drm_video_url, None, False, True, uhdContextMenuItems) - drm50_video_url = generateDRMVideoUrl(uhd50_streaming_url, drm_lic_url) - self.html2ListItem(uhd50_final_title, banner, "", description, time, channel, channel, drm50_video_url, None, False, True, uhdContextMenuItems) - - if streaming_url: - contextMenuItems = [] - if inputstreamAdaptive and restart and online: - debugLog("Adding DRM Restart %s" % drm_lic_url) - restart_parameters = {"mode": "liveStreamRestart", "link": link, "lic_url": drm_lic_url} - restart_url = build_kodi_url(restart_parameters) - contextMenuItems.append((self.translation(30063), 'RunPlugin(%s)' % restart_url)) - - else: - final_title = "%s - %s%s" % (channel, title, time_str) - - if not drm_lic_url: - self.html2ListItem(final_title, banner, "", description, time, channel, channel, generateAddonVideoUrl(streaming_url), None, False, True, contextMenuItems) - elif inputstreamAdaptive: - drm_video_url = generateDRMVideoUrl(streaming_url, drm_lic_url) - self.html2ListItem(final_title, banner, "", description, time, channel, channel, drm_video_url, None, False, - True, contextMenuItems) - - def getDRMLicense(self, data): - try: - if 'drm' in data and 'widevineUrl' in data['drm']: - debugLog("Widevine Url found %s" % data['drm']['widevineUrl']) - widevineUrl = data['drm']['widevineUrl'] - token = data['drm']['token'] - brand = data['drm']['brandGuid'] - return "%s?BrandGuid=%s&userToken=%s" % (widevineUrl, brand, token) - except: - debugLog("No License Url found") - - def getLivestreamDRM(self, data_sets): - for data in data_sets: - try: - data = replaceHTMLCodes(data) - data = json.loads(data) - drm_lic = self.getDRMLicense(data) - if drm_lic: - return drm_lic - except Exception as e: - debugLog("Error getting Livestream DRM Keys") - - def liveStreamRestart(self, link, protocol): - try: - xbmcaddon.Addon('inputstream.adaptive') - except RuntimeError: - return - - html = fetchPage({'link': link}) - bitmovinStreamId = self.getLivestreamBitmovinID(html) - stream_info = self.getLivestreamInformation(html) - - if bitmovinStreamId: - title = stream_info['title'] - image = stream_info['image'] - description = stream_info['description'] - duration = stream_info['duration'] - date = stream_info['date'] - channel = stream_info['channel'] - - ApiKey = '2e9f11608ede41f1826488f1e23c4a8d' - response = url_get_request('https://playerapi-restarttv.ors.at/livestreams/%s/sections/?state=active&X-Api-Key=%s' % (bitmovinStreamId, ApiKey)) - try: - charset = response.headers.get_content_charset() - response_raw = response.read().decode(charset) - except AttributeError: - response_raw = response.read().decode('utf-8') - - section = json.loads(response_raw) - if len(section): - section = section[0] - streamingURL = 'https://playerapi-restarttv.ors.at/livestreams/%s/sections/%s/manifests/%s/?startTime=%s&X-Api-Key=%s' % (bitmovinStreamId, section.get('id'), protocol, section.get('metaData').get('timestamp'), ApiKey) - - listItem = createListItem(title, image, description, duration, date, channel, streamingURL, True, False, self.defaultbackdrop, self.pluginhandle) - return streamingURL, listItem - - def getLivestreamUrl(self, data_sets, preferred_quality, strict=False): - fallback = {} - for data in data_sets: - try: - data = replaceHTMLCodes(data) - data = json.loads(data) - if 'playlist' in data: - if 'videos' in data['playlist']: - for video_items in data['playlist']['videos']: - for video_sources in video_items['sources']: - - if video_sources['quality'].lower() == preferred_quality.lower() and video_sources[ - 'protocol'].lower() == "http" and video_sources['delivery'].lower() == 'hls': - return video_sources['src'] - elif video_sources['quality'].lower()[0:3] == preferred_quality.lower() and video_sources[ - 'protocol'].lower() == "http" and video_sources['delivery'].lower() == 'dash': - return video_sources['src'] - elif video_sources['quality'] and video_sources['src'] and video_sources['quality'][0:3] in self.__videoQualities: - debugLog("Adding Video Url %s (%s)" % (video_sources['src'], video_sources['delivery'])) - fallback[video_sources['quality'].lower()[0:3]] = video_sources['src'] - if not strict: - for quality in reversed(self.__videoQualities): - debugLog("Looking for Fallback Quality %s" % quality) - if quality.lower() in fallback: - debugLog("Returning Fallback Stream %s" % quality) - return fallback[quality.lower()] - except Exception as e: - debugLog("Error getting Livestream") - - @staticmethod - def getLivestreamJSON(html, key_check='restart_url'): - container = parseDOM(html.get("content"), name='div', attrs={'class': "player_viewport.*?"}) - if len(container): - data_sets = parseDOM(container[0], name='div', attrs={}, ret="data-jsb") - if len(data_sets): - for data in data_sets: - try: - data = replaceHTMLCodes(data) - data = json.loads(data) - if key_check in data: - return data - except Exception as e: - debugLog("Error getting Livestream JSON for key %s" % key_check) - return False - - def getLivestreamBitmovinID(self, html): - data = self.getLivestreamJSON(html, 'restart_url') - if data: - try: - bitmovin_id = data['restart_url'].replace("https://playerapi-restarttv.ors.at/livestreams/", "").replace("/sections/", "") - return bitmovin_id.split("?")[0] - except Exception as e: - debugLog("Error getting Livestream Bitmovin ID") - - def getLivestreamLicenseData(self, html): - data = self.getLivestreamJSON(html, 'drm') - if data: - try: - return self.getLivestreamDRM(data) - except Exception as e: - debugLog("Error getting Livestream DRM License") - - @staticmethod - def getLivestreamInformation(html): - container = parseDOM(html.get("content"), name='div', attrs={'class': "player_viewport.*?"}) - data_sets = parseDOM(container[0], name='div', attrs={}, ret="data-jsb") - title = "Titel" - image = "" - description = "Beschreibung" - duration = "" - date = "" - channel = "" - - for data in data_sets: - try: - data = replaceHTMLCodes(data) - data = json.loads(data) - - if 'playlist' in data: - time_str = False - time_str_end = False - if 'title' in data['playlist']: - title = data['playlist']['title'] - if 'preview_image_url' in data['playlist']: - image = data['playlist']['preview_image_url'] - if 'livestream_start' in data['playlist']: - date = data['playlist']['livestream_start'] - time_str = datetime.datetime.fromtimestamp(int(date)).strftime('%H:%M') - if 'livestream_end' in data['playlist']: - date = data['playlist']['livestream_end'] - time_str_end = datetime.datetime.fromtimestamp(int(date)).strftime('%H:%M') - if 'videos' in data['playlist']: - if 'description' in data['playlist']['videos']: - description = data['playlist']['videos']['description'] - if time_str and time_str_end: - return {"title": "%s (%s - %s)" % (title, time_str, time_str_end), "image": image, "description": description, "date": date, "duration": duration, "channel": channel} - else: - return {"title": title, "image": image, "description": description, "date": date, "duration": duration, "channel": channel} - except Exception as e: - debugLog("Error getting Livestream Infos") - - # Parses the Topic Overview Page - def getThemen(self): - html = fetchPage({'link': self.__urlTopics}) - html_content = html.get("content") - - content = parseDOM(html_content, name='section', attrs={}) - - for topic in content: - title = parseDOM(topic, name='h3', attrs={'class': 'item_wrapper_headline.subheadline'}) - if title: - title = replaceHTMLCodes(title[0]) - - link = parseDOM(topic, name='a', attrs={'class': 'more.service_link.service_link_more'}, ret="href") - link = replaceHTMLCodes(link[0]) - - image = parseDOM(topic, name='img', ret="src") - image = replaceHTMLCodes(image[0]).replace("width=395", "width=500").replace("height=209.07070707071", "height=265") - - descs = parseDOM(topic, name='h4', attrs={'class': 'item_title'}) - description = "" - for desc in descs: - description += "* %s \n" % replaceHTMLCodes(desc) - - parameters = {"link": link, "mode": "getThemenDetail"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", description, "", "", "", url) - - # Parses the Archive Detail Page - def getArchiveDetail(self, url): - url = unqoute_url(url) - html = fetchPage({'link': url}) - html_content = html.get("content") - - wrapper = parseDOM(html_content, name='main', attrs={'class': 'main'}) - items = parseDOM(wrapper, name='article', attrs={'class': 'b-teaser.*?'}) - - for item in items: - subtitle = parseDOM(item, name='h4', attrs={'class': "profile"}, ret=False) - subtitle = replaceHTMLCodes(subtitle[0]) - - title = parseDOM(item, name='h5', attrs={'class': "teaser-title.*?"}, ret=False) - title = replaceHTMLCodes(title[0]) - - desc = parseDOM(item, name='p', attrs={'class': "description.*?"}, ret=False) - desc = replaceHTMLCodes(desc[0]) - - figure = parseDOM(item, name='figure', attrs={'class': 'teaser-img'}, ret=False) - image = parseDOM(figure, name='img', attrs={}, ret='src') - image = replaceHTMLCodes(image[0]) - - link = parseDOM(item, name='a', ret='href') - link = link[0] - - channel = parseDOM(item, name='p', attrs={'class': "channel"}, ret=False) - if len(channel): - channel = replaceHTMLCodes(channel[0]) - else: - channel = "" - - date = parseDOM(item, name='span', attrs={'class': 'date'}, ret=False) - date = date[0] - - time = parseDOM(item, name='span', attrs={'class': 'time'}, ret=False) - time = time[0] - - desc = self.formatDescription(title, channel, subtitle, desc, date, time) - - parameters = {"link": link, "banner": image, "mode": "openSeries"} - url = build_kodi_url(parameters) - self.html2ListItem(title, image, "", desc, "", "", "", url) - - def getSearchHistory(self): - parameters = {'mode': 'getSearchResults'} - u = build_kodi_url(parameters) - createListItem((self.translation(30007)) + " ...", self.defaultbanner, "", "", "", '', u, False, True, self.defaultbackdrop, self.pluginhandle) - - history = searchHistoryGet() - for str_val in reversed(history): - if str_val.strip() != '': - parameters = {'mode': 'getSearchResults', 'link': str_val.replace(" ", "+")} - u = build_kodi_url(parameters) - createListItem(str_val, self.defaultbanner, "", "", "", '', u, False, True, self.defaultbackdrop, self.pluginhandle) - - @staticmethod - def removeUmlauts(str_val): - return str_val.replace("Ö", "O").replace("ö", "o").replace("Ü", "U").replace("ü", "u").replace("Ä", "A").replace("ä","a") - - def getSearchResults(self, link): - keyboard = self.xbmc.Keyboard(link) - keyboard.doModal() - if keyboard.isConfirmed(): - keyboard_in = keyboard.getText() - if keyboard_in != link: - searchHistoryPush(keyboard_in) - searchurl = "%s?q=%s" % (self.__urlSearch, keyboard_in.replace(" ", "+")) - self.getTeaserList(searchurl, 'b-search-results', 'section') - else: - parameters = {'mode': 'getSearchHistory'} - u = build_kodi_url(parameters) - createListItem((self.translation(30014)) + " ...", self.defaultbanner, "", "", "", '', u, False, True, self.defaultbackdrop, self.pluginhandle) diff --git a/resources/lib/Kodi.py b/resources/lib/Kodi.py new file mode 100644 index 0000000..df1c694 --- /dev/null +++ b/resources/lib/Kodi.py @@ -0,0 +1,423 @@ +import xbmcaddon +from xbmc import PlayList, PLAYLIST_VIDEO, Player, Keyboard, executebuiltin, log, LOGDEBUG +from xbmcgui import ListItem, Dialog, DialogProgress +from xbmcaddon import Addon +from xbmcplugin import addDirectoryItem, endOfDirectory, setContent, setResolvedUrl, addSortMethod, SORT_METHOD_VIDEO_TITLE, SORT_METHOD_DATE +import xbmcvfs +import sys +import os +import time +import inputstreamhelper +from urllib.parse import unquote + +try: + from OrfOn import * +except ModuleNotFoundError: + from resources.lib.OrfOn import * + + +class Kodi: + version_regex = r"plugin:\/\/([^\/]+)" + addon_id = re.search(version_regex, sys.argv[0]).groups()[0] + addon = Addon() + data_folder = xbmcvfs.translatePath("special://profile/addon_data/%s" % addon_id) + + input_stream_protocol = 'mpd' + input_stream_drm_version = 'com.widevine.alpha' + input_stream_mime = 'application/dash+xml' + input_stream_license_contenttype = 'application/octet-stream' + + geo_lock = False + max_cache_age = 60 * 60 * 24 + + def __init__(self, plugin): + self.plugin = plugin + self.init_storage() + self.base_path = self.addon.getAddonInfo('path') + self.resource_path = os.path.join(self.base_path, "resources") + self.use_subtitles = self.addon.getSetting('useSubtitles') == 'true' + self.use_segments = self.addon.getSetting('useSegments') == 'true' + self.show_segments = self.addon.getSetting('showSegments') == 'true' + self.use_timeshift = self.addon.getSetting('useTimeshift') == 'true' + self.hide_audio_description_content = self.addon.getSetting('hideAD') == 'true' + self.hide_sign_language_content = self.addon.getSetting('hideOEGS') == 'true' + self.useragent = self.addon.getSetting('userAgent') + self.pager_limit = int(self.addon.getSetting('pagerLimit')) + self.max_cache_age = int(self.addon.getSetting('maxCacheAge')) * 60 * 60 * 24 + + def init_storage(self): + if not os.path.exists(self.data_folder): + os.makedirs(self.data_folder) + + def translate(self, translation_id): + translation = self.addon.getLocalizedString + return translation(translation_id) + + def get_translation(self, translation_id, fallback, replace=None): + translation = self.translate(translation_id) + if translation: + if replace is not None: + return replace % translation + else: + return translation + return fallback + + def is_geo_locked(self) -> bool: + return self.geo_lock + + def hide_audio_description(self) -> bool: + return self.hide_audio_description_content + + def hide_sign_language(self) -> bool: + return self.hide_sign_language_content + + def hide_accessibility_menu(self) -> bool: + return self.hide_sign_language_content and self.hide_audio_description_content and not self.use_subtitles + + def set_geo_lock(self, lock): + self.geo_lock = lock + + def hide_content(self, item) -> bool: + if self.hide_audio_description_content and item.has_audio_description(): + self.log("Hiding %s because AD content hide is enabled in settings" % item.label()) + return True + if self.hide_sign_language_content and item.has_sign_language(): + self.log("Hiding %s because OEGS content hide is enabled in settings" % item.label()) + return True + if self.geo_lock and item.is_geo_locked(): + self.log("Hiding %s because GEO Lock is active for your ISP" % item.label()) + return True + return False + + def render(self, item): + if not self.hide_content(item): + if item.is_playable(): + list_item = self.render_video(item) + link = item.url() + route = self.plugin.url_for_path(link) + if self.use_segments and self.show_segments and item.has_segments(): + folder = True + else: + folder = False + addDirectoryItem(self.plugin.handle, url=route, listitem=list_item, isFolder=folder) + else: + list_item = self.render_directory(item) + link = item.url() + route = self.plugin.url_for_path(link) + addDirectoryItem(self.plugin.handle, url=route, listitem=list_item, isFolder=True) + + def restart(self, video): + self.log("Running Restart Play Action") + play_item = self.render_video(video) + play_item.setProperty('inputstream.adaptive.play_timeshift_buffer', 'true') + streaming_url = video.get_stream().get('url') + Player().play(streaming_url, play_item) + + def build_stream_url(self, url): + return "%s|User-Agent=%s" % (url, self.useragent) + + def play_url(self, url): + url = self.build_stream_url(unquote(url)) + play_item = ListItem(path=url, offscreen=True) + setResolvedUrl(self.plugin.handle, True, play_item) + + def play(self, videos): + if len(videos) < 1: + Dialog().notification('No Stream available', 'Unable to find a stream for this content', xbmcaddon.Addon().getAddonInfo('icon')) + self.log("Running Play Action") + playlist = PlayList(PLAYLIST_VIDEO) + tracks = [] + for video in videos: + tracks.append(video) + + if len(tracks) > 1: + if self.show_segments: + for track in tracks: + self.render(track) + else: + for track in tracks: + play_item = self.render_video(track) + play_stream = self.build_stream_url(unquote(track.get_stream().get('url'))) + playlist.add(play_stream, play_item) + self.log("Playing Playlist %s from position %d" % (playlist.size(), playlist.getposition())) + else: + self.log("Playing Single Video") + for track in tracks: + play_item = self.render_video(track) + setResolvedUrl(self.plugin.handle, True, play_item) + break + + def render_directory(self, directory) -> ListItem: + title = directory.label() + title2 = directory.label2() + + list_item = ListItem(offscreen=True) + list_item.setContentLookup(False) + list_item.setLabel(title) + list_item.setLabel2(title2) + item_info = self.build_info(directory) + list_item.setInfo(type="Video", infoLabels=item_info) + list_item.setIsFolder(not directory.is_playable()) + list_item.setProperty("IsPlayable", str(directory.is_playable())) + item_art = self.build_art(directory) + list_item.setArt(item_art) + return list_item + + def render_video(self, teaser) -> ListItem: + title = teaser.label() + title2 = teaser.label2() + stream_url = self.build_stream_url(unquote(teaser.url())) + + headers = "User-Agent=%s&Content-Type=%s" % (self.useragent, self.input_stream_license_contenttype) + is_helper = inputstreamhelper.Helper(self.input_stream_protocol, drm=self.input_stream_drm_version) + if is_helper.check_inputstream(): + list_item = ListItem(path=stream_url, offscreen=True) + list_item.setContentLookup(False) + + if teaser.get_stream(): + self.log("Found Stream for Video %s" % teaser.label()) + self.log("Stream: (%s)" % teaser.url()) + stream_data = teaser.get_stream() + list_item.setProperty('inputstream', 'inputstream.adaptive') + list_item.setProperty('inputstream.adaptive.stream_headers', headers) + list_item.setProperty('inputstream.adaptive.manifest_type', self.input_stream_protocol) + + if self.use_subtitles and stream_data.get('subtitle') and stream_data.get('subtitle') is not None: + list_item.setSubtitles([stream_data.get('subtitle')]) + list_item.addStreamInfo('subtitle', {'language': 'deu'}) + + if stream_data['drm']: + self.log("Video %s is DRM protected. Adding DRM relevant parameters" % teaser.label()) + list_item.setMimeType(self.input_stream_mime) + list_item.setProperty('inputstream', 'inputstream.adaptive') + list_item.setProperty('inputstream.adaptive.stream_headers', headers) + list_item.setProperty('inputstream', is_helper.inputstream_addon) + list_item.setProperty('inputstream.adaptive.manifest_type', self.input_stream_protocol) + license_url = "%s?BrandGuid=%s&userToken=%s" % (stream_data.get('drm_widewine_url'), stream_data.get('drm_widewine_brand'), stream_data.get('drm_token')) + list_item.setProperty('inputstream.adaptive.license_type', self.input_stream_drm_version) + list_item.setProperty('inputstream.adaptive.license_key', license_url + '|' + headers + '|R{SSM}|') + else: + self.log("No Stream for Video %s (%s)" % (teaser.label(), teaser.url()), 'error') + + list_item.setLabel(title) + list_item.setLabel2(title2) + item_info = self.build_info(teaser) + + list_item.setInfo(type="Video", infoLabels=item_info) + list_item.setIsFolder(not teaser.is_playable()) + list_item.setProperty("IsPlayable", str(teaser.is_playable())) + video_w, video_h = teaser.get_resolution() + list_item.addStreamInfo('video', {'aspect': '1.78', 'codec': 'h264', 'width': video_w, 'height': video_h, 'duration': teaser.get_duration()}) + list_item.addStreamInfo('audio', {'codec': 'aac', 'language': 'deu', 'channels': 2}) + + item_art = self.build_art(teaser) + list_item.setArt(item_art) + + context_menu = [] + context_menu_items = teaser.get_context_menu() + for context_menu_item in context_menu_items: + context_menu.append(self.build_context_menu(context_menu_item)) + list_item.addContextMenuItems(context_menu, replaceItems=True) + return list_item + elif not teaser.get_stream(): + Dialog().notification('No Stream available', 'Unable to find a stream for %s' % title, xbmcaddon.Addon().getAddonInfo('icon')) + elif not is_helper.check_inputstream(): + Dialog().notification('Inputstream Adaptive not available', 'Install Inputstream Adaptive and Inputstream Helper', xbmcaddon.Addon().getAddonInfo('icon')) + + def build_info(self, item) -> dict: + desc_prefix = self.build_meta_description(item) + if desc_prefix is not None and item.get_description(): + generated_description = desc_prefix + item.get_description() + generated_outline = desc_prefix + self.truncate_string(item.get_description()) + else: + generated_description = item.get_description() + generated_outline = self.truncate_string(item.get_description()) + return { + 'title': item.label(), + 'originaltitle': item.label(), + 'sorttitle': item.label(), + 'tvshowtitle': item.label(), + 'plot': generated_description, + 'plotoutline': generated_outline, + 'genre': item.genre(), + 'tag': item.genre(), + 'aired': item.date(), + 'country': item.country(), + 'year': item.year(), + 'mediatype': item.media_type(), + 'cast': item.get_cast() + } + + def build_art(self, item) -> dict: + return { + 'thumb': item.thumbnail or self.get_media('icon.jpg'), + 'poster': item.poster or self.get_media('poster.jpg'), + 'fanart': item.backdrop or self.get_media('fanart.jpg'), + } + + def build_context_menu(self, item): + route = self.plugin.url_for_path(item.get('url')) + if item.get('type') == 'run': + return item.get('title'), 'RunPlugin(%s)' % route + else: + return item.get('title'), 'Container.Update(%s)' % route + + def list_callback(self, content_type="movies", sort=False) -> None: + if content_type: + setContent(self.plugin.handle, content_type) + if sort: + addSortMethod(int(sys.argv[1]), SORT_METHOD_DATE) + addSortMethod(int(sys.argv[1]), SORT_METHOD_VIDEO_TITLE) + endOfDirectory(self.plugin.handle, True) + + def get_media(self, filename): + return os.path.join(self.resource_path, filename) + + def clear_stored_directories(self, storage_key): + target_file = '%s.json' % storage_key + self.remove_file(target_file) + + def get_stored_directories(self, storage_key): + target_file = '%s.json' % storage_key + self.init_storage() + json_data = self.load_json(target_file) + directories = [] + for json_item in json_data: + directory = Directory(json_item.get('title'), json_item.get('description'), json_item.get('link'), translator=self) + directories.append(directory) + return directories + + def store_directory(self, directory, storage_key): + target_file = '%s.json' % storage_key + self.init_storage() + + json_data = self.load_json(target_file) + directory_json = { + 'title': directory.title, + 'description': directory.description, + 'link': directory.url() + } + + if json_data: + json_data.append(directory_json) + else: + json_data = [directory_json] + self.save_json(json_data, target_file) + + def remove_file(self, file) -> bool: + file = "%s/%s" % (self.data_folder, file) + try: + os.remove(file) + return True + except FileNotFoundError: + self.log("File %s could not be found. Skipping remove action." % file, 'warning') + return False + + def get_cached_file(self, file) -> tuple: + channel_map_age = self.get_file_age(file) + + if self.max_cache_age > channel_map_age >= 0: + self.log("Channel Cache is valid. File age lower than %s seconds (%d seconds)" % (self.max_cache_age, channel_map_age)) + data = self.load_json(file) + if not len(data): + cached = False + else: + cached = True + else: + self.log("Channel Cache is invalid. Reloading because file age larger than %s seconds (%d seconds)" % (self.max_cache_age, channel_map_age)) + cached = False + self.remove_file(file) + data = {} + return data, cached + + def get_file_age(self, file) -> int: + file = "%s/%s" % (self.data_folder, file) + try: + st = os.stat(file) + age_seconds = int(time.time() - st.st_mtime) + self.log("Cache Age %d seconds" % age_seconds) + return age_seconds + except FileNotFoundError: + self.log("File %s could not be found" % file, 'warning') + return -1 + + def save_json(self, json_data, file) -> bool: + file = "%s/%s" % (self.data_folder, file) + try: + with open(file, 'w') as data_file: + data_file.write(json.dumps(json_data)) + data_file.close() + return True + except TypeError: + self.log("Json file format for %s was invalid. Removing file ..." % file, 'warning') + os.remove(file) + return False + except PermissionError: + self.log("Permission to File %s was denied" % file, 'warning') + return False + + def load_json(self, file) -> list: + file = "%s/%s" % (self.data_folder, file) + self.log("Loading JSON from %s" % file) + try: + with open(file, 'r') as data_file: + data = json.load(data_file) + return data + except FileNotFoundError: + self.log("File %s could not be found" % file, 'warning') + return [] + + @staticmethod + def log(msg, msg_type='info'): + log("[%s][ORFON][KODI] %s" % (msg_type.upper(), msg), LOGDEBUG) + + @staticmethod + def execute(command): + executebuiltin(command) + + @staticmethod + def select_dialog(title, items): + select_dialog = Dialog() + selected = select_dialog.select(title, items) + if selected != -1: + return selected + return False + + @staticmethod + def get_progress_dialog(title, description=""): + progress = DialogProgress() + progress.create(title, description) + return progress + + @staticmethod + def build_meta_description(item): + desc = "" + meta_desc = item.get_meta_description() + for label in meta_desc: + desc += "\n[COLOR blue][LIGHT]%s[/LIGHT][/COLOR] %s" % (label, meta_desc[label]) + if desc != "": + desc += "\n\n" + return desc + + @staticmethod + def truncate_string(str_value, max_len=400) -> str: + if str_value: + return str_value[:max_len] + (str_value[max_len:] and ' ...') + + @staticmethod + def build_url(url, args) -> str: + arg_str = "" + for arg in args: + if not arg_str: + arg_str = "?%s=%s" % (arg, args.get(arg)[0]) + else: + arg_str += "&%s=%s" % (arg, args.get(arg)[0]) + return "%s%s" % (url, arg_str) + + @staticmethod + def get_keyboard_input() -> str: + keyboard = Keyboard() + keyboard.doModal() + if keyboard.isConfirmed(): + return keyboard.getText() + return "" diff --git a/resources/lib/OrfOn.py b/resources/lib/OrfOn.py new file mode 100644 index 0000000..88c1551 --- /dev/null +++ b/resources/lib/OrfOn.py @@ -0,0 +1,689 @@ +import json +import re +from datetime import date, timedelta +try: + from Directory import * +except ModuleNotFoundError: + from resources.lib.Directory import * + +from urllib.request import Request as urllib_Request +from urllib.request import urlopen as urllib_urlopen +from urllib.error import HTTPError as urllib_HTTPError +from urllib.error import URLError as urllib_URLError +from urllib.parse import urlparse, urlencode, quote_plus + + +class OrfOn: + useragent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' + api_auth = 'Basic b3JmX29uX3Y0MzpqRlJzYk5QRmlQU3h1d25MYllEZkNMVU41WU5aMjhtdA==' + api_version = '4.3' + api_pager_limit = 50 + geo_lock_url = 'https://apasfiis.sf.apa.at/admin/proxycheck/' + api_base = 'https://api-tvthek.orf.at/api/v%s' % api_version + + api_endpoint_settings = '/settings' + api_endpoint_home = '/page/start' + api_endpoint_recently_added = '/page/startpage/newest' + api_endpoint_schedule = '/schedule/%s' + api_endpoint_shows = '/profiles?limit=%d' + api_endpoint_shows_letter = '/profiles/lettergroup/%s' + api_endpoint_history = '/history' + api_endpoint_search = '/search/%s' + api_endpoint_search_partial = '/search-partial/%s/%s?limit=%d' + api_endpoint_livestreams = '/livestreams' + api_endpoint_livestream = '/livestream/%s' + api_endpoint_timeshift = '/timeshift/channel/%d/sources' + api_endpoint_channels = '/channels?limit=200' + api_endpoint_channel_livestream = '/livestreams/channel/%s' + + channel_map = False + settings = False + + use_segments = True + + supported_delivery = 'dash' + quality_definitions = { + 'UHD': { + 'name': 'UHD', + 'width': 3840, + 'height': 2160, + }, + 'QXB': { + 'name': 'Adaptive', + 'width': 1280, + 'height': 720, + }, + 'QXA': { + 'name': 'Adaptive', + 'width': 1280, + 'height': 720, + } + } + drm_widewine_brand = '13f2e056-53fe-4469-ba6d-999970dbe549' + drm_widewine_brand_ts = '319f2ca9-0d0c-4e5b-bb70-72efae61dad7' + + def __init__(self, channel_map=None, settings=None, useragent=False, kodi_worker=None): + self.kodi_worker = kodi_worker + if useragent: + self.useragent = useragent + + self.log("Loading ORF On API") + if not channel_map: + self.channel_map = self.get_channel_map() + else: + self.channel_map = channel_map + + if not settings: + self.settings = self.get_settings() + else: + self.settings = settings + + self.type_map = { + 'highlights': self.translate_string(30115, 'Highlights'), + 'genres': self.translate_string(30116, 'Categories'), + 'orflive': self.translate_string(30113, 'Livestream') + } + + def is_geo_locked(self): + headers = self.get_headers() + url = self.geo_lock_url + try: + self.log("Loading %s" % url) + request = urllib_urlopen(urllib_Request(url, headers=headers)) + except urllib_HTTPError as error: + self.log('%s (%s)' % (error, url), 'error') + return False + except urllib_URLError as error: + self.log('%s (%s)' % (error, url), 'error') + return False + + try: + xml_data = request.read() + pattern = r'isallowed="(\w+)"' + match = re.search(pattern, xml_data.decode('utf-8')) + if match: + is_allowed = match.group(1) + return is_allowed.lower() != 'true' + except re.error as error: + self.log('%s (%s)' % (error, url), 'error') + return False + + def translate_string(self, translation_id, fallback, replace=None): + if self.kodi_worker: + return self.kodi_worker.get_translation(translation_id, fallback, replace) + else: + return fallback + + def set_pager_limit(self, limit): + self.api_pager_limit = limit + + def set_segments_behaviour(self, use_segments): + self.use_segments = use_segments + + def get_auth_headers(self) -> dict: + headers = self.get_headers() + headers.update({'Authorization': self.api_auth}) + return headers + + def get_headers(self) -> dict: + headers = {} + headers.update({'User-Agent': self.useragent}) + return headers + + def get_widevine_url(self) -> str: + return self.settings.get('drm_endpoints').get('widevine') + + def get_widevine_brand(self, timeshift=False) -> str: + if timeshift: + return self.drm_widewine_brand_ts + return self.drm_widewine_brand + + def get_replay_days(self) -> int: + return int(self.settings.get('max_viewing_time')) + + def auth_request(self, url): + headers = self.get_auth_headers() + try: + url = self.api_base + url + self.log("Loading %s" % url) + request = urllib_urlopen(urllib_Request(url, headers=headers)) + except urllib_HTTPError as error: + self.log('%s (%s)' % (error, url), 'error') + return {} + data = request.read() + return json.loads(data) + + def get_main_menu(self) -> list: + items = [Directory(self.translate_string(30144, 'Recently added'), '', '/recent', '', 'new', translator=self.kodi_worker), + Directory(self.translate_string(30110, 'Frontpage'), '', self.api_endpoint_home, '', 'home', translator=self.kodi_worker), + Directory(self.translate_string(30111, 'Schedule'), '', '/schedule', '', 'schedule', translator=self.kodi_worker), + Directory(self.translate_string(30112, 'Shows'), '', self.api_endpoint_shows % self.api_pager_limit, '', 'shows', translator=self.kodi_worker), + Directory(self.translate_string(30113, 'Livestream'), '', self.api_endpoint_livestreams, '', 'live', translator=self.kodi_worker), + Directory(self.translate_string(30114, 'Search'), '', '/search', '', 'search', translator=self.kodi_worker)] + items += self.get_frontpage(lanes=False) + return items + + def get_sign_language_menu(self): + return Directory(self.translate_string(30145, 'Broadcasts using sign language'), '', '/episodes/sign-language', '', 'oegscontent', translator=self.kodi_worker) + + def get_audio_description_menu(self): + return Directory(self.translate_string(30146, 'Broadcasts with audio description'), '', '/episodes/visually-impaired', '', 'adcontent', translator=self.kodi_worker) + + def get_subtitles_menu(self): + return Directory(self.translate_string(30148, 'Broadcasts with subtitles'), '', '/episodes/subtitles', '', 'adcontent', translator=self.kodi_worker) + + def get_settings(self) -> dict: + # Return cached settings + if self.settings: + self.log("Found cached settings") + return self.settings + + self.log("Fetching fresh settings") + url = self.api_endpoint_settings + data = self.auth_request(url) + return data + + def get_channel_map(self) -> dict: + # Return cached channel map + if self.channel_map: + self.log("Found cached channel map") + return self.channel_map + + self.log("Fetching new channel map") + url = self.api_endpoint_channels + data = self.auth_request(url) + channel_map = {} + for channel in data['_embedded']['items']: + name = channel['name'] + channel_id = channel['id'] + reel = channel['reel'] + if 'color_logo' in channel['_links']: + media_url = self.clean_url(channel['_links']['color_logo']['href']) + logo_data = self.auth_request(media_url) + color_logo = logo_data['public_urls']['tiny']['url'] + else: + color_logo = "" + if 'black_and_white_logo' in channel['_links']: + media_url = self.clean_url(channel['_links']['black_and_white_logo']['href']) + logo_data = self.auth_request(media_url) + logo = logo_data['public_urls']['tiny']['url'] + else: + logo = "" + channel_map[channel_id] = { + 'name': name, + 'color_logo': color_logo, + 'logo': logo, + 'reel': reel + } + return channel_map + + def get_last_uploads(self, last_upload_range=12): + current_date = datetime.now() + current_delta = (current_date - timedelta(hours=last_upload_range)) + + today_filter = current_date.strftime("%Y-%m-%d") + yesterday_filter = current_delta.strftime("%Y-%m-%d") + + recently_added = [] + if current_delta.strftime("%d.%m.%Y") != current_date.strftime("%d.%m.%Y"): + self.log("Also fetching videos from yesterday") + request_url = self.api_endpoint_schedule % yesterday_filter + more_uploads = self.get_url(request_url) + for item in more_uploads: + released = item.date() + released_datetime = datetime.fromisoformat(released).replace(tzinfo=None) + if released_datetime > current_delta: + recently_added.append(item) + request_url = self.api_endpoint_schedule % today_filter + uploads = self.get_url(request_url) + for item in uploads: + released = item.date() + released_datetime = datetime.fromisoformat(released).replace(tzinfo=None) + if released_datetime > current_delta: + recently_added.append(item) + return reversed(recently_added) + + def get_schedule_dates(self) -> tuple: + replay_days = self.get_replay_days() + current_date = date.today() + day_items = [] + filter_items = [] + for day in range(replay_days): + days_before = (current_date - timedelta(days=day)) + isodate = days_before.isoformat() + prettydate = days_before.strftime("%A, %d.%m.%Y") + day_items.append(prettydate) + filter_items.append(isodate) + return day_items, filter_items + + def get_frontpage(self, lanes=True) -> list: + url = self.api_endpoint_home + data = self.auth_request(url) + items = self.render(data) + if not lanes: + for item in items[:]: + if item.type() == 'lane': + items.remove(item) + else: + for item in items[:]: + if item.type() != 'lane': + items.remove(item) + return items + + def get_live_schedule(self) -> list: + url = self.api_endpoint_livestreams + data = self.auth_request(url) + streams = [] + for channel in data: + channel_streams = data[channel] + for stream_item in channel_streams['items']: + stream_dir = self.build(stream_item) + stream_dir.set_channel(channel) + if stream_dir and stream_dir.livestream_active(): + streams.append(stream_dir) + return streams + + def get_pvr(self, channel_reel) -> Directory: + channel_infos = self.get_channel_map() + for channel_id in channel_infos: + if channel_infos[channel_id].get('reel') == channel_reel: + request_url = self.api_endpoint_channel_livestream % channel_id + data = self.auth_request(request_url) + if data and '_embedded' in data and 'items' in data['_embedded']: + for livestream_item in data['_embedded']['items']: + stream_dir = self.build(livestream_item) + stream_dir.set_channel(channel_reel) + if stream_dir: + stream_detail_url = stream_dir.url() + stream_detail_data = self.load_stream_data(stream_detail_url) + if stream_detail_data and len(stream_detail_data): + pvr_stream = stream_detail_data[0] + pvr_stream.set_pvr_mode() + return pvr_stream + + def get_search(self, query) -> list: + request_url = self.api_endpoint_search % quote_plus(query) + data = self.auth_request(request_url) + results = [] + if 'search' in data: + if 'episodes' in data['search']: + if data['search']['episodes']['total'] > 0: + title = ' - ' + self.translate_string(30124, 'All episode results') + ' (%d) -' % data['search']['episodes']['total'] + desc = "" + link = self.api_endpoint_search_partial % ('episodes', query, self.api_pager_limit) + results.append(Directory(title, desc, link)) + + if 'segments' in data['search']: + if data['search']['segments']['total'] > 0: + title = ' - ' + self.translate_string(30125, 'All chapter results') + ' (%d) -' % data['search']['segments']['total'] + desc = "" + link = self.api_endpoint_search_partial % ('segments', query, self.api_pager_limit) + results.append(Directory(title, desc, link)) + + if 'history' in data['search']: + if data['search']['history']['total'] > 0: + title = ' - ' + self.translate_string(30126, 'All history results') + ' (%d) -' % data['search']['history']['total'] + desc = "" + link = self.api_endpoint_search_partial % ('history', query, self.api_pager_limit) + results.append(Directory(title, desc, link)) + + if 'suggestions' in data: + if 'episodes' in data['suggestions']: + for episode in data['suggestions']['episodes']: + results.append(self.build(episode)) + if 'segments' in data['suggestions']: + for segment in data['suggestions']['segments']: + results.append(self.build(segment)) + if 'history' in data['suggestions']: + for history in data['suggestions']['history']: + results.append(self.build(history)) + return results + + def get_search_partial(self, section, query, args): + request_url = self.api_endpoint_search_partial % (section, quote_plus(query), self.api_pager_limit) + if args.get('page'): + request_url += "&page=%d" % int(args.get('page')[0]) + data = self.auth_request(request_url) + results = [] + if data and 'items' in data: + for item in data['items']: + results.append(self.build(item)) + if 'next' in data and data['next'] and data['next'] != "": + next_page_url = self.clean_url(data['next']) + results.append(Directory(self.translate_string(30127, 'Next page', '[COLOR blue][B]%s[/B][/COLOR]'), '', next_page_url, '', 'pager')) + return results + + def get_url(self, url) -> list: + data = self.auth_request(url) + return self.render(data) + + def get_listing(self, item) -> list: + url = item.url() + data = self.auth_request(url) + return self.render(data) + + def get_livestream(self, livestream_id) -> Directory: + url = self.api_endpoint_livestream % livestream_id + data = self.auth_request(url) + return self.build(data) + + def get_related(self, episodeid) -> list: + episode_details = self.get_url('/episode/%s' % episodeid) + for episode_detail in episode_details: + episode_source = episode_detail.get_source() + if 'profile' in episode_source.get('_links'): + profile_url = self.clean_url(episode_source.get('_links').get('profile').get('href')) + profile_details = self.get_url(profile_url) + return profile_details + + def get_timeshift_stream_url(self, item) -> str: + if '_embedded' in item.source and 'channel' in item.source['_embedded']: + channel_id = item.source['_embedded']['channel']['id'] + timeshift_url = self.api_endpoint_timeshift % channel_id + timeshift_data = self.auth_request(timeshift_url) + if timeshift_data and 'sources' in timeshift_data and self.supported_delivery in timeshift_data['sources']: + source = timeshift_data['sources'][self.supported_delivery] + source['drm_token'] = timeshift_data['drm_token'] + return source + + def get_restart_stream_url(self, item) -> str: + timeshift_sources = self.get_timeshift_stream_url(item) + if item.has_timeshift() and timeshift_sources: + start_time = item.get_start_time_iso() + return "%s?begin=%s" % (timeshift_sources['src'], start_time) + + def get_restart_stream(self, item) -> Directory: + source = self.get_timeshift_stream_url(item) + start_time = item.get_start_time_iso() + item.set_stream({ + 'url': "%s&begin=%s" % (source['src'], start_time), + 'drm': source['is_drm_protected'], + 'drm_token': source['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(True) + }) + return item + + def get_subtitle_url(self, playitem, subtitle_type='srt'): + if '_links' in playitem and 'subtitle' in playitem['_links']: + subtitle_url = self.clean_url(playitem['_links']['subtitle']['href']) + data = self.auth_request(subtitle_url) + if data and '%s_url' % subtitle_type in data: + return data['%s_url' % subtitle_type] + + def load_stream_data(self, url) -> list: + self.log("Loading Stream Details from %s" % url) + data = self.auth_request(url) + + playlist = [] + if '_embedded' in data and 'items' in data['_embedded']: + for playitem in data['_embedded']['items']: + source = self.get_preferred_source(playitem) + if source: + video = self.build_video(playitem, source['src']) + video.set_stream({ + 'url': source['src'], + 'drm': source['is_drm_protected'], + 'drm_token': playitem['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(), + 'subtitle': self.get_subtitle_url(playitem, 'srt') + }) + playlist.append(video) + elif 'segments' in playitem.get('_embedded'): + for segment in playitem.get('_embedded').get('segments'): + source = self.get_preferred_source(segment) + if source: + video = self.build_video(segment, source['src']) + video.set_stream({ + 'url': source['src'], + 'drm': source['is_drm_protected'], + 'drm_token': segment['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(), + 'subtitle': self.get_subtitle_url(segment, 'srt') + }) + playlist.append(video) + elif '_embedded' in data and 'item' in data['_embedded']: + item = data['_embedded']['item'] + source = self.get_preferred_source(item) + if not source: + self.log("No video available yet.") + return [] + video = self.build_video(item, source['src']) + video.set_stream({ + 'url': source['src'], + 'drm': source['is_drm_protected'], + 'drm_token': item['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(), + 'subtitle': self.get_subtitle_url(item, 'srt') + }) + playlist.append(video) + elif 'sources' in data: + source = self.get_preferred_source(data) + if not source: + self.log("No video available yet.") + return [] + video = self.build_video(data, source['src']) + if self.kodi_worker.use_timeshift and '_embedded' in data and 'channel' in data['_embedded'] and data['timeshift_available_livestream']: + source = self.get_timeshift_stream_url(video) + start_time = video.get_start_time_iso() + ts_url = "%s&begin=%s" % (source['src'], start_time) + video.set_url(ts_url) + video.set_stream({ + 'url': ts_url, + 'drm': source['is_drm_protected'], + 'drm_token': source['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(True), + 'subtitle': self.get_subtitle_url(data, 'srt') + }) + else: + video.set_stream({ + 'url': source['src'], + 'drm': source['is_drm_protected'], + 'drm_token': data['drm_token'], + 'drm_widewine_url': self.get_widevine_url(), + 'drm_widewine_brand': self.get_widevine_brand(), + 'subtitle': self.get_subtitle_url(data, 'srt') + }) + playlist.append(video) + return playlist + + def get_preferred_source(self, item): + if self.supported_delivery in item['sources']: + for source in item['sources'][self.supported_delivery]: + for quality in self.quality_definitions: + if quality in source['quality_key']: + self.log("Found Stream %s" % self.quality_definitions[quality]['name']) + return source + + def render(self, data) -> list: + content = [] + if isinstance(data, list): + for item in data: + result = self.build(item) + if result: + content.append(result) + + elif 'page' in data and '_items' in data: + item = {} + for item in data['_items']: + result = self.build(item) + if result: + content.append(result) + if 'next' in item['_links']: + next_page_url = self.clean_url(item['_links']['next']['href']) + content.append(Directory(self.translate_string(30127, 'Next page', '[COLOR blue][B]%s[/B][/COLOR]'), '', next_page_url, '', 'pager')) + + elif 'page' in data and '_embedded' in data and 'items' in data['_embedded']: + for item in data['_embedded']['items']: + result = self.build(item) + if result: + content.append(result) + + if 'next' in data['_links']: + next_page_url = self.clean_url(data['_links']['next']['href']) + content.append(Directory(self.translate_string(30127, 'Next page', '[COLOR blue][B]%s[/B][/COLOR]'), '', next_page_url, '', 'pager')) + + elif 'history_highlights' in data: + for item in data['history_highlights']: + result = self.build(item) + if result: + content.append(result) + for item in data['history_items']: + result = self.build(item) + if result: + content.append(result) + + elif 'timeShift' in data: + for item in data['timeShift']: + result = self.build(data['timeShift'][item]) + if result: + content.append(result) + + elif 'children_count' in data: + if data['children_count'] > 0: + for item in data['children']: + result = self.build(item) + if result: + content.append(result) + else: + for item in data['video_items']['_items']: + result = self.build(item) + if result: + content.append(result) + elif '_links' in data and 'episodes' in data['_links']: + episode_url = self.clean_url(data['_links']['episodes']['href']) + return self.get_url(episode_url) + elif isinstance(data, dict) and 'video_type' in data: + result = self.build(data) + if result: + content.append(result) + else: + self.log("Unknown Render Type", 'error') + self.print_obj(data) + + return content + + def build(self, item) -> Directory: + if '_embedded' in item and 'video_item' in item['_embedded']: + video_item = item['_embedded']['video_item']['_embedded']['item'] + link = item['_embedded']['video_item']['_links']['self']['href'] + return self.build_video(video_item, link) + elif 'sources' in item and 'segments' in item['_links']: + link = item['_links']['segments']['href'] + return self.build_video(item, link) + elif 'sources' in item and 'playlist' in item['_links']: + link = item['_links']['playlist']['href'] + return self.build_video(item, link) + elif 'id' in item and 'type' in item: + return self.build_directory(item) + elif 'id' in item and 'videos' in item: + return self.build_directory(item) + elif 'video_type' in item: + video_item = item + link = item['_links']['self']['href'] + return self.build_video(video_item, link) + else: + self.log("Unknown Type", 'error') + self.print_obj(item) + + def build_directory(self, item) -> Directory: + self.log("Building Directory %s (%s)" % (item['title'], item['id'])) + banner, backdrop, poster = self.get_images(item) + item['channel_meta'] = self.channel_map + item_id = item['id'] + if 'type' in item: + item_type = item['type'] + else: + item_type = 'generic' + + if 'description' in item and item['description'] is not None and item['description'] != "": + description = item['description'] + elif 'share_subject' in item: + description = item['share_subject'] + elif 'episode_title' in item: + description = item['episode_title'] + else: + description = "" + + if 'self' in item['_links'] and 'href' in item['_links']['self']: + link = self.clean_url(item['_links']['self']['href']) + elif '_self' in item['_links'] and isinstance(item['_links']['_self'], str): + link = self.clean_url(item['_links']['_self']) + else: + link = self.clean_url(item['_links']['self']) + + if item_type == 'genre': + link = "%s/profiles?limit=%d" % (link, self.api_pager_limit) + return Directory(item['title'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif item_id == 'lane': + return Directory(item['title'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif item_id == 'highlights': + return Directory(self.type_map['highlights'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif item_id == 'genres': + return Directory(self.type_map['genres'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif item_id == 'orflive': + return Directory(self.type_map['orflive'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif 'title' in item and item['title'] and 'type' in item: + return Directory(item['title'], description, link, item['id'], item['type'], banner, backdrop, poster, item, translator=self.kodi_worker) + elif 'title' in item and item['title'] and 'children_count' in item: + return Directory(item['title'], description, link, item['id'], 'directory', banner, backdrop, poster, item, translator=self.kodi_worker) + + def build_video(self, item, link) -> Directory: + self.log("Building Video %s (%s)" % (item['title'], item['id'])) + title = item['title'] + link = self.clean_url(link) + + # Try to get the segements if available and activated for the api. + if self.use_segments: + if 'segments_complete' in item and 'video_type' in item and item['video_type'] == 'episode' and '/segments' not in link and 'episode' in link: + self.log("Found video with segments.") + link = self.clean_url(link + "/segments") + else: + if 'episode' in link and link.endswith('/segments'): + link = link.replace('/segments', '') + + if 'description' in item and item['description'] is not None and item['description'] != "": + description = item['description'] + elif 'share_subject' in item: + description = item['share_subject'] + elif 'episode_title' in item: + description = item['episode_title'] + else: + description = "" + video_type = item['video_type'] + video_id = item['id'] + banner, backdrop, poster = self.get_images(item) + item['channel_meta'] = self.channel_map + self.log("Video Link %s" % link) + return Directory(title, description, link, video_id, video_type, banner, backdrop, poster, item, translator=self.kodi_worker) + + def clean_url(self, url): + return url.replace(self.api_base, "") + + def get_images(self, item) -> tuple: + try: + if '_embedded' in item: + banner = item['_embedded']['image']['public_urls']['highlight_teaser']['url'] + backdrop = item['_embedded']['image']['public_urls']['reference']['url'] + if 'image2x3_with_logo' in item['_embedded'] and '_default_' not in item['_embedded']['image2x3_with_logo']['public_urls']['highlight_teaser']['url']: + poster = item['_embedded']['image2x3_with_logo']['public_urls']['highlight_teaser']['url'] + elif '_default_' not in item['_embedded']['image2x3']['public_urls']['highlight_teaser']['url']: + poster = item['_embedded']['image2x3']['public_urls']['highlight_teaser']['url'] + else: + poster = banner + return banner, backdrop, poster + except IndexError: + self.log("No images found for %s (%s)" % (item['title'], item['id']), 'warning') + except KeyError: + self.log("No images found for %s (%s)" % (item['title'], item['id']), 'warning') + return "", "", "" + + def log(self, msg, msg_type='info'): + self.kodi_worker.log("[%s][ORFON][API] %s" % (msg_type.upper(), msg)) + + def print_obj(self, obj): + self.log(json.dumps(obj, indent=4)) diff --git a/resources/lib/Scraper.py b/resources/lib/Scraper.py deleted file mode 100644 index 7ee0f4a..0000000 --- a/resources/lib/Scraper.py +++ /dev/null @@ -1,45 +0,0 @@ -import abc - - -class Scraper(object): - __metaclass__ = abc.ABCMeta - - @abc.abstractmethod - def getCategories(self): - pass - - @abc.abstractmethod - def getHighlights(self): - pass - - @abc.abstractmethod - def getLiveStreams(self): - pass - - @abc.abstractmethod - def getMostViewed(self): - pass - - @abc.abstractmethod - def getNewest(self): - pass - - @abc.abstractmethod - def getThemen(self): - pass - - @abc.abstractmethod - def getTips(self): - pass - - @abc.abstractmethod - def getSchedule(self): - pass - - @abc.abstractmethod - def getArchiv(self): - pass - - @abc.abstractmethod - def getLivestreamByChannel(self, channel): - pass diff --git a/resources/lib/ServiceApi.py b/resources/lib/ServiceApi.py deleted file mode 100644 index 5bdf0d8..0000000 --- a/resources/lib/ServiceApi.py +++ /dev/null @@ -1,551 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import datetime -import time -import sys -import re - -PY3 = sys.version_info.major >=3 -if PY3: - from urllib.error import HTTPError -else: - from urllib2 import HTTPError - -from .Base import * -from .Scraper import * - - -class serviceAPI(Scraper): - __urlBase = 'https://api-tvthek.orf.at/api/v3/' - __urlBaseV4 = 'https://api-tvthek.orf.at/api/v4.2/' - __urlLive = 'livestreams/24hours?limit=20' - __urlLiveChannels = 'livestreams' - __urlMostViewed = 'page/startpage' - __urlNewest = 'page/startpage/newest' - __urlSearch = __urlBase + 'search/%s?limit=1000' - __urlShows = 'profiles?limit=1000' - __urlTips = 'page/startpage/tips' - __urlTopics = 'topics/overview?limit=1000' - __urlChannel = 'channel/' - __urlDRMLic = 'https://drm.ors.at/acquire-license/widevine' - __brandIdDRM = '13f2e056-53fe-4469-ba6d-999970dbe549' - __bundeslandMap = { - 'orf2b': 'Burgenland', - 'orf2stmk': 'Steiermark', - 'orf2w': 'Wien', - 'orf2ooe': 'Oberösterreich', - 'orf2k': 'Kärnten', - 'orf2n': 'Niederösterreich', - 'orf2s': 'Salzburg', - 'orf2v': 'Vorarlberg', - 'orf2t': 'Tirol', - } - __channelMap = { - 'orf1': 'ORF 1', - 'orf2': 'ORF 2', - 'orf3': 'ORF III', - 'orfs': 'ORF Sport+', - 'live_special': 'Special' - } - - serviceAPIEpisode = 'episode/%s' - serviceAPIDate = 'schedule/%s?limit=1000' - serviceAPIDateFrom = 'schedule/%s/%d?limit=1000' - serviceAPIProgram = 'profile/%s/episodes' - servieAPITopic = 'topic/%s' - serviceAPITrailers = 'page/preview?limit=100' - serviceAPIHighlights = 'page/startpage' - - httpauth = 'cHNfYW5kcm9pZF92M19uZXc6MDY1MmU0NjZkMTk5MGQxZmRmNDBkYTA4ZTc5MzNlMDY==' - - def __init__(self, xbmc, settings, pluginhandle, quality, protocol, delivery, defaultbanner, defaultbackdrop, usePlayAllPlaylist): - self.translation = settings.getLocalizedString - self.xbmc = xbmc - self.videoQuality = quality - self.videoDelivery = delivery - self.videoProtocol = protocol - self.pluginhandle = pluginhandle - self.defaultbanner = defaultbanner - self.defaultbackdrop = defaultbackdrop - self.usePlayAllPlaylist = usePlayAllPlaylist - debugLog('ServiceAPI - Init done', xbmc.LOGDEBUG) - - def getLivestreamByChannel(self, channel): - response = self.__makeRequestV4(self.__urlLiveChannels) - response_raw = response.read().decode('UTF-8') - channels = json.loads(response_raw) - - live_link = False - for result in channels: - if channel in self.__bundeslandMap: - channel_items = channels[result].get('items') - for channel_item in channel_items: - if channel_item.get('title') == "%s heute" % self.__bundeslandMap[channel]: - live_link = channel_item.get('_links').get('self').get('href') - if result == channel or channel in self.__bundeslandMap and result == channel[0:4] and not live_link: - live_link = channels[result].get('items')[0].get('_links').get('self').get('href') - - if live_link: - response = url_get_request(live_link, self.httpauth) - response_raw = response.read().decode('UTF-8') - live_json = json.loads(response_raw) - if live_json.get('is_drm_protected'): - video_url = self.JSONStreamingDrmURL(live_json) - uhd_25_video_url = self.JSONStreamingDrmURL(live_json, 'uhdbrowser') - if uhd_25_video_url: - video_url = uhd_25_video_url; - uhd_50_video_url = self.JSONStreamingDrmURL(live_json, 'uhdsmarttv') - if uhd_50_video_url: - video_url = uhd_50_video_url - license_url = self.JSONLicenseDrmURL(live_json) - return {'title': live_json.get('title'), 'description': live_json.get('share_subject'), 'url': video_url,'license': license_url} - else: - video_url = self.JSONStreamingURL(live_json.get('sources')) - return {'title': live_json.get('title'), 'description': live_json.get('share_subject'), 'url': video_url} - - def getHighlights(self): - try: - response = self.__makeRequest(self.serviceAPIHighlights) - responseCode = response.getcode() - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for result in json.loads(response.read().decode('UTF-8')).get('highlight_teasers'): - if result.get('target').get('model') == 'Segment' or result.get('target').get('model') == 'Episode': - self.JSONSegment2ListItem(result.get('target')) - - def getMostViewed(self): - try: - response = self.__makeRequest(self.__urlMostViewed) - responseCode = response.getcode() - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for result in json.loads(response.read().decode('UTF-8')).get('most_viewed_segments'): - if result.get('model') == 'Segment': - self.JSONSegment2ListItem(result) - - def getNewest(self): - self.getTableResults(self.__urlNewest) - - def getTips(self): - self.getTableResults(self.__urlTips) - - def getFocus(self): - debugLog('"In Focus" not available', level=xbmc.LOGDEBUG) - - def getTableResults(self, urlAPI): - try: - response = self.__makeRequest(urlAPI) - responseCode = response.getcode() - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for result in json.loads(response.read().decode('UTF-8')): - if result.get('model') == 'Episode': - self.__JSONEpisode2ListItem(result) - elif result.get('model') == 'Tip': - self.__JSONVideoItem2ListItem(result.get('_embedded').get('video_item')) - - else: - debugLog('ServiceAPI not available for %s ... switch back to HTML Parsing in the Addon Settings' % urlAPI, level=xbmc.LOGDEBUG) - showDialog(self.translation(30045).encode('UTF-8'), self.translation(30046).encode('UTF-8')) - - # Useful Methods for JSON Parsing - def JSONSegment2ListItem(self, JSONSegment): - if JSONSegment.get('killdate') is not None and time.strptime(JSONSegment.get('killdate')[0:19], '%Y-%m-%dT%H:%M:%S') < time.localtime(): - return - title = JSONSegment.get('title').encode('UTF-8') - image = self.JSONImage(JSONSegment) - description = JSONSegment.get('description') - duration = JSONSegment.get('duration_seconds') - if JSONSegment.get('episode_date'): - date = time.strptime(JSONSegment.get('episode_date')[0:19], '%Y-%m-%dT%H:%M:%S') - elif JSONSegment.get('date'): - date = time.strptime(JSONSegment.get('date')[0:19], '%Y-%m-%dT%H:%M:%S') - else: - date = "" - streamingURL = self.JSONStreamingURL(JSONSegment.get('sources')) - if JSONSegment.get('playlist').get('subtitles'): - subtitles = [x.get('src') for x in JSONSegment.get('playlist').get('subtitles')] - else: - subtitles = [] - return [streamingURL, createListItem(title, image, description, duration, time.strftime('%Y-%m-%d', date), '', streamingURL, True, False, self.defaultbackdrop, self.pluginhandle, subtitles)] - - @staticmethod - def JSONImage(jsonImages, name='image_full'): - if jsonImages.get('playlist'): - return jsonImages.get('playlist').get('preview_image_url') - return "" - - def JSONStreamingURL(self, jsonVideos): - source = None - if jsonVideos.get('progressive_download') is not None: - for streamingUrl in jsonVideos.get('progressive_download'): - if streamingUrl.get('quality_key') == self.videoQuality: - return generateAddonVideoUrl(streamingUrl.get('src')) - source = streamingUrl.get('src') - - for streamingUrl in jsonVideos.get('hls'): - if streamingUrl.get('quality_key') == self.videoQuality: - # Remove Get Parameters because InputStream Adaptive cant handle it. - source = re.sub(r"\?[\S]+", '', streamingUrl.get('src'), 0) - return generateAddonVideoUrl(source) - source = re.sub(r"\?[\S]+", '', streamingUrl.get('src'), 0) - if source is not None: - return generateAddonVideoUrl(source) - else: - showDialog(self.translation(30014).encode('UTF-8'), self.translation(30050).encode('UTF-8')) - return - - def JSONLicenseDrmURL(self, jsonData): - if jsonData.get('drm_token') is not None: - token = jsonData.get('drm_token') - license_url = "%s?BrandGuid=%s&userToken=%s" % (self.__urlDRMLic, self.__brandIdDRM, token) - debugLog("DRM License Url %s" % license_url) - return license_url - - def JSONStreamingDrmURL(self, jsonData, uhd_profile = False): - if jsonData.get('drm_token') is not None: - license_url = self.JSONLicenseDrmURL(jsonData) - jsonVideos = jsonData.get('sources') - - if uhd_profile: - for streamingUrl in jsonVideos.get('dash'): - if streamingUrl.get('is_uhd') and streamingUrl.get('quality_key').lower() == uhd_profile: - source = re.sub(r"\?[\S]+", '', streamingUrl.get('src'), 0) - return generateDRMVideoUrl(source, license_url) - return False - - for streamingUrl in jsonVideos.get('dash'): - if streamingUrl.get('quality_key').lower()[0:3] == self.videoQuality: - return generateDRMVideoUrl(streamingUrl.get('src'), license_url) - source = streamingUrl.get('src') - # Remove Get Parameters because InputStream Adaptive cant handle it. - source = re.sub(r"\?[\S]+", '', source, 0) - if source is not None: - return generateDRMVideoUrl(source, license_url) - else: - showDialog(self.translation(30014).encode('UTF-8'), self.translation(30050).encode('UTF-8')) - return - - # list all Categories - def getCategories(self): - try: - response = self.__makeRequest(self.__urlShows) - responseCode = response.getcode() - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for result in json.loads(response.read().decode('UTF-8')).get('_embedded').get('items'): - self.__JSONProfile2ListItem(result) - else: - showDialog(self.translation(30045).encode('UTF-8'), self.translation(30046).encode('UTF-8')) - - # list all Episodes for the given Date - def getDate(self, date, dateFrom=None): - if dateFrom is None: - url = self.serviceAPIDate % date - else: - url = self.serviceAPIDateFrom % (date, 7) - response = self.__makeRequest(url) - - episodes = json.loads(response.read().decode('UTF-8')).get('_embedded').get('items') - if dateFrom is not None: - episodes = reversed(episodes) - - for episode in episodes: - self.__JSONEpisode2ListItem(episode) - - # list all Entries for the given Topic - def getTopic(self, topicID): - response = self.__makeRequest(self.servieAPITopic % topicID) - for entrie in json.loads(response.read().decode('UTF-8')).get('_embedded').get('video_items'): - self.__JSONVideoItem2ListItem(entrie) - - # list all Episodes for the given Broadcast - def getProgram(self, programID, playlist): - response = self.__makeRequest(self.serviceAPIProgram % programID) - responseCode = response.getcode() - - if responseCode == 200: - episodes = json.loads(response.read().decode('UTF-8')).get('_embedded').get('items') - if len(episodes) == 1: - for episode in episodes: - self.getEpisode(episode.get('id'), playlist) - return - - for episode in episodes: - self.__JSONEpisode2ListItem(episode, 'teaser') - else: - showDialog(self.translation(30045).encode('UTF-8'), self.translation(30046).encode('UTF-8')) - - # listst all Segments for the Episode with the given episodeID - # If the Episode only contains one Segment, that get played instantly. - def getEpisode(self, episodeID, playlist): - playlist.clear() - - response = self.__makeRequest(self.serviceAPIEpisode % episodeID) - result = json.loads(response.read().decode('UTF-8')) - - if len(result.get('_embedded').get('segments')) == 1: - listItem = self.JSONSegment2ListItem(result.get('_embedded').get('segments')[0]) - playlist.add(listItem[0], listItem[1]) - else: - gapless_name = '-- %s --' % self.translation(30059) - streamingURL = self.JSONStreamingURL(result.get('sources')) - description = result.get('description') - duration = result.get('duration_seconds') - teaser_image = result.get('playlist').get('preview_image_url') - date = time.strptime(result.get('date')[0:19], '%Y-%m-%dT%H:%M:%S') - if result.get('playlist').get('is_gapless'): - subtitles = [x.get('src') for x in result.get('playlist').get('gapless_video').get('subtitles')] - createListItem(gapless_name, teaser_image, description, duration, time.strftime('%Y-%m-%d', date), '', streamingURL, True, False, self.defaultbackdrop, self.pluginhandle, subtitles) - - if self.usePlayAllPlaylist: - play_all_name = '-- %s --' % self.translation(30060) - stream_infos = { - 'teaser_image': teaser_image, - 'description': description - } - createPlayAllItem(play_all_name, self.pluginhandle, stream_infos) - - for segment in result.get('_embedded').get('segments'): - listItem = self.JSONSegment2ListItem(segment) - playlist.add(listItem[0], listItem[1]) - - # Parses the Topic Overview Page - def getThemen(self): - try: - response = self.__makeRequest(self.__urlTopics) - responseCode = response.getcode() - except ValueError as error: - responseCode = 404 - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for topic in json.loads(response.read().decode('UTF-8')).get('_embedded').get('items'): - title = topic.get('title').encode('UTF-8') - description = topic.get('description') - link = topic.get('id') - addDirectory(title, None, self.defaultbackdrop, description, link, 'openTopic', self.pluginhandle) - - else: - showDialog(self.translation(30045).encode('UTF-8'), self.translation(30046).encode('UTF-8')) - - # list all Trailers for further airings - def getTrailers(self): - try: - response = self.__makeRequest(self.serviceAPITrailers) - responseCode = response.getcode() - except ValueError as error: - responseCode = 404 - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - for episode in json.loads(response.read().decode('UTF-8'))['_embedded']['items']: - self.__JSONEpisode2ListItem(episode) - else: - showDialog(self.translation(30045).encode('UTF-8'), self.translation(30046).encode('UTF-8')) - - def getArchiv(self): - pass - - # lists schedule overview (date listing) - def getSchedule(self): - for x in range(9): - date = datetime.datetime.now() - datetime.timedelta(days=x) - title = '%s' % (date.strftime('%A, %d.%m.%Y')) - parameters = {'mode': 'openDate', 'link': date.strftime('%Y-%m-%d')} - if x == 8: - title = '%s %s' % (self.translation(30064), title) - parameters = {'mode': 'openDate', 'link': date.strftime('%Y-%m-%d'), 'from': (date - datetime.timedelta(days=150)).strftime('%Y-%m-%d')} - u = build_kodi_url(parameters) - createListItem(title, None, None, None, date.strftime('%Y-%m-%d'), '', u, False, True, self.defaultbackdrop, self.pluginhandle) - - # Fetch stream details. - def getStreamInfos(self, item, inputstreamAdaptive): - infos = {} - live_link = item.get('_links').get('self').get('href') - response = url_get_request(live_link, self.httpauth) - response_raw = response.read().decode('UTF-8') - infos['live'] = json.loads(response_raw) - infos['drmurl'] = self.JSONLicenseDrmURL(infos['live']) - if inputstreamAdaptive and infos['live'].get('is_drm_protected'): - infos['stream'] = self.JSONStreamingDrmURL(infos['live']) - else: - infos['stream'] = self.JSONStreamingURL(infos['live'].get('sources')) - - infos['uhd25_stream'] = self.JSONStreamingDrmURL(infos['live'], 'uhdbrowser') - infos['uhd50_stream'] = self.JSONStreamingDrmURL(infos['live'], 'uhdsmarttv') - infos['items'] = {} - return infos - - # Builds a livestream item. - def buildStreamItem(self, item, channel, stream_imfo, inputstreamAdaptive, use_restart=True): - description = item.get('description') - title = item.get('title') - programName = channel - if channel in self.__channelMap: - programName = self.__channelMap[channel] - livestreamStart = time.strptime(item.get('start')[0:19], '%Y-%m-%dT%H:%M:%S') - livestreamEnd = time.strptime(item.get('end')[0:19], '%Y-%m-%dT%H:%M:%S') - duration = max(time.mktime(livestreamEnd) - max(time.mktime(livestreamStart), time.mktime(time.localtime())), 1) - contextMenuItems = [] - restart_url = False - if inputstreamAdaptive and item.get('restart'): - restart_parameters = {"mode": "liveStreamRestart", "link": item.get('id'), "lic_url": stream_imfo['drmurl']} - restart_url = build_kodi_url(restart_parameters) - contextMenuItems.append((self.translation(30063), 'RunPlugin(%s)' % restart_url)) - - banner = self.JSONImage(item.get('_embedded').get('image')) - item_title = "[%s] %s %s (%s)" % (programName, "[%s]" % self.translation(30063) if inputstreamAdaptive and restart_url else '', title, time.strftime('%H:%M', livestreamStart)) - if item.get('uhd') and stream_imfo['uhd25_stream']: - createListItem("[UHD] %s" % item_title, banner, description, duration,time.strftime('%Y-%m-%d', livestreamStart), programName, stream_imfo['uhd25_stream'], True, False, self.defaultbackdrop, self.pluginhandle) - if item.get('uhd') and stream_imfo['uhd50_stream']: - createListItem("[UHD 50fps] %s" % item_title, banner, description, duration,time.strftime('%Y-%m-%d', livestreamStart), programName, stream_imfo['uhd50_stream'], True, False, self.defaultbackdrop, self.pluginhandle) - - createListItem(item_title, banner, description, duration, time.strftime('%Y-%m-%d', livestreamStart), programName, stream_imfo['stream'], True, False, self.defaultbackdrop, self.pluginhandle, contextMenuItems=contextMenuItems) - - # Returns Live Stream Listing - def getLiveStreams(self): - try: - xbmcaddon.Addon('inputstream.adaptive') - inputstreamAdaptive = True - except RuntimeError: - inputstreamAdaptive = False - - showFullSchedule = xbmcaddon.Addon().getSetting('showLiveStreamSchedule') == 'true' - - response = self.__makeRequestV4(self.__urlLiveChannels) - response_raw = response.read().decode('UTF-8') - channels = json.loads(response_raw) - channelresults = {} - - # Prefetch the stream infos to limit request for each stream. - for channel in channels: - channelresults[channel] = {} - channel_items = channels[channel].get('items') - for channel_item in channel_items: - channelresults[channel] = self.getStreamInfos(channel_item, inputstreamAdaptive) - channelresults[channel]['items'] = channel_items - break - - # Render current streams first. - for channel in channels: - for upcoming in channelresults[channel]['items']: - if not 'upcoming' in channels[channel] or ('upcoming' in channels[channel] and upcoming.get('start')[0:17] == channels[channel]['upcoming'].get('start')[0:17]): - if not 'upcoming' in channels[channel]: - channels[channel]['upcoming'] = upcoming - elif upcoming.get('start')[0:17] == channels[channel]['upcoming'].get('start')[0:17] and upcoming.get('id') != channels[channel]['upcoming'].get('id'): - channelresults[channel] = self.getStreamInfos(upcoming, inputstreamAdaptive) - self.buildStreamItem(upcoming, channel, channelresults[channel], inputstreamAdaptive) - - # Render upcoming streams last for better list item order. - if showFullSchedule: - addDirectory('[COLOR red]----------------[/COLOR]', None, self.defaultbackdrop, "", "", 'getLive', self.pluginhandle) - for channel in channels: - for upcoming in channelresults[channel]['items']: - if not 'upcoming' in channels[channel] or channels[channel]['upcoming'].get('id') != upcoming.get('id'): - self.buildStreamItem(upcoming, channel, channelresults[channel], inputstreamAdaptive, False) - - # Restart callback. - def liveStreamRestart(self, link, protocol): - try: - xbmcaddon.Addon('inputstream.adaptive') - except RuntimeError: - return - - try: - response = self.__makeRequest('livestream/' + link) - responseCode = response.getcode() - except HTTPError as error: - responseCode = error.getcode() - - if responseCode == 200: - result = json.loads(response.read().decode('UTF-8')) - title = result.get('title').encode('UTF-8') - image = self.JSONImage(result.get('_embedded').get('image')) - description = result.get('description') - duration = result.get('duration_seconds') - date = time.strptime(result.get('start')[0:19], '%Y-%m-%dT%H:%M:%S') - restart_urls = None - restart_url = None - try: - restart_urls = result['_embedded']['channel']['restart_urls'] - except AttributeError: - pass - else: - for x in ('android', 'default'): - if x in restart_urls: - restart_url = restart_urls[x] - if restart_url: - break - if not restart_url: - raise Exception("restart url not found in livestream/%s result" % (link, )) - m = re.search(r"/livestreams/([^/]+)/sections/[^\?]*\?(?:.+&|)?X-Api-Key=([^&]+)", restart_url) - if m: - bitmovinStreamId, ApiKey = m.groups() - else: - raise Exception("unable to parse restart url: %s" % ( restart_url, )) - response = url_get_request(restart_url) # nosec - response_raw = response.read().decode('UTF-8') - section = json.loads(response_raw)[0] - section_id = section.get('id') - timestamp = section.get('metaData').get('timestamp') - streamingURL = 'https://playerapi-restarttv.ors.at/livestreams/%s/sections/%s/manifests/%s/?startTime=%s&X-Api-Key=%s' % (bitmovinStreamId, section_id, protocol, timestamp, ApiKey) - listItem = createListItem(title, image, description, duration, time.strftime('%Y-%m-%d', date), result.get('SSA').get('channel').upper(), streamingURL, True, False, self.defaultbackdrop, self.pluginhandle) - return streamingURL, listItem - - def __makeRequest(self, url): - return url_get_request(self.__urlBase + url, self.httpauth) - - def __makeRequestV4(self, url): - return url_get_request(self.__urlBaseV4 + url, self.httpauth) - - def __JSONEpisode2ListItem(self, JSONEpisode, ignoreEpisodeType=None): - if JSONEpisode.get('killdate') is not None and time.strptime(JSONEpisode.get('killdate')[0:19], '%Y-%m-%dT%H:%M:%S') < time.localtime(): - return - - # Direcotory should be set to False, that the Duration is shown, but then there is an error with the Pluginhandle - createListItem( - JSONEpisode.get('title'), - self.JSONImage(JSONEpisode), - JSONEpisode.get('description'), - JSONEpisode.get('duration_seconds'), - time.strftime('%Y-%m-%d', time.strptime(JSONEpisode.get('date')[0:19], '%Y-%m-%dT%H:%M:%S')), - JSONEpisode.get('_embedded').get('channel').get('name') if JSONEpisode.get('_embedded').get('channel') is not None else None, - build_kodi_url({'mode': 'openEpisode', 'link': JSONEpisode.get('id')}), - False, - True, - self.defaultbackdrop, - self.pluginhandle, - ) - - def __JSONProfile2ListItem(self, jsonProfile): - createListItem( - jsonProfile.get('title'), - self.JSONImage(jsonProfile), - jsonProfile.get('description'), - None, - None, - None, - build_kodi_url({'mode': 'openProgram', 'link': jsonProfile.get('id')}), - False, - True, - self.defaultbackdrop, - self.pluginhandle - ) - - def __JSONVideoItem2ListItem(self, jsonVideoItem): - if jsonVideoItem.get('_embedded').get('episode') is not None: - self.__JSONEpisode2ListItem(jsonVideoItem.get('_embedded').get('episode')) - elif jsonVideoItem.get('_embedded').get('segment') is not None: - self.JSONSegment2ListItem(jsonVideoItem.get('_embedded').get('segment')) diff --git a/resources/lib/Settings.py b/resources/lib/Settings.py deleted file mode 100644 index af065e6..0000000 --- a/resources/lib/Settings.py +++ /dev/null @@ -1,38 +0,0 @@ -import xbmcaddon - -__addon__ = xbmcaddon.Addon() - - -def blacklist(): - return __addon__.getSetting('enableBlacklist') == 'true' - - -def forceView(): - return __addon__.getSetting('forceView') == 'true' - - -def localizedString(translation_id): - return __addon__.getLocalizedString(translation_id) - - -def serviceAPI(): - return __addon__.getSetting('useServiceAPI') == 'true' - - -def subtitles(): - return __addon__.getSetting('useSubtitles') == 'true' - - -def userAgent(): - return __addon__.getSetting('userAgent') - - -def autoPlayPrompt(): - return __addon__.getSetting("autoPlayPrompt") == "true" - - -def playAllPlaylist(): - return __addon__.getSetting('usePlayAllPlaylist') == 'true' - -def showWarning(): - return __addon__.getSetting('showWarning') == 'true' diff --git a/default.py b/resources/lib/default.py similarity index 63% rename from default.py rename to resources/lib/default.py index 8f5ab32..2c24f58 100644 --- a/default.py +++ b/resources/lib/default.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from resources.lib import Addon +import Addon Addon.run() diff --git a/resources/media/archive_banner_v2.jpg b/resources/media/archive_banner_v2.jpg deleted file mode 100644 index 4479ffa3962faaa1f88d3ddf2634335c9c8d2a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121544 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 diff --git a/resources/media/blacklist_banner_v2.jpg b/resources/media/blacklist_banner_v2.jpg deleted file mode 100644 index 6b55cf85b48d1b7c46c69953e84f14505212e658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139749 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ΠU41FR-H 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�tgVqYDGYj>c(7}dw9yb+15-s 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