The branch, dharma has been updated
       via  c0d44f9ce0a714408c381645181b4d642a57fe10 (commit)
      from  cbca85bbff457febb8448a928f8ac877fbc91eb7 (commit)

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

commit c0d44f9ce0a714408c381645181b4d642a57fe10
Author: spiff <sp...@xbmc.org>
Date:   Thu Dec 30 13:05:39 2010 +0100

    [plugin.video.xbmcflicks] updated to version 1.0.10

diff --git a/plugin.video.xbmcflicks/addon.xml 
b/plugin.video.xbmcflicks/addon.xml
index 1d609c1..0ef7908 100644
--- a/plugin.video.xbmcflicks/addon.xml
+++ b/plugin.video.xbmcflicks/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.xbmcflicks"
        name="XBMC Flicks - Netflix for XBMC"
-       version="1.0.8"
+       version="1.0.10"
        provider-name="TeamUMX">
     <requires>
         <import addon="xbmc.python" version="1.0"/>
@@ -14,6 +14,6 @@
     <extension point="xbmc.addon.metadata">
         <platform>windx wingl osx</platform>
         <summary lang="en">XBMC Flicks</summary>
-        <description lang="en">Netflix for XBMC.. NOTE: This plugin will 
create the playercorefactory.xml and advanced settings.xml, if you already have 
an external player configured, you will need to modify it to add in IE as a 
player. Examples of those files are in the resources folder.
+        <description lang="en">Netflix for XBMC.. NOTE: This plugin will 
create the playercorefactory.xml and advanced settings.xml, if you already have 
an external player configured, you will need to modify it to add in IE as a 
player. Examples of those files are in the resources folder.</description>
     </extension>
 </addon>
diff --git a/plugin.video.xbmcflicks/changelog.txt 
b/plugin.video.xbmcflicks/changelog.txt
index 90bf9e0..9e7c8d1 100644
--- a/plugin.video.xbmcflicks/changelog.txt
+++ b/plugin.video.xbmcflicks/changelog.txt
@@ -2,3 +2,5 @@
 1.0.6 - Added images for folders in the main menu
 1.0.7 - fixed path issue within the plugin and git repo, fixed issue with 
missing userinfo.txt and missing links folder
 1.0.8 - changed icon for app, add'd diff for redundant text, added automatic 
create of playercorefactory and advancedsettings based on os path info
+1.0.9  - Added Disc Menu and Rental History 
+1.0.10 - fixed missing xml tag that was stopping the addon from loading
\ No newline at end of file
diff --git a/plugin.video.xbmcflicks/resources/lib/Netflix.py 
b/plugin.video.xbmcflicks/resources/lib/Netflix.py
index 840a38b..783ef96 100644
--- a/plugin.video.xbmcflicks/resources/lib/Netflix.py
+++ b/plugin.video.xbmcflicks/resources/lib/Netflix.py
@@ -25,8 +25,7 @@ class NetflixUser:
         self.requestTokenUrl = REQUEST_TOKEN_URL
         self.accessTokenUrl  = ACCESS_TOKEN_URL
         self.authorizationUrl = AUTHORIZATION_URL
-        self.accessToken = oauth.OAuthToken( user['access']['key'],
-                                             user['access']['secret'] )
+        self.accessToken = oauth.OAuthToken(user['access']['key'], 
user['access']['secret'] )
         self.client = client
         self.data = None
 
@@ -61,9 +60,7 @@ class NetflixUser:
         client = self.client
         
         if not isinstance(requestToken, oauth.OAuthToken):
-                requestToken = oauth.OAuthToken( 
-                                    requestToken['key'], 
-                                    requestToken['secret'] )
+                requestToken = oauth.OAuthToken(requestToken['key'], 
requestToken['secret'] )
         oauthRequest = oauth.OAuthRequest.from_consumer_and_token(  
                                     client.consumer,
                                     token=requestToken,
@@ -82,15 +79,11 @@ class NetflixUser:
         accessToken=self.accessToken
 
         if not isinstance(accessToken, oauth.OAuthToken):
-            accessToken = oauth.OAuthToken( 
-                                    accessToken['key'], 
-                                    accessToken['secret'] )
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
         
         requestUrl = '/users/%s' % (accessToken.key)
         
-        info = simplejson.loads( self.client._getResource( 
-                                    requestUrl, 
-                                    token=accessToken ) )
+        info = simplejson.loads( self.client._getResource(requestUrl, 
token=accessToken ) )
         self.data = info['user']
         return self.data
         
@@ -114,8 +107,7 @@ class NetflixUser:
             print errorString
             sys.exit(1)
         try:
-            info = simplejson.loads(self.client._getResource( 
-                                    url,token=accessToken ))
+            info = 
simplejson.loads(self.client._getResource(url,token=accessToken ))
         except:
             return []
         else:
@@ -138,10 +130,7 @@ class NetflixUser:
                 urls.append(discInfo['id'])
         parameters = { 'title_refs': ','.join(urls) }
         
-        info = simplejson.loads( self.client._getResource( 
-                                    requestUrl, 
-                                    parameters=parameters, 
-                                    token=accessToken ) )
+        info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         
         ret = {}
         for title in info['ratings']['ratings_item']:
@@ -158,7 +147,7 @@ class NetflixUser:
         
         return ret
 
-    def getRentalHistory(self,historyType=None,startIndex=None,
+    def getRentalHistoryv1(self,historyType=None,startIndex=None,
                                     maxResults=None,updatedMin=None):
         accessToken=self.accessToken
         parameters = {}
@@ -170,9 +159,7 @@ class NetflixUser:
             parameters['updated_min'] = updatedMin
 
         if not isinstance(accessToken, oauth.OAuthToken):
-            accessToken = oauth.OAuthToken( 
-                                    accessToken['key'],
-                                    accessToken['secret'] )
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
 
         if not historyType:
             requestUrl = '/users/%s/rental_history' % (accessToken.key)
@@ -180,10 +167,36 @@ class NetflixUser:
             requestUrl = '/users/%s/rental_history/%s' % 
(accessToken.key,historyType)
         
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
+        except:
+            return {}
+            
+        return info
+
+    def getRentalHistory(self,historyType=None,startIndex=None, 
maxResults=None,updatedMin=None):
+        accessToken=self.accessToken
+        parameters = {}
+        if startIndex:
+            parameters['start_index'] = startIndex
+        if maxResults:
+            parameters['max_results'] = maxResults
+        if updatedMin:
+            parameters['updated_min'] = updatedMin
+
+        parameters['v'] = str('2.0')
+        parameters['expand'] = 
'@title,@synopsis,@directors,@formats,@episodes,@short_synopsis'
+        parameters['output'] = 'json'
+        
+        if not isinstance(accessToken, oauth.OAuthToken):
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
+        #history type must be: NULL, shipped, returned, or watched
+        if not historyType:
+            requestUrl = '/users/%s/rental_history' % (accessToken.key)
+        else:
+            requestUrl = '/users/%s/rental_history/%s' % 
(accessToken.key,historyType)
+        
+        try:
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
             
@@ -206,9 +219,7 @@ class NetflixUser:
         parameters['output'] = 'json'
         
         if not isinstance(accessToken, oauth.OAuthToken):
-            accessToken = oauth.OAuthToken( 
-                                    accessToken['key'],
-                                    accessToken['secret'] )
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
 
         if not historyType:
             requestUrl = '/users/%s/queues/instant/available' % 
(accessToken.key)
@@ -216,16 +227,13 @@ class NetflixUser:
             requestUrl = '/users/%s/queues/instant/available/%s' % 
(accessToken.key,historyType)
         
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
             
         return info
 
-    def 
getRecommendedQueue(self,startIndex=None,maxResults=None,updatedMin=None):
+    def 
getDiscQueue(self,historyType=None,startIndex=None,maxResults=None,updatedMin=None):
         accessToken=self.accessToken
         parameters = {}
         if startIndex:
@@ -234,26 +242,83 @@ class NetflixUser:
             parameters['max_results'] = maxResults
         if updatedMin:
             parameters['updated_min'] = updatedMin
+
         parameters['v'] = str('2.0')
-        parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/instant'
-        parameters['expand'] = 
'@title,@cast,@synopsis,@directors,@formats,@episodes,@short_synopsis'
+        #parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/disc'
+        parameters['expand'] = 
'@title,@synopsis,@directors,@formats,@episodes,@short_synopsis'
         parameters['output'] = 'json'
+        
+        if not isinstance(accessToken, oauth.OAuthToken):
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
+
+        if not historyType:
+            requestUrl = '/users/%s/queues/disc' % (accessToken.key)
+        else:
+            requestUrl = '/users/%s/queues/disc/available/%s' % 
(accessToken.key,historyType)
+        
+        try:
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
+        except:
+            return {}
+            
+        return info
+
+    def getAtHomeList(self,historyType=None,startIndex=None,
+                                    maxResults=None,updatedMin=None):
+        accessToken=self.accessToken
+        parameters = {}
+        if startIndex:
+            parameters['start_index'] = startIndex
+        if maxResults:
+            parameters['max_results'] = maxResults
+        if updatedMin:
+            parameters['updated_min'] = updatedMin
 
+        parameters['v'] = str('2.0')
+        parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/instant'
+        parameters['expand'] = 
'@title,@synopsis,@directors,@formats,@episodes,@short_synopsis'
+        parameters['output'] = 'json'
+        
         if not isinstance(accessToken, oauth.OAuthToken):
             accessToken = oauth.OAuthToken( 
                                     accessToken['key'],
                                     accessToken['secret'] )
 
+        #if not historyType:
+        requestUrl = '/users/%s/at_home' % (accessToken.key)
+        #else:
+        #    requestUrl = '/users/%s/queues/instant/available/%s' % 
(accessToken.key,historyType)
+        
+        try:
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
+        except:
+            return {}
+            
+        return info
+
+    def 
getRecommendedQueue(self,startIndex=None,maxResults=None,updatedMin=None):
+        accessToken=self.accessToken
+        parameters = {}
+        if startIndex:
+            parameters['start_index'] = startIndex
+        if maxResults:
+            parameters['max_results'] = maxResults
+        if updatedMin:
+            parameters['updated_min'] = updatedMin
+        parameters['v'] = str('2.0')
+        parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/instant'
+        parameters['expand'] = 
'@title,@cast,@synopsis,@directors,@formats,@episodes,@short_synopsis'
+        parameters['output'] = 'json'
+
+        if not isinstance(accessToken, oauth.OAuthToken):
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
+
         requestUrl = '/users/%s/recommendations' % (accessToken.key)
         
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
-        #print str(simplejson.dumps(info,indent=4))
         return info
 
     
#http://api.netflix.com/catalog/titles/series/60030529/seasons/60030679/episodes
@@ -269,10 +334,7 @@ class NetflixUser:
         requestUrl = '/catalog/titles/series/' + str(seriesId) + '/seasons/' + 
str(seasonId) + "/episodes"
       
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
             
@@ -288,23 +350,18 @@ class NetflixUser:
         parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/instant'
 
         if not isinstance(accessToken, oauth.OAuthToken):
-            accessToken = oauth.OAuthToken( 
-                                    accessToken['key'],
-                                    accessToken['secret'] )
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
 
         requestUrl = '/catalog/titles/movies/' + str(ID) + '/similars'
         print requestUrl
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
             
         return info
 
-    def searchTitles(self, term,startIndex=None,maxResults=None):
+    def searchTitles(self, term, queue, startIndex=None,maxResults=None):
         requestUrl = '/catalog/titles'
         parameters = {'term': term}
         if startIndex:
@@ -313,12 +370,10 @@ class NetflixUser:
             parameters['max_results'] = maxResults
 
         parameters['v'] = str('2.0')
-        parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/instant'
-        parameters['expand'] = 
'@title,@cast,@synopsis,@directors,@formats,@episodes,@short_synopsis'
+        parameters['filters'] = 
'http://api.netflix.com/categories/title_formats/' + queue
+        parameters['expand'] = 
'@title,@synopsis,@directors,@formats,@episodes,@short_synopsis'
         parameters['output'] = 'json'
-        info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters))
+        info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters))
         return info
 
     def modifyQueue(self, ID, method):
@@ -329,20 +384,38 @@ class NetflixUser:
         if (method == "post"):
             parameters['title_ref'] = 
'http://api.netflix.com/catalog/titles/movies/' + str(ID)
         if not isinstance(accessToken, oauth.OAuthToken):
-            accessToken = oauth.OAuthToken( 
-                                    accessToken['key'],
-                                    accessToken['secret'] )
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
 
         if (method == "post"):
             requestUrl = '/users/'+ accessToken.key + 
'/queues/instant/available'
         else:
             requestUrl = '/users/'+ accessToken.key + 
'/queues/instant/available/' + str(ID) 
+        try:
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
+        except:
+            return {}
+            
+        return info
+
+    def modifyQueueDisc(self, ID, method, position=None):
+        accessToken=self.accessToken
+        parameters = {}
+        #to add, use Post, to remove use Delete
+        parameters['method'] = method
+        if(position):
+            parameters['position'] = str(position)
+        if (method == "post"):
+            parameters['title_ref'] = 
'http://api.netflix.com/catalog/titles/movies/' + str(ID)
+        if not isinstance(accessToken, oauth.OAuthToken):
+            accessToken = oauth.OAuthToken(accessToken['key'], 
accessToken['secret'] )
+
+        if (method == "post"):
+            requestUrl = '/users/'+ accessToken.key + '/queues/disc/available'
+        else:
+            requestUrl = '/users/'+ accessToken.key + 
'/queues/disc/available/' + str(ID) 
         print "------- REQUESTED URL IS: " + requestUrl
         try:
-            info = simplejson.loads( self.client._getResource( 
-                                    requestUrl,
-                                    parameters=parameters,
-                                    token=accessToken ) )
+            info = simplejson.loads( self.client._getResource(requestUrl, 
parameters=parameters, token=accessToken ) )
         except:
             return {}
             
diff --git a/plugin.video.xbmcflicks/resources/lib/iqueue.py 
b/plugin.video.xbmcflicks/resources/lib/iqueue.py
index 05206c2..19f1210 100644
--- a/plugin.video.xbmcflicks/resources/lib/iqueue.py
+++ b/plugin.video.xbmcflicks/resources/lib/iqueue.py
@@ -144,19 +144,56 @@ def addLink(name,url,curX,rootID=None):
     runnerSearch = 
"XBMC.RunScript(special://home/addons/plugin.video.xbmcflicks/resources/lib/modQueue.py,
 " + argsSimilar + ")"
 
     if(not curX.TvEpisode):
-        commands.append(( 'Netflix: Add to Queue', runnerAdd, ))
-        commands.append(( 'Netflix: Remove From Queue', runnerRemove, ))
+        commands.append(( 'Netflix: Add to Instant Queue', runnerAdd, ))
+        commands.append(( 'Netflix: Remove From Instant Queue', runnerRemove, 
))
         #commands.append(( 'Netflix: Find Similar', runnerSearch, ))
     else:
-        commands.append(( 'Netflix: Add Entire Season to Queue', runnerAdd, ))
-        commands.append(( 'Netflix: Remove Entire Season From Queue', 
runnerRemove, ))
+        commands.append(( 'Netflix: Add Entire Season to Instant Queue', 
runnerAdd, ))
+        commands.append(( 'Netflix: Remove Entire Season From Instant Queue', 
runnerRemove, ))
 
     liz.addContextMenuItems( commands )
     whichHandler = sys.argv[1]
     
ok=xbmcplugin.addDirectoryItem(handle=int(whichHandler),url=url,listitem=liz, 
isFolder=False)
 
     return ok
+
+def addLinkDisc(name,url,curX,rootID=None):
+    ok=True
+    liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png", 
thumbnailImage=curX.Poster)
+    #if(xSummary):
+    liz.setInfo( type="Video", infoLabels={ "Mpaa": curX.Mpaa, "TrackNumber": 
int(curX.Position), "Year": int(curX.Year), "OriginalTitle": curX.Title, 
"Title": curX.TitleShort, "Rating": float(curX.Rating)*2, "Duration": 
str(int(curX.Runtime)/60), "Director": curX.Directors, "Genre": curX.Genres, 
"CastAndRole": curX.Cast, "Plot": curX.Synop })
+
+    commands = []
+    url = REAL_LINK_PATH + curX.ID + '_disc.html'
+    argsRemove = str(curX.ID) + "discdelete"
+    argsAdd = str(curX.ID) + "discpost"
+    argsAddTop = str(curX.ID) + "disctoppost"
     
+    argsSimilar = str(curX.ID)
+    if rootID:
+        argsRemove = str(rootID) + "discdelete"
+        argsAdd = str(rootID) + "discpost"
+        argsSimilar = str(rootID)
+    runnerRemove = 
"XBMC.RunScript(special://home/addons/plugin.video.xbmcflicks/resources/lib/modQueue.py,
 " + argsRemove + ")"
+    runnerAdd = 
"XBMC.RunScript(special://home/addons/plugin.video.xbmcflicks/resources/lib/modQueue.py,
 " + argsAdd + ")"
+    runnerAddTop = 
"XBMC.RunScript(special://home/addons/plugin.video.xbmcflicks/resources/lib/modQueue.py,
 " + argsAddTop + ")"
+    runnerSearch = 
"XBMC.RunScript(special://home/addons/plugin.video.xbmcflicks/resources/lib/modQueue.py,
 " + argsSimilar + ")"
+
+    if(not curX.TvEpisode):
+        commands.append(( 'Netflix: Add to Disc Queue', runnerAdd, ))
+        commands.append(( 'Netflix: Remove From Disc Queue', runnerRemove, ))
+        commands.append(( 'Netflix: Add to Top of Disc Queue', runnerAddTop, ))
+    else:
+        commands.append(( 'Netflix: Add Season to Disc Queue', runnerAdd, ))
+        commands.append(( 'Netflix: Remove Season From Disc Queue', 
runnerRemove, ))
+        commands.append(( 'Netflix: Add to Top of Disc Queue', runnerAddTop, ))
+
+    liz.addContextMenuItems( commands )
+    whichHandler = sys.argv[1]
+    
ok=xbmcplugin.addDirectoryItem(handle=int(whichHandler),url=url,listitem=liz, 
isFolder=False)
+
+    return ok
+
 def writeLinkFile(id, title):
     #check to see if we already have the file
     havefile = os.path.isfile(LINKS_FOLDER + id + '.html')
@@ -170,6 +207,20 @@ def writeLinkFile(id, title):
         f.write(redirect)
         f.close()
 
+#writeDiscLinkFile
+def writeDiscLinkFile(id, title, webURL):
+    #check to see if we already have the file
+    havefile = os.path.isfile(LINKS_FOLDER + id + '_disc.html')
+    if(not havefile):
+        #create the file
+        player = "WiPlayerCommunityAPI"
+        if(useAltPlayer):
+            player = "WiPlayer"
+        redirect = "<!doctype html public \"-//W3C//DTD HTML 4.0 
Transitional//EN\"><html><head><title>Requesting Video: " + title + 
"</title><meta http-equiv=\"REFRESH\" content=\"0;url=" + webURL + 
"\"></head><body bgcolor=\"#0000cc\"> <p>Redirecting to Netflix in a moment 
...</p></body></html>"
+        f = open(LINKS_FOLDER + id + '_disc.html','r+')
+        f.write(redirect)
+        f.close()
+
 def checkFormat(netflix, curX):
     strLinkUrl = "http://api.netflix.com/catalog/titles/movies/"; + curX.ID
     try:
@@ -243,22 +294,43 @@ def availableTimeRemaining(expires):
         return ""
 
 def getMovieDataFromFeed(curX, curQueueItem, bIsEpisode, netflix, 
instantAvail, intDisplayWhat=None):
+    #if display what = 0, will only show instant queue items
     #if display what = 1, will only display movies
     #if display what = 2, will only display tv shows
-    #if the value is not set, everything is shown
+    #if display what = 3, working with Movies in Disc Queue
+    #if display what = 4, working with TvShows in Disc Queue
+    #if display what = 5, working with Everything in Disc Queue
+    #if the value is not set, everything is shown (instant queue items)
 
     showTvShow = True
     showMovies = True
-
+    discQueue = False
+    
     if intDisplayWhat:
+        if (int(intDisplayWhat) == 0):
+            discQueue = False
         if (int(intDisplayWhat) == 1):
             showTvShow = False
         if (int(intDisplayWhat) == 2):
             showMovies = False
-            
+        if (int(intDisplayWhat) == 3):
+            discQueue = True
+        if (int(intDisplayWhat) == 4):
+            showTvShow = False
+            discQueue = True
+        if (int(intDisplayWhat) == 5):
+            showMovies = False
+            discQueue = True
+
+    if(instantAvail):
+        discQueue = False
+    
     #if it's a tv show it should be a folder, not a listing
     if re.search(r"{(u'episode_short'.*?)}", curQueueItem, re.DOTALL | 
re.MULTILINE):
         curX.TvShow = True
