The branch, frodo has been updated
via e315111438551d0228426cba32470275939dafd2 (commit)
from 116335be9afd0e76406ecde9a188df39c3000d9c (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=e315111438551d0228426cba32470275939dafd2
commit e315111438551d0228426cba32470275939dafd2
Author: Martijn Kaijser <[email protected]>
Date: Tue Mar 4 18:33:52 2014 +0100
[screensaver.randomtrailers] 1.1.13
diff --git a/screensaver.randomtrailers/addon.xml
b/screensaver.randomtrailers/addon.xml
index e5a7e48..9bf93b4 100644
--- a/screensaver.randomtrailers/addon.xml
+++ b/screensaver.randomtrailers/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<addon id="screensaver.randomtrailers"
name="Random Trailers"
- version="1.1.10"
+ version="1.1.13"
provider-name="kzeleny">
<requires>
<import addon="xbmc.python"
version="2.1.0"/>
diff --git a/screensaver.randomtrailers/changelog.txt
b/screensaver.randomtrailers/changelog.txt
index d65a068..0587649 100644
--- a/screensaver.randomtrailers/changelog.txt
+++ b/screensaver.randomtrailers/changelog.txt
@@ -1,3 +1,12 @@
+v.1.1.13 (March 03,2014)
+ - updated filter feature to filter by rating limit for all trailers
(perviously only iTunes trailers were filtered)
+
+v.1.1.12 (February 12,2014)
+- added feature to play trailers in groups of n with x amount of delay between
groups.
+
+v.1.1.11 (February 10,2014)
+- added feature to filter tmdb trailers by New DVD Releases
+
v.1.10 (February, 07, 2014)
- fixed issue playing library trailers
@@ -14,7 +23,7 @@ v.1.1.7 (January, 5, 2014) :
-moved hide info option from library to general settings
v.1.1.6 (December 31,2013) :
-- added feature to select tyep fo traielrs form iTunes, Coming Soon, Just
Added, Most Popular, Exclusive and All
+- added feature to select type of trailers form iTunes, Coming Soon, Just
Added, Most Popular, Exclusive and All
v.1.1.5 (Decembeor 30,2013) :
- added feature to filter iTunes trailers. you can filter by selected
genre(s), and by rating limit. so only play family movies that are rated G for
example.
diff --git a/screensaver.randomtrailers/default.py
b/screensaver.randomtrailers/default.py
index 6c0efa5..f4b802c 100644
--- a/screensaver.randomtrailers/default.py
+++ b/screensaver.randomtrailers/default.py
@@ -128,15 +128,15 @@ def checkRating(rating):
if do_nr == 'true':nr='NR'
if rating_limit=='0':passed=True
if rating_limit=='1':
- rating_limit=['G',nr,nyr]
+ rating_limit=('G',nr,nyr)
if rating_limit=='2':
- rating_limit=['G','PG',nr,nyr]
+ rating_limit=('G','PG',nr,nyr)
if rating_limit=='3':
- rating_limit=['G','PG','PG-13',nr,nyr]
+ rating_limit=('G','PG','PG-13',nr,nyr)
if rating_limit=='4':
- rating_limit=['G','PG','PG-13','R',nr,nyr]
+ rating_limit=('G','PG','PG-13','R',nr,nyr)
if rating_limit=='5':
- rating_limit=['G','PG','PG-13','R','NC-17',nr,nyr]
+ rating_limit=('G','PG','PG-13','R','NC-17','NC17',nr,nyr)
if rating in rating_limit:passed=True
return passed
@@ -316,7 +316,9 @@ def getLibraryTrailers(genre):
for trailer in tmp_trailers:
trailer['source'] = 'library'
trailer['type'] = 'Trailer'
- lib_trailers.append(trailer)
+ mpaa=get_mpaa(trailer)
+ if checkRating(mpaa):
+ lib_trailers.append(trailer)
return lib_trailers
def getFolderTrailers(path):
@@ -348,7 +350,9 @@ def getTmdbTrailers():
if addon.getSetting("tmdb_source") == '1':source='top_rated'
if addon.getSetting("tmdb_source") == '2':source='upcoming'
if addon.getSetting("tmdb_source") == '3':source='now_playing'
- if addon.getSetting("tmdb_source") == '4':
+ if addon.getSetting("tmdb_source") == '4':source='dvd'
+ if addon.getSetting("tmdb_source") == '5':source='all'
+ if source=='all':
data = {}
data['api_key'] = '99e8b7beac187a857152f57d67495cf4'
url_values = urllib.urlencode(data)
@@ -363,6 +367,31 @@ def getTmdbTrailers():
id=id+1
dict={'trailer':'tmdb','id': id}
tmdbTrailers.append(dict)
+ elif source=='dvd':
+ data={}
+ data['apikey']='99dgtphe3c29y85m2g8dmdmt'
+ data['country'] = 'us'
+ url_values = urllib.urlencode(data)
+ url =
'http://api.rottentomatoes.com/api/public/v1.0/lists/dvds/new_releases.json'
+ full_url = url + '?' + url_values
+ req = urllib2.Request(full_url)
+ response = urllib2.urlopen(req).read()
+ infostring = json.loads(response)
+ for movie in infostring['movies']:
+ data={}
+ data['api_key']='99e8b7beac187a857152f57d67495cf4'
+ data['query']=movie['title']
+ data['year']=movie['year']
+ url_values = urllib.urlencode(data)
+ url = 'https://api.themoviedb.org/3/search/movie'
+ full_url = url + '?' + url_values
+ req = urllib2.Request(full_url)
+ infostring = urllib2.urlopen(req).read()
+ infostring = json.loads(infostring)
+ for m in infostring['results']:
+ id=m['id']
+ dict={'trailer':'tmdb','id': id}
+ tmdbTrailers.append(dict)
else:
page=0
for i in range(0,5):
@@ -383,6 +412,26 @@ def getTmdbTrailers():
tmdbTrailers.append(dict)
return tmdbTrailers
+def search_tmdb(title,year):
+ id=''
+ data = {}
+ data['api_key'] = '99e8b7beac187a857152f57d67495cf4'
+ data['page']='1'
+ data['query']=query
+ data['language']='en'
+ url_values = urllib.urlencode(data)
+ url = 'https://api.themoviedb.org/3/search/movie'
+ full_url = url + '?' + url_values
+ req = urllib2.Request(full_url)
+ infostring = urllib2.urlopen(req).read()
+ infostring = json.loads(infostring)
+ results=infostring['results']
+ for movie in results:
+ if movie['year']==year:
+ id=movie['id']
+ break
+ return id
+
def getTmdbTrailer(movieId):
trailer_url=''
type=''
@@ -412,6 +461,7 @@ def getTmdbTrailer(movieId):
for c in countries:
if c['iso_3166_1'] =='US':
mpaa=c['certification']
+ if mpaa=='':mpaa='NR'
year=movieString['release_date'][:-6]
fanart=image_base_url + 'w300'+str(movieString['backdrop_path'])
thumbnail=image_base_url + 'w342'+str(movieString['poster_path'])
@@ -442,7 +492,9 @@ def getTmdbTrailer(movieId):
for s in movieString['spoken_languages']:
if s['name']=='English':
addMovie=True
- if movieString['adult']=='true':AddMovie = False
+ if movieString['adult']=='true':addMovie = False
+ xbmc.log('Rating=' + mpaa)
+ addMovie = checkRating(mpaa)
if not addMovie:
dictInfo = {'title':'','trailer':
'','year':0,'studio':[],'mpaa':'','file':'','thumbnail':'','fanart':'','director':[],'writer':[],'plot':'','cast':'','runtime':0,'genre':[],'source':
'tmdb','type':''}
else:
@@ -474,14 +526,17 @@ class trailerWindow(xbmcgui.WindowXMLDialog):
played=[]
played.append(trailer["number"])
if trailer['trailer']=='tmdb':
- if addon.getSetting('tmdb_source') == '4':
+ if addon.getSetting('tmdb_source') == '5':
dp=xbmcgui.DialogProgress()
dp.create('Random Trailers','Please wait while we get a random
trailer from themoviedb...')
gotTrailer=False
searchCount=0
while not gotTrailer:
searchCount=searchCount+1
- trailer=getTmdbTrailer(trailer['id'])
+ try:
+ trailer=getTmdbTrailer(trailer['id'])
+ except:
+ trailer['trailer']=''
if trailer['trailer'] != '':
gotTrailer=True
else:
@@ -500,6 +555,11 @@ class trailerWindow(xbmcgui.WindowXMLDialog):
else:
trailer=getTmdbTrailer(trailer['id'])
source=trailer['source']
+ if source=='library':
+ if trailer['trailer']=='': #no trailer search tmdb for one
+ id=search_tmdb(trailer['title'],trailer['year'])
+ if id!='':
+ trailer['trailer']=getTmdbTrailer(id)
lastPlay = True
if 'lastplayed' in trailer:
if not trailer["lastplayed"] =='' and hide_watched == 'true':
@@ -513,10 +573,13 @@ class trailerWindow(xbmcgui.WindowXMLDialog):
else:
lastPlay = False
if source == 'iTunes':
- content = opener.open(trailer['trailer']).read()
- match = re.compile('<a class="movieLink" href="(.+?)"',
re.DOTALL).findall(content)
- urlTemp = match[0]
- url = urlTemp[:urlTemp.find("?")].replace("480p",
"h"+quality)+"|User-Agent=iTunes/9.1.1"
+ try:
+ content = opener.open(trailer['trailer']).read()
+ match = re.compile('<a class="movieLink" href="(.+?)"',
re.DOTALL).findall(content)
+ urlTemp = match[0]
+ url = urlTemp[:urlTemp.find("?")].replace("480p",
"h"+quality)+"|User-Agent=iTunes/9.1.1"
+ except:
+ url=''
else:
url = trailer['trailer'].encode('ascii', 'ignore')
if trailer["trailer"] != '' and lastPlay:
@@ -566,7 +629,7 @@ class trailerWindow(xbmcgui.WindowXMLDialog):
global source
global trailer
movie_file=''
-
+ xbmc.log(str(action.getId()))
if action == ACTION_Q:
strCouchPotato='plugin://plugin.video.couchpotato_manager/movies/add?title='+trailer['title']
xbmc.executebuiltin('XBMC.RunPlugin('+strCouchPotato+')')
@@ -745,7 +808,7 @@ class infoWindow(xbmcgui.WindowXMLDialog):
xbmc.Player().stop()
exit_requested=True
self.close()
-
+
def playTrailers():
global exit_requested
global movie_file
@@ -756,6 +819,11 @@ def playTrailers():
DO_CURTIANS = addon.getSetting('do_animation')
DO_EXIT = addon.getSetting('do_exit')
NUMBER_TRAILERS = int(addon.getSetting('number_trailers'))
+ GROUP_TRAILERS = False
+ if addon.getSetting('group_trailers')=='true':GROUP_TRAILERS = True
+ GROUP_NUMBER = int(addon.getSetting('group_number'))
+ GROUP_COUNT=GROUP_NUMBER
+ GROUP_DELAY = (int(addon.getSetting('group_delay')) * 60) * 1000
if DO_CURTIANS == 'true':
xbmc.Player().play(open_curtain_path)
while xbmc.Player().isPlaying():
@@ -764,14 +832,30 @@ def playTrailers():
while not exit_requested:
if NUMBER_TRAILERS == 0:
while not exit_requested and not xbmc.abortRequested:
+ if GROUP_TRAILERS:
+ GROUP_COUNT=GROUP_COUNT - 1
mytrailerWindow = trailerWindow('script-trailerwindow.xml',
addon_path,'default',)
mytrailerWindow.doModal()
del mytrailerWindow
+ if GROUP_TRAILERS and GROUP_COUNT==0:
+ GROUP_COUNT=GROUP_NUMBER
+ i = GROUP_DELAY
+ while i > 0 and not exit_requested and not
xbmc.abortRequested:
+ xbmc.sleep(500)
+ i=i-500
else:
while NUMBER_TRAILERS > 0:
+ if GROUP_TRAILERS:
+ GROUP_COUNT=GROUP_COUNT - 1
mytrailerWindow = trailerWindow('script-trailerwindow.xml',
addon_path,'default',)
mytrailerWindow.doModal()
del mytrailerWindow
+ if GROUP_TRAILERS and GROUP_COUNT==0:
+ GROUP_COUNT=GROUP_NUMBER
+ i = GROUP_DELAY
+ while i > 0 and not exit_requested and not
xbmc.abortRequested:
+ xbmc.sleep(500)
+ i=i-500
if exit_requested:
break
if not exit_requested:
@@ -781,7 +865,32 @@ def playTrailers():
xbmc.sleep(250)
exit_requested=True
-if not xbmc.Player().isPlaying():
+def check_for_xsqueeze():
+ KEYMAPDESTFILE =
os.path.join(xbmc.translatePath('special://userdata/keymaps'), "xsqueeze.xml")
+ if os.path.isfile(KEYMAPDESTFILE):
+ return True
+ else:
+ return False
+
+def get_mpaa(trailer):
+ Rating='NR'
+ if trailer["mpaa"].startswith('G'): Rating='G'
+ if trailer["mpaa"] == ('G'): Rating='G'
+ if trailer["mpaa"].startswith('Rated G'): Rating='G'
+ if trailer["mpaa"].startswith('PG '): Rating='PG'
+ if trailer["mpaa"] == ('PG'): Rating='PG'
+ if trailer["mpaa"].startswith('Rated PG'): Rating='PG'
+ if trailer["mpaa"].startswith('PG-13 '): Rating='PG-13'
+ if trailer["mpaa"] == ('PG-13'): Rating='PG-13'
+ if trailer["mpaa"].startswith('Rated PG-13'): Rating='PG-13'
+ if trailer["mpaa"].startswith('R '): Rating='R'
+ if trailer["mpaa"] == ('R'): Rating='R'
+ if trailer["mpaa"].startswith('Rated R'): Rating='R'
+ if trailer["mpaa"].startswith('NC17'): Rating='NC17'
+ if trailer["mpaa"].startswith('Rated NC17'): 'NC17'
+ return Rating
+
+if not xbmc.Player().isPlaying() and not check_for_xsqueeze():
bs = blankWindow('script-BlankWindow.xml', addon_path,'default',)
bs.show()
trailers = []
diff --git a/screensaver.randomtrailers/resources/language/English/strings.xml
b/screensaver.randomtrailers/resources/language/English/strings.xml
index 11b5692..009b1a9 100644
--- a/screensaver.randomtrailers/resources/language/English/strings.xml
+++ b/screensaver.randomtrailers/resources/language/English/strings.xml
@@ -53,6 +53,10 @@
<string id="32049">Upcoming</string>
<string id="32050">Now Playing</string>
<string id="32051">All</string>
+ <string id="32052">New DVD Releases</string>
+ <string id="32053">Play Trailers in Groups</string>
+ <string id="32054">Number of Trailers in Each Group</string>
+ <string id="32055">Minutes Between Groups</string>
<string id="32102">Genres</string>
<string id="32100">Select Genre</string>
<string id="32101">Do you want to select a genre to watch?</string>
diff --git a/screensaver.randomtrailers/resources/settings.xml
b/screensaver.randomtrailers/resources/settings.xml
index f818e09..3218f57 100644
--- a/screensaver.randomtrailers/resources/settings.xml
+++ b/screensaver.randomtrailers/resources/settings.xml
@@ -1,56 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<settings>
- <category label="32016">
- <setting label="32026" type="lsep"/>
- <setting id="number_trailers" type="number" label="32000" default="10"
/>
- <setting id="do_animation" type="bool" label="32001" default="true" />
- <setting id="hide_title" type="bool" label="32008" defalt="false"/>
- <setting id="hide_info" type="bool" label="32003" default="false" />
- <setting id="do_volume" type="bool" label="32006" default="false" />
- <setting id="volume" label="32011" type="number" enable =
"eq(-1,true)" default="100" />
- <setting id="do_fullscreen" type="bool" label="32007" default="false"
/>
- </category>
- <category label="32015">
- <setting label="32012" type="lsep"/>
- <setting id="do_library" type="bool" label="32021" default="true" />
- <setting id="do_genre" type="bool" enable = "eq(-1,true)"
label="32002" default="false" />
- <setting id="hide_watched" type="bool" enable = "eq(-2,true)"
label="32004" default="false" />
- <setting id="watched_days" type="number" enable="eq(-1,true)"
label="32005" default="365" />
- </category>
- <category label="32045">
- <setting label="32046" type ="sep" />
- <setting id="do_tmdb" type="bool" label="32044" default="true" />
- <setting id="tmdb_source" label="32043" type="enum"
enable="eq(-1,true)" default="0" lvalues="32047|32048|32049|32050|32051" />
- </category>
- <category label="32025">
- <setting label="32013" type="lsep"/>
- <setting id="do_itunes" type="bool" label="32023" default="true" />
- <setting id="quality" type="enum" enable ="eq(-1,true)" label="32014"
values="480p|720p|1080p" default="0"/>
- <setting id="trailer_type" type="enum" enable="eq(-2,true)"
label="32043" values="Coming Soon|Just Added|Popular|Exclusive|All" default="4"
/>
- <setting id="do_clips" type="bool" enable = "eq(-3,true)"
label="32018" default="true" />
- <setting id="do_featurettes" type="bool" enable = "eq(-4,true)"
label="32019" default="true" />
- <setting id="rating_limit" type="enum" enable = "eq(-5,true)"
label="32040" default="0" values="None|G|PG|PG-13|R|NC-17" />
- <setting id="do_notyetrated" type="bool" enable = "!eq(-1,0)"
label="32041" default="false" />
- <setting id="do_nr" type="bool" enable = "!eq(-2,0)" label="32042"
default="false" />
- <setting label="32102" type="lsep"/>
- <setting id="g_action" type="bool" enable="eq(-9,true)" label="32028"
default="true"/>
- <setting id="g_comedy" type="bool" enable="eq(-10,true)" label="32029"
default="true"/>
- <setting id="g_docu" type="bool" enable="eq(-11,true)" label="32030"
default="true"/>
- <setting id="g_drama" type="bool" enable="eq(-12,true)" label="32031"
default="true"/>
- <setting id="g_family" type="bool" enable="eq(-13,true)" label="32032"
default="true"/>
- <setting id="g_fantasy" type="bool" enable="eq(-14,true)"
label="32033" default="true"/>
- <setting id="g_foreign" type="bool" enable="eq(-15,true)"
label="32034" default="true"/>
- <setting id="g_horror" type="bool" enable="eq(-16,true)" label="32035"
default="true"/>
- <setting id="g_musical" type="bool" enable="eq(-17,true)"
label="32036" default="true"/>
- <setting id="g_romance" type="bool" enable="eq(-18,true)"
label="32037" default="true"/>
- <setting id="g_scifi" type="bool" enable="eq(-19,true)" label="32038"
default="true"/>
- <setting id="g_thriller" type="bool" enable="eq(-20,true)"
label="32039" default="true"/>
- </category>
- <category label="32024">
- <setting label="32009" type="lsep"/>
- <setting id="do_folder" type="bool" label="32022" default="false" />
- <setting id="path" type="folder" enable="eq(-1,true)" label="32010"
default="" />
- </category>
+ <category label="32016">
+ <setting label="32026" type="lsep"/>
+ <setting id="number_trailers" type="number" label="32000" default="10" />
+ <setting id="rating_limit" type="enum" label="32040" default="0"
values="None|G|PG|PG-13|R|NC-17" />
+ <setting id="do_notyetrated" type="bool" enable = "!eq(-1,0)"
label="32041" default="false" />
+ <setting id="do_nr" type="bool" enable = "!eq(-2,0)" label="32042"
default="false" />
+ <setting id="group_trailers" type="bool" label="32053" default="false" />
+ <setting id="group_number" type="number" enable="eq(-1,true)"
label="32054" default="5" />
+ <setting id="group_delay" type="number" enable="eq(-2,true)" label="32055"
default="10" />
+ <setting id="do_animation" type="bool" label="32001" default="true" />
+ <setting id="hide_title" type="bool" label="32008" defalt="false"/>
+ <setting id="hide_info" type="bool" label="32003" default="false" />
+ <setting id="do_volume" type="bool" label="32006" default="false" />
+ <setting id="volume" label="32011" type="number" enable = "eq(-1,true)"
default="100" />
+ <setting id="do_fullscreen" type="bool" label="32007" default="false" />
+ </category>
+ <category label="32015">
+ <setting label="32012" type="lsep"/>
+ <setting id="do_library" type="bool" label="32021" default="true" />
+ <setting id="do_genre" type="bool" enable = "eq(-1,true)" label="32002"
default="false" />
+ <setting id="hide_watched" type="bool" enable = "eq(-2,true)"
label="32004" default="false" />
+ <setting id="watched_days" type="number" enable="eq(-1,true)"
label="32005" default="365" />
+ </category>
+ <category label="32045">
+ <setting label="32046" type ="sep" />
+ <setting id="do_tmdb" type="bool" label="32044" default="true" />
+ <setting id="tmdb_source" label="32043" type="enum" enable="eq(-1,true)"
default="0" lvalues="32047|32048|32049|32050|32052|32051" />
+ </category>
+ <category label="32025">
+ <setting label="32013" type="lsep"/>
+ <setting id="do_itunes" type="bool" label="32023" default="true" />
+ <setting id="quality" type="enum" enable ="eq(-1,true)" label="32014"
values="480p|720p|1080p" default="0"/>
+ <setting id="trailer_type" type="enum" enable="eq(-2,true)" label="32043"
values="Coming Soon|Just Added|Popular|Exclusive|All" default="4" />
+ <setting id="do_clips" type="bool" enable = "eq(-3,true)" label="32018"
default="true" />
+ <setting id="do_featurettes" type="bool" enable = "eq(-4,true)"
label="32019" default="true" />
+ <setting label="32102" type="lsep"/>
+ <setting id="g_action" type="bool" enable="eq(-9,true)" label="32028"
default="true"/>
+ <setting id="g_comedy" type="bool" enable="eq(-10,true)" label="32029"
default="true"/>
+ <setting id="g_docu" type="bool" enable="eq(-11,true)" label="32030"
default="true"/>
+ <setting id="g_drama" type="bool" enable="eq(-12,true)" label="32031"
default="true"/>
+ <setting id="g_family" type="bool" enable="eq(-13,true)" label="32032"
default="true"/>
+ <setting id="g_fantasy" type="bool" enable="eq(-14,true)" label="32033"
default="true"/>
+ <setting id="g_foreign" type="bool" enable="eq(-15,true)" label="32034"
default="true"/>
+ <setting id="g_horror" type="bool" enable="eq(-16,true)" label="32035"
default="true"/>
+ <setting id="g_musical" type="bool" enable="eq(-17,true)" label="32036"
default="true"/>
+ <setting id="g_romance" type="bool" enable="eq(-18,true)" label="32037"
default="true"/>
+ <setting id="g_scifi" type="bool" enable="eq(-19,true)" label="32038"
default="true"/>
+ <setting id="g_thriller" type="bool" enable="eq(-20,true)" label="32039"
default="true"/>
+ </category>
+ <category label="32024">
+ <setting label="32009" type="lsep"/>
+ <setting id="do_folder" type="bool" label="32022" default="false" />
+ <setting id="path" type="folder" enable="eq(-1,true)" label="32010"
default="" />
+ </category>
</settings>
diff --git
a/screensaver.randomtrailers/resources/skins/default/720p/script-BlankWindow.xml
b/screensaver.randomtrailers/resources/skins/default/720p/script-BlankWindow.xml
index fc1aaa0..eb41f3c 100644
---
a/screensaver.randomtrailers/resources/skins/default/720p/script-BlankWindow.xml
+++
b/screensaver.randomtrailers/resources/skins/default/720p/script-BlankWindow.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<window type="window">
-
+ <zorder>99999</zorder>
</window>
-----------------------------------------------------------------------
Summary of changes:
screensaver.randomtrailers/addon.xml | 2 +-
screensaver.randomtrailers/changelog.txt | 11 ++-
screensaver.randomtrailers/default.py | 143 +++++++++++++++++---
.../resources/language/English/strings.xml | 4 +
screensaver.randomtrailers/resources/settings.xml | 105 ++++++++-------
.../skins/default/720p/script-BlankWindow.xml | 2 +-
.../{ => skins}/language/English/strings.xml | 4 +
7 files changed, 200 insertions(+), 71 deletions(-)
copy screensaver.randomtrailers/resources/{ =>
skins}/language/English/strings.xml (93%)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works.
Faster operations. Version large binaries. Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons