The branch, eden has been updated
via 1b22ca30314ccc0bbc221bb503cd0a74bbdd0fc5 (commit)
from 39bacf7f71b281a92af98ee9411861ce9294a75a (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=1b22ca30314ccc0bbc221bb503cd0a74bbdd0fc5
commit 1b22ca30314ccc0bbc221bb503cd0a74bbdd0fc5
Author: beenje <[email protected]>
Date: Thu Apr 18 22:39:43 2013 +0200
[plugin.video.mediathek] updated to version 0.4.10
diff --git a/plugin.video.mediathek/addon.xml b/plugin.video.mediathek/addon.xml
index deb02e5..ae1e0c9 100644
--- a/plugin.video.mediathek/addon.xml
+++ b/plugin.video.mediathek/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="plugin.video.mediathek"
- version="0.4.7"
+ version="0.4.10"
name="Mediathek"
provider-name="Raptor 2101 [[email protected]]">
<requires>
@@ -25,5 +25,10 @@ Currently implemented:
</description>
<language>de</language>
<platform>all</platform>
- </extension>
+ <license>GNU GENERAL PUBLIC LICENSE. Version 3, 29 June 2007</license>
+ <forum>https://github.com/raptor2101/Mediathek/issues</forum>
+ <website>https://github.com/raptor2101/Mediathek</website>
+ <source>https://github.com/raptor2101/Mediathek</source>
+ <email>[email protected]</email>
+ </extension>
</addon>
diff --git a/plugin.video.mediathek/changelog.txt
b/plugin.video.mediathek/changelog.txt
index ea9c637..014c944 100644
--- a/plugin.video.mediathek/changelog.txt
+++ b/plugin.video.mediathek/changelog.txt
@@ -1,3 +1,10 @@
+0.4.10 - FIX: adopt some specialities in the ARD Format
+ - FIX: Get all ARD features back working
+ - FIX: Get ARD working again (without "Sendungen A-Z")
+ - FIX: ORF-Program listing is parsed from Webseite instead of being
hardcoded
+0.4.9 - FIX: KiKa Plus naming
+0.4.8 - ADD: show http://www.3sat.de/mediathek/rss/mediathek_makro.xml to 3sat
show list.
+ FIX: BR Alpha
0.4.7 - Fix syntax error
0.4.6 - Minor fix for rasp-xbmc
added new channels for kika
diff --git a/plugin.video.mediathek/mediathek/ard.py
b/plugin.video.mediathek/mediathek/ard.py
index c0f657b..fdb835f 100644
--- a/plugin.video.mediathek/mediathek/ard.py
+++ b/plugin.video.mediathek/mediathek/ard.py
@@ -23,7 +23,7 @@ class ARDMediathek(Mediathek):
self.gui = simpleXbmcGui;
self.rootLink = "http://www.ardmediathek.de"
self.menuTree = (
- TreeNode("0","Neuste
Videos",self.rootLink+"/ard/servlet/content/3474442",True),
+ TreeNode("0","Neuste
Videos",self.rootLink+"/fernsehen",True),
TreeNode("1","Kategorien","",False,(
TreeNode("1.0",u"Nachrichten",self.rootLink+"/kategorien/nachrichten?clipFilter=fernsehen&documentId=506",True),
TreeNode("1.1",u"Politik &
Zeitgeschehen",self.rootLink+"/ard/servlet/content/3516690?clipFilter=fernsehen&documentId=206",True),
@@ -78,13 +78,13 @@ class ARDMediathek(Mediathek):
videoDocument_link_Regex = "/.*?documentId=(\\d*)"
metaInfo_link_Regex =
"/ard/servlet/ajax-cache/\\d*/view=ajax(/clipFilter=fernsehen){0,1}(/isFromList=true){0,1}/index.html"
ajaxDocumentLink =
"/ard/servlet/ajax-cache/(\\d*)/view=(switch|ajax|list)(/clipFilter=fernsehen){0,1}(/content=fernsehen){0,1}(/documentId=\\d*){0,1}/index.html"
- self.findImage_regex = "<img.*?src=\".*?\".*?/>"; #?
+ self.findImage_regex = "<img.*?src=\".*?\".*?/>";
#Regex für das Parsen der hauptseiten
- self.regex_ajaxLinkTag = re.compile("<a href=\""+ajaxDocumentLink+"\"
title=\"\"><span>Neueste Clips</span></a>")
+ self.regex_ajaxLinkTag = re.compile("<a class=\".*?mt-box_preload.*?\"
href=\""+ajaxDocumentLink+"\">")
self.regex_ajaxLink = re.compile(ajaxDocumentLink);
- self.regex_videoLinks =
re.compile("<img.*?src=\"(.*?)\".*?/>\\s*?</div>\\s*?<h3
class=\"mt-title\">\\s*?<a href=\""+videoDocument_link_Regex+"\" class=\".*\"
rel=\""+metaInfo_link_Regex+"\">");
+ self.regex_videoLinks =
re.compile("<img.*?src=\"(.*?)\".*?/>\\s*?</div>\\s*?<h3
class=\"mt-title\">\\s*?<a href=\""+videoDocument_link_Regex+"\" class=\".*\"
rel=\""+metaInfo_link_Regex+"\".*?>");
self.regex_videoSeriesLinks = re.compile("<a id=\".*\" class=\".*\"
rel=\""+metaInfo_link_Regex+"\" href=\""+videoDocument_link_Regex+"\">");
- self.regex_subLinks = re.compile("<a class=\"mt-box_preload.*?\"
href=\""+ajaxDocumentLink+"\">");
+ self.regex_subLinks = re.compile("<a href=\""+ajaxDocumentLink+"\".*?>");
self.regex_videoDocumentLink = re.compile(videoDocument_link_Regex);
self.regex_MetaInfo = re.compile(metaInfo_link_Regex);
self.regex_Date = re.compile("\\d{2}\\.\\d{2}\\.\\d{2}");
@@ -149,25 +149,39 @@ class ARDMediathek(Mediathek):
def buildPageMenu(self, link, initCount, subLink = False):
- self.gui.log("Build Page Menu: "+link);
+ self.gui.log("Build Page Menu: %s SubLink: %d"%(link,subLink));
mainPage = self.loadPage(link);
+ elementCount = 0;
try:
- self.gui.log("Elements");
if(subLink):
- link = self.regex_ajaxLink.search(mainPage).group();
- self.gui.log(link);
+ self.gui.log("Extract VideoObjects");
+ elementCount = self.extractVideoObjects(mainPage);
else:
- htmlTag = self.regex_ajaxLinkTag.search(mainPage).group();
- link = self.regex_ajaxLink.search(htmlTag).group();
-
- ajaxPage = self.loadPage(self.rootLink + link);
-
- return self.extractVideoObjects(ajaxPage);
+ self.gui.log("Search AjaxLinks");
+ for htmlTag in self.regex_ajaxLinkTag.finditer(mainPage):
+ try:
+ htmlTag = self.regex_ajaxLinkTag.search(htmlTag.group()).group();
+ link = self.regex_ajaxLink.search(htmlTag).group();
+ ajaxPage = self.loadPage(self.rootLink + link);
+ elementCount = self.extractVideoObjects(ajaxPage);
+ if(elementCount == 0):
+ self.gui.log("no video objects found - retry search for ajax
link");
+ htmlTag = self.regex_ajaxLinkTag.search(ajaxPage);
+ if(htmlTag is not None):
+ htmlTag = htmlTag.group();
+ link = self.regex_ajaxLink.search(htmlTag).group();
+ ajaxPage = self.loadPage(self.rootLink + link);
+ elementCount = self.extractVideoObjects(ajaxPage);
+ except:
+ continue;
except:
+ elementCount = 0;
+ if(elementCount == 0):
self.gui.log("Categorien");
elementCount = self.extractCategorieObjects(mainPage);
if(elementCount == 0):
+ self.gui.log("No Categories found");
for link in self.regex_subLinks.finditer(mainPage):
link = link.group();
link = self.regex_ajaxLink.search(link).group();
@@ -175,7 +189,7 @@ class ARDMediathek(Mediathek):
elementCount += self.buildPageMenu(self.rootLink+link, 0,True);
if(elementCount > 60):
break;
- return elementCount;
+ return elementCount;
diff --git a/plugin.video.mediathek/mediathek/bralpha.py
b/plugin.video.mediathek/mediathek/bralpha.py
index bfde53e..ffc6fdb 100644
--- a/plugin.video.mediathek/mediathek/bralpha.py
+++ b/plugin.video.mediathek/mediathek/bralpha.py
@@ -76,7 +76,7 @@ class BRAlphaMediathek(Mediathek):
@classmethod
def name(self):
- return "BR Alpha";
+ return "BR-Alpha";
def isSearchable(self):
return False;
diff --git a/plugin.video.mediathek/mediathek/dreisat.py
b/plugin.video.mediathek/mediathek/dreisat.py
index 2912ce7..8b61678 100644
--- a/plugin.video.mediathek/mediathek/dreisat.py
+++ b/plugin.video.mediathek/mediathek/dreisat.py
@@ -72,12 +72,13 @@ class DreiSatMediathek(Mediathek):
TreeNode("13","Musik","http://www.3sat.de/mediathek/rss/mediathek_musik.xml",True),
TreeNode("14","nano","http://www.3sat.de/mediathek/rss/mediathek_nano.xml",True),
TreeNode("15","neues","http://www.3sat.de/mediathek/rss/mediathek_neues.xml",True),
- TreeNode("16",u"Peter VoÃ
fragt","http://www.3sat.de/mediathek/rss/mediathek_begegnungen.xml",True),
- TreeNode("17","Recht
brisant","http://www.3sat.de/mediathek/rss/mediathek_Recht%20brisant.xml",True),
-
TreeNode("18","scobel","http://www.3sat.de/mediathek/rss/mediathek_scobel.xml",True),
-
TreeNode("19","SCHWEIZWEIT","http://www.3sat.de/mediathek/rss/mediathek_schweizweit.xml",True),
-
TreeNode("20","Theater","http://www.3sat.de/mediathek/rss/mediathek_theater.xml",True),
-
TreeNode("21","vivo","http://www.3sat.de/mediathek/rss/mediathek_vivo.xml",True),
+
TreeNode("16","makro","http://www.3sat.de/mediathek/rss/mediathek_makro.xml",True),
+ TreeNode("17",u"Peter VoÃ
fragt","http://www.3sat.de/mediathek/rss/mediathek_begegnungen.xml",True),
+ TreeNode("18","Recht
brisant","http://www.3sat.de/mediathek/rss/mediathek_Recht%20brisant.xml",True),
+
TreeNode("19","scobel","http://www.3sat.de/mediathek/rss/mediathek_scobel.xml",True),
+
TreeNode("20","SCHWEIZWEIT","http://www.3sat.de/mediathek/rss/mediathek_schweizweit.xml",True),
+
TreeNode("21","Theater","http://www.3sat.de/mediathek/rss/mediathek_theater.xml",True),
+
TreeNode("22","vivo","http://www.3sat.de/mediathek/rss/mediathek_vivo.xml",True),
);
self.rootLink = "http://www.3sat.de"
diff --git a/plugin.video.mediathek/mediathek/kika.py
b/plugin.video.mediathek/mediathek/kika.py
index 1b6a507..437684e 100644
--- a/plugin.video.mediathek/mediathek/kika.py
+++ b/plugin.video.mediathek/mediathek/kika.py
@@ -90,7 +90,7 @@ class KIKAPlus(Mediathek):
self.regex_videoLink=re.compile("rtmp://.*?\.mp4");
@classmethod
def name(self):
- return "KI.KA Plus";
+ return "KI.KA-Plus";
def isSearchable(self):
return False;
@@ -119,4 +119,4 @@ class KIKAPlus(Mediathek):
videoLinks={0:SimpleLink(videoLink,0)};
displayObject =
DisplayObject(title,subTitle,self.rootLink+imageLink,"",videoLinks,True, date);
- self.gui.buildVideoLink(displayObject,self, initCount + len(videoPages));
\ No newline at end of file
+ self.gui.buildVideoLink(displayObject,self, initCount + len(videoPages));
diff --git a/plugin.video.mediathek/mediathek/orf.py
b/plugin.video.mediathek/mediathek/orf.py
index 938a684..9eec588 100644
--- a/plugin.video.mediathek/mediathek/orf.py
+++ b/plugin.video.mediathek/mediathek/orf.py
@@ -6,121 +6,30 @@ from mediathek import *
class ORFMediathek(Mediathek):
def __init__(self, simpleXbmcGui):
+
+ self.rootLink = "http://tvthek.orf.at"
self.gui = simpleXbmcGui;
- self.menuTree = (
- TreeNode("0","Startseite","http://tvthek.orf.at/",True),
- TreeNode("1","Sendungen","",False,
- (
- TreeNode("1.0",u"Bundesländer","",False,
- (
- TreeNode("1.0.0",u"Burgenland
heute","http://tvthek.orf.at/programs/70021-Burgenland-heute",True),
- TreeNode("1.0.1",u"Kärnten
heute","http://tvthek.orf.at/programs/70022-Kaernten-heute",True),
- TreeNode("1.0.2",u"Niederösterreich
heute","http://tvthek.orf.at/programs/70017-Niederoesterreich-heute",True),
- TreeNode("1.0.3",u"Oberoesterreich
heute","http://tvthek.orf.at/programs/70016-Oberoesterreich-heute",True),
- TreeNode("1.0.4",u"Salzburg
heute","http://tvthek.orf.at/programs/70019-Salzburg-heute",True),
- TreeNode("1.0.5",u"Steiermark
heute","http://tvthek.orf.at/programs/70020-Steiermark-heute",True),
- TreeNode("1.0.6",u"Tirol
heute","http://tvthek.orf.at/programs/70023-Tirol-heute",True),
- TreeNode("1.0.6",u"Vorarlberg
heute","http://tvthek.orf.at/programs/70024-Vorarlberg-heute",True),
- TreeNode("1.0.6",u"Wien
heute","http://tvthek.orf.at/programs/70018-Wien-heute",True),
- )
- ),
- TreeNode("1.1",u"Dokumentationen","",False,
- (
- TreeNode("1.1.0",u"Erlebnis
Ãsterreich","http://tvthek.orf.at/programs/1200-Erlebnis-Oesterreich",True),
- TreeNode("1.1.1",u"Menschen &
Mächte","http://tvthek.orf.at/programs/170407-Menschen---Maechte",True),
-
TreeNode("1.1.2",u"Universum","http://tvthek.orf.at/programs/35429-Universum",True),
- )
- ),
- TreeNode("1.2",u"Information","",False,
- (
- TreeNode("1.2.0",u"Club
2","http://tvthek.orf.at/programs/1283-Club-2",True),
- TreeNode("1.2.1",u"Heute in
Ãsterreich","http://tvthek.orf.at/programs/1257-Heute-in-Oesterreich",True),
- TreeNode("1.2.2",u"Hohes
Haus","http://tvthek.orf.at/programs/1264-Hohes-Haus",True),
- TreeNode("1.2.3",u"Im
Zentrum","http://tvthek.orf.at/programs/1279-Im-Zentrum",True),
-
TreeNode("1.2.4",u"Ãsterreich-Bild","http://tvthek.orf.at/programs/1296-Oesterreich-Bild",True),
-
TreeNode("1.2.5",u"Pressestunde","http://tvthek.orf.at/programs/1273-Pressestunde",True),
- TreeNode("1.2.6",u"Runder
Tisch","http://tvthek.orf.at/programs/70010-Runder-Tisch",True),
- TreeNode("1.2.7",u"Südtirol
heute","http://tvthek.orf.at/programs/1277675-Suedtirol-heute",True),
-
TreeNode("1.2.8",u"Wetter","http://tvthek.orf.at/programs/1250-Wetter",True),
- TreeNode("1.2.9",u"Wetter
(ÃGS)","http://tvthek.orf.at/programs/1786041-Wetter--OeGS-",True),
- TreeNode("1.2.10",u"Wetter ZiB
20","http://tvthek.orf.at/programs/972117-Wetter-ZIB-20",True),
- TreeNode("1.2.11",u"ZiB
9","http://tvthek.orf.at/programs/71256-ZiB-9",True),
- TreeNode("1.2.12",u"ZiB
11","http://tvthek.orf.at/programs/71276-ZiB-11",True),
- TreeNode("1.2.13",u"ZiB
13","http://tvthek.orf.at/programs/71280-ZiB-13",True),
- TreeNode("1.2.14",u"ZiB
17","http://tvthek.orf.at/programs/71284-ZiB-17",True),
- TreeNode("1.2.15",u"Zeit im
Bild","http://tvthek.orf.at/programs/1203-Zeit-im-Bild",True),
- TreeNode("1.2.16",u"Zeit im Bild
(ÃGS)","http://tvthek.orf.at/programs/145302-Zeit-im-Bild--OeGS-",True),
- TreeNode("1.2.17",u"ZiB
20","http://tvthek.orf.at/programs/1218-ZiB-20",True),
- TreeNode("1.2.18",u"ZiB
2","http://tvthek.orf.at/programs/1211-ZiB-2",True),
- TreeNode("1.2.19",u"Spät
ZiB","http://tvthek.orf.at/programs/79134-Spaet-ZiB",True),
- TreeNode("1.2.20",u"ZiB
24","http://tvthek.orf.at/programs/1225-ZiB-24",True),
- TreeNode("1.2.21",u"ZiB
Flash","http://tvthek.orf.at/programs/1232-ZiB-Flash",True),
- )
- ),
- TreeNode("1.3",u"Magazine","",False,
- (
- TreeNode("1.3.0",u"Bewusst gesund - das
Magazin","http://tvthek.orf.at/programs/1714463-Bewusst-gesund---das-Magazin",True),
-
TreeNode("1.3.1",u"Bürgeranwalt","http://tvthek.orf.at/programs/1339-Buergeranwalt",True),
-
TreeNode("1.3.2",u"Bürgerforum","http://tvthek.orf.at/programs/1343-Buergerforum",True),
-
TreeNode("1.3.3",u"Konkret","http://tvthek.orf.at/programs/1336-Konkret",True),
- TreeNode("1.3.4",u"Land und
Leute","http://tvthek.orf.at/programs/1369-Land-und-Leute",True),
- TreeNode("1.3.5",u"Stöckl am
Samstag","http://tvthek.orf.at/programs/1651-Stoeckl-am-Samstag",True),
-
TreeNode("1.3.6",u"Thema","http://tvthek.orf.at/programs/1319-Thema",True),
- TreeNode("1.3.7",u"Vera
exklusiv","http://tvthek.orf.at/programs/35440-Vera-exklusiv",True),
-
TreeNode("1.3.8",u"Weltjournal","http://tvthek.orf.at/programs/1328-Weltjournal",True),
-
TreeNode("1.3.9",u"Winterzeit","http://tvthek.orf.at/programs/1003023-Winterzeit",True),
-
TreeNode("1.3.10",u"â¬co","http://tvthek.orf.at/programs/1346-Eco",True),
- )
- ),
- TreeNode("1.4",u"Kultur","",False,
- (
-
TreeNode("1.4.0",u"a.viso","http://tvthek.orf.at/programs/1299-a-viso",True),
-
TreeNode("1.4.0",u"Kulturmontag","http://tvthek.orf.at/programs/1303-Kulturmontag",True),
- )
- ),
-
TreeNode("1.5",u"Sport","http://tvthek.orf.at/programs/1379-Sportbild",True,
- (
- )
- ),
- TreeNode("1.6",u"Religion","",False,
- (
- TreeNode("1.6.0",u"Kreuz &
Quer","http://tvthek.orf.at/programs/1193-Kreuz---Quer",True),
-
TreeNode("1.6.1",u"Orientierung","http://tvthek.orf.at/programs/1366-Orientierung",True),
- TreeNode("1.6.2",u"Religionen der
Welt","http://tvthek.orf.at/programs/1656-Religionen-der-Welt",True),
- TreeNode("1.6.3",u"Was ich
glaube","http://tvthek.orf.at/programs/1287-Was-ich-glaube",True),
- )
- ),
- TreeNode("1.7",u"Society","",False,
- (
-
TreeNode("1.7.0",u"Chilli","http://tvthek.orf.at/programs/1504477-Chili",True),
-
TreeNode("1.7.1",u"Seitenblicke","http://tvthek.orf.at/programs/1360-Seitenblicke",True),
- )
- ),
- TreeNode("1.8",u"Show","",False,
- (
- TreeNode("1.8.0",u"ARGE
Talkshow","http://tvthek.orf.at/programs/1864371-ARGE-Talkshow",True),
- TreeNode("1.8.1",u"Frisch
gekocht","http://tvthek.orf.at/programs/1375-Frisch-gekocht",True),
- TreeNode("1.8.2",u"Was gibt es
Neues?","http://tvthek.orf.at/programs/1309553-Was-gibt-es-Neues-",True),
- TreeNode("1.8.3",u"Willkommen
Ãsterreich","http://tvthek.orf.at/programs/1309549-Willkommen-Oesterreich",True),
- TreeNode("1.8.4",u"Helden von Morgen - Die
Show","http://tvthek.orf.at/programs/1679635-HvM---Die-Show",True),
- TreeNode("1.8.5",u"Helden von Morgen - Die
Entscheidung","http://tvthek.orf.at/programs/1710513-HvM---Die-Entscheidung",True),
- )
- ),
- TreeNode("1.9",u"Volksgruppen","",False,
- (
- TreeNode("1.9.0",u"Heimat, fremde
Heimat","http://tvthek.orf.at/programs/1357-Heimat--fremde-Heimat",True),
- TreeNode("1.9.1",u"Dobar dan
Hrvati","http://tvthek.orf.at/programs/85526-Dobar-dan-Hrvati",True),
- TreeNode("1.9.2",u"Dober dan,
Koroška","http://tvthek.orf.at/programs/85528-Dober-dan--Koroschka",True),
- TreeNode("1.9.3",u"Adj' Isten
magyarok","http://tvthek.orf.at/programs/85519-Adj--Isten-magyarok",True),
- TreeNode("1.9.4",u"Servus Szia Zdravo Del
tuha","http://tvthek.orf.at/programs/85512-Servus-Szia-Zdravo-Del-tuha",True),
- TreeNode("1.9.5",u"Äeské & Slovenské
Ozveny","http://tvthek.orf.at/programs/181719-Tscheske---Slovenske-Ozveny",True),
- )
- ),
- )
- )
- );
+ self.menuTree = [];
+
self.menuTree.append(TreeNode("0","Startseite","http://tvthek.orf.at/",True));
+
+ menuPage = self.loadPage(self.rootLink+"/programs");
+
+ findMenuLink = re.compile("<li><a href=\"(/programs/.*?)\"
title=\".*?\">(.*?)</a></li>");
+ findCategorie =
re.compile("<h4>(.*?)</h4>\\s*?<ul>((\\s*?%s\\s*?)+)</ul>"%findMenuLink.pattern)
+
+ categories = [];
+
+ for categorieMatch in findCategorie.finditer(menuPage):
- self.rootLink = "http://tvthek.orf.at"
+ title = categorieMatch.group(1);
+
+ items = [];
+ for menuMatch in findMenuLink.finditer(categorieMatch.group(2)):
+ items.append(TreeNode("1.%d.%d"%(len(categories),len(items)),
menuMatch.group(2),"%s%s"%(self.rootLink,menuMatch.group(1)),True));
+
+ categories.append(TreeNode("1.%d"%len(categories),
title,"",False,items));
+
+ self.menuTree.append(TreeNode("1","Sendungen","",False,categories));
videoLinkPage = "/programs/.*"
imageLink = "http://tvthek.orf.at/assets/.*?.jpeg"
-----------------------------------------------------------------------
Summary of changes:
plugin.video.mediathek/addon.xml | 9 ++-
plugin.video.mediathek/changelog.txt | 7 ++
plugin.video.mediathek/mediathek/ard.py | 46 ++++++---
plugin.video.mediathek/mediathek/bralpha.py | 2 +-
plugin.video.mediathek/mediathek/dreisat.py | 13 ++-
plugin.video.mediathek/mediathek/kika.py | 4 +-
plugin.video.mediathek/mediathek/orf.py | 135 +++++----------------------
7 files changed, 76 insertions(+), 140 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons