The branch, dharma has been updated
       via  b8dbf608d0f2783aa86525d1ee381512c656bbb7 (commit)
       via  85ad4b11d81d27bc6901881aca285e7fe5346997 (commit)
       via  b906fb03b2c3d50480d1370e2bd994687fb81725 (commit)
      from  69ca8b48d15ee912f5b94a11e45bf43c7c59fd2b (commit)

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

commit b8dbf608d0f2783aa86525d1ee381512c656bbb7
Author: spiff <[email protected]>
Date:   Thu Mar 24 20:15:33 2011 +0100

    [plugin.video.youtube] updated to version 2.0.3

diff --git a/plugin.video.youtube/YouTubeCore.py 
b/plugin.video.youtube/YouTubeCore.py
index acfccc1..b416179 100755
--- a/plugin.video.youtube/YouTubeCore.py
+++ b/plugin.video.youtube/YouTubeCore.py
@@ -355,11 +355,12 @@ class YouTubeCore(object):
                                        if link.item(i).getAttribute('rel') == 
'edit':
                                                obj = 
link.item(i).getAttribute('href')
                                                video['editid'] = 
obj[obj.rfind('/')+1:]
-                                                                               
-                       video['next'] = next
-
+                       
                        playobjects.append(video);
                        
+               if len(playobjects) > 0:
+                       playobjects[len(playobjects) - 1]['next'] = next
+                       
                if self.__dbg__:
                        print self.__plugin__ + " playlist done"
                                
@@ -466,6 +467,7 @@ class YouTubeCore(object):
                                        if (len(fmt_url) > 7 and 
fmt_url.find(":\\/\\/") > 0):
                                                if (fmt_url.rfind(',') > 
fmt_url.rfind('\/id\/')):
                                                        final_url = 
fmt_url[:fmt_url.rfind(',')]
+                                                       final_url = 
final_url.replace('\u0026','&')
                                                        if 
(final_url.rfind('\/itag\/') > 0):
                                                                quality = 
final_url[final_url.rfind('\/itag\/') + 8:]
                                                        else :
@@ -473,6 +475,7 @@ class YouTubeCore(object):
                                                        links[int(quality)] = 
final_url.replace('\/','/')
                                                else :
                                                        final_url = fmt_url
+                                                       final_url = 
final_url.replace('\u0026','&')
                                                        if 
(final_url.rfind('\/itag\/') > 0):
                                                                quality = 
final_url[final_url.rfind('\/itag\/') + 8:]
                                                        else :
@@ -486,6 +489,7 @@ class YouTubeCore(object):
                                        if (len(fmt_url) > 7):
                                                if (fmt_url.rfind(',') > 
fmt_url.rfind('&id=')): 
                                                        final_url = 
fmt_url[:fmt_url.rfind(',')]
+                                                       final_url = 
final_url.replace('\u0026','&')
                                                        if 
(final_url.rfind('itag=') > 0):
                                                                quality = 
final_url[final_url.rfind('itag=') + 5:]
                                                                quality = 
quality[:quality.find('&')]
diff --git a/plugin.video.youtube/YouTubeNavigation.py 
b/plugin.video.youtube/YouTubeNavigation.py
index 917fb93..081b379 100644
--- a/plugin.video.youtube/YouTubeNavigation.py
+++ b/plugin.video.youtube/YouTubeNavigation.py
@@ -266,12 +266,13 @@ class YouTubeNavigation:
                        item_add_user = {'Title':self.__language__( 30024 ), 
'path':get("path"), 'login':"true", 'thumbnail':"add_user", 
'action':"add_contact"}
                        self.addFolderListItem(params, item_add_user,  1)
                                                
-               if ( get('feed') == 'subscriptions' ) :
-                       item = {"Title":self.__language__( 30004 ), 
"path":"/root/subscriptions/new", "thumbnail":"newsubscriptions", 
"login":"true", "feed":"newsubscriptions"}
-                       if (get("contact")):
-                               item["contact"] = get("contact")
-                       
-                       self.addFolderListItem(params, item)
+               if ( get('feed') == 'subscriptions' ):
+                       if (not get("page")):
+                               item = {"Title":self.__language__( 30004 ), 
"path":"/root/subscriptions/new", "thumbnail":"newsubscriptions", 
"login":"true", "feed":"newsubscriptions"}
+                               if (get("contact")):
+                                       item["contact"] = get("contact")
+                               
+                               self.addFolderListItem(params, item)
                                                        
                self.parseFolderList(params, result)
                                                                
@@ -409,6 +410,7 @@ class YouTubeNavigation:
        def playVideo(self, params = {}):
                get = params.get
                (video, status) = core.construct_video_url(params);
+
                if status != 200:
                        self.errorHandling(self.__language__(30603), video, 
status)
                        return False
@@ -571,6 +573,7 @@ class YouTubeNavigation:
        
        def search(self, params = {}):
                get = params.get
+                               
                if (get("search")):
                        query = get("search")
                        query = urllib.unquote_plus(query)
@@ -662,7 +665,6 @@ class YouTubeNavigation:
                                self.saveSearch(old_query, new_query, 
"stored_disco_searches")
                                
                        self.search(params)
-                       
 
        def refineSearch(self, params = {}):
                get = params.get
@@ -754,7 +756,8 @@ class YouTubeNavigation:
                url = self.buildItemUrl(item_params, url)
                
                if len(cm) > 0:
-                       listitem.addContextMenuItems( cm, replaceItems=True )
+                       listitem.addContextMenuItems( cm, replaceItems=False )
+               
                listitem.setProperty( "Folder", "true" )
                if (item("feed") == "downloads"):
                        url = self.__settings__.getSetting("downloadPath")
@@ -814,6 +817,8 @@ class YouTubeNavigation:
                        result = result_params.get
                        next = result("next") == "true"
                        
+                       # Make sure folder items don't have next set otherwise 
they won't get context menu items attached
+                       result_params["next"] = "false"
                        result_params["path"] = get("path")
                        result_params["login"] = "true"
                        
diff --git a/plugin.video.youtube/addon.xml b/plugin.video.youtube/addon.xml
index 06e9d51..2283f05 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.0.2"
+       version="2.0.3"
        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 697600a..4c0c525 100644
--- a/plugin.video.youtube/changelog.txt
+++ b/plugin.video.youtube/changelog.txt
@@ -6,6 +6,12 @@
 - [YOUTUBE] Can't delete favorites (YouTube gives video id, not favorite id).
 - Download of rtmpe streams not supported.
 
+[B]Version 2.0.3[/B]
+- Fixed Context menus were "suddenly" missing on a lot of folder items 
(probably since pre v.2)
+- Fixed "New Subscriptions Videos" feed would show up on every subscriptions 
page this has been corrected
+- Fixed YouTube changed character encoding of their webpage which messed up 
playback in the plugin.
+- Added Portuguese (Brazil) translation courtesy of fschnack
+
 [B]Version 2.0.2[/B]
 - Fixed problem with "Now Playing" context menu item showing the Music 
Playlist and not the Video Playlist
 - Fixed Issue preventing the plugin running on XBMC builds using external 
python (ie. v2.7)
diff --git a/plugin.video.youtube/default.py b/plugin.video.youtube/default.py
index cd823dc..0fa0941 100644
--- a/plugin.video.youtube/default.py
+++ b/plugin.video.youtube/default.py
@@ -19,7 +19,7 @@
 import sys, xbmc, xbmcaddon
 
 # plugin constants
-__version__ = "2.0.2"
+__version__ = "2.0.3"
 __plugin__ = "YouTube-" + __version__
 __author__ = "TheCollective"
 __url__ = "www.xbmc.com"

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

commit 85ad4b11d81d27bc6901881aca285e7fe5346997
Author: spiff <[email protected]>
Date:   Thu Mar 24 20:12:23 2011 +0100

    [plugin.video.nz.ondemand] updated to version 1.3.3

diff --git a/plugin.video.nz.ondemand/addon.xml 
b/plugin.video.nz.ondemand/addon.xml
index 4a4d7ba..e30c20f 100644
--- a/plugin.video.nz.ondemand/addon.xml
+++ b/plugin.video.nz.ondemand/addon.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.nz.ondemand"
-       version="1.2.0"
+       version="1.3.3"
        name="NZ OnDemand"
        provider-name="Mark Honeychurch (markhoney)">
   <requires>
@@ -13,7 +13,7 @@
   <extension point="xbmc.addon.metadata">
     <platform>all</platform>
     <summary lang="en">NZ OnDemand</summary>
-    <description lang="en">New Zealand TV3/C4, TVNZ and Ziln OnDemand 
Videos.</description>
+    <description lang="en">New Zealand TV3/C4, TVNZ and Ziln OnDemand videos, 
along with Shine and Parliament TV streaming video.</description>
     <disclaimer lang="en">Some parts of this addon may not be legal in your 
country of residence - please check with your local laws.</disclaimer>
   </extension>
 </addon>
diff --git a/plugin.video.nz.ondemand/changelog.txt 
b/plugin.video.nz.ondemand/changelog.txt
index 1a3dda4..d6831f5 100644
--- a/plugin.video.nz.ondemand/changelog.txt
+++ b/plugin.video.nz.ondemand/changelog.txt
@@ -1,3 +1,22 @@
+[B]1.3.3[/B]
+- Added search for TV3 (just waiting for PS3 now)
+- Fixed HTTP (non RTMP) stream detection for TV3 (so more videos should now 
play properly)
+
+[B]1.3.2[/B]
+- Added User Agent spoofing to look like IE9 for all sites except TVNZ, where 
we pretend to be a PS3
+- Added Search ability to Ziln (TV3 and possibly TVNZ to follow)
+
+[B]1.3.1[/B]
+- Added the ability to hide all but the 2 core channels (TV3 and TVNZ)
+
+[B]1.3.0[/B]
+- Added Parliament TV live stream
+- Added Shine TV live stream (although the streaming service is inactive at 
the moment)
+- New logo, courtesy of Freezy
+
+[B]1.2.1[/B]
+- Fixed TVNZ's All Shows Category
+
 [B]1.2.0[/B]
 - Fixed issues with all three providers
 - Added stream quality setting for TV3 and TVNZ
diff --git a/plugin.video.nz.ondemand/default.py 
b/plugin.video.nz.ondemand/default.py
index 7071a08..d5a3710 100644
--- a/plugin.video.nz.ondemand/default.py
+++ b/plugin.video.nz.ondemand/default.py
@@ -56,18 +56,26 @@ def INDEX():
  channels = dict()
  channels["0"] = "TV3"
  channels["1"] = "TVNZ"
- channels["2"] = "Ziln"
- count = len(channels)
+ if addon.getSetting('Ziln_hide') == "false":
+  channels["2"] = "Ziln"
+ #channels["3"] = "iSKY"
+# streamingchannels = dict()
+# streamingchannels["0"] = "Shine"
+# streamingchannels["1"] = "Parliament"
+ count = len(channels) + 1 #+ len(streamingchannels)
  for index in channels:
   info = tools.defaultinfo(1)
   info["Title"] = channels[index]
-  addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
   info["Thumb"] = os.path.join(addon.getAddonInfo('path'), 
"resources/images/%s.png" % channels[index])
   info["Count"] = int(index)
   info["FileName"] = "%s?ch=%s" % (sys.argv[0], channels[index])
-  tools.addlistitem(info, "resources/images/%s.jpg" % channels[index], 1, 
count)
-
-
+  tools.addlistitem(int(sys.argv[1]), info, "resources/images/%s.jpg" % 
channels[index], 1, count)
+ if addon.getSetting('Parliament_hide') == "false":
+  import parliament
+  parliament.RESOLVE("Parliament", count)
+ if addon.getSetting('Shine_hide') == "false":
+  import shine
+  shine.RESOLVE("Shine", count)
 
 # Decide what to run based on the plugin URL
 
@@ -77,64 +85,80 @@ if params:
   import tv3
   if params.get("folder", "") <> "":
    tv3.INDEX_FOLDER(params["folder"][0])
-   tools.addsorting(["unsorted", "label"])
+   tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
   elif params.get("cat", "") <> "":
    if params["cat"][0] == "tv":
     tv3.SHOW_EPISODES(params["catid"][0], "tv3")
-    tools.addsorting(["unsorted", "date", "label", "runtime", "episode"], 
"episodes")
+    tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label", 
"runtime", "episode"], "episodes")
    elif params["cat"][0] == "atoz":
     tv3.SHOW_ATOZ(params["catid"][0], "tv3")
-    tools.addsorting(["unsorted", "date", "label", "runtime", "episode"], 
"tvshows")
+    tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label", 
"runtime", "episode"], "tvshows")
    elif params["cat"][0] == "tv3":
     tv3.SHOW_EPISODES(params["catid"][0], "tv3")
-    tools.addsorting(["unsorted", "date", "label", "runtime", "episode"], 
"episodes")
+    tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label", 
"runtime", "episode"], "episodes")
    elif params["cat"][0] == "c4tv":
     tv3.SHOW_EPISODES(params["catid"][0], "c4tv")
-    tools.addsorting(["unsorted", "date", "label", "runtime", "episode"], 
"episodes")
+    tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label", 
"runtime", "episode"], "episodes")
    elif params["cat"][0] == "shows":
     tv3.SHOW_SHOW(urllib.unquote(params["catid"][0]), 
urllib.unquote(params["title"][0]), "tv3")
-    tools.addsorting(["unsorted", "date", "label", "runtime", "episode"], 
"episodes")
+    tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label", 
"runtime", "episode"], "episodes")
   elif params.get("id", "") <> "":
    tv3.RESOLVE(params["id"][0], eval(urllib.unquote(params["info"][0])))
   else:
-   if addon.getSetting('tv3_folders') == 'true':
+   if addon.getSetting('TV3_folders') == 'true':
     tv3.INDEX_FOLDERS()
    else:
     tv3.INDEX("tv3")
-   tools.addsorting(["unsorted", "label"])
+   tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
  elif params["ch"][0] == "TVNZ":
   import tvnz
   if params.get("type", "") <> "":
    if params["type"][0] == "shows":
     tvnz.EPISODE_LIST(params["id"][0])
-    tools.addsorting(["label"], "episodes")
+    tools.addsorting(int(sys.argv[1]), ["label"], "episodes")
    elif params["type"][0] == "singleshow":
     tvnz.SHOW_EPISODES(params["id"][0])
-    tools.addsorting(["date"], "episodes")
+    tools.addsorting(int(sys.argv[1]), ["date"], "episodes")
    elif params["type"][0] == "alphabetical":
     tvnz.SHOW_LIST(params["id"][0])
-    tools.addsorting(["label"], "tvshows")
+    tools.addsorting(int(sys.argv[1]), ["label"], "tvshows")
    elif params["type"][0] == "distributor":
     tvnz.SHOW_DISTRIBUTORS(params["id"][0])
-    tools.addsorting(["label"], "tvshows")
+    tools.addsorting(int(sys.argv[1]), ["label"], "tvshows")
    elif params["type"][0] == "video":
     tvnz.RESOLVE(params["id"][0], eval(urllib.unquote(params["info"][0])))
   else:
    tvnz.INDEX()
-   tools.addsorting(["label"])
+   tools.addsorting(int(sys.argv[1]), ["label"])
  elif params["ch"][0] == "Ziln":
   import ziln
-  if params.get("channel", "") <> "":
-   ziln.INDEX("video", params["channel"][0])
-   tools.addsorting(["label"])
+  if params.get("folder", "") <> "":
+   if params["folder"][0] == "channels":
+    ziln.PROGRAMMES("channel", "")
+    tools.addsorting(int(sys.argv[1]), ["label"])
+   elif params["folder"][0] == "search":
+    ziln.SEARCH()
+    tools.addsorting(int(sys.argv[1]), ["label"])
+  elif params.get("channel", "") <> "":
+   ziln.PROGRAMMES("video", params["channel"][0])
+   tools.addsorting(int(sys.argv[1]), ["label"])
   elif params.get("video", "") <> "":
    ziln.RESOLVE(params["video"][0]) #, eval(urllib.unquote(params["info"][0]))
-   tools.addsorting(["label"])
+   tools.addsorting(int(sys.argv[1]), ["label"])
   else:
-   ziln.INDEX("channel", "")
-   tools.addsorting(["label"])
+   ziln.INDEX()
+   tools.addsorting(int(sys.argv[1]), ["label"])
+ elif params["ch"][0] == "Shine":
+  import shine
+  shine.RESOLVE(params["ch"][0])
+# elif params["ch"][0] == "Parliament":
+#  import parliament
+#  parliament.RESOLVE(params["ch"][0], eval(urllib.unquote(params["info"][0])))
+# elif params["ch"][0] == "iSKY":
+#  import isky
+#  isky.INDEX()
  else:
   sys.stderr.write("Invalid Channel ID")
 else:
  INDEX()
- tools.addsorting(["unsorted", "label"])
\ No newline at end of file
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
\ No newline at end of file
diff --git a/plugin.video.nz.ondemand/icon.png 
b/plugin.video.nz.ondemand/icon.png
index 5773e48..1adfe26 100644
Binary files a/plugin.video.nz.ondemand/icon.png and 
b/plugin.video.nz.ondemand/icon.png differ
diff --git a/plugin.video.nz.ondemand/resources/language/English/strings.xml 
b/plugin.video.nz.ondemand/resources/language/English/strings.xml
index 55c31d3..1e5b3c4 100644
--- a/plugin.video.nz.ondemand/resources/language/English/strings.xml
+++ b/plugin.video.nz.ondemand/resources/language/English/strings.xml
@@ -7,6 +7,8 @@
   <string id="30011">Low</string>
   <string id="30012">Medium</string>
   <string id="30013">High</string>
+  <string id="30020">Stream Type</string>
+  <string id="30021">Hide This Channel</string>
 
   <string id="30052">Categories</string>
   <string id="30053">Channels</string>
@@ -21,10 +23,13 @@
   <string id="30062">Reality</string>
   <string id="30063">Sports</string>
   <string id="30064">All</string>
+  <string id="30065">Search</string>
 
   <string id="30100">General</string>
   <string id="30101">TV3</string>
   <string id="30102">TVNZ</string>
   <string id="30103">Ziln</string>
   <string id="30104">iSky</string>
+  <string id="30105">Parliament</string>
+  <string id="30106">Shine</string>
 </strings>
diff --git a/plugin.video.nz.ondemand/resources/settings.xml 
b/plugin.video.nz.ondemand/resources/settings.xml
index 1f9b118..7eede91 100644
--- a/plugin.video.nz.ondemand/resources/settings.xml
+++ b/plugin.video.nz.ondemand/resources/settings.xml
@@ -4,17 +4,26 @@
  </category>-->
  <category label="30101">
   <!--<setting id="tv3_showads" type="bool" label="30002" default="true" />-->
-  <!--<setting id="tv3_hq" type="bool" label="30000" default="true" />-->
-  <setting id="tv3_quality" type="enum" label="30010" values="Low|Medium|High" 
default="High"/>
-  <setting id="tv3_folders" type="bool" label="30001" default="true" />
+  <setting id="TV3_quality" type="labelenum" label="30010" 
values="High|Medium|Low" default="High"/>
+  <setting id="TV3_folders" type="bool"      label="30001" default="true" />
  </category>
  <category label="30102">
-  <!--<setting id="tvnz_hq" type="bool" label="30000" default="true" />-->
-  <setting id="tvnz_quality" type="enum" label="30010" 
values="Low|Medium|High" default="High"/>
-  <setting id="tvnz_showads" type="bool" label="30002" default="true"/>
+  <setting id="TVNZ_quality" type="labelenum" label="30010" 
values="High|Medium|Low" default="High"/>
+  <setting id="TVNZ_showads" type="bool"      label="30002" default="false"/>
  </category>
- <!--<category label="30103">
+ <category label="30103">
+  <setting id="Ziln_hide" type="bool" label="30021" default="false"/>
  </category>
- <category label="30104">
+ <!--<category label="30104">
+  <setting id="iSKY_hide" type="bool" label="30021" default="false"/>
  </category>-->
+ <category label="30105">
+  <setting id="Parliament_hide" type="bool" label="30021" default="false"/>
+  <setting id="Parliament_quality" type="labelenum" label="30010" 
values="High|Medium|Low"                      default="High"/>
+  <!--<setting id="Parliament_stream"  type="labelenum" label="30020" 
values="Apple Quicktime|Windows Media Player" default="Windows Media 
Player"/>-->
+ </category>
+ <category label="30106">
+  <setting id="Shine_hide" type="bool" label="30021" default="false"/>
+  <setting id="Shine_quality" type="labelenum" label="30010" 
values="High|Medium|Low" default="High"/>
+ </category>
 </settings>
diff --git a/plugin.video.nz.ondemand/tools.py 
b/plugin.video.nz.ondemand/tools.py
index 79b2f4b..b68ad31 100644
--- a/plugin.video.nz.ondemand/tools.py
+++ b/plugin.video.nz.ondemand/tools.py
@@ -13,10 +13,14 @@ def message(message, title = "Warning"): #Show an on-screen 
message (useful for
  else:
   dialog.ok("Message", "No message text")
 
-def gethtmlpage(url): #Grab an HTML page
+def gethtmlpage(url, useragent = "ie9"): #Grab an HTML page
  import urllib2
  sys.stderr.write("Requesting page: %s" % (url))
  req = urllib2.Request(url)
+ newheader = 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'
+ if useragent == "ps3":
+  newheader = 'Mozilla/5.0 (PLAYSTATION 3; 3.55)'
+ req.add_header('User-agent', newheader)
  response = urllib2.urlopen(req)
  doc = response.read()
  response.close()
@@ -82,7 +86,7 @@ def constructStackURL(playlist): #Build a URL stack from 
multiple URLs for the X
 
 # XBMC Manipulation
 
-def addlistitems(infoarray, fanart = "fanart.jpg", folder = 0, path = ""):
+def addlistitems(id, infoarray, fanart = "fanart.jpg", folder = 0, path = ""):
  total = len(infoarray)
  #total = len(infoarray.viewkeys())
  i = 0
@@ -90,48 +94,46 @@ def addlistitems(infoarray, fanart = "fanart.jpg", folder = 
0, path = ""):
  for listkey, listitem in infoarray.items():
   #listitem["Count"] = i
   i += 1
-  addlistitem(listitem, fanart, folder, total, path)
+  addlistitem(id, listitem, fanart, folder, total, path)
 
-def addlistitem(info, fanart = "fanart.jpg", folder = 0, total = 0, path = 
""): #Add a list item (media file or folder) to the XBMC page
+def addlistitem(id, info, fanart = "fanart.jpg", folder = 0, total = 0, path = 
""): #Add a list item (media file or folder) to the XBMC page
  import xbmcgui, xbmcplugin, xbmcaddon, os
- #if checkdict(info, ("Title", "Icon", "Thumb", "FileName")):
- if 1 <> 0:
-  liz = xbmcgui.ListItem(info["Title"], iconImage = info["Icon"], 
thumbnailImage = info["Thumb"])
-  addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
-  liz.setProperty('fanart_image', os.path.join(addon.getAddonInfo('path'), 
fanart))
-  liz.setInfo(type = "Video", infoLabels = info)
-  if not folder:
-   liz.setProperty("IsPlayable", "true")
-  if path == "":
-   if xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = 
info["FileName"], listitem = liz, isFolder = folder, totalItems = total):
-    return 1
-   else:
-    return 0
+ liz = xbmcgui.ListItem(info["Title"], iconImage = info["Icon"], 
thumbnailImage = info["Thumb"])
+ addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
+ liz.setProperty('fanart_image', os.path.join(addon.getAddonInfo('path'), 
fanart))
+ liz.setInfo(type = "Video", infoLabels = info)
+ if not folder:
+  liz.setProperty("IsPlayable", "true")
+ if path == "":
+  if xbmcplugin.addDirectoryItem(handle = id, url = info["FileName"], listitem 
= liz, isFolder = folder, totalItems = total):
+   return 1
   else:
-   liz.setPath(path)
-   try:
-    xbmcplugin.setResolvedUrl(handle = int(sys.argv[1]), succeeded = True, 
listitem = liz)
-   except:
-    message("Boo, couldn't play.")
+   return 0
+ else:
+  liz.setPath(path)
+  try:
+   xbmcplugin.setResolvedUrl(handle = id, succeeded = True, listitem = liz)
+  except:
+   message("Boo, couldn't play.")
     
 
 
-def addsorting(methods, mediacontent = ""):
+def addsorting(id, methods, mediacontent = ""):
  import xbmcplugin
  for method in methods:
   if method == "unsorted":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_UNSORTED)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_UNSORTED)
   elif method == "count":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_PROGRAM_COUNT)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_PROGRAM_COUNT)
   elif method == "date":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_DATE)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_DATE)
   elif method == "label":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_LABEL)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_LABEL)
   elif method == "runtime":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_VIDEO_RUNTIME)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_VIDEO_RUNTIME)
   elif method == "episode":
-   xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod = 
xbmcplugin.SORT_METHOD_EPISODE)
+   xbmcplugin.addSortMethod(handle = id, sortMethod = 
xbmcplugin.SORT_METHOD_EPISODE)
  if mediacontent <> "":
-  xbmcplugin.setContent(handle = int(sys.argv[1]), content = mediacontent)
- xbmcplugin.endOfDirectory(int(sys.argv[1]))
+  xbmcplugin.setContent(handle = id, content = mediacontent)
+ xbmcplugin.endOfDirectory(id)
 
diff --git a/plugin.video.nz.ondemand/tv3.py b/plugin.video.nz.ondemand/tv3.py
index 5f2aefe..4007060 100644
--- a/plugin.video.nz.ondemand/tv3.py
+++ b/plugin.video.nz.ondemand/tv3.py
@@ -1,3 +1,7 @@
+# 3 News
+# mms://content.mediaworks.co.nz/tv/News/TOPSTORIES.300k
+
+
 import tools, urllib, string, re, sys, time, xbmcaddon
 from BeautifulSoup import BeautifulSoup, SoupStrainer
 
@@ -13,6 +17,8 @@ tv3_urls["BASE1"] = 'http://ondemand'
 tv3_urls["BASE2"] = 'co.nz'
 tv3_urls["RTMP1"] = 'rtmpe://nzcontent.mediaworks.co.nz'
 tv3_urls["RTMP2"] = '_definst_/mp4:'
+tv3_urls["HTTP1"] = 'http://flash.mediaworks.co.nz'
+tv3_urls["HTTP2"] = 'streams/_definst_//'
 tv3_urls["VIDEO1"] = 'tabid'
 tv3_urls["VIDEO2"] = 'articleID'
 tv3_urls["VIDEO3"] = 'MCat'
@@ -50,9 +56,9 @@ def dateduration(ad): #Search a tag for aired date and video 
duration
   info = dict()
   aired = re.search("([0-9]{2}/[0-9]{2}/[0-9]{2})", ad.contents[1])
   if aired:
-   #info["Aired"] = time.strftime("%Y-%m-%d", 
time.strptime(aired.group(1),"%d/%m/%y"))
-   info["Aired"] = tools.xbmcdate(aired.group(1))
-   info["Date"] = info["Aired"]
+   #info["Premiered"] = time.strftime("%Y-%m-%d", 
time.strptime(aired.group(1),"%d/%m/%y"))
+   info["Premiered"] = tools.xbmcdate(aired.group(1))
+   info["Date"] = info["Premiered"]
    #info["Year"] = int(time.strftime("%Y", info["Aired"]))
   duration = re.search("\(([0-9]+:[0-9]{2})\)", ad.contents[1])
   if duration:
@@ -71,6 +77,11 @@ def rtmp(provider): #Build an RTMP URL for a given site 
(c4tv or tv3)
  else:
   return "%s/%s/%s" % (tv3_urls["RTMP1"], provider, tv3_urls["RTMP2"])
 
+def http(provider): #Build an RTMP URL for a given site (c4tv or tv3)
+ if provider == "c4tv":
+  return "%s/%s/%s" % (tv3_urls["HTTP1"], "c4", tv3_urls["HTTP2"])
+ else:
+  return "%s/%s/%s" % (tv3_urls["HTTP1"], provider, tv3_urls["HTTP2"])
 
 
 
@@ -82,13 +93,14 @@ def INDEX_FOLDERS(): #Create a list of top level folders 
for the hierarchy view
  folders["1"] = localize(30053) # "Channels"
  folders["2"] = localize(30054) # "Genres"
  #folders["3"] = localize(30055) # "Shows"
+ folders["4"] = localize(30065) # "Search"
  count = len(folders)
  for index in folders:
   info = tools.defaultinfo(1)
   info["Title"] = folders[index]
   info["Count"] = int(index)
   info["FileName"] = "%s?ch=TV3&folder=%s" % (sys.argv[0], folders[index])
-  tools.addlistitem(info, tv3_urls["Fanart"], 1, count)
+  tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1, count)
 
 def INDEX_FOLDER(folder): #Create second level folder for the hierarchy view, 
only showing items for the selected top level folder
  infopages = dict()
@@ -113,9 +125,11 @@ def INDEX_FOLDER(folder): #Create second level folder for 
the hierarchy view, on
    info["Title"] = infopages[index][3]
    info["Count"] = int(index)
    info["FileName"] = "%s?ch=TV3&cat=%s&catid=%s" % (sys.argv[0], 
infopages[index][2], infopages[index][0])
-   tools.addlistitem(info, tv3_urls["Fanart"], 1)
+   tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
  if folder == "Shows":
   INDEX_SHOWS("tv3")
+ elif folder == "Search":
+  INDEX_SEARCH()
 
 def INDEX(provider): #Create a list of top level folders as scraped from TV3's 
website
  doc = tools.gethtmlpage("%s/tabid/56/default.aspx" % (base_url(provider))) 
#Get our HTML page with a list of video categories
@@ -143,12 +157,20 @@ def INDEX(provider): #Create a list of top level folders 
as scraped from TV3's w
      info["Count"] = count
      count += 1
      info["FileName"] = "%s?ch=TV3&cat=%s&catid=%s" % (sys.argv[0], cat, catid)
-     tools.addlistitem(info, tv3_urls["Fanart"], 1)
+     tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
   else:
    sys.stderr.write("Couldn't find any categories")
  else:
   sys.stderr.write("Couldn't get index webpage")
 
+def INDEX_SEARCH():
+ import xbmc
+ keyboard = xbmc.Keyboard("Away", "Search for a Video")
+ #keyboard.setHiddenInput(False)
+ keyboard.doModal()
+ if keyboard.isConfirmed():
+  SHOW_SEARCH("58", keyboard.getText())
+
 def INDEX_SHOWS(provider): #Create a second level list of TV Shows from a TV3 
webpage
  #doc = tools.gethtmlpage("%s/Shows/tabid/64/Default.aspx" % 
("http://www.tv3.co.nz";)) #Get our HTML page with a list of video categories
  doc = tools.gethtmlpage("%s/Shows.aspx" % ("http://www.tv3.co.nz";)) #Get our 
HTML page with a list of video categories
@@ -169,7 +191,7 @@ def INDEX_SHOWS(provider): #Create a second level list of 
TV Shows from a TV3 we
       info["FileName"] = "%s?ch=TV3&cat=%s&title=%s&catid=%s" % (sys.argv[0], 
"shows", urllib.quote(info["Title"]), urllib.quote(catid))
      info["Count"] = count
      count += 1
-     tools.addlistitem(info, tv3_urls["Fanart"], 1)
+     tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
    else:
     sys.stderr.write("Couldn't find any videos in list")
   else:
@@ -215,7 +237,7 @@ def add_item_div(soup, provider, count): #Scrape items from 
a div-style HTML pag
       if plot.strip() <> "":
        info["Plot"] = tools.unescape(plot.strip())
      info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
-     tools.addlistitem(info, tv3_urls["Fanart"], 0)
+     tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
 
 def add_item_show(soup, provider, count, title): #Scrape items from a 
show-style HTML page
  info = tools.defaultinfo()
@@ -247,7 +269,7 @@ def add_item_show(soup, provider, count, title): #Scrape 
items from a show-style
        info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
      elif urltype == "other":
       info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
urllib.quote(link["href"]), urllib.quote(str(info)))
-     tools.addlistitem(info, tv3_urls["Fanart"], 0)
+     tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
 
 def add_item_table(soup, provider, count, title): #Scrape items from a 
table-style HTML page
  info = tools.defaultinfo()
@@ -265,38 +287,60 @@ def add_item_table(soup, provider, count, title): #Scrape 
items from a table-sty
     href = re.search("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % 
(base_url("tv3"), tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), 
link['href'])
     if href:
      info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
-    tools.addlistitem(info, tv3_urls["Fanart"], 0)
+    tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
 
 def add_item_atoz(soup, provider, count): #Scrape items from an AtoZ-style 
HTML page
  baseurl = base_url(provider)
  info = tools.defaultinfo()
  info["Studio"] = provider
- link = soup.h5.find("a", attrs={"href": re.compile(baseurl)})
- if link:
-  infoitems = {}
-  href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl, 
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), link['href'])
-  if href:
-   if link.string:
-    title = link.string.strip()
-    if title <> "":
-     info["TVShowTitle"] = title
-     image = soup.find("img", attrs={"src": re.compile(tv3_urls["IMG_RE2"]), 
"title": True})
-     if image:
-      info.update(tools.imageinfo(image))
-     info.update(seasonepisode(soup.contents[4]))
-     info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
-     plot = soup.find("span", attrs={"class": "lite"})
-     if plot.string:
-      cleanedplot = plot.string.strip()
-      if cleanedplot:
-       info["Plot"] = tools.unescape(cleanedplot)
-     info["Count"] = count
-     info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
-     infoitems[info["Title"]] = info
-     #tools.addlistitem(info, tv3_urls["Fanart"], 0)
-  tools.addlistitems(infoitems, tv3_urls["Fanart"], 0)
-
-
+ if soup.find('h5'):
+  link = soup.h5.find("a", attrs={"href": re.compile(baseurl)})
+  if link:
+   infoitems = {}
+   href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl, 
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), link['href'])
+   if href:
+    if link.string:
+     title = link.string.strip()
+     if title <> "":
+      info["TVShowTitle"] = title
+      image = soup.find("img", attrs={"src": re.compile(tv3_urls["IMG_RE2"]), 
"title": True})
+      if image:
+       info.update(tools.imageinfo(image))
+      info.update(seasonepisode(soup.contents[4]))
+      info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
+      plot = soup.find("span", attrs={"class": "lite"})
+      if plot.string:
+       cleanedplot = plot.string.strip()
+       if cleanedplot:
+        info["Plot"] = tools.unescape(cleanedplot)
+      info["Count"] = count
+      info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], 
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
+      infoitems[info["Title"]] = info
+      #tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
+   tools.addlistitems(infoitems, tv3_urls["Fanart"], 0)
+
+def add_item_search(soup, provider, count): #Scrape items from a table-style 
HTML page
+ baseurl = base_url(provider)
+ info = tools.defaultinfo()
+ info["Studio"] = provider
+ title = soup.find("div", attrs={"class": 'catTitle'})
+ if title:
+  info["TVShowTitle"] = title.a.string.strip()
+  href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl, 
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), title.a['href'])
+  image = soup.find("img")
+  if image:
+   info.update(tools.imageinfo(image))
+  ep = soup.find("div", attrs={"class": 'epTitle'})
+  if ep:
+   if ep.a:
+    info.update(seasonepisode(ep.a))
+  date = soup.find("div", attrs={"class": 'epDate'})
+#  if date:
+#   sys.stderr.write(date.span[1].string.strip())
+  info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
+  info["Count"] = count
+  info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], "%s,%s,%s,%s" % 
(href.group(1), href.group(2), href.group(3), href.group(4)), 
urllib.quote(str(info)))
+  tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
 
 
 
@@ -326,6 +370,23 @@ def SHOW_EPISODES(catid, provider): #Show video items from 
a normal TV3 webpage
  else:
   sys.stderr.write("Couldn't get videos webpage")
 
+def SHOW_SEARCH(catid, searchterm): #Show video items from a normal TV3 webpage
+ doc = tools.gethtmlpage("%s/search/tabid/%s/Default.aspx?amq=%s" % 
(base_url("tv3"), catid, searchterm.replace(" ", "+")))
+ if doc:
+  a_tag=SoupStrainer('div')
+  html_atag = BeautifulSoup(doc, parseOnlyThese = a_tag)
+  programs = html_atag.findAll(attrs={"class": "results"})
+  if len(programs) > 0:
+   count = 0
+   for soup in programs:
+    provider = "tv3"
+    add_item_search(soup, "tv3", count)
+    count += 1
+  else:
+   sys.stderr.write("Couldn't find any videos")
+ else:
+  sys.stderr.write("Couldn't get videos webpage")
+
 def SHOW_SHOW(catid, title, provider): #Show video items from a TV Show style 
TV3 webpage
  baseurl = ""
  if catid[:4] <> "http":
@@ -397,42 +458,57 @@ def RESOLVE(id, info): #Scrape a page for a given 
OnDemand video and build an RT
    videoplayer = 
