The branch, frodo has been updated
       via  0ce1a8089367077b2beca0ccc6463951d8e664b7 (commit)
      from  b2fd683d998915caa11b002ebea06afc54e39c1a (commit)

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

commit 0ce1a8089367077b2beca0ccc6463951d8e664b7
Author: Martijn Kaijser <[email protected]>
Date:   Tue May 13 09:25:32 2014 +0200

    [plugin.audio.mixcloud] 1.1.3

diff --git a/plugin.audio.mixcloud/README b/plugin.audio.mixcloud/README
index 12fd2a0..31f1168 100644
--- a/plugin.audio.mixcloud/README
+++ b/plugin.audio.mixcloud/README
@@ -1,8 +1,17 @@
 ============================================
-XBMC Mixcloud Plugin - jackyNIX/Bochi
+
+XBMC Mixcloud Plugin - jackyNIX
+
+============================================
+
+Contributors:
+       -       jackyNIX
+       -       Bochi
+       -       SilentException
+
 ============================================
 
-Current version: 1.1.1 frodo
+Current version: 1.1.3 frodo
 
 ============================================
 
diff --git a/plugin.audio.mixcloud/addon.xml b/plugin.audio.mixcloud/addon.xml
index 65b3cb7..8eb8526 100644
--- a/plugin.audio.mixcloud/addon.xml
+++ b/plugin.audio.mixcloud/addon.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.audio.mixcloud"
        name="MixCloud"
-       version="1.1.1"
-       provider-name="jackyNIX/Bochi">
+       version="1.1.3"
+       provider-name="jackyNIX">
   <requires>
     <import addon="xbmc.python" version="2.1.0"/>
     <import addon="script.module.simplejson" version="2.0.10"/>
@@ -21,8 +21,8 @@
     <description lang="de">Mixcloud erfindet Radio neu. Höre Radioshows, 
Podcasts und DJ Mixe wann immer Du willst.</description>
     <platform>all</platform>
     <language></language>
-    <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
+    <license>GNU GENERAL PUBLIC LICENSE. Version 3, 29 June 2007</license>
     <forum>http://forum.xbmc.org/showthread.php?tid=116386</forum>
     <source>https://github.com/jackyNIX/xbmc-mixcloud-plugin</source>
   </extension>
-</addon>
+</addon>                       
\ No newline at end of file
diff --git a/plugin.audio.mixcloud/changelog.txt 
b/plugin.audio.mixcloud/changelog.txt
index 02256dd..8c0c9c6 100644
--- a/plugin.audio.mixcloud/changelog.txt
+++ b/plugin.audio.mixcloud/changelog.txt
@@ -1,3 +1,9 @@
+1.1.3
+- Added local resolver (tnx to SilentException)
+
+1.1.2
+- Fixed playback of incorrect tracks (tnx to SilentException)
+
 1.1.1
 - Modified getstream url
 
@@ -9,8 +15,7 @@
 - Added French localisation
 
 1.0.0
-- Bochi joined the project
-- Fixed streaming
+- Fixed streaming (tnx to Bochi)
 - Added debug option (disabled by default)
 - Added localisation (English, Dutch)
 - Added to official dharma repository
diff --git a/plugin.audio.mixcloud/default.py b/plugin.audio.mixcloud/default.py
index 94f25e5..bf4bd5f 100644
--- a/plugin.audio.mixcloud/default.py
+++ b/plugin.audio.mixcloud/default.py
@@ -26,12 +26,16 @@ along with XBMC MixCloud Plugin.  If not, see 
<http://www.gnu.org/licenses/>.
 import sys,time
 import xbmc,xbmcgui,xbmcplugin,xbmcaddon
 import urllib,urllib2
+import base64
 import simplejson as json
 import re
 import sys
+from itertools import cycle, izip
+
 
 
 URL_PLUGIN=    'plugin://music/MixCloud/'
+URL_MIXCLOUD=  'http://www.mixcloud.com/'
 URL_API=       'http://api.mixcloud.com/'
 URL_CATEGORIES='http://api.mixcloud.com/categories/'
 URL_HOT=       'http://api.mixcloud.com/popular/hot/'
@@ -84,11 +88,20 @@ STR_TRACKNUMBER= u'tracknumber'
 STR_TYPE=        u'type'
 STR_USER=        u'user'
 STR_YEAR=        u'year'
+STR_IMAGE=       u'image'
+STR_THUMBNAIL=   u'thumbnail'
+STR_STREAMURL=   u'stream_url'
 
 STR_THUMB_SIZES= 
{0:u'small',1:u'thumbnail',2:u'medium',3:u'large',4:u'extra_large'}
 
 
 
+class Resolver:
+    local=0
+    offliberty=1
+
+
+
 plugin_handle=int(sys.argv[1])
 __addon__ =xbmcaddon.Addon('plugin.audio.mixcloud')
 
@@ -97,6 +110,7 @@ __addon__ =xbmcaddon.Addon('plugin.audio.mixcloud')
 debugenabled=(__addon__.getSetting('debug')=='true')
 limit=       (1+int(__addon__.getSetting('page_limit')))*10
 thumb_size=  STR_THUMB_SIZES[int(__addon__.getSetting('thumb_size'))]
+resolver=    int(__addon__.getSetting('resolver'))
 
 
 
@@ -248,8 +262,13 @@ def show_history_search_menu(offset):
 def play_cloudcast(key):
     url=get_stream(key)
     if url:
-        
xbmcplugin.setResolvedUrl(handle=plugin_handle,succeeded=True,listitem=xbmcgui.ListItem(path=url))
+        infolabels=get_cloudcast(URL_API[:-1]+key,{},True)
+        
listitem=xbmcgui.ListItem(label=infolabels[STR_TITLE],label2=infolabels[STR_ARTIST],iconImage=infolabels[STR_THUMBNAIL],thumbnailImage=infolabels[STR_THUMBNAIL],path=url)
+        listitem.setInfo(type='Music',infoLabels=infolabels)
+        
xbmcplugin.setResolvedUrl(handle=plugin_handle,succeeded=True,listitem=listitem)
         add_to_settinglist('play_history_list',key,'play_history_max')
+        if debugenabled:
+            print('MIXCLOUD playing '+url)
     else:
         
xbmcplugin.setResolvedUrl(handle=plugin_handle,succeeded=False,listitem=xbmcgui.ListItem())
 
@@ -274,13 +293,14 @@ def get_cloudcasts(url,parameters):
             json_tracknumber=0
         for json_cloudcast in json_data:
             json_tracknumber=json_tracknumber+1
-            if add_cloudcast(json_tracknumber,json_cloudcast,total):
+            infolabels = add_cloudcast(json_tracknumber,json_cloudcast,total);
+            if len(infolabels)>0:
                 found=found+1
     return found
 
 
 
-def get_cloudcast(url,parameters,index=1,total=0):
+def get_cloudcast(url,parameters,index=1,total=0,forinfo=False):
     if len(parameters)>0:
         url=url+'?'+urllib.urlencode(parameters)
     if debugenabled:
@@ -288,10 +308,11 @@ def get_cloudcast(url,parameters,index=1,total=0):
     h=urllib2.urlopen(url)
     content=h.read()
     json_cloudcast=json.loads(content)
-    return add_cloudcast(index,json_cloudcast,total)
+    return add_cloudcast(index,json_cloudcast,total,forinfo)
 
 
-def add_cloudcast(index,json_cloudcast,total):
+
+def add_cloudcast(index,json_cloudcast,total,forinfo=False):
     if STR_NAME in json_cloudcast and json_cloudcast[STR_NAME]:
         json_name=json_cloudcast[STR_NAME]
         json_key=''
@@ -317,32 +338,82 @@ def add_cloudcast(index,json_cloudcast,total):
             json_pictures=json_cloudcast[STR_PICTURES]
             if thumb_size in json_pictures and json_pictures[thumb_size]:
                 json_image=json_pictures[thumb_size]
-        
add_audio_item({STR_COUNT:index,STR_TRACKNUMBER:index,STR_TITLE:json_name,STR_ARTIST:json_username,STR_DURATION:json_length,STR_YEAR:json_year,STR_DATE:json_date},
-                      {STR_MODE:MODE_PLAY,STR_KEY:json_key},
-                      json_image,
-                      total)
-        return True
+        infolabels = 
{STR_COUNT:index,STR_TRACKNUMBER:index,STR_TITLE:json_name,STR_ARTIST:json_username,STR_DURATION:json_length,STR_YEAR:json_year,STR_DATE:json_date,STR_THUMBNAIL:json_image}
+        if not forinfo:
+            add_audio_item(infolabels,
+                           {STR_MODE:MODE_PLAY,STR_KEY:json_key},
+                           infolabels[STR_THUMBNAIL],
+                           total)
+
+        return infolabels
     else:
