The branch, frodo has been updated
via 4bd84d8f81d5e2e5598dd95958247dc2843cd5aa (commit)
from 1a56f06b9fa64e077b712c493a6fc05344b74cea (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=4bd84d8f81d5e2e5598dd95958247dc2843cd5aa
commit 4bd84d8f81d5e2e5598dd95958247dc2843cd5aa
Author: sphere <[email protected]>
Date: Tue Apr 29 10:12:15 2014 +0200
[script.module.xbmcutil] updated to version 2.0.4
diff --git a/script.module.xbmcutil/addon.xml b/script.module.xbmcutil/addon.xml
index 1355a25..98ff9b3 100644
--- a/script.module.xbmcutil/addon.xml
+++ b/script.module.xbmcutil/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="script.module.xbmcutil" name="XBMC Utility Pack"
provider-name="willforde" version="2.0.2">
+<addon id="script.module.xbmcutil" name="XBMC Utility Pack"
provider-name="willforde" version="2.0.4">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.parsedom" version="2.5.1"/>
diff --git a/script.module.xbmcutil/changelog.txt
b/script.module.xbmcutil/changelog.txt
index 58200e3..d17ebd3 100644
--- a/script.module.xbmcutil/changelog.txt
+++ b/script.module.xbmcutil/changelog.txt
@@ -1,3 +1,13 @@
+[B]Version 2.0.4[/B]
+- Changed the Video Context menu to not replace items
+- Fixed bug with XBMC unexpectedly returning unicode instead of a string
+- General unicode fixes
+
+[B]Version 2.0.3[/B]
+- Added getLabel method to custom listitem that returns unicode Label
+- Fixed very small bug with youtube channel video scraper sudio name
+- Fixed small bug where addons whould crash if profile path don't exist
+
[B]Version 2.0.2[/B]
- Added Full Unicode Support
- Added Search with Save Searches Support
diff --git a/script.module.xbmcutil/lib/xbmcutil/__init__.py
b/script.module.xbmcutil/lib/xbmcutil/__init__.py
index f8b13ed..ee5e7b0 100644
--- a/script.module.xbmcutil/lib/xbmcutil/__init__.py
+++ b/script.module.xbmcutil/lib/xbmcutil/__init__.py
@@ -61,31 +61,31 @@ class Addon(object):
# Shortcuts
self.openSettings = self._addonData.openSettings
self.setSetting = self._addonData.setSetting
- self.getstr = self.getLocalizedString
+ self.getuni = self.getLocalizedString
def getLocalizedString(self, id):
- """ Return localized string for selected id """
- if id >= 30000 and id <= 30899: return
self._addonData.getLocalizedString(id).decode("utf8")
- elif id >= 32900 and id <= 32999: return
self._scriptData.getLocalizedString(id).decode("utf8")
+ """ Return localized unicode string for selected id """
+ if id >= 30000 and id <= 30899: return
self._addonData.getLocalizedString(id)
+ elif id >= 32900 and id <= 32999: return
self._scriptData.getLocalizedString(id)
else: return self.xbmc.getLocalizedString(id)
- def getuni(self, id):
- """ Return localized unicode string for selected id """
- return self.getLocalizedString(id).decode("utf8")
+ def getstr(self, id):
+ """ Return localized string for selected id """
+ return self.getLocalizedString(id).encode("utf8")
def getAddonSetting(self, id, key):
""" Return setting for selected addon """
try: addonData = self._addonObj(id)
except: return u""
- else: return addonData.getSetting(key).decode("utf8")
+ else: return addonData.getSetting(key)
def getQuality(self):
""" Return unicode for quality setting """
- return self._addonData.getSetting("quality").decode("utf8")
+ return self._addonData.getSetting("quality")
def getSetting(self, id):
""" Return unicode for setting """
- return self._addonData.getSetting(id).decode("utf8")
+ return self._addonData.getSetting(id)
def getSettingInt(self, id):
""" Return Integer for settings """
@@ -93,7 +93,7 @@ class Addon(object):
def getSettingBool(self, id):
""" Return boolean for setting """
- return self._addonData.getSetting(id) == "true"
+ return self._addonData.getSetting(id) == u"true"
def translatePath(self, path):
""" Return translated special paths as unicode """
@@ -151,6 +151,7 @@ class Addon(object):
if self._profile: return self._profile
else:
self._profile =
self.translatePath(self._addonData.getAddonInfo("profile"))
+ if not self.os.path.exists(self._profile):
self.os.makedirs(self._profile)
return self._profile
def getLibPath(self):
diff --git a/script.module.xbmcutil/lib/xbmcutil/listitem.py
b/script.module.xbmcutil/lib/xbmcutil/listitem.py
index d6a395f..fe2b3b2 100644
--- a/script.module.xbmcutil/lib/xbmcutil/listitem.py
+++ b/script.module.xbmcutil/lib/xbmcutil/listitem.py
@@ -40,9 +40,6 @@ class Playlist(plugin.xbmc.PlayList):
# Initiate Overriding, in obj Classs Method
super(Playlist, self).__init__()
self.clear()
-
- # Create Dummy Item to fix XBMC Playlist Bug
- self.add("V V V V V V V V V V V V V")
def add_iter(self, listitems):
""" Accepts a iterable of (url, listitem, isfolder) """
@@ -94,16 +91,13 @@ class ListItem(plugin.xbmcgui.ListItem):
_fanartImage = _plugin.getFanartImage()
_imageGlobal = _plugin.getImageLocation(local=False)
_imageLocal = _plugin.getImageLocation(local=True)
- _stringDownload = _plugin.getstr(33003)
- _strRelated = _plugin.getstr(32966)
- _staticMenu = ([(_plugin.getstr(20159), "XBMC.Action(Info)"),
- (_plugin.getstr(1045),
"XBMC.RunPlugin(%s?action=system.opensettings)" % _handleZero),
- (_plugin.getstr(13347),
"XBMC.Action(Queue)"),
- (_plugin.getstr(32962),
"XBMC.ActivateWindow(videoplaylist)"),
- (_plugin.getstr(22083),
"XBMC.RunPlugin(%splayall=true)" % _handelThree),
- (_plugin.getstr(184),
"XBMC.Container.Update(%srefresh=true)" % _handelThree)],
- [(_plugin.getstr(1045),
"XBMC.RunPlugin(%s?action=system.opensettings)" % _handleZero),
- (_plugin.getstr(184),
"XBMC.Container.Update(%srefresh=true)" % _handelThree)])
+ _stringDownload = _plugin.getuni(33003)
+ _strRelated = _plugin.getuni(32966)
+ _staticMenu = ([(_plugin.getuni(20159), "XBMC.Action(Info)"),
+ (_plugin.getuni(13347),
"XBMC.Action(Queue)"),
+ (_plugin.getuni(184),
"XBMC.Container.Update(%srefresh=true)" % _handelThree)],
+ [(_plugin.getuni(1045),
"XBMC.RunPlugin(%s?action=system.opensettings)" % _handleZero),
+ (_plugin.getuni(184),
"XBMC.Container.Update(%srefresh=true)" % _handelThree)])
def __init__(self):
""" Initialize XBMC ListItem Object """
@@ -130,6 +124,10 @@ class ListItem(plugin.xbmcgui.ListItem):
self.infoLabels["title"] = label
self._selfObject.setLabel(self, label)
+ def getLabel(self):
+ """ Returns the listitem label as a unicode string"""
+ return self._selfObject.getLabel(self).decode("utf8")
+
def setIconImage(self, icon=None):
""" Sets ListItem's Icon Image
@@ -249,8 +247,8 @@ class ListItem(plugin.xbmcgui.ListItem):
def addContextMenuItem(self, label, command, **params):
""" Adds context menu item to XBMC
- label: string - Name of contect item
- command: string - XBMC build in function
+ label: string or unicode - Name of contect item
+ command: string or unicode - XBMC build in function
params: dict - Command options
"""
if params: command += "(%s?%s)" % (self._handleZero,
self._urlencode(params))
@@ -288,7 +286,7 @@ class ListItem(plugin.xbmcgui.ListItem):
self.path = self.getPath()
# Add context menu items
if not self.isFolder and not "live" in self.urlParams:
self.addContextMenuItem(self._stringDownload,
"XBMC.RunPlugin(%s&download=true)" % (self.path))
- self.addContextMenuItems(self.contextMenu +
self._staticMenu[self.isFolder], replaceItems=True)
+ self.addContextMenuItems(self.contextMenu +
self._staticMenu[self.isFolder], replaceItems=not isPlayable)
# Call Decorated Function ad return it response
return function(self)
return wrapped
@@ -442,14 +440,7 @@ class VirtualFS(object):
def add_dir_items(self, listitems):
""" Add Directory List Items to XBMC """
- if "playall" in self._plugin:
- # Create a Playlist of all Items
- playlist = Playlist(1)
- playlist.add_iter(listitems)
- self._plugin.xbmc.Player().play(playlist)
-
- # Else List all Items
- else:
self._plugin.xbmcplugin.addDirectoryItems(self._handleOne, listitems,
len(listitems))
+ self._plugin.xbmcplugin.addDirectoryItems(self._handleOne,
listitems, len(listitems))
def set_sort_methods(self, *sortMethods):
""" Set XBMC Sort Methods """
@@ -517,18 +508,24 @@ class PlayMedia(object):
except:
# Resolve Video Url using Plugin Resolver
resolvedData = self.resolve()
- if resolvedData and "url" in resolvedData:
+ if resolvedData and isinstance(resolvedData, dict):
self._videoData.update(resolvedData)
return True
+ elif resolvedData:
+ self._videoData["url"] = resolvedData
+ return True
else:
# Resolve Video Url using Video Hosts sources
if subaction == u"direct":
return True
elif subaction == u"source":
resolvedData =
self._plugin.error_handler(self.sources)()
- if resolvedData and "url" in resolvedData:
+ if resolvedData and isinstance(resolvedData,
dict):
self._videoData.update(resolvedData)
return True
+ elif resolvedData:
+ self._videoData["url"] = resolvedData
+ return True
def sources(self, url=None, urls=None):
# Import Video Resolver
@@ -584,17 +581,23 @@ class PlayMedia(object):
if listitem is None:
listitem = listitemObj()
listitem.setLabel(videoTitle %
count)
- prepappend((url, listitem))
+
+ # Add Content Type and urlpath to
listitem
+ if "type" in self._videoData:
listitem.setMimeType(self._videoData["type"])
+ url = self.add_header_pips(url,
self._videoData.get("useragent"), self._videoData.get("referer"))
+ listitem.setPath(url)
+ prepappend((url, listitem, False))
if downloadRequested:
downloader = DownloadMGR(downloadPath)
downloader.add_batch_job(prepList)
else:
+ # Create Playlist and add items
playlist = Playlist(1)
- for url, listitem in prepList:
- # Add Content Type and listitem to
Playlist
- if "type" in self._videoData:
listitem.setMimeType(self._videoData["type"])
- playlist.add(self.add_header_pips(url,
self._videoData.get("useragent"), self._videoData.get("referer")), listitem)
+ playlist.add_iter(prepList)
+
+ # Resolve to first element of playlist
+ self.set_resolved_url(prepList[0][1])
# Add Single Video to XBMC
else:
diff --git a/script.module.xbmcutil/lib/xbmcutil/storageDB.py
b/script.module.xbmcutil/lib/xbmcutil/storageDB.py
index f8864fd..f8f3312 100644
--- a/script.module.xbmcutil/lib/xbmcutil/storageDB.py
+++ b/script.module.xbmcutil/lib/xbmcutil/storageDB.py
@@ -163,7 +163,7 @@ class SavedSearches(listitem.VirtualFS):
baseAction = plugin["forwarding"]
# Create Context Menu item Params
- strRemove = plugin.getstr(1210)
+ strRemove = plugin.getuni(1210)
params = plugin._Params.copy()
params["updatelisting"] = "true"
diff --git a/script.module.xbmcutil/lib/xbmcutil/videohostsAPI.py
b/script.module.xbmcutil/lib/xbmcutil/videohostsAPI.py
index 0fe53da..f3f8e50 100644
--- a/script.module.xbmcutil/lib/xbmcutil/videohostsAPI.py
+++ b/script.module.xbmcutil/lib/xbmcutil/videohostsAPI.py
@@ -179,7 +179,7 @@ class YoutubeAPI:
item.setLabel(mediaGroup[u"media$title"][u"$t"])
# Fetch Studio & Category
-
item.setInfoDict(studio=mediaGroup[u"media$credit"][0][u"$t"].title(),
genre=mediaGroup[u"media$category"][0][u"label"])
+
item.setInfoDict(studio=mediaGroup[u"media$credit"][0][u"yt$display"],
genre=mediaGroup[u"media$category"][0][u"label"])
# Fetch Duration
if u"yt$duration" in node:
item.setDurationInfo(mediaGroup[u"yt$duration"][u"seconds"])
diff --git a/script.module.xbmcutil/resources/language/English/strings.xml
b/script.module.xbmcutil/resources/language/English/strings.xml
index 6eb0183..6d25d13 100644
--- a/script.module.xbmcutil/resources/language/English/strings.xml
+++ b/script.module.xbmcutil/resources/language/English/strings.xml
@@ -24,7 +24,6 @@
<!-- Context Menu Codes: 32960 - 32969 -->
<string id="32960">Audio information</string>
- <string id="32962">View Queue</string>
<string id="32963">Youtube Channel</string>
<string id="32964">Youtube Playlist</string>
<string id="32965">Youtube Playlists</string>
-----------------------------------------------------------------------
Summary of changes:
script.module.xbmcutil/addon.xml | 2 +-
script.module.xbmcutil/changelog.txt | 10 +++
script.module.xbmcutil/lib/xbmcutil/__init__.py | 23 ++++---
script.module.xbmcutil/lib/xbmcutil/listitem.py | 65 ++++++++++---------
script.module.xbmcutil/lib/xbmcutil/storageDB.py | 2 +-
.../lib/xbmcutil/videohostsAPI.py | 2 +-
.../resources/language/English/strings.xml | 1 -
7 files changed, 59 insertions(+), 46 deletions(-)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
"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