re.search('swfobject.embedSWF\("(http://static.mediaworks.co.nz/(.*?).swf)', 
doc)
    if videoplayer:
     auth = re.search('random_num = "([0-9]+)";', doc)
-    site = re.search("var pageloc='TV-(FOUR|TV3)-Video-OnDemand-", doc)
-    if site.group(1) == 'TV3':
-     realstudio = 'tv3'
-    else:
-     realstudio = 'c4'
+    realstudio = 'tv3'
+    site = re.search("var pageloc='TV-(FOUR|TV3)-Video(Extras)?-OnDemand-", 
doc)
+    if site:
+     if site.group(1) <> 'TV3':
+      realstudio = 'c4'
     playlist=list()
-    #if addon.getSetting('tv3_showads') == 'true':
+    #if addon.getSetting('TV3_showads') == 'true':
      #playlist.append(ad)
-    if re.search('flashvars.fifteenHundred = "yes";', doc):
+    fifteen = re.search('flashvars.fifteenHundred = "yes";', doc)
+    seven = re.search('flashvars.sevenHundred = "yes";', doc)
+    if fifteen and seven:
      LowQuality = "330K"
      MediumQuality = "700K"
      HighQuality = "1500K"
-    elif re.search('flashvars.sevenHundred = "yes";', doc):
+    elif fifteen:
+     LowQuality = "128K"
+     MediumQuality = "330K"
+     HighQuality = "1500K"
+    elif seven:
      LowQuality = "128K"
      MediumQuality = "330K"
      HighQuality = "700K"
-       #elif re.search('flashvars.highEnd = "true";', doc):
+    else:
+     LowQuality = "128K"
+     MediumQuality = "330K"
+     HighQuality = "330K"
+    #elif re.search('flashvars.highEnd = "true";', doc):
     quality = HighQuality
     quality2 = MediumQuality
     quality3 = LowQuality
-    if addon.getSetting('tv3_quality') == "0": #Low
+    if addon.getSetting('TV3_quality') == "Low":
      quality = LowQuality
      quality3 = HighQuality
-    elif addon.getSetting('tv3_quality') == "1": #Medium
+    elif addon.getSetting('TV3_quality') == "Medium":
      quality = MediumQuality
      quality2 = HighQuality
-    #rtmpurl = '%s%s/%s/%s_%s' % (rtmp(info["Studio"]), videoid.group(1), 
videoid.group(2), urllib.quote(videoid.group(3)), quality)
-    rtmpurl = '%s%s/%s/%s_%s' % (rtmp(realstudio), videoid.group(1), 
videoid.group(2), urllib.quote(videoid.group(3)), quality)
-    sys.stderr.write("RTMP URL: %s" % (rtmpurl))
-    #swfverify = ' swfUrl=%s swfVfy=true' % (videoplayer.group(1))
-    if auth:
-     swfverify = ' swfUrl=%s?rnd=%s pageUrl=%s swfVfy=true' % 
(videoplayer.group(1), auth.group(1), pageUrl)
+    geo = re.search('var geo= "(no|geo)";', doc)
+    if (geo.group(1) == 'no'):
+     url = '%s%s/%s/%s_%s.%s' % (http(realstudio), videoid.group(1), 
videoid.group(2), urllib.quote(videoid.group(3)), quality, "mp4")
     else:
-     swfverify = ' swfUrl=%s pageUrl=%s swfVfy=true' % (videoplayer.group(1), 
pageUrl)
+     #swfverify = ' swfUrl=%s swfVfy=true' % (videoplayer.group(1))
+     #rtmpurl = '%s%s/%s/%s_%s' % (rtmp(info["Studio"]), videoid.group(1), 
videoid.group(2), urllib.quote(videoid.group(3)), quality)
+     url = '%s%s/%s/%s_%s' % (rtmp(realstudio), videoid.group(1), 
videoid.group(2), urllib.quote(videoid.group(3)), quality)
+     if auth:
+      swfverify = ' swfUrl=%s?rnd=%s pageUrl=%s swfVfy=true' % 
(videoplayer.group(1), auth.group(1), pageUrl)
+     else:
+      swfverify = ' swfUrl=%s pageUrl=%s swfVfy=true' % (videoplayer.group(1), 
pageUrl)
+     url += swfverify
+    sys.stderr.write("URL: %s" % (url))
     #sys.stderr.write("Flash Player: %s" % (videoplayer.group(1)))
-    playlist.append(rtmpurl + swfverify)
+    playlist.append(url)
     if len(playlist) > 1:
      uri = constructStackURL(playlist)
     elif len(playlist) == 1:
@@ -442,8 +518,8 @@ def RESOLVE(id, info): #Scrape a page for a given OnDemand 
video and build an RT
     #liz.setProperty("IsPlayable", "true")
     #liz.setPath(uri)
     #xbmcplugin.setResolvedUrl(handle = int(sys.argv[1]), succeeded = True, 
listitem = liz)
-    info["FileName"] = rtmpurl
-    tools.addlistitem(info, tv3_urls["Fanart"], 0, 1, uri)
+    info["FileName"] = url
+    tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0, 1, uri)
    else:
     sys.stderr.write("Couldn't get video player URL")
   else:
diff --git a/plugin.video.nz.ondemand/tvnz.py b/plugin.video.nz.ondemand/tvnz.py
index f13394f..8509c04 100644
--- a/plugin.video.nz.ondemand/tvnz.py
+++ b/plugin.video.nz.ondemand/tvnz.py
@@ -10,7 +10,7 @@ FANART_URL = 'resources/images/TVNZ.jpg'
 MIN_BITRATE = 400000
 
 def INDEX():
- link = tools.gethtmlpage("%s/content/ps3_navigation/ps3_xml_skin.xml" % 
(BASE_URL))
+ link = tools.gethtmlpage("%s/content/ps3_navigation/ps3_xml_skin.xml" % 
(BASE_URL), "ps3")
  count = 0
  for stat in 
minidom.parseString(link).documentElement.getElementsByTagName('MenuItem'):
   type = stat.attributes["type"].value
@@ -22,10 +22,10 @@ def INDEX():
     info["Count"] = count
     count += 1
     info["FileName"] = "%s?ch=TVNZ&type=%s&id=%s" % (sys.argv[0], type, 
m.group(1))
-    tools.addlistitem(info, FANART_URL, 1)
+    tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
 
 def SHOW_LIST(id):
- link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id), 
"ps3")
  node = minidom.parseString(link).documentElement
  urls = list()
  count = 0
@@ -39,15 +39,14 @@ def SHOW_LIST(id):
     info = tools.defaultinfo(1)
     info["FileName"] = "%s?ch=TVNZ&type=singleshow&id=%s_episodes_group" % 
(sys.argv[0], se.group(1))
     info["Title"] = show.attributes["title"].value
-    info["Thumb"] = show.attributes["src"].value
     info["Count"] = count
     count += 1
     infoitems[info["Title"]] = info
- tools.addlistitems(infoitems, FANART_URL, 1)
+ tools.addlistitems(int(sys.argv[1]), infoitems, FANART_URL, 1)
 
 
 def SHOW_DISTRIBUTORS(id):
- link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id), 
"ps3")
  node = minidom.parseString(link).documentElement
  print node.toxml().encode('latin1')
  urls = list()
@@ -63,18 +62,18 @@ def SHOW_EPISODES(id):
  except:
   pass
  try:
-  link = tools.gethtmlpage("%s/content/%s_extras_group/ps3_xml_skin.xml" % 
(BASE_URL, id[:-15]))
+  link = tools.gethtmlpage("%s/content/%s_extras_group/ps3_xml_skin.xml" % 
(BASE_URL, id[:-15]), "ps3")
   node = minidom.parseString(link).documentElement
   if node:
    info = tools.defaultinfo(1)
    info["FileName"] = "%s?ch=TVNZ&type=shows&id=%s_extras_group" % 