-        return False
-    
+        return {}
 
 
-def get_stream(cloudcast_key):
-    ck="http://www.mixcloud.com"+cloudcast_key
+
+def get_stream_offliberty(cloudcast_key):
+    ck=URL_MIXCLOUD[:-1]+cloudcast_key
     if debugenabled:
         print('MIXCLOUD '+'resolving cloudcast stream for '+ck)
     for retry in range(1, 10):
+        try:
 #        request = urllib2.Request('http://offliberty.com/off.php', 
'track=%s&refext=' % ck)
-        request = urllib2.Request('http://offliberty.com/off54.php', 
'track=%s&refext=' % ck)
-        request.add_header('Referer', 'http://offliberty.com/')
-        response = urllib2.urlopen(request)
-        data=response.read()
-        match=re.search('HREF="(.*)" class="download"', data)
-        if match:
-            return match.group(1)
+#        request = urllib2.Request('http://offliberty.com/off54.php', 
'track=%s&refext=' % ck)
+#        request.add_header('Referer', 'http://offliberty.com/')
+            values={
+                    'track' : ck,
+                    'refext' : ''
+                   }
+            headers={
+                     'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.27 Safari/537.36',
+                     'Referer' : 'http://offliberty.com/'
+                    }
+            postdata = urllib.urlencode(values)
+            request = urllib2.Request('http://offliberty.com/off54.php', 
postdata, headers, 'http://offliberty.com/')
+            response = urllib2.urlopen(request)
+            data=response.read()
+            match=re.search('HREF="(.*)" class="download"', data)
+            if match:
+                return match.group(1)
+            elif debugenabled:
+                print('wrong response try=%s code=%s len=%s, trying again...' 
% (retry, response.getcode(), len(data)))
+        except:
+            if debugenabled:
+                print('unexpected error try=%s error=%s, trying again...' % 
(retry, sys.exc_info()[0]))
+
+
+
+def get_stream_local(cloudcast_key):
+    ck=URL_MIXCLOUD[:-1]+cloudcast_key
+    if debugenabled:
+        print('MIXCLOUD '+'locally resolving cloudcast stream for '+ck)
+    headers={
+             'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/35.0.1916.27 Safari/537.36',
+             'Referer' : URL_MIXCLOUD
+            }
+    request = urllib2.Request(ck, headers=headers, 
origin_req_host=URL_MIXCLOUD)
+    response = urllib2.urlopen(request)
+    data=response.read()
+    match=re.search('m-p-ref="x_cloudcast_page" m-play-info="(.*)" m-preview', 
data)
+    if match:
+        playInfo=base64.b64decode(match.group(1))
+        
magicString=base64.b64decode('cGxlYXNlZG9udGRvd25sb2Fkb3VybXVzaWN0aGVhcnRpc3Rzd29udGdldHBhaWQ=')
+        playInfoJSON=''.join(chr(ord(a) ^ ord(b)) for a,b in 
zip(playInfo,cycle(magicString)))
+        json_content=json.loads(playInfoJSON)
+        if STR_STREAMURL in json_content and json_content[STR_STREAMURL]:
+            return json_content[STR_STREAMURL]
         elif debugenabled:
-            print('wrong response try=%s code=%s len=%s, trying again...' % 
(retry, response.getcode(), len(data)))
- 
+            print('unable to resolve')
+    elif debugenabled:
+        print('unable to resolve')
+
+
+
+def get_stream(cloudcast_key):
+    resolvers={Resolver.local : get_stream_local,
+               Resolver.offliberty : get_stream_offliberty}
+    return resolvers[resolver](cloudcast_key)
+
 
 
 def get_categories(url):
