The branch, dharma has been updated
       via  e07fd992507bb2086b5a6c07160ef31afc6e7e8f (commit)
       via  f3fd2247213fc557484b980e2bf329587fb46cdd (commit)
      from  34d2507df35200a5c7a036d8ff419003e41eb78e (commit)

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

commit e07fd992507bb2086b5a6c07160ef31afc6e7e8f
Author: spiff <[email protected]>
Date:   Fri Jan 27 13:33:49 2012 +0100

    [plugin.video.radbox] updated to version 0.1.1

diff --git a/plugin.video.radbox/addon.xml b/plugin.video.radbox/addon.xml
index b77834d..7484eca 100644
--- a/plugin.video.radbox/addon.xml
+++ b/plugin.video.radbox/addon.xml
@@ -1,13 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.radbox.me"
+<addon id="plugin.video.radbox"
        name="Radbox"
-       version="0.0.3"
+       version="0.1.1"
        provider-name="Radbox Inc.">
   <requires>
     <import addon="xbmc.python" version="1.0"/>
-    <import addon="plugin.video.youtube" version="2.1.3"/>
-    <import addon="plugin.video.vimeo" version="1.1.0" />
-    <import addon="plugin.video.collegehumor" version="0.0.2" />
     <import addon="script.module.beautifulsoup" version="3.0.8"/>
   </requires>
   <extension point="xbmc.python.pluginsource"
@@ -17,7 +14,7 @@
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <summary>Radbox</summary>
-    <description>Plugin that allows you to browse videos you have added to 
your Radbox account. Currently only CollegeHumor, Youtube and Vimeo videos will 
be shown.</description>
+    <description>Send web videos from your mobile or desktop to your TV using 
Radbox (http://radbox.me). Use Radbox to watch web videos later, or subscribe 
to your Twitter and Facebook video streams. This plugin plays your Radbox queue 
on XBMC.</description>
     <disclaimer>This addon requires CollegeHumor, Youtube and Vimeo plugin to 
work as intended.</disclaimer>
   </extension>
 </addon>
diff --git a/plugin.video.radbox/changelog.txt 
b/plugin.video.radbox/changelog.txt
index a6c4bef..b6f1144 100644
--- a/plugin.video.radbox/changelog.txt
+++ b/plugin.video.radbox/changelog.txt
@@ -1,3 +1,9 @@
+[B]Version 0.1.1[/B]
+
+- List support
+- a new setting Lazy mode to allow lazy playback
+- Settings to allow user to choose services from which video to be played
+
 [B]Version 0.0.3[/B]
 
 - Added support for CollgeHumor videos
diff --git a/plugin.video.radbox/default.py b/plugin.video.radbox/default.py
index 4f79f5c..a69fa95 100644
--- a/plugin.video.radbox/default.py
+++ b/plugin.video.radbox/default.py
@@ -3,6 +3,7 @@ import xbmc
 import xbmcaddon
 import xbmcgui
 import xbmcplugin
+import threading
 import urllib
 import urllib2
 from urlparse import urlparse
@@ -10,7 +11,7 @@ from BeautifulSoup import BeautifulStoneSoup
 
 # plugin constants
 plugin_handle = int(sys.argv[1])
-plugin_id = 'plugin.video.radbox.me'
+plugin_id = 'plugin.video.radbox'
 plugin_settings = xbmcaddon.Addon(id=plugin_id)
 
 #constansts for supported services
@@ -20,7 +21,12 @@ SERVICE_COLLEGEHUMOR = 'collegehumor'
 
 PATH_BASED_SERVICES = [SERVICE_YOUTUBE, SERVICE_VIMEO]
 QUERY_STRING_SERVICES = [SERVICE_COLLEGEHUMOR]
-SUPPORTED_SERVICES = [SERVICE_YOUTUBE, SERVICE_VIMEO, SERVICE_COLLEGEHUMOR]
+SUPPORTED_SERVICES = []
+
+#constants for Feed urls
+FEED_URL_VIDEO = 'http://api.radbox.me/feed/video'
+FEED_URL_LISTS = 'http://api.radbox.me/feed/lists'
+MARK_VIDEO_URL = 'http://api.radbox.me/watch/mark_video'
 
 def show_error(msg):
     """
@@ -29,18 +35,155 @@ def show_error(msg):
     dialog = xbmcgui.Dialog()
     ok = dialog.ok('Radbox', msg)
 
-def fetch_feed(uid):
+def check_addon(addon_id):
+    """
+    checks whether given addon is installed
+    """
+    value = False
+    try:
+        addon = xbmcaddon.Addon(id=addon_id)
+        if addon:
+            value = True
+    except:
+        pass
+
+    return value
+
+def manage_settings():
+    """
+    manages whether to show addon settings to user or not
+    """
+    youtube = check_addon('plugin.video.youtube')
+    vimeo = check_addon('plugin.video.vimeo')
+    collegehumor = check_addon('plugin.video.collegehumor')
+    
+    if not youtube:
+        plugin_settings.setSetting("youtube", str(youtube).lower())
+    
+    if not vimeo:
+        plugin_settings.setSetting("vimeo", str(vimeo).lower())
+    
+    if not collegehumor:
+        plugin_settings.setSetting("collegehumor", str(collegehumor).lower())
+    
+    # set version setting, useful if settings are changed in future versions
+    # set currVersion incase there are no changes in settings
+    currVersion = plugin_settings.getSetting("currVersion") 
+    addonVersion = plugin_settings.getAddonInfo('version')
+    if ( not currVersion or currVersion < addonVersion):
+        plugin_settings.openSettings()
+        plugin_settings.setSetting("currVersion", addonVersion)
+    return
+
+def get_params(param_str):
+    """
+    converts the parameter string passed to plugin into dict
+    """
+    if not param_str or str(param_str).strip() == '':
+        return {}
+
+    params = {}
+    try:
+        #try iterative way (assertive way not no work in python 2.4)
+        param_list = param_str.lstrip('?').split('&')
+        for param in param_list:
+            k,v = param.split('=')
+            params[urllib.unquote_plus(k)] = urllib.unquote_plus(v)
+    except Exception, e:
+        #print 'get_params - ', e
+        pass
+
+    return params
+
+def update_supported_services():
+    """
+    updates supported services depending upon addon settings
+    """
+    global SUPPORTED_SERVICES
+   
+    if (plugin_settings.getSetting("youtube") == 'true'):
+        SUPPORTED_SERVICES.append(SERVICE_YOUTUBE)
+
+    if (plugin_settings.getSetting("vimeo") == 'true'):
+        SUPPORTED_SERVICES.append(SERVICE_VIMEO)
+
+    if (plugin_settings.getSetting("collegehumor") == 'true'):
+        SUPPORTED_SERVICES.append(SERVICE_COLLEGEHUMOR)
+    
+    return
+
+def get_list_item(title='', thumbnail='', plot='', url='', is_folder=False, 
is_video=False, vid=-1):
+    """
+    creates a new listitem
+    """
+    icon_image="DefaultFolder.png"
+    if is_video:
+        icon_imgae = "DefaultVideo.png"
+        #params = {'action': 'play_video', 'vid': vid, 'vidurl' : url}
+        liurl =  url
+    else:
+        params = {'action': 'play_list', 'plist': title}
+        liurl =  sys.argv[0] + '?' + urllib.urlencode(params)
+
+    try:
+        listitem = xbmcgui.ListItem(label=title, iconImage=icon_image, 
thumbnailImage=thumbnail)
+        listitem.setInfo(type="video", infoLabels={'Title': title, 'Plot': 
plot})
+        if not is_folder:
+            listitem.setProperty("IsPlayable", "true")
+
+        return (listitem, liurl)
+    except Exception, e:
+        #print 'add item - error %s' %e
+        pass
+
+def add_item(title='', thumbnail='', plot='', url='', is_folder=False, 
is_video=False, vid=-1):
+    """
+    adds a new list item to xbmc virtual directory
+    """
+    listitem, liurl = get_list_item(title=title, thumbnail=thumbnail, 
plot=plot, url=url
+                                    ,is_folder=is_folder, is_video=is_video, 
vid=vid) or (None, '')
+
+    if listitem:
+        xbmcplugin.addDirectoryItem(handle=plugin_handle, listitem=listitem, 
url=liurl, isFolder=is_folder)
+    
+    return
+
+def fetch_feed(uid, lists=False, listname='home'):
     """
     fetches user feeds based on quick url as user identifier
     feed url is of format http://radbox.me/feed/video?uid=%s' %uid 
     """
     if not uid:
-        show_error('Invalid value for user id.')
+        show_error(plugin_settings.getLocalizedString(33001))
         return
+
     try:
-        feed_url = 'http://radbox.me/feed/video?uid=%s' %uid
+        feed_params = dict(uid=uid)
+        if lists:
+            feed_url = FEED_URL_LISTS
+        else:
+            feed_url = FEED_URL_VIDEO
+            feed_params.update({'l': listname})
+        
+        feed_url += '?' + urllib.urlencode(feed_params)
         feeds = urllib2.urlopen(feed_url).read()
-        return BeautifulStoneSoup(feeds)
+        feeds = BeautifulStoneSoup(feeds)
+        
+        if not feeds:
+            show_error(plugin_settings.getLocalizedString(33002))
+            return
+        
+        # check whether there was any error returned from feeds
+        errors = feeds.findAll('error')
+        if len(errors) > 0:
+            try:
+                show_error(errors[0].contents[0])
+            except Exception, err:
+                #print err
+                pass
+            return
+
+        return feeds
     except:
         xbmc.log("Unable to fetch feed - %s" %feed_url)
 
@@ -120,90 +263,163 @@ def get_playable_data(url):
                 # creating own dict for now
     return dict(can_play=can_play, url=url)
 
-def play_user_feed(uid):
+def mark_video(uid, vid):
     """
-    fetches feed from user's radbox account, creates a playlist of all 
playable videos and starts playing
+    marks video as opened
     """
-    if not uid:
-        show_error('Invalid value for user id.')
+    if not uid or not vid:
         return
 
-    feeds = fetch_feed(uid)
+    url = MARK_VIDEO_URL
+    params = {'vid': vid, 'uid': uid}
+    url += '?' + urllib.urlencode(params)
+    urllib2.urlopen(url)
+    return
 
-    if not feeds:
-        show_error('Unable to fetch feeds.')
-        return
+def play_video(uid, vid, url):
+    """
+    plays a video
+    """
+    #mark video in a separate thread
+    #threading.Thread(target=mark_video, args=(uid, vid)).start()
     
-    # check whether there was any error returned from feeds
-    errors = feeds.findAll('error')
-    if len(errors) > 0:
-        try:
-            show_error(errors[0].contents[0])
-        except Exception, err:
-            #print err
-            pass
-        return
+    mark_video(uid, vid)
+    xbmc.executebuiltin("xbmc.PlayMedia("+url+")")
+    return
 
-    # We have valid feed
+def play_list(uid, listname=''):
+    """
+    displays videos contained in playlist
+    """
+    autoplay = (plugin_settings.getSetting("autoplay") == 'true')
+    update_supported_services()
 
-    #create a new playlist,
-    playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
-    playlist.clear()
+    if not listname or str(listname).strip() == '':
+        return
 
-    #fetch all feed items
-    items = feeds.findAll("item")
-    for item in items:
-        try:
-            can_play = False
+    feeds = fetch_feed(uid, listname=listname)
+    
+    #create a new playlist only for autoplay setting
+    if autoplay:
+        playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
+        playlist.clear()
+    
+    try:
+        items = feeds.findAll('item')
+        for item in items:
             try:
-                title = item.title.contents[0]
-            except:
-                title = ""
+                can_play = False
+                try:
+                    title = item.title.contents[0]
+                except:
+                    title = ""
 
-            try:
-                description = item.description.contents[0]
-            except:
-                description = ""
+                try:
+                    description = item.description.contents[0]
+                except:
+                    description = ""
 
-            try:
-                url = item.find('media:content')['url']
-                playable_data = get_playable_data(url)
-                if playable_data:
-                    url = playable_data['url']
-                    can_play = playable_data['can_play']
-            except:
-                url = None
-                can_play = False
+                try:
+                    url = item.find('media:content')['url']
+                    playable_data = get_playable_data(url)
+                    #print playable_data
+                    if playable_data:
+                        url = playable_data['url']
+                        can_play = playable_data['can_play']
+                except:
+                    url = None
+                    can_play = False
+
+                try:
+                    thumbnail = item.find('media:thumbnail')['url']
+                except:
+                    thumbnail = "DefaultFolder.png"
+
+                try:
+                    vid = (item.find('guid').contents[0]).split('/')[-1]
+                except:
+                    vid = -1
 
+                if can_play:
+                    if autoplay:
+                        listitem, liurl = get_list_item(title=title, 
thumbnail=thumbnail, plot=description, url=url, is_video=True, vid=vid) or 
(None, '')
+                        if listitem:
+                            playlist.add(url=liurl, listitem=listitem)
+                    else:
+                        add_item(title=title, thumbnail=thumbnail, 
plot=description, url=url, is_video=True, vid=vid)
+
+            except Exception, err:
+                #print err
+                pass
+    
+        # for autoplay, we will not display directory listing.
+        if not autoplay:
+            # we are done adding items to directory 
+            xbmcplugin.endOfDirectory(handle = plugin_handle)
+        else:
+            # start playing
+            if playlist.size() > 0:
+                # try using player
+                # seems like there is a bug in xbmc 10 - on using player for 
playlist of plugin urls xbmc hangs
+                # playlist works fine with player in Eden beta
+                # http://forum.xbmc.org/showthread.php?p=973023
+                #xbmc.Player().play(item=playlist)
+                
+                #start playing
+                xbmc.executebuiltin('playlist.playoffset(video , 0)')
+                
+    except Exception, e:
+        #print 'play_list error - %s' %e
+        pass
+    
+def playlists(uid):
+    """
+    fetches and displays users playlist
+    """
+    feed = fetch_feed(uid, lists=True)
+
+    #iterate over each item in feed and create a list item
+    try:
+        items = feed.findAll("item")
+        for item in items:
             try:
-                thumbnail = item.find('media:thumbnail')['url']
-            except:
-                thumbnail = ""
-            
-            if can_play:
-                listitem = xbmcgui.ListItem(label=title, 
thumbnailImage=thumbnail)
-                listitem.setInfo(type="video", infoLabels={"Title" : title, 
"Plot" : description})
-                playlist.add(url=url, listitem=listitem)
-        except Exception, err:
-            #print err
-            pass
-
-    if playlist.size() > 0:
-        # try using player
-        # seems like there is a bug in xbmc 10 - on using player for playlist 
of plugin urls xbmc hangs
-        # playlist works fine with player in Eden beta
-        # http://forum.xbmc.org/showthread.php?p=973023
-        #xbmc.Player().play(item=playlist)
-        
-        #start playing
-        xbmc.executebuiltin('playlist.playoffset(video , 0)')
+                title = item.find('name').contents[0]
+                add_item(title=title, is_folder=True)
+            except Exception, e:
+                #print e
+                pass
+    except:
+        pass
+
+def home(uid):
+    """
+    this api is called when plugin is launched first.
+    """
+    if not uid:
+        show_error(plugin_settings.getLocalizedString(33001))
+        return
+    
+    playlists(uid)
+
+    # we are done adding items to directory 
+    xbmcplugin.endOfDirectory(handle = plugin_handle)
 
-    return
-            
 if (__name__ == "__main__"):
-    if ( not plugin_settings.getSetting("firstrun")):
-        plugin_settings.openSettings()
-        plugin_settings.setSetting("firstrun", '1')
+
+    uid = plugin_settings.getSetting("uid")
+    manage_settings()
     if (not sys.argv[2]):
-        uid = plugin_settings.getSetting("uid")
-        play_user_feed(uid)
+        home(uid)
+    else:
+        # initiate params dict with default values, update it with params 
received from request
+        # this will make sure KeyError is not raised
+        params = {'action': None, 'plist': None, 'vidurl': None, 'vid': None}
+        params.update(get_params(sys.argv[2]))
+        
+        action = params['action']
+        if action == 'play_list':
+            play_list(uid, listname=params['plist'])
+        elif action == 'play_video':
+            play_video(uid, url=params['vidurl'], vid=params['vid'])
+        else:
+            home(uid)
diff --git a/plugin.video.radbox/resources/language/English/strings.xml 
b/plugin.video.radbox/resources/language/English/strings.xml
index 3864027..5ad0545 100644
--- a/plugin.video.radbox/resources/language/English/strings.xml
+++ b/plugin.video.radbox/resources/language/English/strings.xml
@@ -1,7 +1,22 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <strings>
+    <!-- categories -->
+    <string id="32001">General</string>
+    <string id="32002">Plugins</string>
+    
     <!-- Plugin settings strings -->
     <string id="30001">Enter the last part of your Radbox Quick URL.</string>
     <string id="30002">You can find it in your Radbox account 
settings.</string>
     <string id="30003">Quick url: http://rdbx.me/</string>
+    <string id="30004">Lazy mode</string>
+    
+    <string id="31001">Select services to watch videos.</string>
+    <string id="31002">YouTube</string>
+    <string id="31003">Vimeo</string>
+    <string id="31004">CollegeHumor</string>
+
+    <!-- Error messages -->
+    <string id="33001">Invalid value for user id.</string>
+    <string id="33002">Unable to fetch feeds.</string>
+
 </strings>
diff --git a/plugin.video.radbox/resources/settings.xml 
b/plugin.video.radbox/resources/settings.xml
index 0cc32d0..f05ed4f 100644
--- a/plugin.video.radbox/resources/settings.xml
+++ b/plugin.video.radbox/resources/settings.xml
@@ -1,9 +1,20 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <settings>
 
-  <!-- General -->
-  <setting id="info" type="text" label="30001" default="" enable="false"/>
-  <setting id="info2" type="text" label="30002" default="" enable="false"/>
-  <setting id="uid" type="text" label="30003" default="" />
+    <!-- General -->
+    <category label="32001">
+        <setting id="info" type="text" label="30001" default="" 
enable="false"/>
+        <setting id="info2" type="text" label="30002" default="" 
enable="false"/>
+        <setting id="uid" type="text" label="30003" default="" />
+
+        <setting id="autoplay" type="bool" default="false" label="30004" /> 
+    </category>
+    <category label="32002">
+      <!-- Plugin settings -->
+        <setting id="pluginfo" type="text" label="31001" default="" 
enable="false"/>
+        <setting id="youtube" type="bool" default="true" label="31002"/>
+        <setting id="vimeo" type="bool" default="true" label="31003"/>
+        <setting id="collegehumor" type="bool" default="true" label="31004"/>
+    </category>
 
 </settings>

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

commit f3fd2247213fc557484b980e2bf329587fb46cdd
Author: spiff <[email protected]>
Date:   Fri Jan 27 13:12:54 2012 +0100

    [plugin.video.youtube] updated to version 2.1.4

diff --git a/plugin.video.youtube/YouTubeNavigation.py 
b/plugin.video.youtube/YouTubeNavigation.py
index b6ab225..b5492a1 100644
--- a/plugin.video.youtube/YouTubeNavigation.py
+++ b/plugin.video.youtube/YouTubeNavigation.py
@@ -78,8 +78,6 @@ class YouTubeNavigation:
                                  {'Title':__language__( 30041 )  
,'path':"/root/explore/categories"            , 'thumbnail':"explore"           
              , 'login':"false" , 'scraper':'categories'},
                                  {'Title':__language__( 30037 )  
,'path':"/root/explore/disco"                         , 'thumbnail':"discoball" 
                      , 'login':"false" , 'store':"disco_searches" },
                                  {'Title':__language__( 30040 )  
,'path':"/root/explore/disco/search"          , 'thumbnail':"search"            
              , 'login':"false" , 'action':"search_disco"},
-#                                {'Title':__language__( 30038 )  
,'path':"/root/explore/disco/top_25"          , 'thumbnail':"discoball"         
              , 'login':"false" , 'scraper':"disco_top_25"},
-#                                {'Title':__language__( 30039 )  
,'path':"/root/explore/disco/popular"         , 'thumbnail':"discoball"         
              , 'login':"false" , 'scraper':"disco_top_artist"},
                                  {'Title':__language__( 30001 )  
,'path':"/root/explore/feeds"                         , 'thumbnail':"feeds"     
                      , 'login':"false" },
                                  {'Title':__language__( 30009 )  
,'path':"/root/explore/feeds/discussed"       , 'thumbnail':"most"              
              , 'login':"false" , 'feed':"feed_discussed" },
                                  {'Title':__language__( 30010 )  
,'path':"/root/explore/feeds/linked"          , 'thumbnail':"most"              
              , 'login':"false" , 'feed':"feed_linked" },
@@ -89,13 +87,6 @@ class YouTubeNavigation:
                                  {'Title':__language__( 30014 )  
,'path':"/root/explore/feeds/featured"        , 'thumbnail':"featured"          
              , 'login':"false" , 'feed':"feed_featured" },
                                  {'Title':__language__( 30015 )  
,'path':"/root/explore/feeds/favorites"       , 'thumbnail':"top"               
                      , 'login':"false" , 'feed':"feed_favorites" },
                                  {'Title':__language__( 30016 )  
,'path':"/root/explore/feeds/rated"           , 'thumbnail':"top"               
                      , 'login':"false" , 'feed':"feed_rated" },
-#                                {'Title':__language__( 30043 )  
,'path':"/root/explore/movies"                        , 'thumbnail':"movies"    
                      , 'login':"false" , 'scraper':'movies'},
-#                                {'Title':__language__( 30042 )  
,'path':"/root/explore/shows"                         , 'thumbnail':"shows"     
                      , 'login':"false" , 'scraper':'shows'},
-#                                {'Title':__language__( 30032 )  
,'path':"/root/explore/trailers"                      , 'thumbnail':"trailers"  
                      , 'login':"false" },
-#                                {'Title':__language__( 30035 )  
,'path':"/root/explore/trailers/latest"   , 'thumbnail':"trailers"              
      , 'login':"false" , 'scraper':"latest_trailers" },
-#                                {'Title':__language__( 30034 )  
,'path':"/root/explore/trailers/current"  , 'thumbnail':"trailers"              
      , 'login':"false" , 'scraper':"current_trailers" },
-#                                {'Title':__language__( 30036 )  
,'path':"/root/explore/trailers/upcoming" , 'thumbnail':"trailers"              
      , 'login':"false" , 'scraper':"upcoming_trailers" },
-#                                {'Title':__language__( 30033 )  
,'path':"/root/explore/trailers/popular"  , 'thumbnail':"trailers"              
      , 'login':"false" , 'scraper':"popular_trailers" },
                                  {'Title':__language__( 30019 )  
,'path':"/root/recommended"                           , 
'thumbnail':"recommended"                     , 'login':"true"  , 
'scraper':"recommended" },
                                  {'Title':__language__( 30018 )  
,'path':"/root/contacts"                                      , 
'thumbnail':"contacts"                        , 'login':"true"  , 
'feed':"contacts" },
                                  {'Title':__language__( 30002 )  
,'path':"/root/favorites"                                     , 
'thumbnail':"favorites"                       , 'login':"true"  , 
'feed':"favorites" },
diff --git a/plugin.video.youtube/YouTubePlayer.py 
b/plugin.video.youtube/YouTubePlayer.py
index feb1766..3c56032 100755
--- a/plugin.video.youtube/YouTubePlayer.py
+++ b/plugin.video.youtube/YouTubePlayer.py
@@ -290,17 +290,20 @@ class YouTubePlayer:
                (result, status) = core._fetchPage(link = 
self.urls["video_stream"] % get("videoid"))
 
                if status == 200:
-                       data = result.find("PLAYER_CONFIG")
-                       if data > -1:
-                               data = result.rfind("yt.setConfig", 0, data)
-                               data = 
re.compile('yt.setConfig\((.*?PLAYER_CONFIG.*?)\);').findall(result[data:].replace("\n",
 ""))
+                       start = result.find("yt.playerConfig = ")
+
+                       if start > -1:
+                               start = start + len("yt.playerConfig = ")
+                               end = result.find("};", start) + 1
+                               data = result[start: end]
                                if len(data) > 0:
-                                       player_object = 
json.loads(data[0].replace('\'PLAYER_CONFIG\'', '"PLAYER_CONFIG"'))
+                                       data = data.replace("\\/", "/")
+                                       player_object = json.loads('{ 
"PLAYER_CONFIG" : ' + data + "}" )
                        else:
-                               data = result
-                               data = 
data[data.find('flashvars'):].replace("\n", "").replace("&amp;", "&")
-                               data = re.findall('="(ttsurl=.*?)"', data)
+                               data = 
result[result.find('flashvars'):].replace("\n", 
"").replace("\u0026","&").replace("&amp;", "&").replace('\\"','"')
+                               data = re.findall('flashvars="(.*?)"', data)
                                if len(data) > 0:
+                                       print repr(data[0])
                                        player_object = 
self._convertFlashVars(data[0])
 
                else:
@@ -365,3 +368,7 @@ class YouTubePlayer:
                        self.showMessage(title, result)
                else :
                        self.showMessage(title, self.__language__(30617))
+
+       def showMessage(self, heading, message):
+               duration = ([5, 10, 15, 20, 25, 
30][int(self.__settings__.getSetting( 'notification_length' ))]) * 1000
+               xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( 
heading, message, duration) )
diff --git a/plugin.video.youtube/addon.xml b/plugin.video.youtube/addon.xml
index f621780..2ed3b17 100644
--- a/plugin.video.youtube/addon.xml
+++ b/plugin.video.youtube/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.youtube"
        name="YouTube"
-       version="2.1.3"
+       version="2.1.4"
        provider-name="TheCollective">
   <requires>
     <import addon="xbmc.python" version="1.0"/>
diff --git a/plugin.video.youtube/changelog.txt 
b/plugin.video.youtube/changelog.txt
index 2023f10..614208c 100644
--- a/plugin.video.youtube/changelog.txt
+++ b/plugin.video.youtube/changelog.txt
@@ -7,6 +7,9 @@
 - [YOUTUBE] Can't delete favorites (YouTube gives video id, not favorite id).
 - Download of rtmpe streams not supported.
 
+[B]Version 2.1.4[/B]
+- Fix for broken playback
+
 [B]Version 2.1.3[/B]
 - Fixed login.
 
diff --git a/plugin.video.youtube/default.py b/plugin.video.youtube/default.py
index 5bdb8cb..8ff8f14 100644
--- a/plugin.video.youtube/default.py
+++ b/plugin.video.youtube/default.py
@@ -19,7 +19,7 @@
 import sys, xbmc, xbmcaddon, cookielib, urllib2
 
 # plugin constants
-__version__ = "2.1.3"
+__version__ = "2.1.4"
 __plugin__ = "YouTube-" + __version__
 __author__ = "TheCollective"
 __url__ = "www.xbmc.com"

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

Summary of changes:
 plugin.video.radbox/addon.xml                      |    9 +-
 plugin.video.radbox/changelog.txt                  |    6 +
 plugin.video.radbox/default.py                     |  368 ++++++++++++++++----
 .../resources/language/English/strings.xml         |   15 +
 plugin.video.radbox/resources/settings.xml         |   19 +-
 plugin.video.youtube/YouTubeNavigation.py          |    9 -
 plugin.video.youtube/YouTubePlayer.py              |   23 +-
 plugin.video.youtube/addon.xml                     |    2 +-
 plugin.video.youtube/changelog.txt                 |    3 +
 plugin.video.youtube/default.py                    |    2 +-
 10 files changed, 351 insertions(+), 105 deletions(-)


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to