(sys.argv[0], id[:-15])
    info["Title"] = "Extras"
-   tools.addlistitem(info, FANART_URL, 1)
+   tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
  except:
   return
 
 def getEpisodes(id, url):
- link = tools.gethtmlpage(url)
+ link = tools.gethtmlpage(url, "ps3")
  node = minidom.parseString(link).documentElement
  for ep in node.getElementsByTagName('Episode'):
   addEpisode(ep)
@@ -122,7 +121,7 @@ def getShow(show):
   # videos = 0
   #channel = show.attributes["channel"].value
   #url = "%s?ch=TVNZ&type=singleshow&id=%s_episodes_group" % 
(sys.argv[0],show_id)
-  tools.addlistitem(info, FANART_URL, 1)
+  tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
 
 def getEpisode(ep):
  info = tools.defaultinfo(0)
@@ -142,7 +141,7 @@ def getEpisode(ep):
    info["Season"] = 0
    info["Episode"] = 1
   info["Date"] = getDate(extra[1])
-  info["Aired"] = extra[1]
+  info["Premiered"] = extra[1]
   info["Duration"] = getDuration(extra[2])
  elif len(extra) == 2:
   info["Duration"] = getDuration(extra[1])
@@ -166,13 +165,13 @@ def getEpisode(ep):
 def addEpisode(ep):
  #url,liz = getEpisode(ep)
  
#xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz,isFolder=False)
- tools.addlistitem(getEpisode(ep), FANART_URL, 0)
+ tools.addlistitem(int(sys.argv[1]), getEpisode(ep), FANART_URL, 0)
 
 def getAdvert(chapter):
  advert = chapter.getElementsByTagName('ref')
  if len(advert):
   # fetch the link - it'll return a .asf file
-  link = tools.gethtmlpage(advert[0].attributes['src'].value)
+  link = tools.gethtmlpage(advert[0].attributes['src'].value, "ps3")
   node = minidom.parseString(link).documentElement
   # grab out the URL to the actual flash ad
   for flv in node.getElementsByTagName('FLV'):
@@ -180,12 +179,12 @@ def getAdvert(chapter):
     return(flv.firstChild.wholeText)
 
 def RESOLVE(id, info):
- link = tools.gethtmlpage("%s/content/%s/ta_ent_smil_skin.smil?platform=PS3" % 
(BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ta_ent_smil_skin.smil?platform=PS3" % 
(BASE_URL, id), "ps3")
  node = minidom.parseString(link).documentElement
  urls=list()
  for chapter in node.getElementsByTagName('seq'):
   # grab out the advert link
-  if addon.getSetting('tvnz_showads') == 'true':
+  if addon.getSetting('TVNZ_showads') == 'true':
    ad = getAdvert(chapter)
    if len(ad) > 0:
     urls.append(ad)
@@ -198,9 +197,9 @@ def RESOLVE(id, info):
    if bitrate < minbitrate:
     minbitrate = bitrate
   requiredbitrate = 700000 #Medium = 700000
-  if addon.getSetting('tvnz_quality') == "2": #High = 1500000
+  if addon.getSetting('TVNZ_quality') == "High": #High = 1500000
    requiredbitrate = maxbitrate
-  elif addon.getSetting('tvnz_quality') == "0": #Low = 300000
+  elif addon.getSetting('TVNZ_quality') == "Low": #Low = 300000
    requiredbitrate = minbitrate
   for video in chapter.getElementsByTagName('video'):
    bitrate = int(video.attributes["systemBitrate"].value)
@@ -219,9 +218,8 @@ def RESOLVE(id, info):
      conn = " conn=S:-720"
      urls.append(rtmp_url + playpath + flashversion + swfverify + conn)
      sys.stderr.write("RTMP URL: " + rtmp_url + playpath + flashversion + 
swfverify + conn)
-     #tools.message("RTMP URL: " + rtmp_url + playpath + flashversion + 
swfverify + conn)
  if len(urls) > 1:
   uri = tools.constructStackURL(urls)
  elif len(urls) == 1:
   uri = urls[0]
- tools.addlistitem(info, FANART_URL, 0, 1, uri)
+ tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 0, 1, uri)
diff --git a/plugin.video.nz.ondemand/ziln.py b/plugin.video.nz.ondemand/ziln.py
index 23e0eee..62b375a 100644
--- a/plugin.video.nz.ondemand/ziln.py
+++ b/plugin.video.nz.ondemand/ziln.py
@@ -2,6 +2,9 @@ import tools, urllib, string, re, sys, time, xbmcaddon, 
xbmcgui, xbmcplugin
 from BeautifulSoup import BeautifulSoup, SoupStrainer, BeautifulStoneSoup
 from xml.dom import minidom
 
+addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
+localize = addon.getLocalizedString
+
 ziln_urls = dict()
 ziln_urls["ZILN"] = 'http://www.ziln.co.nz'
 ziln_urls["RTMP1"] = 'rtmp://flash1.e-cast.co.nz'
@@ -9,7 +12,21 @@ ziln_urls["RTMP2"] = 'ecast'
 ziln_urls["RTMP3"] = 'mp4:/ziln'
 ziln_urls["Fanart"] = 'resources/images/Ziln.jpg'
 
-def INDEX(type, urlext):
+def INDEX():
+ info = tools.defaultinfo(1)
+ info["Title"] = localize(30053)
+ info["Count"] = 1
+ #info["Thumb"] = "DefaultVideoPlaylists.png"
+ info["FileName"] = "%s?ch=Ziln&folder=channels" % sys.argv[0]
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 1)
+ info = tools.defaultinfo(1)
+ info["Title"] = localize(30065)
+ info["Count"] = 2
+ info["Thumb"] = "DefaultVideoPlaylists.png"
+ info["FileName"] = "%s?ch=Ziln&folder=search" % sys.argv[0]
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 1)
+
+def PROGRAMMES(type, urlext):
  if type == "channel":
   folder = 1
   url = ziln_urls["ZILN"]
@@ -17,9 +34,12 @@ def INDEX(type, urlext):
   folder = 0
   #url = "%s/channel/%s" % (ziln_urls["ZILN"], urlext)
   url = "%s/assets/php/slider.php?channel=%s" % (ziln_urls["ZILN"], urlext)
