The branch, eden has been updated
       via  73226973f908528e7384af06ba647074521e1cba (commit)
       via  ea64953b4f32c8a32d0bba3578e5b2c2e1e2aa54 (commit)
      from  dc9411160b67f8c1fa51d246dce5213b1a6de270 (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=73226973f908528e7384af06ba647074521e1cba

commit 73226973f908528e7384af06ba647074521e1cba
Author: Martijn Kaijser <[email protected]>
Date:   Thu Dec 20 21:33:04 2012 +0100

    [script.module.gmusicapi] -2012.11.09

diff --git a/script.module.gmusicapi/addon.xml 
b/script.module.gmusicapi/addon.xml
index e63894d..100e4a7 100644
--- a/script.module.gmusicapi/addon.xml
+++ b/script.module.gmusicapi/addon.xml
@@ -1,14 +1,15 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="script.module.gmusicapi"
        name="gmusicapi"
-       version="2012.05.04"
+       version="2012.11.09"
        provider-name="Valentin-Costel Hăloiu">
   <requires>
     <import addon="xbmc.python" version="2.0"/>
     <import addon="script.module.validictory" version="0.8.3"/>
-    <import addon="script.module.decorator" version="3.3.2"/>
+    <import addon="script.module.decorator" version="3.3.3"/>
     <import addon="script.module.mutagen" version="1.20.0"/>
-    <import addon="script.module.protobuf" version="2.4.0"/>
+    <import addon="script.module.protobuf" version="2.4.2"/>
+    <import addon="script.module.chardet" version="2.1.1"/>
   </requires>
   <extension point="xbmc.python.module"
              library="lib" />
diff --git a/script.module.gmusicapi/changelog.txt 
b/script.module.gmusicapi/changelog.txt
index bc8d20b..0c05d11 100644
--- a/script.module.gmusicapi/changelog.txt
+++ b/script.module.gmusicapi/changelog.txt
@@ -1,2 +1,5 @@
+[B]2012.11.09[/B]
+- compatibility updates
+
 [B]2012.05.04[/B]
 - initial Release for XBMC
diff --git a/script.module.gmusicapi/lib/gmusicapi/api.py 
b/script.module.gmusicapi/lib/gmusicapi/api.py
index c26103a..91bb640 100644
--- a/script.module.gmusicapi/lib/gmusicapi/api.py
+++ b/script.module.gmusicapi/lib/gmusicapi/api.py
@@ -287,17 +287,15 @@ class Api(UsesLog):
 
         return self._wc_call("loadplaylist", playlist_id)["playlist"]
 
-    def get_all_playlist_ids(self, auto=True, instant=True, user=True, 
always_id_lists=False):
+    def get_all_playlist_ids(self, auto=True, user=True, 
always_id_lists=False):
         """Returns a dictionary mapping playlist types to dictionaries of 
``{"<playlist name>": "<playlist id>"}`` pairs.
 
         Available playlist types are:
 
         * "`auto`" - auto playlists
-        * "`instant`" - instant mixes
-        * "`user`" - user-defined playlists
+        * "`user`" - user-defined playlists (including instant mixes)
 
         :param auto: make an "`auto`" entry in the result.
-        :param instant: make an "`instant`" entry in the result.
         :param user: make a "`user`" entry in the result.
         :param always_id_lists: when False, map name -> id when there is a 
single playlist for that name. When True, always map to a list (which may only 
have a single id in it).
 
@@ -312,8 +310,6 @@ class Api(UsesLog):
 
         if auto:
             playlists['auto'] = self._get_auto_playlists()
-        if instant:
-            playlists['instant'] = 
self._playlist_list_to_dict(res['magicPlaylists'])
         if user:
             playlists['user'] = self._playlist_list_to_dict(res['playlists'])
 
@@ -339,7 +335,7 @@ class Api(UsesLog):
         
         #Auto playlist ids are hardcoded in the wc javascript.
         #If Google releases Music internationally, this will probably be 
broken.
-        #TODO: how to test for this? if loaded, will the calls just fail?
+        #When testing, an incorrect name here will be caught.
         return {"Thumbs up": "auto-playlist-thumbs-up", 
                 "Last added": "auto-playlist-recent",
                 "Free and purchased": "auto-playlist-promo"}
@@ -713,7 +709,7 @@ class Api(UsesLog):
 
         try:
             for orig_fn in filenames:
-                extension = orig_fn.split(".")[-1]
+                extension = orig_fn.split(".")[-1].lower()
 
                 if extension == "mp3":
                     all_file_handles.append(file(orig_fn))
diff --git a/script.module.gmusicapi/lib/gmusicapi/protocol.py 
b/script.module.gmusicapi/lib/gmusicapi/protocol.py
index fd9c456..0f2b0f7 100644
--- a/script.module.gmusicapi/lib/gmusicapi/protocol.py
+++ b/script.module.gmusicapi/lib/gmusicapi/protocol.py
@@ -266,6 +266,11 @@ class Metadata_Expectations(object):
         val_type = "boolean"
     class matchedId(_Metadata_Expectation):
         mutable = False
+    
+    #Seems to be a matching track in the store.
+    class storeId(_Metadata_Expectation):
+        mutable = False
+        optional = True
         
     
     #Dependent metadata:
@@ -310,6 +315,7 @@ class Metadata_Expectations(object):
         mutable = False
         volatile = True
         val_type = "integer"
+        optional = True #only appears if song has been played
 
     
 class WC_Protocol(object):
@@ -553,7 +559,6 @@ class WC_Protocol(object):
                 req = {}
                 res = {"type":"object",
                        "properties":{
-                           "magicPlaylists": WC_Protocol.pl_array,
                            "playlists": WC_Protocol.pl_array,
                            },
                        "additionalProperties":False
@@ -607,7 +612,7 @@ class WC_Protocol(object):
             res = {"type":"object",
                    "properties":{
                        "downloadCounts":{
-                           "type":"array",
+                           "type":"object",
                            "items":{
                                "type":"object",
                                "properties":{
@@ -748,7 +753,7 @@ class MM_Protocol(object):
 
         for filename in filenames:
 
-            if not filename.split(".")[-1] == "mp3":
+            if not filename.split(".")[-1].lower() == "mp3":
                 self.log.error("Cannot upload '%s' because it is not an mp3.")
 
             track = metadata.tracks.add()
@@ -787,7 +792,13 @@ class MM_Protocol(object):
             track.duration = int(audio.info.length * 1000)
 
             #GM requires at least a title.
-            track.title = audio["title"][0] if "title" in audio else 
filename.split(r'/')[-1]
+            if "title" in audio:
+                track.title = audio["title"][0] 
+            else:
+                #attempt to handle unicode filenames.
+                enc = utils.guess_str_encoding(filename)[0]
+                track.title = filename.decode(enc).split(r'/')[-1]
+
 
             if "album" in audio: track.album = audio["album"][0]
             if "artist" in audio: track.artist = audio["artist"][0]
diff --git a/script.module.gmusicapi/lib/gmusicapi/utils/apilogging.py 
b/script.module.gmusicapi/lib/gmusicapi/utils/apilogging.py
index 3f038a2..b2a5cc2 100644
--- a/script.module.gmusicapi/lib/gmusicapi/utils/apilogging.py
+++ b/script.module.gmusicapi/lib/gmusicapi/utils/apilogging.py
@@ -31,7 +31,6 @@
 import logging
 
 root_logger_name = "gmusicapi"
-log_filename = "gmusicapi.log"
 
 #Logging code adapted from: 
 # http://docs.python.org/howto/logging-cookbook.html#logging-cookbook
@@ -43,20 +42,14 @@ class LogController(object):
     logger = logging.getLogger(root_logger_name)
     logger.setLevel(logging.DEBUG)
 
-    # create file handler to log debug info
-    fh = logging.FileHandler(log_filename)
-    fh.setLevel(logging.DEBUG)
-
     # create console handler with a higher log level
     ch = logging.StreamHandler()
     ch.setLevel(logging.WARNING)
 
     # create formatter and add it to the handlers
     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - 
%(message)s')
-    fh.setFormatter(formatter)
     ch.setFormatter(formatter)
 
-    logger.addHandler(fh)
     logger.addHandler(ch)
 
     logger.info("!-- Starting log --!")
diff --git a/script.module.gmusicapi/lib/gmusicapi/utils/utils.py 
b/script.module.gmusicapi/lib/gmusicapi/utils/utils.py
index 1ef4dce..be377d5 100644
--- a/script.module.gmusicapi/lib/gmusicapi/utils/utils.py
+++ b/script.module.gmusicapi/lib/gmusicapi/utils/utils.py
@@ -34,10 +34,21 @@ from htmlentitydefs import name2codepoint
 
 import mutagen
 from decorator import decorator
+import chardet
 
 from apilogging import LogController
 log = LogController.get_logger("utils")
 
+def guess_str_encoding(s):
+    """Return a tuple (guessed encoding, confidence)."""
+
+    res = chardet.detect(s)
+    return (res['encoding'], res['confidence'])
+    
+def guess_file_encoding(filename):
+    with open(filename) as f: 
+        return guess_str_encoding(f.read())
+
 def copy_md_tags(from_fname, to_fname):
     """Copy all metadata from *from_fname* to *to_fname* and write.
     

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

commit ea64953b4f32c8a32d0bba3578e5b2c2e1e2aa54
Author: Martijn Kaijser <[email protected]>
Date:   Thu Dec 20 21:30:31 2012 +0100

    [script.module.xbmcswift2] -1.3.1

diff --git a/script.module.xbmcswift2/addon.xml 
b/script.module.xbmcswift2/addon.xml
index 23dfa1f..705a758 100644
--- a/script.module.xbmcswift2/addon.xml
+++ b/script.module.xbmcswift2/addon.xml
@@ -1,4 +1,4 @@
-<addon id="script.module.xbmcswift2" name="xbmcswift2" provider-name="Jonathan 
Beluch (jbel)" version="1.3.0">
+<addon id="script.module.xbmcswift2" name="xbmcswift2" provider-name="Jonathan 
Beluch (jbel)" version="1.3.1">
   <requires>
     <import addon="xbmc.python" version="2.0" />
   </requires>
@@ -6,4 +6,4 @@
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
   </extension>
-</addon>
+</addon>
\ No newline at end of file
diff --git a/script.module.xbmcswift2/changelog.txt 
b/script.module.xbmcswift2/changelog.txt
index c551282..9eb058c 100644
--- a/script.module.xbmcswift2/changelog.txt
+++ b/script.module.xbmcswift2/changelog.txt
@@ -1,6 +1,12 @@
 CHANGES
 =======
 
+Version 1.3.1
+-------------
+
+- Bug fixes
+
+
 Version 1.3
 -----------
 
diff --git a/script.module.xbmcswift2/lib/xbmcswift2/logger.py 
b/script.module.xbmcswift2/lib/xbmcswift2/logger.py
index d7341f2..ba4f186 100644
--- a/script.module.xbmcswift2/lib/xbmcswift2/logger.py
+++ b/script.module.xbmcswift2/lib/xbmcswift2/logger.py
@@ -67,7 +67,7 @@ class XBMCFilter(object):
             from xbmcswift2 import xbmc
             xbmc_level = XBMCFilter.xbmc_levels.get(
                 XBMCFilter.python_to_xbmc.get(record.levelname))
-            xbmc.log('%s%s' % (self.prefix, record.msg), xbmc_level)
+            xbmc.log('%s%s' % (self.prefix, record.getMessage()), xbmc_level)
             return False
 
 
diff --git a/script.module.xbmcswift2/lib/xbmcswift2/plugin.py 
b/script.module.xbmcswift2/lib/xbmcswift2/plugin.py
index a88994a..6e821dc 100644
--- a/script.module.xbmcswift2/lib/xbmcswift2/plugin.py
+++ b/script.module.xbmcswift2/lib/xbmcswift2/plugin.py
@@ -300,6 +300,7 @@ class Plugin(XBMCMixin):
             # Allow the returning of bare dictionaries so we can cache view
             if not self._end_of_directory and self.handle == 0:
                 listitems = self.finish(listitems)
+
             return listitems
         raise NotFoundException, 'No matching view found for %s' % path
 
@@ -315,4 +316,13 @@ class Plugin(XBMCMixin):
         '''The main entry point for a plugin.'''
         self._request = self._parse_request()
         log.debug('Handling incoming request for %s', self.request.path)
-        return self._dispatch(self.request.path)
+        items = self._dispatch(self.request.path)
+
+        # Close any open storages which will persist them to disk
+        if hasattr(self, '_unsynced_storages'):
+            for storage in self._unsynced_storages.values():
+                log.debug('Saving a %s storage to disk at "%s"',
+                          storage.file_format, storage.filename)
+                storage.close()
+
+        return items
diff --git a/script.module.xbmcswift2/lib/xbmcswift2/xbmcmixin.py 
b/script.module.xbmcswift2/lib/xbmcswift2/xbmcmixin.py
index 781e6f0..9af96f6 100644
--- a/script.module.xbmcswift2/lib/xbmcswift2/xbmcmixin.py
+++ b/script.module.xbmcswift2/lib/xbmcswift2/xbmcmixin.py
@@ -372,12 +372,5 @@ class XBMCMixin(object):
         # Finalize the directory items
         self.end_of_directory(succeeded, update_listing, cache_to_disc)
 
-        # Close any open storages which will persist them to disk
-        if hasattr(self, '_unsynced_storages'):
-            for storage in self._unsynced_storages.values():
-                log.debug('Saving a %s storage to disk at "%s"',
-                          storage.file_format, storage.filename)
-                storage.close()
-
         # Return the cached list of all the list items that were added
         return self.added_items
diff --git a/script.module.xbmcswift2/xbmcswift2_version 
b/script.module.xbmcswift2/xbmcswift2_version
index e793f49..7f32932 100644
--- a/script.module.xbmcswift2/xbmcswift2_version
+++ b/script.module.xbmcswift2/xbmcswift2_version
@@ -1 +1 @@
-5807a56a648fba3917ada0f96d53efa9010388ce
\ No newline at end of file
+e92ddbf59eaccf7fc6ea86e80798e420ffc4fb0d
\ No newline at end of file

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

Summary of changes:
 script.module.gmusicapi/addon.xml                  |    7 ++++---
 script.module.gmusicapi/changelog.txt              |    3 +++
 script.module.gmusicapi/lib/gmusicapi/api.py       |   12 ++++--------
 script.module.gmusicapi/lib/gmusicapi/protocol.py  |   19 +++++++++++++++----
 .../lib/gmusicapi/utils/apilogging.py              |    7 -------
 .../lib/gmusicapi/utils/utils.py                   |   11 +++++++++++
 script.module.xbmcswift2/addon.xml                 |    4 ++--
 script.module.xbmcswift2/changelog.txt             |    6 ++++++
 script.module.xbmcswift2/lib/xbmcswift2/logger.py  |    2 +-
 script.module.xbmcswift2/lib/xbmcswift2/plugin.py  |   12 +++++++++++-
 .../lib/xbmcswift2/xbmcmixin.py                    |    7 -------
 script.module.xbmcswift2/xbmcswift2_version        |    2 +-
 12 files changed, 58 insertions(+), 34 deletions(-)


hooks/post-receive
-- 
Scripts

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to