+    if re.search(r"u'name': u'Television'", curQueueItem, re.IGNORECASE):
+        curX.TvShow = True
+    
     if (curX.TvShow):
         if(not showTvShow):
             return curX
@@ -311,12 +383,13 @@ def getMovieDataFromFeed(curX, curQueueItem, bIsEpisode, 
netflix, instantAvail,
 
     #check rating against max rating
     if (not int(iRating) <= int(MAX_RATING)):
+        print "Item failed rating check, not adding.."
         return curX
     
     #genre
     matchGenre = re.search(r"genres': \[?{.*?u'name': u'(.*?)'}", 
curQueueItem, re.DOTALL | re.MULTILINE)
     if matchGenre:
-       curX.Genres = matchGenre.group(1).strip()
+        curX.Genres = matchGenre.group(1).strip()
 
     #year
     matchYear = re.search(r'[\'"]release_year[\'"]: u{0,1}[\'"](\d{4})[\'"]', 
curQueueItem)
@@ -350,6 +423,9 @@ def getMovieDataFromFeed(curX, curQueueItem, bIsEpisode, 
netflix, instantAvail,
     if matchAvailUntil:
         curX.AvailableUntil = matchAvailUntil.group(1)
 
+    matchWebURL = re.search(r"u'web_page': u'(.*?)'", curQueueItem)
+    if matchWebURL:
+       curX.WebURL = matchWebURL.group(1)
                 
     #shorttitle
     matchTitleShort = re.search('[\'"]title[\'"]: 
{.*?[\'"](title_)?short[\'"]: u{0,1}[\'"](.*?)[\'"].*?},', curQueueItem, 
re.DOTALL | re.MULTILINE)
@@ -461,6 +537,12 @@ def getMovieDataFromFeed(curX, curQueueItem, bIsEpisode, 
netflix, instantAvail,
     if (VERBOSE_USER_LOG):
         print "curFullId: " + curX.FullId
 
+    if (discQueue):
+        addLinkDisc(curX.TitleShort,REAL_LINK_PATH + curX.TitleShortLink + 
'.html', curX)
+        #write the link file for Disc items that will link to the webpage
+        writeDiscLinkFile(curX.TitleShortLink, curX.Title, curX.WebURL)
+        return curX
+        
     if (instantAvail):
         #need to verify it's available for instant watching before adding
         matchIA = re.search(r"delivery_formats': {(.*?instant.*?)}", 
curQueueItem, re.DOTALL | re.MULTILINE)
@@ -559,6 +641,39 @@ def addDir(name,url,mode,iconimage,data):
     
ok=xbmcplugin.addDirectoryItem(handle=int(whichHandler),url=u,listitem=liz,isFolder=True)
     return ok
 
+def getUserDiscQueue(netflix,user,displayWhat):
+    print "*** What's in the Disc Queue? ***"
+    feeds = netflix.user.getDiscQueue(None,None,500)
+    if (VERBOSE_USER_LOG):
+        print feeds
+  
+    counter = 0
+    reobj = re.compile(r"(?sm)(?P<main>('item': )((?!('item': )).)*)", 
re.DOTALL | re.MULTILINE)
+    #real processing begins here
+    for match in reobj.finditer(str(feeds)):
+        curX = XInfo()
+        curQueueItem = match.group(1)
+
+        #now parse out each item
+        curX = getMovieDataFromFeed(curX, curQueueItem, False, netflix, 
False,displayWhat)
+
+def getUserAtHomeItems(netflix,user):
+    print "*** What's Disc from the Queue are shipped or at the home? ***"
+    feeds = netflix.user.getAtHomeList(None,None,500)
+    if (VERBOSE_USER_LOG):
+        print feeds
+  
+    counter = 0
+    reobj = re.compile(r"(?sm)(?P<main>('item': )((?!('item': )).)*)", 
re.DOTALL | re.MULTILINE)
+    #real processing begins here
+    for match in reobj.finditer(str(feeds)):
+        curX = XInfo()
+        curQueueItem = match.group(1)
+
+        #now parse out each item
+        curX = getMovieDataFromFeed(curX, curQueueItem, False, netflix, False)
+
+
 def getUserInstantQueue(netflix,user, displayWhat):
     print "*** What's in the Instant Queue? ***"
     #get user setting for max number to download
@@ -635,6 +750,7 @@ def parseRSSFeedItem(curQueueItem, curX):
             curX.Title = match.group(1)
             curX.TitleShort = match.group(1)
             curX.Synop = match.group(3)
+            curX.WebURL = match.group(2)
             reobj = re.compile(r".*?/(\d{1,15})", re.DOTALL | re.MULTILINE)
             matchID = reobj.search(match.group(2))
             if matchID:
@@ -645,13 +761,13 @@ def parseRSSFeedItem(curQueueItem, curX):
         print "error parsing data from RSS feed Item"
     return curX
 
-def convertRSSFeed(tData, intLimit):
+def convertRSSFeed(tData, intLimit, DiscQueue=None):
     #parse feed to curX object
     curX = XInfo()
     intCount = 0
     for match in re.finditer(r"(?sm)<item>(.*?)</item>", tData):
         intCount = intCount + 1
-        print str(intCount)
+        #print str(intCount)
         if(intCount > int(intLimit)):
             return
             
@@ -663,10 +779,33 @@ def convertRSSFeed(tData, intLimit):
             exit
 
         #add the link to the UI
-        addLink(curX.TitleShort,REAL_LINK_PATH + curX.ID + '.html', curX)
-
-        #write the link file
-        writeLinkFile(curX.ID, curX.Title)
+        if(DiscQueue):
+            addLinkDisc(curX.TitleShort,REAL_LINK_PATH + curX.ID + 
'_disc.html', curX)
+            writeDiscLinkFile(curX.ID, curX.Title, curX.WebURL)
+        else:
+            addLink(curX.TitleShort,REAL_LINK_PATH + curX.ID + '.html', curX)  
          
+            #write the link file
+            writeLinkFile(curX.ID, curX.Title)
+
+def getUserRentalHistory(netflix, user, strHistoryType, displayWhat=None):
+    print "*** What's the rental history? ***"
+    feeds = ""
+    if(not strHistoryType):
+        feeds = netflix.user.getRentalHistory(None,None,500)
+    else:
+        feeds = netflix.user.getRentalHistory(strHistoryType,None,500)
+        
+    if (VERBOSE_USER_LOG):
+        print feeds
+  
+    counter = 0
+    reobj = re.compile(r"(?sm)(?P<main>('item': )((?!('item': )).)*)", 
re.DOTALL | re.MULTILINE)
+    #real processing begins here
+    for match in reobj.finditer(str(feeds)):
+        curX = XInfo()
+        curQueueItem = match.group(1)
+        #now parse out each item
+        curX = getMovieDataFromFeed(curX, curQueueItem, False, netflix, False, 
displayWhat)
 
 CUR_IMAGE_MIRROR_NUM = 0
 
@@ -778,11 +917,11 @@ def initApp():
         MY_USER['request']['key'] = match.group(1).strip()
         MY_USER['request']['secret'] = match.group(2).strip()
         MY_USER['access']['key'] = match.group(3).strip()
-       MY_USER['access']['secret'] = match.group(4).strip()
-       print "finished loading up user information from file"
+        MY_USER['access']['secret'] = match.group(4).strip()
+        print "finished loading up user information from file"
     else:
         #no match, need to fire off the user auth from the start
-       print "couldn't load user information from userinfo.properties file"
+        print "couldn't load user information from userinfo.properties file"
     #auth the user
     netflixClient = NetflixClient(APP_NAME, API_KEY, API_SECRET, CALLBACK, 
VERBOSE_USER_LOG)
     user = getAuth(netflixClient,VERBOSE_USER_LOG)
@@ -834,14 +973,30 @@ def getTop25Feed(strArg):
     time.sleep(1)
     xbmcplugin.setContent(int(sys.argv[1]),'Movies')
     xbmcplugin.endOfDirectory(int(sys.argv[1]))
-    
-def doSearch(strArg):
+
+def getTop25FeedD(strArg):
+    initApp()
+    curUrl = "http://rss.netflix.com/Top25RSS?gid="; + str(strArg)
+    convertRSSFeed(getUrlString(curUrl), 25, True)
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def doSearch(strArg, strQueue, strInstantOnly=None):
+    instantOnly = False
+    strType = "3"
+    if(strInstantOnly):
+        instantOnly = True
+        strType = "5"
     #title search
-    print "looking for instant view items that match %s" % strArg
+    print "looking for items that match " + str(strArg ) + " in " + 
str(strQueue)  + " instant only is set to: " + str(instantOnly)
     initApp()
+    print "Instant set to: " + str(instantOnly)
+    print "Queue set to: " + str(strQueue)
+    print "Search String is: " + str(strQueue)
     if(not user):
         exit    
-    feeds = netflixClient.user.searchTitles(strArg,0,100)
+    feeds = netflixClient.user.searchTitles(strArg,strQueue,0,100)
     if(DEBUG):
         print simplejson.dumps(feeds,indent=4)
     counter = 0
@@ -853,7 +1008,52 @@ def doSearch(strArg):
         if(DEBUG):
             print "current queue item from regex is: " + str(curQueueItem)
         #now parse out each item
-        curX = getMovieDataFromFeed(curX, curQueueItem, False, netflixClient, 
True)
+        curX = getMovieDataFromFeed(curX, curQueueItem, False, netflixClient, 
instantOnly, strType)
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def getDVDQueue(displayWhat):
+    initApp()
+    getUserDiscQueue(netflixClient,user, displayWhat)
+    if(not user):
+        exit
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def rhShipped():
+    initApp()
+    getUserRentalHistory(netflixClient,user, "shipped", "3")
+    if(not user):
+        exit
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def rhReturned():
+    initApp()
+    getUserRentalHistory(netflixClient,user, "returned", "3")
+    if(not user):
+        exit
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def rhWatched():
+    initApp()
+    getUserRentalHistory(netflixClient,user, "watched")
+    if(not user):
+        exit
+    time.sleep(1)
+    xbmcplugin.setContent(int(sys.argv[1]),'Movies')
+    xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+def getHomeList():
+    initApp()
+    getUserAtHomeItems(netflixClient,user)
+    if(not user):
+        exit
     time.sleep(1)
     xbmcplugin.setContent(int(sys.argv[1]),'Movies')
     xbmcplugin.endOfDirectory(int(sys.argv[1]))
diff --git a/plugin.video.xbmcflicks/resources/lib/menu.py 
b/plugin.video.xbmcflicks/resources/lib/menu.py
index b08599e..ff22ea8 100644
--- a/plugin.video.xbmcflicks/resources/lib/menu.py
+++ b/plugin.video.xbmcflicks/resources/lib/menu.py
@@ -4,6 +4,8 @@ import urllib
 from iqueue import *
 
 # plugin modes
+MODE0iw = 0
+MODE0d = 1
 MODE1 = 10
 MODE1a = 11
 MODE1b = 12
@@ -46,17 +48,54 @@ MODE7r = 98
 MODE7s = 99
 MODE7t = 100
 
+MODED1 = 500
+MODED1m = 510
+MODED1t = 520
+
+MODED2 = 600
+MODED3 = 700
+
+MODED7 = 800
+MODED7a = 801
+MODED7b = 802
+MODED7c = 803
+MODED7d = 804
+MODED7e = 805
+MODED7f = 806
+MODED7g = 807
+MODED7h = 808
+MODED7i = 809
+MODED7j = 810
+MODED7k = 811
+MODED7l = 812
+MODED7m = 813
+MODED7n = 814
+MODED7o = 815
+MODED7p = 816
+MODED7q = 817
+MODED7r = 818
+MODED7s = 819
+MODED7t = 820
+
+MODER = 900
+MODER1 = 901
+MODER2 = 902
+MODER3 = 903
+
 # parameter keys
 PARAMETER_KEY_MODE = "mode"
 
 # menu item names
-SUBMENU1 = "My Instant Queue - ALL"
-SUBMENU1a = "My Instant Queue - Movies"
-SUBMENU1b = "My Instant Queue - TV Shows"
-SUBMENU2 = "Recommended (Filtered for Instant Watch)"
-SUBMENU3 = "All New Movies & Shows"
+SUBMENU0iw = "Instant Movies and Shows"
+SUBMENU0d = "Disc by Mail"
+
+SUBMENU1 = "Instant Queue: All"
+SUBMENU1a = "Instant Queue: Movies"
+SUBMENU1b = "Instant Queue: TV"
+SUBMENU2 = "Recommended"
+SUBMENU3 = "All New Arrivals"
 SUBMENU4 = "Search..."
-SUBMENU5 = "Top 25 New Movies & Shows"
+SUBMENU5 = "Top 25 New Arrivals"
 SUBMENU6 = "By Genre"
 SUBMENU6a = "Action & Adventure"
 SUBMENU6b = "Children & Family"
@@ -93,6 +132,43 @@ SUBMENU7r = "Sports & Fitness"
 SUBMENU7s = "Television"
 SUBMENU7t = "Thrillers"
 
+##DVD Queue
+SUBMENUD1 = "Disc Queue: All"
+SUBMENUD1m = "Disc Queue: Movies"
+SUBMENUD1t = "Disc Queue: TV"
+
+SUBMENUD2 = "Search..."
+SUBMENUD3 = "At Home"
+
+##Top 25 by Genre
+SUBMENUD7 = "Top 25's By Genre"
+SUBMENUD7a = "Action & Adventure"
+SUBMENUD7b = "Anime & Animation"
+SUBMENUD7c = "Blu-ray"
+SUBMENUD7d = "Children & Family"
+SUBMENUD7e = "Classics"
+SUBMENUD7f = "Comedy"
+SUBMENUD7g = "Documentary"
+SUBMENUD7h = "Drama"
+SUBMENUD7i = "Faith & Spirituality"
+SUBMENUD7j = "Foreign"
+SUBMENUD7k = "Gay & Lesbian"
+SUBMENUD7l = "Horror"
+SUBMENUD7m = "Independent"
+SUBMENUD7n = "Music & Musicals"
+SUBMENUD7o = "Romance"
+SUBMENUD7p = "Sci-Fi & Fantasy"
+SUBMENUD7q = "Special Interest"
+SUBMENUD7r = "Sports & Fitness"
+SUBMENUD7s = "Television"
+SUBMENUD7t = "Thrillers"
+
+## Rental History
+SUBMENUR = "Rental History"
+SUBMENUR1 = "Shipped"
+SUBMENUR2 = "Returned"
+SUBMENUR3 = "Watched"
+
 # plugin handle
 handle = int(sys.argv[1])
 
@@ -120,18 +196,40 @@ def addDirectoryItem(name, isFolder=True, parameters={}, 
thumbnail=None):
 
 # UI builder functions
 def show_root_menu():
-   ''' Show the plugin root menu. '''
-   addDirectoryItem(name=SUBMENU1, parameters={ PARAMETER_KEY_MODE:MODE1 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/iqueue_all.png")
-   addDirectoryItem(name=SUBMENU1a, parameters={ PARAMETER_KEY_MODE:MODE1a }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/iqueue_movies.png")
-   addDirectoryItem(name=SUBMENU1b, parameters={ PARAMETER_KEY_MODE:MODE1b }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/iqueue_tv.png")
+   addDirectoryItem(name=SUBMENU0iw, parameters={ PARAMETER_KEY_MODE:MODE0iw 
}, isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/instant.png")
+   addDirectoryItem(name=SUBMENU0d, parameters={ PARAMETER_KEY_MODE:MODE0d }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/disc.png")
+   addDirectoryItem(name=SUBMENUR, parameters={ PARAMETER_KEY_MODE:MODER }, 
isFolder=True)
+   xbmcplugin.endOfDirectory(handle=handle, succeeded=True)   
+
+def show_instant_menu():
+   addDirectoryItem(name=SUBMENU1, parameters={ PARAMETER_KEY_MODE:MODE1 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/iqueue_all.png")
+   addDirectoryItem(name=SUBMENU1a, parameters={ PARAMETER_KEY_MODE:MODE1a }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/iqueue_movies.png")
+   addDirectoryItem(name=SUBMENU1b, parameters={ PARAMETER_KEY_MODE:MODE1b }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/iqueue_tv.png")
 
-   addDirectoryItem(name=SUBMENU2, parameters={ PARAMETER_KEY_MODE:MODE2 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/recog.png")
-   addDirectoryItem(name=SUBMENU5, parameters={ PARAMETER_KEY_MODE:MODE5 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/new_top25.png")
-   addDirectoryItem(name=SUBMENU3, parameters={ PARAMETER_KEY_MODE:MODE3 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/new_all.png")
-   addDirectoryItem(name=SUBMENU4, parameters={ PARAMETER_KEY_MODE:MODE4 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/images/search.png")
+   addDirectoryItem(name=SUBMENU2, parameters={ PARAMETER_KEY_MODE:MODE2 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/recog.png")
+   addDirectoryItem(name=SUBMENU5, parameters={ PARAMETER_KEY_MODE:MODE5 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/new_top25.png")
+   addDirectoryItem(name=SUBMENU3, parameters={ PARAMETER_KEY_MODE:MODE3 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/new_all.png")
+   addDirectoryItem(name=SUBMENU4, parameters={ PARAMETER_KEY_MODE:MODE4 }, 
isFolder=True, 
thumbnail="special://home/addons/plugin.video.xbmcflicks/resources/search.png")
    #addDirectoryItem(name=SUBMENU6, parameters={ PARAMETER_KEY_MODE:MODE6 }, 
isFolder=True)
    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
 
+def show_disc_menu():
+   addDirectoryItem(name=SUBMENUD1, parameters={ PARAMETER_KEY_MODE:MODED1 }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENUD1m, parameters={ PARAMETER_KEY_MODE:MODED1m 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD1t, parameters={ PARAMETER_KEY_MODE:MODED1t 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7, parameters={ PARAMETER_KEY_MODE:MODED7 }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENUD2, parameters={ PARAMETER_KEY_MODE:MODED2 }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENUD3, parameters={ PARAMETER_KEY_MODE:MODED3 }, 
isFolder=True)
+   
+   xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
+
+def show_rentalhistory_menu():
+   addDirectoryItem(name=SUBMENUR1, parameters={ PARAMETER_KEY_MODE:MODER1 }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENUR2, parameters={ PARAMETER_KEY_MODE:MODER2 }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENUR3, parameters={ PARAMETER_KEY_MODE:MODER3 }, 
isFolder=True)
+   
+   xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
+
 def show_SUBMENU1():
    ''' Show first submenu. '''
    for i in range(0, 5):
@@ -148,30 +246,18 @@ def show_SUBMENU2():
 
 def show_SUBMENU6():
    #add in the genre folders
-   addDirectoryItem(name=SUBMENU6a, parameters={ PARAMETER_KEY_MODE:
-MODE6a }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6b, parameters={ PARAMETER_KEY_MODE:
-MODE6b }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6c, parameters={ PARAMETER_KEY_MODE:
-MODE6c }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6d, parameters={ PARAMETER_KEY_MODE:
-MODE6d }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6e, parameters={ PARAMETER_KEY_MODE:
-MODE6e }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6f, parameters={ PARAMETER_KEY_MODE:
-MODE6f }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6g, parameters={ PARAMETER_KEY_MODE:
-MODE6g }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6h, parameters={ PARAMETER_KEY_MODE:
-MODE6h }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6i, parameters={ PARAMETER_KEY_MODE:
-MODE6i }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6j, parameters={ PARAMETER_KEY_MODE:
-MODE6j }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6k, parameters={ PARAMETER_KEY_MODE:
-MODE6k }, isFolder=True)
-   addDirectoryItem(name=SUBMENU6l, parameters={ PARAMETER_KEY_MODE:
-MODE6l }, isFolder=True)
+   addDirectoryItem(name=SUBMENU6a, parameters={ PARAMETER_KEY_MODE:MODE6a }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6b, parameters={ PARAMETER_KEY_MODE:MODE6b }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6c, parameters={ PARAMETER_KEY_MODE:MODE6c }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6d, parameters={ PARAMETER_KEY_MODE:MODE6d }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6e, parameters={ PARAMETER_KEY_MODE:MODE6e }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6f, parameters={ PARAMETER_KEY_MODE:MODE6f }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6g, parameters={ PARAMETER_KEY_MODE:MODE6g }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6h, parameters={ PARAMETER_KEY_MODE:MODE6h }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6i, parameters={ PARAMETER_KEY_MODE:MODE6i }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6j, parameters={ PARAMETER_KEY_MODE:MODE6j }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6k, parameters={ PARAMETER_KEY_MODE:MODE6k }, 
isFolder=True)
+   addDirectoryItem(name=SUBMENU6l, parameters={ PARAMETER_KEY_MODE:MODE6l }, 
isFolder=True)
    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
 
 def show_SUBMENU7():
@@ -198,7 +284,29 @@ def show_SUBMENU7():
    addDirectoryItem(name=SUBMENU7t, parameters={ PARAMETER_KEY_MODE:MODE7t }, 
isFolder=True)
    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
    
-
+def show_SUBMENUD7():
+   #add in the disc genre folders for the Top 25 items
+   addDirectoryItem(name=SUBMENUD7a, parameters={ PARAMETER_KEY_MODE:MODED7a 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7b, parameters={ PARAMETER_KEY_MODE:MODED7b 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7c, parameters={ PARAMETER_KEY_MODE:MODED7c 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7d, parameters={ PARAMETER_KEY_MODE:MODED7d 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7e, parameters={ PARAMETER_KEY_MODE:MODED7e 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7f, parameters={ PARAMETER_KEY_MODE:MODED7f 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7g, parameters={ PARAMETER_KEY_MODE:MODED7g 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7h, parameters={ PARAMETER_KEY_MODE:MODED7h 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7i, parameters={ PARAMETER_KEY_MODE:MODED7i 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7j, parameters={ PARAMETER_KEY_MODE:MODED7j 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7k, parameters={ PARAMETER_KEY_MODE:MODED7k 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7l, parameters={ PARAMETER_KEY_MODE:MODED7l 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7m, parameters={ PARAMETER_KEY_MODE:MODED7m 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7n, parameters={ PARAMETER_KEY_MODE:MODED7n 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7o, parameters={ PARAMETER_KEY_MODE:MODED7o 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7p, parameters={ PARAMETER_KEY_MODE:MODED7p 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7q, parameters={ PARAMETER_KEY_MODE:MODED7q 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7r, parameters={ PARAMETER_KEY_MODE:MODED7r 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7s, parameters={ PARAMETER_KEY_MODE:MODED7s 
}, isFolder=True)
+   addDirectoryItem(name=SUBMENUD7t, parameters={ PARAMETER_KEY_MODE:MODED7t 
}, isFolder=True)
+   xbmcplugin.endOfDirectory(handle=handle, succeeded=True)
 
 # parameter values
 params = parameters_string_to_dict(sys.argv[2])
@@ -212,7 +320,11 @@ print 
"##########################################################"
 # Depending on the mode, call the appropriate function to build the UI.
 if not sys.argv[2]:
    # new start
-   ok = show_root_menu()
+   show_root_menu()
+elif mode == MODE0iw:
+   show_instant_menu()
+elif mode == MODE0d:
+   show_disc_menu()   
 elif mode == MODE1:
    getInstantQueue()
 elif mode == MODE1a:
@@ -229,7 +341,7 @@ elif mode == MODE4:
     if (keyboard.isConfirmed()):
       arg = keyboard.getText()
       #print "keyboard returned: " + keyboard.getText()
-      doSearch(arg)
+      doSearch(arg, "instant", True)
     else:
       print "user canceled"
 elif mode == MODE5:
@@ -264,42 +376,109 @@ elif mode == MODE6l:
 elif mode == MODE7:
    ok = show_SUBMENU7()
 elif mode == MODE7a:
-  getTop25Feed("296")
+   getTop25Feed("296")
 elif mode == MODE7b:
-  getTop25Feed("623")
+   getTop25Feed("623")
 elif mode == MODE7c:
-  getTop25Feed("2444")
+   getTop25Feed("2444")
 elif mode == MODE7d:
-  getTop25Feed("302")
+   getTop25Feed("302")
 elif mode == MODE7e:
-  getTop25Feed("306")
+   getTop25Feed("306")
 elif mode == MODE7f:
-  getTop25Feed("307")
+   getTop25Feed("307")
 elif mode == MODE7g:
-  getTop25Feed("864")
+   getTop25Feed("864")
 elif mode == MODE7h:
-  getTop25Feed("315")
+   getTop25Feed("315")
 elif mode == MODE7i:
-  getTop25Feed("2108")
+   getTop25Feed("2108")
 elif mode == MODE7j:
-  getTop25Feed("2514")
+   getTop25Feed("2514")
 elif mode == MODE7k:
-  getTop25Feed("330")
+   getTop25Feed("330")
 elif mode == MODE7l:
-  getTop25Feed("338")
+   getTop25Feed("338")
 elif mode == MODE7m:
-  getTop25Feed("343")
+   getTop25Feed("343")
 elif mode == MODE7n:
-  getTop25Feed("2310")
+   getTop25Feed("2310")
 elif mode == MODE7o:
-  getTop25Feed("371")
+   getTop25Feed("371")
 elif mode == MODE7p:
-  getTop25Feed("373")
+   getTop25Feed("373")
 elif mode == MODE7q:
-  getTop25Feed("2223")
+   getTop25Feed("2223")
 elif mode == MODE7r:
-  getTop25Feed("2190")
+   getTop25Feed("2190")
 elif mode == MODE7s:
-  getTop25Feed("2197")
+   getTop25Feed("2197")
 elif mode == MODE7t:
-  getTop25Feed("387")
+   getTop25Feed("387")
+elif mode == MODED1:
+   getDVDQueue(3)
+elif mode == MODED1m:
+   getDVDQueue(4)
+elif mode == MODED1t:
+   getDVDQueue(5)
+elif mode == MODED2:
+   keyboard = xbmc.Keyboard()
+   keyboard.doModal()
+   if (keyboard.isConfirmed()):
+      arg = keyboard.getText()
+      #print "keyboard returned: " + keyboard.getText()
+      doSearch(arg, "Disc")
+   else:
+      print "user canceled"
+elif mode == MODED3:
+   getHomeList()
+elif mode == MODED7:
+   ok = show_SUBMENUD7()
+elif mode == MODED7a:
+   getTop25FeedD("296")
+elif mode == MODED7b:
+   getTop25FeedD("623")
+elif mode == MODED7c:
+   getTop25FeedD("2444")
+elif mode == MODED7d:
+   getTop25FeedD("302")
+elif mode == MODED7e:
+   getTop25FeedD("306")
+elif mode == MODED7f:
+   getTop25FeedD("307")
+elif mode == MODED7g:
+   getTop25FeedD("864")
+elif mode == MODED7h:
+   getTop25FeedD("315")
+elif mode == MODED7i:
+   getTop25FeedD("2108")
+elif mode == MODED7j:
+   getTop25FeedD("2514")
+elif mode == MODED7k:
+   getTop25FeedD("330")
+elif mode == MODED7l:
+   getTop25FeedD("338")
+elif mode == MODED7m:
+   getTop25FeedD("343")
+elif mode == MODED7n:
+   getTop25FeedD("2310")
+elif mode == MODED7o:
+   getTop25FeedD("371")
+elif mode == MODED7p:
+   getTop25FeedD("373")
+elif mode == MODED7q:
+   getTop25FeedD("2223")
+elif mode == MODED7r:
+   getTop25FeedD("2190")
+elif mode == MODED7s:
+   getTop25FeedD("2197")
+elif mode == MODED7t:
+   getTop25FeedD("387")
+elif mode == MODER:
+   show_rentalhistory_menu()
+elif mode == MODER1:
+   rhShipped()
+elif mode == MODER2:
+   rhReturned()
+elif mode == MODER3:
+   rhWatched()
diff --git a/plugin.video.xbmcflicks/resources/lib/modQueue.py 
b/plugin.video.xbmcflicks/resources/lib/modQueue.py
index 27ff8db..d4f55f1 100644
--- a/plugin.video.xbmcflicks/resources/lib/modQueue.py
+++ b/plugin.video.xbmcflicks/resources/lib/modQueue.py
@@ -152,11 +152,11 @@ def initApp():
         MY_USER['request']['key'] = match.group(1).strip()
         MY_USER['request']['secret'] = match.group(2).strip()
         MY_USER['access']['key'] = match.group(3).strip()
-       MY_USER['access']['secret'] = match.group(4).strip()
-       print "finished loading up user information from file"
+        MY_USER['access']['secret'] = match.group(4).strip()
+        print "finished loading up user information from file"
     else:
         #no match, need to fire off the user auth from the start
-       print "couldn't load user information from userinfo.properties file"
+        print "couldn't load user information from userinfo.properties file"
     #auth the user
     netflixClient = NetflixClient(APP_NAME, API_KEY, API_SECRET, CALLBACK, 
VERBOSE_USER_LOG)
     user = getAuth(netflixClient,VERBOSE_USER_LOG)
@@ -173,15 +173,20 @@ if __name__ == '__main__':
     strArgs = str(sys.argv[1])
     movieid = ""
     action = ""
+    actionParams = ""
     verboseAction = ""
     verboseDirection = ""
     details = ""
-    match = re.search(r"(.*?)(delete|post)", strArgs, re.IGNORECASE)
+    position = ""
+    discQueue = False
+    
+    match = re.search(r"(.*?)(delete|post|discdelete|discpost|disctoppost)", 
strArgs, re.IGNORECASE)
     if match:
-       movieid = match.group(1)
-       print movieid
-       action = match.group(2)
-       print action
+        movieid = match.group(1)
+        print movieid
+        action = match.group(2)
+        actionParams = match.group(2)
+        print action
     else:
         "print unable to parse action item, exiting"
         exit
@@ -189,9 +194,25 @@ if __name__ == '__main__':
     if(action == "post"):
         verboseAction = "Add"
         verboseDirection = "to"
-    else:
+    elif(action == "delete"):
+        verboseAction = "Remove"
+        verboseDirection = "from"
+    elif(action == "discpost"):
+        action = "post"
+        verboseAction = "Add"
+        verboseDirection = "to"
+        discQueue = True
+    elif(action == "disctoppost"):
+        action = "post"
+        verboseAction = "Add"
+        verboseDirection = "to"
+        discQueue = True
+        position = "1"
+    elif(action == "discdelete"):
+        action = "delete"
         verboseAction = "Remove"
         verboseDirection = "from"
+        discQueue = True
 
     netflixClient = NetflixClient(APP_NAME, API_KEY, API_SECRET, CALLBACK, 
VERBOSE_USER_LOG)
     #auth the user
@@ -199,16 +220,34 @@ if __name__ == '__main__':
 
     #if we have a user, do the action
     if user:
-        print "got user from main init of modQueue script"
-        result = user.modifyQueue(str(movieid), str(action))
-        matchr = re.search(r"'message': u'(.*?)'", str(result), re.IGNORECASE)
-        if matchr:
-            details = matchr.group(1)
-        else:
-            details = str(result)
-        dialog = xbmcgui.Dialog()
-        ok = dialog.ok("Instant Queue: " + verboseAction + " " + movieid, 
details)
-
-        #refresh UI on delete
-        if(action == "delete"):
+        if(not discQueue):         
+            result = user.modifyQueue(str(movieid), str(action))
+            matchr = re.search(r"'message': u'(.*?)'", str(result), 
re.IGNORECASE)
+            if matchr:
+                details = matchr.group(1)
+            else:
+                details = str(result)
+            dialog = xbmcgui.Dialog()
+            ok = dialog.ok("Instant Queue: " + verboseAction + " " + movieid, 
details)
+        if(discQueue):
+            if(position == ""):
+                result = user.modifyQueueDisc(str(movieid), str(action))
+            else:
+                result = user.modifyQueueDisc(str(movieid), str(action), 
position)
+            matchr = re.search(r"'message': u'(.*?)'", str(result), 
re.IGNORECASE)
+            if matchr:
+                details = matchr.group(1)
+            else:
+                details = str(result)
+            dialog = xbmcgui.Dialog()
+            ok = dialog.ok("Disc Queue: " + verboseAction + " " + movieid, 
details)
+         
+        #refresh UI on delete, disc delete, or move to top
+        if(actionParams == "delete"):
             xbmc.executebuiltin("Container.Refresh")
+        elif(actionParams == "discdelete"):
+            xbmc.executebuiltin("Container.Refresh")
+        elif(actionParams == "disctoppost"):
+            xbmc.executebuiltin("Container.Refresh")
+    else:
+        print "Failed to get user information from main init of modQueue 
script"
diff --git a/plugin.video.xbmcflicks/resources/lib/xinfo.py 
b/plugin.video.xbmcflicks/resources/lib/xinfo.py
index 9e7483b..c40f277 100644
--- a/plugin.video.xbmcflicks/resources/lib/xinfo.py
+++ b/plugin.video.xbmcflicks/resources/lib/xinfo.py
@@ -26,4 +26,5 @@ class XInfo:
         self.IsInstantAvailable = False
         self.MaturityLevel = "0"
         self.AvailableUntil = "0"
+        self.WebURL = ""
 

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

Summary of changes:
 plugin.video.xbmcflicks/addon.xml                 |    4 +-
 plugin.video.xbmcflicks/changelog.txt             |    2 +
 plugin.video.xbmcflicks/resources/disc.png        |  Bin 0 -> 42882 bytes
 plugin.video.xbmcflicks/resources/instant.png     |  Bin 0 -> 43401 bytes
 plugin.video.xbmcflicks/resources/lib/Netflix.py  |  201 ++++++++++-----
 plugin.video.xbmcflicks/resources/lib/iqueue.py   |  244 +++++++++++++++--
 plugin.video.xbmcflicks/resources/lib/menu.py     |  301 ++++++++++++++++-----
 plugin.video.xbmcflicks/resources/lib/modQueue.py |   81 ++++--
 plugin.video.xbmcflicks/resources/lib/xinfo.py    |    1 +
 9 files changed, 664 insertions(+), 170 deletions(-)
 create mode 100644 plugin.video.xbmcflicks/resources/disc.png
 create mode 100644 plugin.video.xbmcflicks/resources/instant.png


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Xbmc-addons mailing list
Xbmc-addons@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to