diff --git a/plugin.audio.mixcloud/resources/language/Dutch/strings.xml 
b/plugin.audio.mixcloud/resources/language/Dutch/strings.xml
index 187abce..887bb04 100644
--- a/plugin.audio.mixcloud/resources/language/Dutch/strings.xml
+++ b/plugin.audio.mixcloud/resources/language/Dutch/strings.xml
@@ -19,6 +19,7 @@
        <string id="30201">Maximum cloudcasts per pagina</string>
        <string id="30202">Grootte van afbeeldingen</string>
        <string id="30203">Debug modus</string>
+       <string id="30211">Resolver</string>
        <!-- history settings -->
        <string id="30220">Geschiedenis</string>
        <string id="30221">Maximum afgespeelde cloudcasts</string>
diff --git a/plugin.audio.mixcloud/resources/language/English/strings.xml 
b/plugin.audio.mixcloud/resources/language/English/strings.xml
index babaeec..dbe19e8 100644
--- a/plugin.audio.mixcloud/resources/language/English/strings.xml
+++ b/plugin.audio.mixcloud/resources/language/English/strings.xml
@@ -19,6 +19,7 @@
        <string id="30201">Maximum cloudcasts on page</string>
        <string id="30202">Download thumbnail size</string>
        <string id="30203">Debug mode</string>
+       <string id="30211">Resolver</string>
        <!-- history settings -->
        <string id="30220">History</string>
        <string id="30221">Maximum played cloudcasts</string>
diff --git a/plugin.audio.mixcloud/resources/language/French/strings.xml 
b/plugin.audio.mixcloud/resources/language/French/strings.xml
index 3ad9f43..beaf1ba 100644
--- a/plugin.audio.mixcloud/resources/language/French/strings.xml
+++ b/plugin.audio.mixcloud/resources/language/French/strings.xml
@@ -19,6 +19,7 @@
        <string id="30201">Nombre maximal de cloudcasts par page</string>
        <string id="30202">Dimensions des icônes téléchargés</string>
        <string id="30203">Mode debug</string>
+       <string id="30211">Resolver</string>
        <!-- history settings -->
        <string id="30220">Histoire</string>
        <string id="30221">Nombre maximal de cloudcasts écoutés</string>
diff --git a/plugin.audio.mixcloud/resources/language/German/strings.xml 
b/plugin.audio.mixcloud/resources/language/German/strings.xml
index b027e32..fd6591f 100644
--- a/plugin.audio.mixcloud/resources/language/German/strings.xml
+++ b/plugin.audio.mixcloud/resources/language/German/strings.xml
@@ -19,7 +19,8 @@
        <string id="30201">Maximale Cloudcasts pro Seite</string>
        <string id="30202">Größe der Vorschaubilder</string>
        <string id="30203">Debug Modus</string>
-       <!-- history settings -->
+       <string id="30211">Resolver</string>
+<!-- history settings -->
        <string id="30220">Verlauf</string>
        <string id="30221">Maximale Gespielte Cloudcasts</string>
        <string id="30222">Maximale Suchanfragen</string>
diff --git a/plugin.audio.mixcloud/resources/settings.xml 
b/plugin.audio.mixcloud/resources/settings.xml
index 612eab2..a4eeb28 100644
--- a/plugin.audio.mixcloud/resources/settings.xml
+++ b/plugin.audio.mixcloud/resources/settings.xml
@@ -5,6 +5,7 @@
   <category label="30200">
     <setting id="page_limit" type="enum" label="30201" values="10|20|30|40|50" 
default="1" />
     <setting id="thumb_size" type="enum" label="30202" values="very 
small|small|medium|large|extra large" default="2" />
+    <setting id="resolver" type="enum" label="30211" values="local|offliberty" 
default="0" />
     <setting type="sep" />
     <setting id="debug" type="bool" label="30203" default="false" />
   </category>

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

Summary of changes:
 plugin.audio.mixcloud/README                       |   13 ++-
 plugin.audio.mixcloud/addon.xml                    |   10 +-
 plugin.audio.mixcloud/changelog.txt                |    9 +-
 plugin.audio.mixcloud/default.py                   |  117 ++++++++++++++++----
 .../resources/language/Dutch/strings.xml           |    1 +
 .../resources/language/English/strings.xml         |    1 +
 .../resources/language/French/strings.xml          |    1 +
 .../resources/language/German/strings.xml          |    3 +-
 plugin.audio.mixcloud/resources/settings.xml       |    1 +
 9 files changed, 123 insertions(+), 33 deletions(-)


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to