The branch, frodo has been updated
       via  114909bc777c459bac5b65fa59b8cafa1fd437f8 (commit)
       via  a61bb1008ed747e89a8245aba9d2990ceca893c3 (commit)
      from  b39db2a70250e768b2fe2b3ed4a2cda50ba7d5ad (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=114909bc777c459bac5b65fa59b8cafa1fd437f8

commit 114909bc777c459bac5b65fa59b8cafa1fd437f8
Author: beenje <[email protected]>
Date:   Fri Dec 20 19:08:07 2013 +0100

    [plugin.video.nrk] updated to version 4.4.14

diff --git a/plugin.video.nrk/addon.xml b/plugin.video.nrk/addon.xml
index 4d84f42..85c75a6 100644
--- a/plugin.video.nrk/addon.xml
+++ b/plugin.video.nrk/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.nrk"
        name="NRK Nett-TV"
-       version="4.4.13"
+       version="4.4.14"
        provider-name="takoi">
   <requires>
     <import addon="xbmc.python" version="2.1.0"/>
diff --git a/plugin.video.nrk/changelog.txt b/plugin.video.nrk/changelog.txt
index 340ef34..d8c1a60 100644
--- a/plugin.video.nrk/changelog.txt
+++ b/plugin.video.nrk/changelog.txt
@@ -1,3 +1,9 @@
+[B]4.4.14[/B]
+- Diverse sideendringer
+- Fikset negativ starttid enkelte undertekster
+- Raskere lasting av episodelister (programinformasjon nå tilgjengelig på 
samme side)
+- Fjernet «kvalitet» fra innstillinger (blir bestemt av Innstillinger -> 
System -> Internettilgang -> BÃ¥ndbreddebegrensning)
+
 [B]4.4.13[/B]
 - Sideendringer
 
diff --git a/plugin.video.nrk/data.py b/plugin.video.nrk/data.py
index b127a0b..d25a250 100644
--- a/plugin.video.nrk/data.py
+++ b/plugin.video.nrk/data.py
@@ -17,11 +17,11 @@ import json
 import requests
 import HTMLParser
 import StorageServer
-import CommonFunctions
+import CommonFunctions as common
 from itertools import repeat
 
 html_decode = HTMLParser.HTMLParser().unescape
-parseDOM = CommonFunctions.parseDOM
+parseDOM = common.parseDOM
 cache = StorageServer.StorageServer('nrk.no', 336)
 
 session = requests.session()
@@ -107,42 +107,38 @@ def get_search_results(query, page=1):
 
 
 def get_seasons(arg):
-  """ returns: </program/Episodes/aktuelt-tv/11998> """
   url = "http://tv.nrk.no/serie/%s"; % arg
   html = xhrsession.get(url).text
-  html = parseDOM(html, 'div', {'id':'seasons'})
-  html = parseDOM(html, 'noscript')
-  titles = parseDOM(html, 'a', {'class':'seasonLink'})
-  titles = [ "Sesong %s" % html_decode(t) for t in titles ]
-  ids = parseDOM(html, 'a', {'class':'seasonLink'}, ret='href')
+  items = parseDOM(html, 'li', {'class':'season-menu-item'})
+  titles = [ html_decode(parseDOM(li, 'a')[0]) for li in items ]
+  ids = [ parseDOM(li, 'a', ret='data-season')[0] for li in items ]
+  urls = [ "/program/Episodes/%s/%s/0" % (arg, i) for i in ids ]
   thumbs = repeat(_thumb_url(arg))
   fanart = repeat(_fanart_url(arg))
-  return titles, ids, thumbs, fanart
+  return titles, urls, thumbs, fanart
 
 
 def get_episodes(series_id, season_id):
-  """ returns: </serie/aktuelt-tv/nnfa50051612/16-05-2012..> """
   url = "http://tv.nrk.no/program/Episodes/%s/%s"; % (series_id, season_id)
   html = xhrsession.get(url).text
-  trs = parseDOM(html, 'tr', {'class':'[^"\']*episode-row js-click *'})
-  titles = [ parseDOM(tr, 'a', {'class':'p-link'})[0] for tr in trs ]
-  titles = map(html_decode, titles)
-  ids = [ parseDOM(tr, 'a', {'class':'p-link'}, ret='href')[0] for tr in trs ]
-  ids = [ e.split('http://tv.nrk.no')[-1] for e in ids ]
-  descr = [lambda x=x: _get_descr(x) for x in ids ]
+  ul = parseDOM(html, 'ul', {'class':'episode-list'})
+  assert len(ul) == 1
+  cls = parseDOM(ul, 'li', ret='class')
+  items = parseDOM(ul, 'li')
+  items = [ items[i] for i in range(len(items)) if "no-rights" not in cls[i] ]
+  titles = [ parseDOM(i, 'h3')[0] for i in items ]
+  titles = [ html_decode(common.stripTags(_)) for _ in titles ]
+  urls = [ parseDOM(i, 'a', ret='href')[0] for i in items ]
+  descr = [ parseDOM(i, 'p')[0] for i in items ]
+  descr = [ html_decode(common.stripTags(_)) for _ in descr ]
   thumbs = repeat(_thumb_url(series_id))
   fanart = repeat(_fanart_url(series_id))
-  return titles, ids, thumbs, fanart, descr
+  return titles, urls, thumbs, fanart, descr
 
 
-def get_media_url(video_id, bitrate):
-  bitrate = 4 if bitrate > 4 else bitrate
+def get_media_url(video_id):
   url = "http://v7.psapi.nrk.no/mediaelement/%s"; % video_id
-  url = _get_cached_json(url, 'mediaUrl')
-  url = url.replace('/z/', '/i/', 1)
-  url = url.rsplit('/', 1)[0]
-  url = url + '/index_%s_av.m3u8' % bitrate
-  return url
+  return xhrsession.get(url).json()['mediaUrl']
 
 
 def _get_cached_json(url, node):
@@ -164,7 +160,7 @@ def _fanart_url(id):
   return "http://nrk.eu01.aws.af.cm/f/%s"; % id.strip('/')
 
 def _get_descr(url):
-  url = "http://nrk.no/serum/api/video/%s"; % url.split('/')[3]
+  url = "http://v7.psapi.nrk.no/mediaelement/%s"; % url.split('/')[3]
   try:
     return _get_cached_json(url, 'description')
   except:
diff --git a/plugin.video.nrk/default.py b/plugin.video.nrk/default.py
index c402191..5f0227b 100644
--- a/plugin.video.nrk/default.py
+++ b/plugin.video.nrk/default.py
@@ -24,7 +24,6 @@ from xbmcgui import ListItem
 import plugin
 plugin = plugin.Plugin()
 
-BITRATE = int(plugin.get_setting('bitrate')) + 1
 SHOW_SUBS = int(plugin.get_setting('showsubtitles')) == 1
 
 @plugin.route('/')
@@ -94,7 +93,7 @@ def mostrecent():
   view(*data.get_most_recent())
 
 @plugin.route('/mostpopular')
-def mostpolpular():
+def mostpopular():
   import data
   view(*data.get_most_popular())
 
@@ -166,7 +165,7 @@ def episodes(series_id, season_id):
 @plugin.route('/program/<video_id>/.*')
 def play(video_id, series_id=""):
   import data, subs
-  url = data.get_media_url(video_id, BITRATE)
+  url = data.get_media_url(video_id)
   xbmcplugin.setResolvedUrl(plugin.handle, True, ListItem(path=url))
   player = xbmc.Player()
   subtitle = subs.get_subtitles(video_id)
diff --git a/plugin.video.nrk/resources/language/English/strings.xml 
b/plugin.video.nrk/resources/language/English/strings.xml
index 037da54..83e3f9d 100644
--- a/plugin.video.nrk/resources/language/English/strings.xml
+++ b/plugin.video.nrk/resources/language/English/strings.xml
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <strings>
-       <string id="30001">Quality</string>
-       <string id="30002">Subtitles</string>
-       <string id="30003">Off</string>
-       <string id="30004">On</string>
-       <string id="30005">Note: Quality on live streams are determined by the 
bandwidth</string>
-       <string id="30006">limitation set in Settings->System->Internet 
access</string>
+    <string id="30002">Subtitles</string>
+    <string id="30003">Off</string>
+    <string id="30004">On</string>
+    <string id="30005">Bitrate can be selected in Settings->System-></string>
+    <string id="30006">Internet access->Internet connection bandwidth 
limitation</string>
 </strings>
diff --git a/plugin.video.nrk/resources/language/Norwegian/strings.xml 
b/plugin.video.nrk/resources/language/Norwegian/strings.xml
index fca3f68..0e67659 100644
--- a/plugin.video.nrk/resources/language/Norwegian/strings.xml
+++ b/plugin.video.nrk/resources/language/Norwegian/strings.xml
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <strings>
-       <string id="30001">Kvalitet</string>
-       <string id="30002">Teksting</string>
-       <string id="30003">Av</string>
-       <string id="30004">PÃ¥</string>
-       <string id="30005">Obs: Kvalitet på direktestrømmer bestemmes av 
båndbreddebegrensning</string>
-       <string id="30006">satt i 
Innstillinger->System->Internettilgang</string>
+    <string id="30002">Teksting</string>
+    <string id="30003">Av</string>
+    <string id="30004">PÃ¥</string>
+    <string id="30005">Bitrate kan bli valgt i Innstillinger-></string>
+    <string id="30006">System->Internettilgang->BÃ¥ndbreddebegrensning</string>
 </strings>
diff --git a/plugin.video.nrk/resources/settings.xml 
b/plugin.video.nrk/resources/settings.xml
index e337afd..6b76e25 100644
--- a/plugin.video.nrk/resources/settings.xml
+++ b/plugin.video.nrk/resources/settings.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <settings>
-       <setting id="showsubtitles" type="enum" label="30002" 
lvalues="30003|30004" default="1"/>
-       <setting id="bitrate" type="enum" label="30001" values="400 kbit/s|700 
kbit/s|1400 kbit/s|2300 kbit/s|3500 kbit/s" default="4"/>
-       <setting label="30005" type="lsep"/>
-       <setting label="30006" type="lsep"/>
+    <setting id="showsubtitles" type="enum" label="30002" 
lvalues="30003|30004" default="1"/>
+    <setting label="30005" type="lsep"/>
+    <setting label="30006" type="lsep"/>
 </settings>
diff --git a/plugin.video.nrk/subs.py b/plugin.video.nrk/subs.py
index c8d23c7..b56e727 100644
--- a/plugin.video.nrk/subs.py
+++ b/plugin.video.nrk/subs.py
@@ -19,7 +19,7 @@ import xbmc
 from data import xhrsession as requests
 
 def get_subtitles(video_id):
-  html = requests.get("http://tv.nrk.no/programsubtitles/%s"; % video_id).text
+  html = requests.get("http://v7.psapi.nrk.no/programs/%s/subtitles/tt"; % 
video_id).text
   if not html:
     return None
   
@@ -41,7 +41,11 @@ def get_subtitles(video_id):
 
 def _stringToTime(txt):
   p = txt.split(':')
-  return int(p[0])*3600+int(p[1])*60+float(p[2])
+  try:
+    ms = float(p[2])
+  except ValueError:
+    ms = 0
+  return int(p[0]) * 3600 + int(p[1]) * 60 + ms
 
 def _timeToString(time):
   return '%02d:%02d:%02d,%03d' % 
(time/3600,(time%3600)/60,time%60,(time%1)*1000)

http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=a61bb1008ed747e89a8245aba9d2990ceca893c3

commit a61bb1008ed747e89a8245aba9d2990ceca893c3
Author: beenje <[email protected]>
Date:   Fri Dec 20 19:08:04 2013 +0100

    [plugin.video.svtplay] updated to version 3.3.5

diff --git a/plugin.video.svtplay/addon.xml b/plugin.video.svtplay/addon.xml
index fc99801..9b1898e 100644
--- a/plugin.video.svtplay/addon.xml
+++ b/plugin.video.svtplay/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.svtplay"
        name="SVT Play"
-       version="3.3.4"
+       version="3.3.5"
        provider-name="nilzen">
   <requires>
     <import addon="script.module.parsedom" version="1.2.0"/>
diff --git a/plugin.video.svtplay/changelog.txt 
b/plugin.video.svtplay/changelog.txt
index 399027a..3041a1f 100644
--- a/plugin.video.svtplay/changelog.txt
+++ b/plugin.video.svtplay/changelog.txt
@@ -1,3 +1,7 @@
+Version 3.3.5
+-------------
+- Fix issue #89 by hiding "Oppetarkiv" in the category listing
+
 Version 3.3.4
 -------------
 - Hide live streams on the start page and re-enable addon in repository
diff --git a/plugin.video.svtplay/default.py b/plugin.video.svtplay/default.py
index d7741f7..a683275 100644
--- a/plugin.video.svtplay/default.py
+++ b/plugin.video.svtplay/default.py
@@ -421,8 +421,8 @@ def createDirItem(article,mode):
 
 def startVideo(url):
   """
-  Starts the XBMC player if a valid video url is 
-  found for the given page url.
+  Starts the XBMC player if a valid video URL is 
+  found for the given page URL.
   """
   if not url.startswith("/"):
     url = "/" + url
@@ -435,9 +435,36 @@ def startVideo(url):
   jsonObj = json.loads(jsonString)
   common.log(jsonString)
 
-  subtitle = None
+  (videoUrl, errormsg) = getVideoUrl(jsonObj)
+  subtitle = getSubtitle(jsonObj)
   player = xbmc.Player()
   startTime = time.time()
+
+  if videoUrl:
+    xbmcplugin.setResolvedUrl(pluginHandle, True, 
xbmcgui.ListItem(path=videoUrl))
+
+    if subtitle:
+      while not player.isPlaying() and time.time() - startTime < 10:
+        time.sleep(1.)
+
+      player.setSubtitles(subtitle)
+
+      if not SHOW_SUBTITLES:
+        player.showSubtitles(False)
+  else:
+    # No video URL was found
+    dialog = xbmcgui.Dialog()
+    if not errormsg:
+      dialog.ok("SVT Play", localize(30100))
+    else:
+      dialog.ok("SVT Play", errormsg)
+
+
+def getVideoUrl(jsonObj):
+  """
+  Returns a video URL from a JSON object and
+  an error message, if available.
+  """
   videoUrl = None
   extension = "None"
   args = ""
@@ -450,6 +477,8 @@ def startVideo(url):
     """
     tmpurl = video["url"]
     argpos = tmpurl.rfind("?")
+    errormsg = ""
+
     if argpos > 0:
       args = tmpurl[argpos:]
       tmpurl = tmpurl[:argpos]
@@ -472,17 +501,10 @@ def startVideo(url):
       continue
     videoUrl = tmpurl
 
-  for sub in jsonObj["video"]["subtitleReferences"]:
-    if sub["url"].endswith(".wsrt"):
-      subtitle = sub["url"]
-    else:
-      if len(sub["url"]) > 0:
-        common.log("Skipping unknown subtitle: " + sub["url"])
-
   if extension == "HLS" and HLS_STRIP:
     videoUrl = hlsStrip(videoUrl)
   elif extension == "HLS" and BW_SELECT: 
-    videoUrl = getStream(videoUrl)
+    (videoUrl, errormsg) = getStreamForBW(videoUrl)
 
   if extension == "F4M":
     videoUrl = videoUrl.replace("/z/", 
"/i/").replace("manifest.f4m","master.m3u8")
@@ -493,36 +515,37 @@ def startVideo(url):
   if extension == "None" and videoUrl:
     # No supported video was found
     common.log("No supported video extension found for URL: " + videoUrl)
-    videoUrl = None
+    return None
 
-  if videoUrl:
-    
-    if args and not (HLS_STRIP or BW_SELECT):
-      common.log("Appending arguments: "+args)
-      videoUrl = videoUrl + args
+  if args and not (HLS_STRIP or BW_SELECT):
+    videoUrl = videoUrl + args
 
-    if extension == "MP4" and videoUrl.startswith("rtmp://"):
-      videoUrl = videoUrl + " swfUrl="+svt.SWF_URL+" swfVfy=1"
- 
-    xbmcplugin.setResolvedUrl(pluginHandle, True, 
xbmcgui.ListItem(path=videoUrl))
+  if extension == "MP4" and videoUrl.startswith("rtmp://"):
+    videoUrl = videoUrl + " swfUrl="+svt.SWF_URL+" swfVfy=1"
 
-    if subtitle:
+  return (videoUrl, errormsg)
 
-      while not player.isPlaying() and time.time() - startTime < 10:
-        time.sleep(1.)
 
-      player.setSubtitles(subtitle)
+def getSubtitle(jsonObj):
+  """
+  Returns a subtitle from a JSON object
+  """
+  subtitle = None
 
-      if not SHOW_SUBTITLES:
-        player.showSubtitles(False)
-  else:
-    # No video URL was found
-    dialog = xbmcgui.Dialog()
-    dialog.ok("SVT PLAY", localize(30100))
+  for sub in jsonObj["video"]["subtitleReferences"]:
+    if sub["url"].endswith(".wsrt"):
+      subtitle = sub["url"]
+    else:
+      if len(sub["url"]) > 0:
+        common.log("Skipping unknown subtitle: " + sub["url"])
+
+  return subtitle
 
 
 def mp4Handler(jsonObj):
   """
+  Returns a mp4 stream URL.
+
   If there are several mp4 streams in the JSON object:
   pick the one with the highest bandwidth.
 
@@ -552,7 +575,7 @@ def mp4Handler(jsonObj):
       bitrate = video["bitrate"]
       url = video["url"]          
 
-  common.log("mp4 handler info: bitrate="+str(bitrate)+" url="+url)
+  common.log("Info: bitrate="+str(bitrate)+" url="+url)
   return url
 
 
@@ -596,15 +619,16 @@ def hlsStrip(videoUrl):
     return hlsurl
 
 
-def getStream(url):
+def getStreamForBW(url):
   """
-  Returns a stream matching the set bandwidth
+  Returns a stream URL for the set bandwidth,
+  and an error message, if applicable.
   """
   
   f = urllib.urlopen(url)
   lines = f.readlines()
   
-  hlsurl = ''
+  hlsurl = ""
   marker = "#EXT-X-STREAM-INF"
   found = False
 
@@ -621,9 +645,15 @@ def getStream(url):
           found = True
   
   f.close()
-  hlsurl = hlsurl.rstrip()
-  common.log("Returned stream url: " + hlsurl)
-  return hlsurl
+
+  if found:
+    hlsurl = hlsurl.rstrip()
+    common.log("Returned stream url: " + hlsurl)
+    return (hlsurl, '')
+  else:
+    errormsg = "No stream found for bandwidth setting " + str(LOW_BANDWIDTH)
+    common.log(errormsg)
+    return (None, errormsg)
 
 
 def addDirectoryItem(title, params, thumbnail = None, folder = True, live = 
False, info = None):
diff --git a/plugin.video.svtplay/resources/language/English/strings.xml 
b/plugin.video.svtplay/resources/language/English/strings.xml
index 6caeb99..9a44bd6 100644
--- a/plugin.video.svtplay/resources/language/English/strings.xml
+++ b/plugin.video.svtplay/resources/language/English/strings.xml
@@ -26,6 +26,6 @@
   <string id="30506">Show both clips and episodes for programs</string>
   <string id="30507">Set bandwidth manually</string>
   <string id="30508">Bandwidth</string>
-  <string id="40001">General</string>
-  <string id="40002">Advanced</string>
+  <string id="30601">General</string>
+  <string id="30602">Advanced</string>
 </strings>
diff --git a/plugin.video.svtplay/resources/language/Swedish/strings.xml 
b/plugin.video.svtplay/resources/language/Swedish/strings.xml
index c5a7906..e05365a 100644
--- a/plugin.video.svtplay/resources/language/Swedish/strings.xml
+++ b/plugin.video.svtplay/resources/language/Swedish/strings.xml
@@ -26,6 +26,6 @@
   <string id="30506">Visa både klipp och avsnitt för program</string>
   <string id="30507">Ställ in bandbredd manuellt</string>
   <string id="30508">Bandbredd</string>
-  <string id="40001">Allmänt</string>
-  <string id="40002">Avancerat</string>
+  <string id="30601">Allmänt</string>
+  <string id="30602">Avancerat</string>
 </strings>
diff --git a/plugin.video.svtplay/resources/lib/svt.py 
b/plugin.video.svtplay/resources/lib/svt.py
index a8daefb..da5da73 100644
--- a/plugin.video.svtplay/resources/lib/svt.py
+++ b/plugin.video.svtplay/resources/lib/svt.py
@@ -12,7 +12,7 @@ SWF_URL = 
"http://www.svtplay.se/public/swf/video/svtplayer-2013.05.swf";
 BANDWIDTH = [300,500,900,1600,2500,5000]
 
 URL_A_TO_O = "/program"
-URL_CATEGORIES = "/kategorier"
+URL_CATEGORIES = "/program"
 URL_CHANNELS = "/kanaler"
 URL_TO_LATEST = "?tab=senasteprogram&sida=1"
 URL_TO_LATEST_NEWS = "?tab=senastenyhetsprogram&sida=1"
@@ -130,6 +130,11 @@ def getCategories():
     category = {}
     category["url"] = common.parseDOM(li, "a", ret = "href")[0]
     title = common.parseDOM(li, "span")[0]
+
+    if category["url"].endswith("oppetarkiv"):
+      # Skip the "Oppetarkiv" category
+      continue
+
     category["title"] = common.replaceHTMLCodes(title)
     categories.append(category)
 
diff --git a/plugin.video.svtplay/resources/settings.xml 
b/plugin.video.svtplay/resources/settings.xml
index 3e1283a..a67e754 100644
--- a/plugin.video.svtplay/resources/settings.xml
+++ b/plugin.video.svtplay/resources/settings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <settings>
-  <category label="40001">
+  <category label="30601">
     <setting id="diritems" type="slider" label="30503" default="20" 
range="20,10,100" option="int" />
     <setting id="alpha" type="bool" label="30502" default="false" />
     <setting id="fullparse" type="bool" label="30506" default="false" />
@@ -8,7 +8,7 @@
     <setting id="showsubtitles" type="bool" label="30501" default="false" />
     <setting id="debug" type="bool" label="30500" default="false" />
   </category>
-  <category label="40002">
+  <category label="30602">
     <setting id="hlsstrip" type="bool" label="30505" default="false" />
     <setting id="bwselect" type="bool" label="30507" default="false" 
enable="eq(-1,false)" />
     <setting id="bandwidth" type="select" label="30508" default="2500" 
values="300|500|900|1600|2500" enable="eq(-1,true) + eq(-2,false)" />

-----------------------------------------------------------------------

Summary of changes:
 plugin.video.nrk/addon.xml                         |    2 +-
 plugin.video.nrk/changelog.txt                     |    6 +
 plugin.video.nrk/data.py                           |   46 ++++-----
 plugin.video.nrk/default.py                        |    5 +-
 .../resources/language/English/strings.xml         |   11 +-
 .../resources/language/Norwegian/strings.xml       |   11 +-
 plugin.video.nrk/resources/settings.xml            |    7 +-
 plugin.video.nrk/subs.py                           |    8 +-
 plugin.video.svtplay/addon.xml                     |    2 +-
 plugin.video.svtplay/changelog.txt                 |    4 +
 plugin.video.svtplay/default.py                    |  106 +++++++++++++-------
 .../resources/language/English/strings.xml         |    4 +-
 .../resources/language/Swedish/strings.xml         |    4 +-
 plugin.video.svtplay/resources/lib/svt.py          |    7 +-
 plugin.video.svtplay/resources/settings.xml        |    4 +-
 15 files changed, 134 insertions(+), 93 deletions(-)


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to