The branch, dharma has been updated
via 0f84f72ea2d7f9807bd31de44b3bfde2cd5d47e7 (commit)
from 3cfadae316aa931daa326b92c5aed70f511c4b58 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=0f84f72ea2d7f9807bd31de44b3bfde2cd5d47e7
commit 0f84f72ea2d7f9807bd31de44b3bfde2cd5d47e7
Author: amet <[email protected]>
Date: Tue Jun 14 13:00:50 2011 +0400
[script.xbmc.subtitles] -v 2.5.3
- fixed: ordering of OpenSubtitles results, thx to cidus
- fixed: Undertexter, it will now find Swedish subs
- fixed: Legendas-Zone.org version 0.1.7
- fixed: LegendasDivx.com v0.2.3
diff --git a/script.xbmc.subtitles/addon.xml b/script.xbmc.subtitles/addon.xml
index 35d7015..59131c3 100644
--- a/script.xbmc.subtitles/addon.xml
+++ b/script.xbmc.subtitles/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.xbmc.subtitles"
name="XBMC Subtitles"
- version="2.5.2"
+ version="2.5.3"
provider-name="Amet, mr_blobby">
<requires>
<import addon="xbmc.python" version="1.0"/>
diff --git a/script.xbmc.subtitles/changelog.txt
b/script.xbmc.subtitles/changelog.txt
index c2a80c9..3b681e8 100644
--- a/script.xbmc.subtitles/changelog.txt
+++ b/script.xbmc.subtitles/changelog.txt
@@ -1,5 +1,11 @@
+2.5.3
+- fixed: ordering of OpenSubtitles results, thx to cidus
+- fixed: Undertexter, it will now find Swedish subs
+- fixed: Legendas-Zone.org version 0.1.7
+- fixed: LegendasDivx.com v0.2.3
+
2.5.2
-- quick fix for broken settings file
+- fixed: broken settings file
2.5.1
- added: extra regex for "sXXepXX"
diff --git
a/script.xbmc.subtitles/resources/lib/services/LegendasDivx/service.py
b/script.xbmc.subtitles/resources/lib/services/LegendasDivx/service.py
index be7702c..16631ca 100644
--- a/script.xbmc.subtitles/resources/lib/services/LegendasDivx/service.py
+++ b/script.xbmc.subtitles/resources/lib/services/LegendasDivx/service.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Service LegendasDivx.com version 0.2.1
+# Service LegendasDivx.com version 0.2.3
# Code based on Undertext service
# Coded by HiGhLaNdR@OLDSCHOOL
# Help by VaRaTRoN
@@ -8,6 +8,10 @@
# http://www.teknorage.com
# License: GPL v2
#
+# NEW on Service LegendasDivx.com v0.2.3:
+# Fixed typo on the version.
+# Added built-in notifications.
+#
# NEW on Service LegendasDivx.com v0.2.2:
# Fixed pathnames using (os.sep). For sure :)
#
@@ -50,6 +54,7 @@ from utilities import log
_ = sys.modules[ "__main__" ].__language__
__scriptname__ = sys.modules[ "__main__" ].__scriptname__
__settings__ = sys.modules[ "__main__" ].__settings__
+__cwd__ = sys.modules[ "__main__" ].__cwd__
main_url = "http://www.legendasdivx.com/"
debug_pretext = "LegendasDivx"
@@ -104,6 +109,10 @@ subtitle_pattern =
"<div\sclass=\"sub_box\">[\r\n\t]{2}<div\sclass=\"sub_header\
#====================================================================================================================
# Functions
#====================================================================================================================
+def msg(text, timeout):
+ icon = os.path.join(__cwd__,"icon.png")
+ xbmc.executebuiltin("XBMC.Notification(%s,%s,%s,%s)" %
(__scriptname__,text,timeout,icon))
+
def getallsubs(searchstring, languageshort, languagelong, file_original_path,
subtitles_list, searchstring_notclean):
@@ -113,6 +122,7 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
content = geturl(url)
log( __name__ ,"%s Getting '%s' subs ..." % (debug_pretext,
languageshort))
+ msg("Searching Title... Please wait!", 6000)
while re.search(subtitle_pattern, content, re.IGNORECASE | re.DOTALL |
re.MULTILINE | re.UNICODE | re.VERBOSE) and page < 6:
for matches in re.finditer(subtitle_pattern, content,
re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE):
hits = matches.group(5)
@@ -171,6 +181,11 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
url = main_url +
"modules.php?name=Downloads&file=jz&d_op=search_next&order=&form_cat=28&page="
+ str(page) + "&query=" + urllib.quote_plus(searchstring)
content = geturl(url)
+ if subtitles_list != []:
+ msg("Finished Searching. Choose One!", 3000)
+ else:
+ msg("No Results! Try Parent Dir Or Manual!", 4000)
+
# Bubble sort, to put syncs on top
for n in range(0,len(subtitles_list)):
for i in range(1, len(subtitles_list)):
@@ -267,6 +282,7 @@ def recursive_glob(treeroot, pattern):
def download_subtitles (subtitles_list, pos, zip_subs, tmp_sub_dir,
sub_folder, session_id): #standard input
+ msg("Downloading... Please Wait!", 6000)
id = subtitles_list[pos][ "id" ]
sync = subtitles_list[pos][ "sync" ]
log( __name__ ,"%s Fetching id using url %s" % (debug_pretext, id))
@@ -326,6 +342,7 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
max_mtime = mtime
init_max_mtime = max_mtime
time.sleep(2) # wait 2 seconds so that the unpacked
files are at least 1 second newer
+ msg("Extracting... Please Wait!", 6000)
xbmc.executebuiltin("XBMC.Extract(" + local_tmp_file +
"," + tmp_sub_dir +")")
waittime = 0
while (filecount == init_filecount) and (waittime < 20)
and (init_max_mtime == max_mtime): # nothing yet extracted
@@ -343,6 +360,7 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
if waittime == 20:
log( __name__ ,"%s Failed to unpack subtitles
in '%s'" % (debug_pretext, tmp_sub_dir))
else:
+ msg("Done Extracting!", 3000)
log( __name__ ,"%s Unpacked files in '%s'" %
(debug_pretext, tmp_sub_dir))
searchrars = recursive_glob(tmp_sub_dir,
packext)
searchrarcount = len(searchrars)
@@ -422,5 +440,7 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
if subs_file ==
tmp_sub_dir+"/": subs_file = ""
elif sub_tmp:
subs_file = sub_tmp[0]
-
+
+ msg("Playing Title!", 3000)
+
return False, language, subs_file #standard output
\ No newline at end of file
diff --git
a/script.xbmc.subtitles/resources/lib/services/LegendasZone/service.py
b/script.xbmc.subtitles/resources/lib/services/LegendasZone/service.py
index a916fdf..a4153bd 100644
--- a/script.xbmc.subtitles/resources/lib/services/LegendasZone/service.py
+++ b/script.xbmc.subtitles/resources/lib/services/LegendasZone/service.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Service Legendas-Zone.org version 0.1.6
+# Service Legendas-Zone.org version 0.1.7
# Code based on Undertext service
# Coded by HiGhLaNdR@OLDSCHOOL
# Help by VaRaTRoN
@@ -9,6 +9,10 @@
# License: GPL v2
#
#
+# NEW on Service Legendas-Zone.org v0.1.7:
+# Changed 2 patterns that were crashing the plugin, now it works correctly.
+# Better builtin notifications for better information.
+#
# NEW on Service Legendas-Zone.org v0.1.6:
# Better search results with 3 types of searching. Single title, multi titles
and IMDB search.
# Added builtin notifications for better information.
@@ -37,15 +41,19 @@ packext = ['rar', 'zip']
"""
#details_pattern =
"<b>CD\#:</b>\s(.+?)\s.+?<b>Hits:</b>\s(.+?)</b>.+?<b>Linguagem:</b>.+?border=\"0\"\salt=\"(.+?)\"\stitle"
#subtitle_pattern =
"onmouseover=\"Tip\(\'<table><tr><td><b>(.+?)</b></td></tr></table>.+?<b>Hits:</b>\s(.+?)\s<br>.+?<b>CDs:</b>\s(.+?)<br>.+?Uploader:</b>\s(.+?)</td>"
-subtitle_pattern =
"<a\shref=\"legendas.php.+?amp;(.+?)\".+?[\r\n\t]+?.+?[\r\n\t]+?.+?onmouseover=\"Tip\(\'<table><tr><td><b>(.+?)</b></td></tr></table>.+?<b>Hits:</b>\s(.+?)\s<br>.+?<b>CDs:</b>\s(.+?)<br>.+?Uploader:</b>\s(.+?)</td>"
+subtitle_pattern =
"<b><a\shref=\"legendas.php\?modo=detalhes&(.+?)\".+?[\r\n\t]+?.+?[\r\n\t]+?.+?onmouseover=\"Tip\(\'<table><tr><td><b>(.+?)</b></td></tr></table>.+?<b>Hits:</b>\s(.+?)\s<br>.+?<b>CDs:</b>\s(.+?)<br>.+?Uploader:</b>\s(.+?)</td>"
# group(1) = ID, group(2) = Name, group(3) = Hits, group(4) = Files, group(5)
= Uploader
multiple_results_pattern =
"<td\salign=\"left\".+?<b><a\shref=\"legendas.php\?imdb=(.+?)&l=pt\"\stitle=\".+?\">.+?</td>"
# group(1) = IMDB
-imdb_pattern =
"<p><b>Popular\sTitles</b>\s\(Displaying.+?Results\)<table><tr>.+?<a\shref=\"\/title\/tt(.+?)\/\""
+imdb_pattern =
"<p><b>Popular\sTitles</b>\s\(Displaying.+?Result.+?<table><tr>.+?<a\shref=\"\/title\/tt(.+?)\/\""
# group(1) = IMDB
#====================================================================================================================
# Functions
#====================================================================================================================
+def msg(text, timeout):
+ icon = os.path.join(__cwd__,"icon.png")
+ xbmc.executebuiltin("XBMC.Notification(%s,%s,%s,%s)" %
(__scriptname__,text,timeout,icon))
+
def getallsubs(searchstring, languageshort, languagelong, file_original_path,
subtitles_list, searchstring_notclean):
#Grabbing login and pass from xbmc settings
@@ -67,8 +75,7 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
content = content.read()
if re.search(multiple_results_pattern, content, re.IGNORECASE |
re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE) == None:
log( __name__ ,"%s Getting '%s' subs ..." % (debug_pretext,
"Single Title"))
- icon = os.path.join(__cwd__,"icon.png")
- xbmc.executebuiltin("XBMC.Notification(%s,%s,6000,%s)" %
(__scriptname__,"Searching single title... Please wait!",icon))
+ msg("Searching Single Title... Please wait!", 6000)
while re.search(subtitle_pattern, content, re.IGNORECASE |
re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE) and page < 6:
for matches in re.finditer(subtitle_pattern, content,
re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE):
hits = matches.group(3)
@@ -125,8 +132,8 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
else:
if
re.search(filesearch[1][:len(filesearch[1])-4], desc):
sync = True
- filename = filename + " " + hits + "Hits" + "
- " + desc + " - uploader: " + uploader
- subtitles_list.append({'rating':
str(downloads), 'no_files': no_files, 'id': id, 'filename': filename, 'desc':
desc, 'sync': sync, 'hits' : hits, 'language_flag': 'flags/' + languageshort +
'.gif', 'language_name': languagelong})
+ #filename = filename + " " + hits + "Hits" + "
- " + desc + " - uploader: " + uploader
+ subtitles_list.append({'rating':
str(downloads), 'no_files': no_files, 'id': id, 'filename': filename, 'desc':
desc, 'sync': sync, 'hits': hits, 'language_flag': 'flags/' + languageshort +
'.gif', 'language_name': languagelong})
page = page + 1
url = main_url + " legendas.php?l=pt&page=" +
str(page) + "&s=" + urllib.quote_plus(searchstring)
content = opener.open(url)
@@ -142,8 +149,7 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
maxsubs = re.findall(multiple_results_pattern, content,
re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE)
maxsubs = len(maxsubs)
if maxsubs < 10:
- icon = os.path.join(__cwd__,"icon.png")
- xbmc.executebuiltin("XBMC.Notification(%s,%s,6000,%s)"
% (__scriptname__,"Searching many titles... Please wait!",icon))
+ msg("Searching Many Title... Please wait!", 6000)
while re.search(multiple_results_pattern, content,
re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE):
log( __name__ ,"%s Getting '%s' subs ..." %
(debug_pretext, "Less Then 10 Titles"))
for resmatches in
re.finditer(multiple_results_pattern, content, re.IGNORECASE | re.DOTALL |
re.MULTILINE | re.UNICODE | re.VERBOSE):
@@ -226,8 +232,7 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
page1 = 0
content1 = opener.open(main_url +
"legendas.php?l=pt&imdb=" + imdb[0] + "&page=" + str(page1))
content1 = content1.read()
- icon = os.path.join(__cwd__,"icon.png")
- xbmc.executebuiltin("XBMC.Notification(%s,%s,6000,%s)"
% (__scriptname__,"Too many hits. Grabbing IMDB title!",icon))
+ msg("Too many hits. Grabbing IMDB title!", 6000)
while re.search(subtitle_pattern, content1,
re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE):
log( __name__ ,"%s Getting '%s' subs ..." %
(debug_pretext, "IMDB Title"))
for matches in re.finditer(subtitle_pattern,
content1, re.IGNORECASE | re.DOTALL | re.MULTILINE | re.UNICODE | re.VERBOSE):
@@ -294,7 +299,11 @@ def getallsubs(searchstring, languageshort, languagelong,
file_original_path, su
#For DEBUG only uncomment next line
- xbmc.executebuiltin("XBMC.Notification(%s,%s,6000,%s)" %
(__scriptname__,"Finished searching!",icon))
+ if subtitles_list != []:
+ msg("Finished Searching. Choose One!", 3000)
+ else:
+ msg("No Results! Try Parent Dir Or Manual!", 4000)
+
#Bubble sort, to put syncs on top
for n in range(0,len(subtitles_list)):
for i in range(1, len(subtitles_list)):
@@ -391,6 +400,7 @@ def recursive_glob(treeroot, pattern):
def download_subtitles (subtitles_list, pos, zip_subs, tmp_sub_dir,
sub_folder, session_id): #standard input
+ msg("Downloading... Please Wait!", 6000)
id = subtitles_list[pos][ "id" ]
id = string.split(id,"=")
id = id[-1]
@@ -450,8 +460,7 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
max_mtime = mtime
init_max_mtime = max_mtime
time.sleep(2) # wait 2 seconds so that the unpacked
files are at least 1 second newer
- icon = os.path.join(__cwd__,"icon.png")
- xbmc.executebuiltin("XBMC.Notification(%s,%s,6000,%s)"
% (__scriptname__,"Extracting Subtitles...",icon))
+ msg("Extracting Subtitles!", 6000)
xbmc.executebuiltin("XBMC.Extract(" + local_tmp_file +
"," + tmp_sub_dir +")")
waittime = 0
while (filecount == init_filecount) and (waittime < 20)
and (init_max_mtime == max_mtime): # nothing yet extracted
@@ -469,6 +478,7 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
if waittime == 20:
log( __name__ ,"%s Failed to unpack subtitles
in '%s'" % (debug_pretext, tmp_sub_dir))
else:
+ msg("Done Extracting!", 3000)
log( __name__ ,"%s Unpacked files in '%s'" %
(debug_pretext, tmp_sub_dir))
searchrars = recursive_glob(tmp_sub_dir,
packext)
searchrarcount = len(searchrars)
@@ -552,6 +562,6 @@ def download_subtitles (subtitles_list, pos, zip_subs,
tmp_sub_dir, sub_folder,
subs_file = sub_tmp[0]
-
-
+ msg("Playing Title!", 3000)
+
return False, language, subs_file #standard output
\ No newline at end of file
diff --git
a/script.xbmc.subtitles/resources/lib/services/OpenSubtitles/os_utilities.py
b/script.xbmc.subtitles/resources/lib/services/OpenSubtitles/os_utilities.py
index 43c4c9c..af25830 100644
--- a/script.xbmc.subtitles/resources/lib/services/OpenSubtitles/os_utilities.py
+++ b/script.xbmc.subtitles/resources/lib/services/OpenSubtitles/os_utilities.py
@@ -12,10 +12,7 @@ _ = sys.modules[ "__main__" ].__language__
BASE_URL_XMLRPC = u"http://api.opensubtitles.org/xml-rpc"
BASE_URL_HASH =
u"http://www.opensubtitles.org/en/search/sublanguageid-%s/moviebytesize-%s/moviehash-%s/simplexml"
-BASE_URL_NAME =
u"http://www.opensubtitles.com/en/search/sublanguageid-%s/moviename-%s/simplexml"
-
-def compare_columns(b,a):
- return cmp( b["language_name"], a["language_name"] ) or cmp(
a["sync"], b["sync"] )
+BASE_URL_NAME =
u"http://www.opensubtitles.com/en/search/sublanguageid-%s/moviename-%s/simplexml"
class OSDBServer:
@@ -31,7 +28,7 @@ class OSDBServer:
if( len ( self.subtitles_list ) > 0 ):
- self.subtitles_list = sorted(self.subtitles_list, compare_columns)
+ self.subtitles_list.sort(key=lambda x: [not
x['sync'],x['lang_index']])
###-------------------------- Sort Subtitles -------------################
@@ -39,6 +36,7 @@ class OSDBServer:
filename = movie = lang_name = subtitle_id = lang_id = link = ""
flag_image = "-.gif"
+ lang_index=3
if subtitle.getElementsByTagName("releasename")[0].firstChild:
filename =
subtitle.getElementsByTagName("releasename")[0].firstChild.data
@@ -53,14 +51,19 @@ class OSDBServer:
subtitle_id =
subtitle.getElementsByTagName("idsubtitle")[0].firstChild.data
if subtitle.getElementsByTagName("iso639")[0].firstChild:
lang_id =
subtitle.getElementsByTagName("iso639")[0].firstChild.data
- flag_image = "flags/%s.gif" % (lang_id,)
+ flag_image = "flags/%s.gif" % (lang_id,)
+ lang_index=0
+ for user_lang_id in self.langs_ids:
+ if user_lang_id == lang_id:
+ break
+ lang_index+=1
if subtitle.getElementsByTagName("download")[0].firstChild:
link = subtitle.getElementsByTagName("download")[0].firstChild.data
link = url_base + link
if subtitle.getElementsByTagName("subrating")[0].firstChild:
rating =
subtitle.getElementsByTagName("subrating")[0].firstChild.data
-
self.subtitles_hash_list.append({'filename':filename,'link':link,'language_name':lang_name,'language_id':lang_id,'language_flag':flag_image,'movie':movie,"ID":subtitle_id,"rating":str(
int( rating[0] ) ),"format":format,"sync":hashed})
+
self.subtitles_hash_list.append({'lang_index':lang_index,'filename':filename,'link':link,'language_name':lang_name,'language_id':lang_id,'language_flag':flag_image,'movie':movie,"ID":subtitle_id,"rating":str(
int( rating[0] ) ),"format":format,"sync":hashed})
def get_results ( self, search_url ):
@@ -77,6 +80,7 @@ class OSDBServer:
self.subtitles_hash_list = []
self.subtitles_list =[]
+ self.langs_ids = [toOpenSubtitles_two(lang1),
toOpenSubtitles_two(lang2), toOpenSubtitles_two(lang3)]
search_url1 = None
search_url2 = None
msg = ""
diff --git
a/script.xbmc.subtitles/resources/lib/services/Undertexter/service.py
b/script.xbmc.subtitles/resources/lib/services/Undertexter/service.py
index 06dc0d8..11fe852 100644
--- a/script.xbmc.subtitles/resources/lib/services/Undertexter/service.py
+++ b/script.xbmc.subtitles/resources/lib/services/Undertexter/service.py
@@ -14,9 +14,18 @@ debug_pretext = ""
# subtitle pattern example:
"""
-<a href="http://www.engsub.net/86981/" alt=....
-or
-<a href="http://www.undertexter.se/22743/" alt="Dexter S05E01 - My Bad"
title="Dexter S05E01 - My Bad"><b>
+sv:
+<a style="text-decoration: none;" title="Ladda ner undertext till 127 Hours "
alt="Ladda ner undertext till 127 Hours "
href="http://www.undertexter.se/laddatext.php?id=24255 ">
+ <img src="http://www.undertexter.se/bilder/ladda_codec_mini.gif"
width="70" height="18" border="0" align="right"></a>
+ (1 cd)
+
<br> <img src="http://www.undertexter.se/bilder/spacer.gif"
height="2"><br>
+ Nedladdningar: 1154<br>
+ <img
src="http://www.undertexter.se/bilder/spacer.gif" height="3"><br>
+ 127
Hours_2010_HD_720p_x264_SAG_screener [mf34inc]</td>
+
+
+en:
+<a href="http://www.engsub.net/86981/" alt="Dexter S05E01 - My Bad"
title="Dexter S05E01 - My Bad"><b>
Dexter S05E01 - My Bad</b>
</a></td>
</tr>
@@ -28,8 +37,8 @@ or
<img
src="http://www.undertexter.se/bilder/spacer.gif" height="3"><br>
Dexter.S05E01.720p.HDTV.x264-ORENJI</td>
"""
-sv_subtitle_pattern = "<a href=\"http://www.undertexter.se/(\d{1,10})/\"
alt=\"[^\r\n\t]*?\" title=\"[^\r\n\t]*?\"><b>\
-[ \r\n]*?[^\r\n\t]*?</b>.{400,500}?\(1 cd\).{250,550}?[
\r\n]*([^\r\n\t]*?)</td>[ \r\n]*?[^\r\n\t]*?</tr>"
+sv_subtitle_pattern =
"href=\"http://www.undertexter.se/laddatext.php\?id=(\d{1,10}) \">\
+[ \r\n]*?.{100,200}?\(1 cd\)[ \r\n]*?.{200,300}?height=\"3\"><br>[
\r\n]*?([^\r\n\t]*?)</td>"
# group(1) = id, group(2) = filename
en_subtitle_pattern = "<a href=\"http://www.engsub.net/(\d{1,10})/\"
alt=\"[^\r\n\t]*?\" title=\"[^\r\n\t]*?\"><b>\
-----------------------------------------------------------------------
Summary of changes:
script.xbmc.subtitles/addon.xml | 2 +-
script.xbmc.subtitles/changelog.txt | 8 +++-
.../resources/lib/services/LegendasDivx/service.py | 24 ++++++++++-
.../resources/lib/services/LegendasZone/service.py | 42 ++++++++++++-------
.../lib/services/OpenSubtitles/os_utilities.py | 18 +++++---
.../resources/lib/services/Undertexter/service.py | 19 +++++++--
6 files changed, 81 insertions(+), 32 deletions(-)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons