def addItem(self, title, mode, url=None, img='', args={}, video_info={}, isFolder=True, total_items=0): # Create action url args['mode'] = mode; if url: args['url'] = url if img: img = resizeImage(img) args['icon'] = img args = [k + '=' + urllib.quote_plus(v.encode('ascii', 'ignore')) for k, v in args.iteritems()] action_url = sys.argv[0] + '?' + "&".join(args) li = xbmcgui.ListItem(label=title, iconImage=img, thumbnailImage=img) video_info = dict((k, v) for k, v in video_info.iteritems() if k in ['date', 'plot']) if video_info: li.setInfo('video', video_info) if 'duration' in video_info: # To set with second granularity must do this rather than via setInfo li.addStreamInfo('video', { 'duration' : video_info['duration'] }) if not isFolder: li.setProperty("IsPlayable", "true") # let xbmc know this can be played, unlike a folder. context_menu = menu_util.create_context_menu(getLS=plugin.getLS) li.addContextMenuItems(context_menu, replaceItems=True) else: li.addContextMenuItems([], replaceItems=True) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=action_url, listitem=li, isFolder=isFolder, totalItems=total_items)
def test_create_context_menu_url(self): context_menu = menu_util.create_context_menu(getLS, 'invalid://nowhere/nothing.mp4') self.assertTrue(len(context_menu) == 2) self.assertEquals((30097, 'Action(queue)'), context_menu[0]) self.assertEquals(30096, context_menu[1][0]) download_re = re.compile('RunPlugin\(.+?mode=downloadVideo&url=invalid://nowhere/nothing\.mp4\)') self.assertTrue(download_re.match(context_menu[1][1]))
def newTalksRss(self): newTalks = NewTalksRss(self.logger) for talk in newTalks.get_new_talks(): li = xbmcgui.ListItem(label=talk['title'], iconImage=talk['thumb'], thumbnailImage=talk['thumb']) li.setProperty("IsPlayable", "true") li.setInfo( 'video', { 'date': talk['date'], 'duration': talk['duration'], 'plot': talk['plot'] }) favorites_action = None if self.settings['username'] != None: favorites_action = "add" context_menu = menu_util.create_context_menu( getLS=getLS, url=talk['link'], favorites_action=favorites_action, talkID=talk['id']) li.addContextMenuItems(context_menu, replaceItems=True) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=talk['link'], listitem=li) self.endofdirectory(sortMethod='date')
def addItem(self, info, isFolder = True): #Defaults in dict. Use 'None' instead of None so it is compatible for quote_plus in parseArgs #create params for xbmcplugin module args = {} for key1, key2 in {'url': 'url', 'mode': 'mode', 'Title': 'name', 'Thumb': 'icon'}.iteritems(): if key1 in info: if info[key1] is None: self.logger("'None' in item dict: " + info) else: args[key2] = urllib.quote_plus(info[key1].encode('ascii', 'ignore')) u = sys.argv[0] + '?' + "&".join(key + '=' + value for key, value in args.iteritems()) info.setdefault('url', 'None') info.setdefault('Thumb', 'None') info.setdefault('Icon', info['Thumb']) #create list item if info['Title'].startswith(" "): title = info['Title'][1:] else: title = info['Title'] li = xbmcgui.ListItem(label = title, iconImage = info['Icon'], thumbnailImage = info['Thumb']) li.setInfo(type='Video', infoLabels = info) #for videos, replace context menu with queue and add to favorites if not isFolder: li.setProperty("IsPlayable", "true")#let xbmc know this can be played, unlike a folder. context_menu = menu_util.create_context_menu(getLS = getLS) li.addContextMenuItems(context_menu, replaceItems = True) else: #for folders, completely remove contextmenu, as it is totally useless. li.addContextMenuItems([], replaceItems = True) #add item to list xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=li, isFolder=isFolder)
def test_create_context_menu_add_favorite(self): context_menu = menu_util.create_context_menu(getLS, favorites_action = "add", talkID = "42") self.assertTrue(len(context_menu) == 2) self.assertEquals((30097, 'Action(queue)'), context_menu[0]) self.assertEquals(30090, context_menu[1][0]) download_re = re.compile('RunPlugin\(.+?mode=addToFavorites&talkID=42\)') self.assertTrue(download_re.match(context_menu[1][1]))
def test_create_context_menu_add_favorite(self): context_menu = menu_util.create_context_menu(getLS, favorites_action="add", talkID="42") self.assertTrue(len(context_menu) == 2) self.assertEquals((30097, 'Action(queue)'), context_menu[0]) self.assertEquals(30090, context_menu[1][0]) download_re = re.compile('RunPlugin\(.+?addToFavorites=42\)') self.assertTrue(download_re.match(context_menu[1][1]))
def test_create_context_menu_url(self): context_menu = menu_util.create_context_menu( getLS, 'invalid://nowhere/nothing.mp4') self.assertTrue(len(context_menu) == 2) self.assertEquals((30097, 'Action(queue)'), context_menu[0]) self.assertEquals(30096, context_menu[1][0]) download_re = re.compile( 'RunPlugin\(.+?downloadVideo=invalid://nowhere/nothing\.mp4\)') self.assertTrue(download_re.match(context_menu[1][1]))
def newTalksRss(self): newTalks = NewTalksRss(self.logger) for talk in newTalks.get_new_talks(): li = xbmcgui.ListItem(label = talk['title'], iconImage = talk['thumb'], thumbnailImage = talk['thumb']) li.setProperty("IsPlayable", "true") li.setInfo('video', {'date':talk['date'], 'duration':talk['duration'], 'plot':talk['plot']}) favorites_action = None if self.settings['username'] != None: favorites_action = "add" context_menu = menu_util.create_context_menu(getLS = getLS, url = talk['link'], favorites_action = favorites_action, talkID = talk['id']) li.addContextMenuItems(context_menu, replaceItems = True) xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = talk['link'], listitem = li) self.endofdirectory(sortMethod = 'date')
def addItem(self, info, isFolder=True): #Defaults in dict. Use 'None' instead of None so it is compatible for quote_plus in parseArgs #create params for xbmcplugin module args = {} for key1, key2 in { 'url': 'url', 'mode': 'mode', 'Title': 'name', 'Thumb': 'icon' }.iteritems(): if key1 in info: if info[key1] is None: self.logger("'None' in item dict: " + info) else: args[key2] = urllib.quote_plus(info[key1].encode( 'ascii', 'ignore')) u = sys.argv[0] + '?' + "&".join(key + '=' + value for key, value in args.iteritems()) info.setdefault('url', 'None') info.setdefault('Thumb', 'None') info.setdefault('Icon', info['Thumb']) #create list item if info['Title'].startswith(" "): title = info['Title'][1:] else: title = info['Title'] li = xbmcgui.ListItem(label=title, iconImage=info['Icon'], thumbnailImage=info['Thumb']) li.setInfo(type='Video', infoLabels=info) #for videos, replace context menu with queue and add to favorites if not isFolder: li.setProperty( "IsPlayable", "true") #let xbmc know this can be played, unlike a folder. context_menu = menu_util.create_context_menu(getLS=getLS) li.addContextMenuItems(context_menu, replaceItems=True) else: #for folders, completely remove contextmenu, as it is totally useless. li.addContextMenuItems([], replaceItems=True) #add item to list xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=li, isFolder=isFolder)
def test_create_context_menu(self): context_menu = menu_util.create_context_menu(getLS) self.assertEquals([(30097, 'Action(queue)')], context_menu)
def test_create_context_menu(self): context_menu = menu_util.create_context_menu(getLS) self.assertEquals([ (30097, 'Action(queue)'), ('Toggle watched', 'Action(ToggleWatched)'), ], context_menu)