+ elif type == "search":
+  folder = 0
+  url = "%s/search?search_keyword=%s" % (ziln_urls["ZILN"], urlext.replace(" 
", "+"))
  doc = tools.gethtmlpage(url)
  if doc:
-  if type == "channel":
+  if type == "channel" or type == "search":
    div_tag = SoupStrainer('div')
    html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
    programmes = html_divtag.findAll(attrs={'class' : 'programmes'})
@@ -27,73 +47,47 @@ def INDEX(type, urlext):
    div_tag = SoupStrainer('body')
    html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
    programmes = html_divtag.findAll(attrs={'class' : 'slider slider-small'})
+  if type == "search":
+   type = "video"
   if len(programmes) > 0:
    for programme in programmes:
     list = programme.find('ul')
-    listitems = list.findAll('li')
-    if len(listitems) > 0:
-     count = 0
-     for listitem in listitems:
-      link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
-      if link.img:
-       if re.search("assets/images/%ss/" % type, link.img["src"]):
-        info = tools.defaultinfo(1)
-        #info["Title"] = link.img["alt"]
-        if listitem.p.string:
-         info["Title"] = listitem.p.string.strip()
-        else:
-         info["Title"] = link.img["alt"]
-        info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
-        info["Count"] = count
-        count += 1
-        #channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
-        channelurl = re.search("assets/images/%ss/([0-9]*?)-mini.jpg" % type, 
link.img["src"]).group(1)
-        #infourl = "&info=%s" % urllib.quote(str(info))
-        info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type, 
urllib.quote(channelurl))
-        tools.addlistitem(info, ziln_urls["Fanart"], folder)
+    if list:
+     listitems = list.findAll('li')
+     if len(listitems) > 0:
+      count = 0
+      for listitem in listitems:
+       link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
+       if link.img:
+        if re.search("assets/images/%ss/" % type, link.img["src"]):
+         info = tools.defaultinfo(1)
+         #info["Title"] = link.img["alt"]
+         if listitem.p.string:
+          info["Title"] = listitem.p.string.strip()
+         else:
+          info["Title"] = link.img["alt"]
+         info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
+         info["Count"] = count
+         count += 1
+         #channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
+         channelurl = re.search("assets/images/%ss/([0-9]*?)-mini.jpg" % type, 
link.img["src"]).group(1)
+         #infourl = "&info=%s" % urllib.quote(str(info))
+         info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type, 
urllib.quote(channelurl))
+         tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], folder)
+    else:
+     sys.stderr.write("Search returned no results")
   else:
    sys.stderr.write("Couldn't find any programs")
  else:
   sys.stderr.write("Couldn't get page")
-   
-def PROGRAMMES(type, urlext):
- if type == "channel":
-  folder = 1
-  url = ziln_urls["ZILN"]
- elif type == "video":
-  folder = 0
-  url = "%s/channel/%s" % (ziln_urls["ZILN"], urlext)
- doc = tools.gethtmlpage(url)
- if doc:
-  div_tag = SoupStrainer('div')
-  html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
-  programmes = html_divtag.findAll(attrs={'class' : 'programmes'})
-  if len(programmes) > 0:
-   for programme in programmes:
-    iframe = programme.find('iframe')
-    url = "%s%s" % (ziln_urls["ZILN"], iframe["src"])
-    doc = tools.gethtmlpage(url)
-    listitems = list.findAll('li')
-    if len(listitems) > 0:
-     count = 0
-     for listitem in listitems:
-      link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
-      if link.img:
-       if re.search("assets/images/%ss/" % type, link.img["src"]):
-        info = tools.defaultinfo(1)
-        #info["Title"] = link.img["alt"]
-        if listitem.p.string:
-         info["Title"] = listitem.p.string.strip()
-        else:
-         info["Title"] = link.img["alt"]
-         #info["Title"] = listitem.find('p').contents[0]
-        info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
-        info["Count"] = count
-        count += 1
-        channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
-               #infourl = "&info=%s" % urllib.quote(str(info))
-        info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type, 
urllib.quote(channelurl))
-        tools.addlistitem(info, ziln_urls["Fanart"], folder)
+
+def SEARCH():
+ import xbmc
+ keyboard = xbmc.Keyboard("", "Search for a Video")
+ #keyboard.setHiddenInput(False)
+ keyboard.doModal()
+ if keyboard.isConfirmed():
+  PROGRAMMES("search", keyboard.getText())
 
 def RESOLVE(index): #, info
  doc = tools.gethtmlpage("%s/playlist/null/%s" % (ziln_urls["ZILN"], index))
@@ -106,7 +100,7 @@ def RESOLVE(index): #, info
   info["Thumb"] = soup.find('jwplayer:image').contents[0]
   info["Plot"] = soup.find('description').contents[0]
   uri = "%s%s" % (ziln_urls["ZILN"], soup.find('media:content')["url"])
-  tools.addlistitem(info, ziln_urls["Fanart"], 0, 1, uri)
+  tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 0, 1, uri)
   #liz=xbmcgui.ListItem(path=uri)
   #return(xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, 
listitem=liz))
   #dom.getElementsByTagName("title")[0]

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


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

Summary of changes:
 .../LICENSE.txt                                    |    0
 .../addon.xml                                      |   40 ++--
 plugin.video.hgtv/default.py                       |  127 +++++++++++++
 plugin.video.hgtv/icon.png                         |  Bin 0 -> 30354 bytes
 plugin.video.nz.ondemand/addon.xml                 |    4 +-
 plugin.video.nz.ondemand/changelog.txt             |   19 ++
 plugin.video.nz.ondemand/default.py                |   76 +++++---
 plugin.video.nz.ondemand/icon.png                  |  Bin 39151 -> 56798 bytes
 plugin.video.nz.ondemand/isky.py                   |    5 +
 plugin.video.nz.ondemand/parliament.py             |   23 +++
 .../resources/images/Parliament.jpg                |  Bin 0 -> 164069 bytes
 .../resources/images/Parliament.png                |  Bin 0 -> 11742 bytes
 .../resources/images/Shine.jpg                     |  Bin 0 -> 65604 bytes
 .../resources/images/Shine.png                     |  Bin 0 -> 9627 bytes
 plugin.video.nz.ondemand/resources/images/iSKY.jpg |  Bin 0 -> 87458 bytes
 plugin.video.nz.ondemand/resources/images/iSKY.png |  Bin 0 -> 7616 bytes
 .../resources/images/icon-new.png                  |  Bin 0 -> 34418 bytes
 .../resources/language/English/strings.xml         |    5 +
 plugin.video.nz.ondemand/resources/settings.xml    |   25 ++-
 plugin.video.nz.ondemand/shine.py                  |   17 ++
 plugin.video.nz.ondemand/tools.py                  |   64 ++++----
 plugin.video.nz.ondemand/tv3.py                    |  190 ++++++++++++++------
 plugin.video.nz.ondemand/tvnz.py                   |   36 ++--
 plugin.video.nz.ondemand/ziln.py                   |  120 ++++++-------
 plugin.video.youtube/YouTubeCore.py                |   10 +-
 plugin.video.youtube/YouTubeNavigation.py          |   21 ++-
 plugin.video.youtube/addon.xml                     |    2 +-
 plugin.video.youtube/changelog.txt                 |    6 +
 plugin.video.youtube/default.py                    |    2 +-
 .../language/Portuguese (Brazil)/strings.xml       |  184 +++++++++++++++++++
 30 files changed, 737 insertions(+), 239 deletions(-)
 copy {plugin.audio.dr.dk.netradio => plugin.video.hgtv}/LICENSE.txt (100%)
 copy {plugin.video.youtube => plugin.video.hgtv}/addon.xml (60%)
 create mode 100644 plugin.video.hgtv/default.py
 create mode 100644 plugin.video.hgtv/icon.png
 create mode 100644 plugin.video.nz.ondemand/isky.py
 create mode 100644 plugin.video.nz.ondemand/parliament.py
 create mode 100644 plugin.video.nz.ondemand/resources/images/Parliament.jpg
 create mode 100644 plugin.video.nz.ondemand/resources/images/Parliament.png
 create mode 100644 plugin.video.nz.ondemand/resources/images/Shine.jpg
 create mode 100644 plugin.video.nz.ondemand/resources/images/Shine.png
 create mode 100644 plugin.video.nz.ondemand/resources/images/iSKY.jpg
 create mode 100644 plugin.video.nz.ondemand/resources/images/iSKY.png
 create mode 100644 plugin.video.nz.ondemand/resources/images/icon-new.png
 create mode 100644 plugin.video.nz.ondemand/shine.py
 create mode 100644 plugin.video.youtube/resources/language/Portuguese 
(Brazil)/strings.xml


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to