def serviceMethod(name, **params): actionId = __registered_services__[name] data = {'data': AddonUtils.encodeData(params)} service_response_obj = None try: containerObj = Container(addon_id=__addon_id__) iconimage = AddonUtils.getCompleteFilePath( baseDirPath=containerObj.getAddonContext().addonPath, filename='icon.png') XBMCInterfaceUtils.displayNotification( __service_name__ + ' Service', 'Processing received request...', iconimage=iconimage) containerObj.reloadTurtleRequest(data) containerObj.performAction(actionId) service_response_obj = containerObj.getTurtleResponse( ).get_service_response_obj() except Exception, e: print __service_name__ + ' Service :: ERROR OCCURRED: ' + str(e) ExceptionHandler.handle(e) service_response_obj = { "status": "exception", "message": "an unexpected error occurred, please check your input" } XBMCInterfaceUtils.displayNotification( __service_name__ + ' Service', 'Error while processing your request', time='5000')
def addFolderItem(item, item_next_action_id, is_folder=True): u = sys.argv[0] + '?actionId=' + urllib.quote_plus( item_next_action_id) + '&data=' + urllib.quote_plus( AddonUtils.encodeData(item.get_request_data())) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=item.get_xbmc_list_item_obj(), isFolder=is_folder)
def addContextMenuItem(item, label, action_id, data=None): if data is None: data = item.get_request_data() contextMenuItems = [] data = '?actionId=' + urllib.quote_plus( action_id) + '&data=' + urllib.quote_plus( AddonUtils.encodeData(item.get_request_data())) contextMenuItems.append( (label, 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) item.get_xbmc_list_item_obj().addContextMenuItems(contextMenuItems, replaceItems=False)
def serviceMethod(name, **params): actionId = __registered_services__[name] data = {'data':AddonUtils.encodeData(params)} service_response_obj = None try: containerObj = Container(addon_id=__addon_id__) iconimage = AddonUtils.getCompleteFilePath(baseDirPath=containerObj.getAddonContext().addonPath, filename='icon.png') XBMCInterfaceUtils.displayNotification(__service_name__ + ' Service', 'Processing received request...', iconimage=iconimage) containerObj.reloadTurtleRequest(data) containerObj.performAction(actionId) service_response_obj = containerObj.getTurtleResponse().get_service_response_obj() except Exception, e: print __service_name__ + ' Service :: ERROR OCCURRED: ' + str(e) ExceptionHandler.handle(e) service_response_obj = {"status":"exception", "message":"an unexpected error occurred, please check your input"} XBMCInterfaceUtils.displayNotification(__service_name__ + ' Service', 'Error while processing your request', time='5000')
def preparePlayListItems(request_obj, response_obj): if request_obj.get_data().has_key('videoPlayListItems'): playList = request_obj.get_data()['videoPlayListItems'] for videoItem in playList: data = {} data['videoLink'] = videoItem['videoLink'] data['videoTitle'] = videoItem['videoTitle'] item = ListItem() item.add_moving_data( 'videoStreamUrl', 'plugin://plugin.video.filmibynaturex/?actionId=snap_and_resolve_video&data=' + urllib.quote_plus(AddonUtils.encodeData(data))) item.set_next_action_name('Play') xbmcListItem = xbmcgui.ListItem(label=videoItem['videoTitle']) if (request_obj.get_data().has_key('videoInfo')): meta = request_obj.get_data()['videoInfo'] xbmcListItem.setIconImage(meta['thumb_url']) xbmcListItem.setThumbnailImage(meta['cover_url']) xbmcListItem.setInfo('video', meta) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def addFolderItem(item, item_next_action_id, is_folder=True): u = sys.argv[0] + '?actionId=' + urllib.quote_plus(item_next_action_id) + '&data=' + urllib.quote_plus(AddonUtils.encodeData(item.get_request_data())) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=item.get_xbmc_list_item_obj(), isFolder=is_folder)
def playHostedAudio(request_obj, response_obj): url = 'https://api.soundcloud.com/i1/tracks/%s/streams?client_id=%s&secret_token=%s&soundcloudurl' % (request_obj.get_data()['trackId'], request_obj.get_data()['client_id'], request_obj.get_data()['secret_token']) data = {} data['videoLink'] = url data['videoTitle'] = request_obj.get_data()['track_title'] request_obj.get_data()['track_link'] = 'plugin://plugin.playitx/?data=' + urllib.quote_plus(AddonUtils.encodeData(data)) response_obj.set_redirect_action_name('play_direct')
def preparePlayListItems(request_obj, response_obj): if request_obj.get_data().has_key('videoPlayListItems'): playList = request_obj.get_data()['videoPlayListItems'] for videoItem in playList: data = {} data['videoLink'] = videoItem['videoLink'] data['videoTitle'] = videoItem['videoTitle'] item = ListItem() item.add_moving_data('videoStreamUrl', 'plugin://plugin.video.filmibynaturex/?actionId=snap_and_resolve_video&data=' + urllib.quote_plus(AddonUtils.encodeData(data))) item.set_next_action_name('Play') xbmcListItem = xbmcgui.ListItem(label=videoItem['videoTitle']) if(request_obj.get_data().has_key('videoInfo')): meta = request_obj.get_data()['videoInfo'] xbmcListItem.setIconImage(meta['thumb_url']) xbmcListItem.setThumbnailImage(meta['cover_url']) xbmcListItem.setInfo('video', meta) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def displayFavouriteTVShows(request_obj, response_obj): addonContext = Container().getAddonContext() filepath = AddonUtils.getCompleteFilePath(baseDirPath=addonContext.addonProfile, extraDirPath=AddonUtils.ADDON_SRC_DATA_FOLDER, filename=FAV_TV_SHOWS_JSON_FILE, makeDirs=True) try: if AddonUtils.doesFileExist(filepath): favTVShowsJsonObj = AddonUtils.getJsonFileObj(filepath) if len(favTVShowsJsonObj) == 0: d = xbmcgui.Dialog() d.ok('No Favourites added yet!', 'Please use context menu on TV Show to add new favourite.', '') for tvShowName in favTVShowsJsonObj: tvShowInfo = favTVShowsJsonObj[tvShowName] item = ListItem() item.add_request_data('tvShowName', tvShowInfo['tvShowName']) item.add_request_data('tvShowUrl', tvShowInfo['tvShowUrl']) item.set_next_action_name('Show_Episodes') xbmcListItem = xbmcgui.ListItem(label=unicode(tvShowInfo['tvShowName']).encode("utf-8")) contextMenuItems = [] data = '?actionId=' + urllib.quote_plus("remove_Fav_TVShow") + '&data=' + urllib.quote_plus(AddonUtils.encodeData({"tvShowName":tvShowInfo['tvShowName'], "tvShowUrl":tvShowInfo['tvShowUrl']})) contextMenuItems.append(('Remove favourite', 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) xbmcListItem.addContextMenuItems(contextMenuItems, replaceItems=True) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) else: d = xbmcgui.Dialog() d.ok('No favourites added yet!', 'Please use context menu on TV Show to add new favourite.', '') except: AddonUtils.deleteFile(filepath) d = xbmcgui.Dialog() d.ok('FAILED to display TV Shows', 'Please add favorite again.')
def __displayTVShows__(tvShowsList, channelType, finished=False): items = [] for tvShow in tvShowsList: tvShowName = tvShow['name'] if finished: tvShowName = tvShowName + ' [' + AddonUtils.getBoldString('finished') + '] ' item = ListItem() item.add_request_data('channelType', channelType) item.add_request_data('tvShowName', tvShowName) item.add_request_data('tvShowUrl', tvShow['url']) item.set_next_action_name('Show_Episodes') xbmcListItem = xbmcgui.ListItem(label=tvShowName) contextMenuItems = [] data = '?actionId=' + urllib.quote_plus("add_Fav_TVShow") + '&data=' + urllib.quote_plus(AddonUtils.encodeData({"channelType":channelType, "tvShowName":tvShowName, "tvShowUrl":tvShow['url']})) contextMenuItems.append(('Add to favourite shows', 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) xbmcListItem.addContextMenuItems(contextMenuItems, replaceItems=True) item.set_xbmc_list_item_obj(xbmcListItem) items.append(item) return items
def displayChannels(request_obj, response_obj): addonContext = Container().getAddonContext() item = ListItem() item.set_next_action_name('add_Channel') youtube_icon_filepath = AddonUtils.getCompleteFilePath(baseDirPath=addonContext.addonPath, extraDirPath=AddonUtils.ADDON_ART_FOLDER, filename='Add_New_YouTube_V1.png') xbmcListItem = xbmcgui.ListItem(label='Add New Channel', iconImage=youtube_icon_filepath, thumbnailImage=youtube_icon_filepath) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) filepath = AddonUtils.getCompleteFilePath(baseDirPath=addonContext.addonProfile, extraDirPath=AddonUtils.ADDON_SRC_DATA_FOLDER, filename=CHANNELS_JSON_FILE, makeDirs=True) if not AddonUtils.doesFileExist(filepath): new_items = XBMCInterfaceUtils.callBackDialogProgressBar(getattr(sys.modules[__name__], '__retrieveYouTubeUserInfo__'), PRE_LOADED_CHANNELS, 'Loading default list of channels...', 'Remove the channel you hate in default list using context menu.') index = 0 channelsJsonObj = {} for username in PRE_LOADED_CHANNELS: channelsJsonObj[username] = new_items[index] index = index + 1 AddonUtils.saveObjToJsonFile(filepath, channelsJsonObj) try: channelsJsonObj = AddonUtils.getJsonFileObj(filepath) print 'CHANNELS JSON LOADED' if len(channelsJsonObj) == 0: d = xbmcgui.Dialog() if d.yesno('NO channels added yet!', 'Would you like to add YouTube channel right now?', 'Get username from YouTube URL.'): isAdded = addNewChannel(request_obj, response_obj) if not isAdded: return else: channelsJsonObj = AddonUtils.getJsonFileObj(filepath) for channelUsername in channelsJsonObj: userInfo = channelsJsonObj[channelUsername] item = ListItem() item.add_request_data('userId', channelUsername) item.set_next_action_name('show_Channel') xbmcListItem = xbmcgui.ListItem(label=unicode(userInfo['title']).encode("utf-8"), iconImage=userInfo['thumbnail'], thumbnailImage=userInfo['thumbnail']) contextMenuItems = [] data = '?actionId=' + urllib.quote_plus("remove_YouTube_Channel") + '&data=' + urllib.quote_plus(AddonUtils.encodeData({"userId":channelUsername})) contextMenuItems.append(('Remove channel', 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) xbmcListItem.addContextMenuItems(contextMenuItems, replaceItems=False) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) except: raise AddonUtils.deleteFile(filepath) print 'MY CHANNELS CORRUPT FILE DELETED = ' + filepath
def addContextMenuItem(item, label, action_id, data=None): if data is None: data = item.get_request_data() contextMenuItems = [] data = '?actionId=' + urllib.quote_plus(action_id) + '&data=' + urllib.quote_plus(AddonUtils.encodeData(item.get_request_data())) contextMenuItems.append((label, 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) item.get_xbmc_list_item_obj().addContextMenuItems(contextMenuItems, replaceItems=False)