From eed5102b37ee8d8ca590b91b274c0879fb0f2fed Mon Sep 17 00:00:00 2001 From: faush01 Date: Wed, 17 Dec 2014 20:36:46 +1100 Subject: [PATCH] add new default views dialog --- resources/lib/DefaultViews.py | 117 +++++++++++++++ resources/lib/Functions.py | 96 ++++-------- resources/skins/default/720p/DefaultViews.xml | 140 ++++++++++++++++++ 3 files changed, 285 insertions(+), 68 deletions(-) create mode 100644 resources/lib/DefaultViews.py create mode 100644 resources/skins/default/720p/DefaultViews.xml diff --git a/resources/lib/DefaultViews.py b/resources/lib/DefaultViews.py new file mode 100644 index 0000000..8387082 --- /dev/null +++ b/resources/lib/DefaultViews.py @@ -0,0 +1,117 @@ + +import os +import xml.etree.ElementTree as etree +import sys +import xbmc +import xbmcgui +import xbmcaddon +import json as json +import urllib +from DownloadUtils import DownloadUtils + +def loadSkinDefaults(): + + defaultViewData = {} + # load current default views + # add a hash of xbmc.getSkinDir() to file name to make it skin specific + __addon__ = xbmcaddon.Addon(id='plugin.video.mbcon') + __addondir__ = xbmc.translatePath( __addon__.getAddonInfo('profile')) + view_list_path = os.path.join(__addondir__, "default_views.json") + if os.path.exists(view_list_path): + dataFile = open(view_list_path, 'r') + jsonData = dataFile.read() + dataFile.close() + defaultViewData = json.loads(jsonData) + + return defaultViewData + +class DefaultViews(xbmcgui.WindowXMLDialog): + + viewCats = ["Movies", "BoxSets", "Trailers", "Series", "Seasons", "Episodes"] + viewData = {} + defaultView = {} + + def __init__(self, *args, **kwargs): + xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs) + xbmc.log("WINDOW INITIALISED") + + def onInit(self): + self.action_exitkeys_id = [10, 13] + + # load skin views + skin_view_file = os.path.join(xbmc.translatePath('special://skin'), "views.xml") + xbmc.log("Loading Skin View List From : " + skin_view_file) + if os.path.exists(skin_view_file): + data = etree.parse(skin_view_file).getroot() + for view in data.iter("view"): + self.viewData[view.attrib["id"]] = view.attrib["value"] + + # load current default views + self.defaultView = loadSkinDefaults() + + # set default values + name = self.getNameById(self.defaultView["Movies"]) + self.getControl(3010).setLabel(name) + + name = self.getNameById(self.defaultView["BoxSets"]) + self.getControl(3011).setLabel(name) + + name = self.getNameById(self.defaultView["Series"]) + self.getControl(3012).setLabel(name) + + name = self.getNameById(self.defaultView["Seasons"]) + self.getControl(3013).setLabel(name) + + name = self.getNameById(self.defaultView["Episodes"]) + self.getControl(3014).setLabel(name) + + def onFocus(self, controlId): + pass + + def doAction(self, actionID): + pass + + def getNameById(self, viewId): + for name, id in self.viewData.iteritems(): + if id == viewId: + return name + + return "" + + def getNextViewName(self, current): + keys = list(self.viewData.keys()) + if(current not in keys): + return keys[0] + + index = keys.index(current) + if(index > -1 and index < len(keys)-1): + return keys[index + 1] + else: + return keys[0] + + def onClick(self, controlID): + + if(controlID >= 3010 and controlID <= 3014): + control = self.getControl(controlID) + control.setLabel(self.getNextViewName(control.getLabel())) + + elif(controlID == 3110): + + self.defaultView["Movies"] = self.viewData[self.getControl(3010).getLabel()] + self.defaultView["BoxSets"] = self.viewData[self.getControl(3011).getLabel()] + self.defaultView["Series"] = self.viewData[self.getControl(3012).getLabel()] + self.defaultView["Seasons"] = self.viewData[self.getControl(3013).getLabel()] + self.defaultView["Episodes"] = self.viewData[self.getControl(3014).getLabel()] + + __addon__ = xbmcaddon.Addon(id='plugin.video.mbcon') + __addondir__ = xbmc.translatePath( __addon__.getAddonInfo('profile')) + view_list_path = os.path.join(__addondir__, "default_views.json") + dataFile = open(view_list_path, 'w') + stringdata = json.dumps(self.defaultView) + dataFile.write(stringdata) + dataFile.close() + + self.close() + + pass + diff --git a/resources/lib/Functions.py b/resources/lib/Functions.py index 56e524e..b57bfb1 100644 --- a/resources/lib/Functions.py +++ b/resources/lib/Functions.py @@ -57,6 +57,7 @@ from PersonInfo import PersonInfo from SearchDialog import SearchDialog from DisplayItems import DisplayItems from DataManager import DataManager +import DefaultViews __settings__ = xbmcaddon.Addon(id='plugin.video.mbcon') __addon__ = xbmcaddon.Addon(id='plugin.video.mbcon') @@ -205,6 +206,8 @@ def mainEntryPoint(): sortorder() elif sys.argv[1] == "genrefilter": genrefilter() + elif sys.argv[1] == "showsetviews": + showSetViews() elif mode == "CAST_LIST": getCastList(sys.argv[0], int(sys.argv[1]), params) elif mode == "PERSON_DETAILS": @@ -242,8 +245,6 @@ def mainEntryPoint(): getContent(param_url, pluginhandle) elif mode == "PLAY": PLAY(param_url, pluginhandle) - elif mode == "SETVIEWS": - showViewList(param_url, pluginhandle) else: displaySections(pluginhandle) @@ -399,8 +400,6 @@ def getCollections(detailsString): collections.append({'title': "Upcoming TV", 'sectype' : 'std.tvshows', 'section' : 'tvshows' , 'address' : MB_server , 'path' : '/mediabrowser/Users/' + userid + '/Items?Recursive=true&SortBy=PremiereDate&Genres=&Fields=' + detailsString + '&SortOrder=Ascending&Filters=IsUnplayed&IsVirtualUnaired=true&IsNotFolder&IncludeItemTypes=Episode&format=json','thumb':'', 'poster':'', 'fanart_image':'', 'guiid':''}) collections.append({'title': "BoxSets", 'sectype' : 'std.movies', 'section' : 'movies' , 'address' : MB_server , 'path' : '/mediabrowser/Users/' + userid + '/Items?Recursive=true&SortBy=SortName&Genres=&Fields=' + detailsString + '&SortOrder=Ascending&IncludeItemTypes=BoxSet&format=json','thumb':'', 'poster':'', 'fanart_image':'', 'guiid':''}) - collections.append({'title': "Set Views", 'sectype' : 'std.setviews', 'section' : 'setviews' , 'address' : 'SETVIEWS', 'path': 'SETVIEWS', 'thumb':'', 'poster':'', 'fanart_image':'', 'guiid':''}) - return collections def markWatched(item_id): @@ -881,7 +880,6 @@ def get_params( paramstring ): def getContent(url, pluginhandle): - global viewType printDebug("== ENTER: getContent ==") printDebug("URL: " + str(url)) @@ -932,13 +930,14 @@ def getContent(url, pluginhandle): #printDebug("JSON DATA: " + str(result), level=2) - dirItems,viewType = processDirectory(url, result, progress, pluginhandle) + dirItems, viewType = processDirectory(url, result, progress, pluginhandle) xbmcplugin.addDirectoryItems(pluginhandle, dirItems) if(viewType != None and len(viewType) > 0): - viewNum = __settings__.getSetting(xbmc.getSkinDir() + '_VIEW' + viewType) + defaultData = DefaultViews.loadSkinDefaults() + viewNum = defaultData.get(viewType) printDebug("SETTING_VIEW : " + str(viewType) + " : " + str(viewNum), level=1) - if viewNum != "": + if viewNum != None and viewNum != "": xbmc.executebuiltin("Container.SetViewMode(%s)" % int(viewNum)) xbmcplugin.endOfDirectory(pluginhandle, cacheToDisc=False) @@ -1007,19 +1006,19 @@ def processDirectory(url, results, progress, pluginhandle): if item.get("Type") == "Movie": xbmcplugin.setContent(pluginhandle, 'movies') - viewType = "_MOVIES" + viewType = "Movies" elif item.get("Type") == "BoxSet": xbmcplugin.setContent(pluginhandle, 'movies') - viewType = "_BOXSETS" + viewType = "BoxSets" elif item.get("Type") == "Trailer": xbmcplugin.setContent(pluginhandle, 'movies') - viewType = "_TRAILERS" + viewType = "" elif item.get("Type") == "Series": xbmcplugin.setContent(pluginhandle, 'tvshows') - viewType = "_SERIES" + viewType = "Series" elif item.get("Type") == "Season": xbmcplugin.setContent(pluginhandle, 'seasons') - viewType="_SEASONS" + viewType = "Seasons" guiid = item.get("SeriesId") elif item.get("Type") == "Episode": prefix='' @@ -1033,17 +1032,8 @@ def processDirectory(url, results, progress, pluginhandle): if prefix != '': tempTitle = prefix + ' - ' + tempTitle xbmcplugin.setContent(pluginhandle, 'episodes') - viewType="_EPISODES" + viewType = "Episodes" guiid = item.get("SeriesId") - elif item.get("Type") == "MusicArtist": - xbmcplugin.setContent(pluginhandle, 'songs') - viewType = '_MUSICARTISTS' - elif item.get("Type") == "MusicAlbum": - xbmcplugin.setContent(pluginhandle, 'songs') - viewType = '_MUSICTALBUMS' - elif item.get("Type") == "Audio": - xbmcplugin.setContent(pluginhandle, 'songs') - viewType = '_MUSICTRACKS' if(item.get("PremiereDate") != None): premieredatelist = (item.get("PremiereDate")).split("T") @@ -1225,10 +1215,12 @@ def processDirectory(url, results, progress, pluginhandle): extraData['mode'] = "GET_CONTENT" if isFolder == True: - SortByTemp = __settings__.getSetting('sortby') - if SortByTemp == '' and not (item_type == 'Series' or item_type == 'Season' or item_type == 'BoxSet' or item_type == 'MusicAlbum' or item_type == 'MusicArtist'): - SortByTemp = 'SortName' - u = 'http://' + server + '/mediabrowser/Users/'+ userid + '/items?ParentId=' +id +'&IsVirtualUnAired=false&IsMissing=false&Fields=' + detailsString + '&SortBy='+SortByTemp+'&format=json' + u = ('http://' + server + '/mediabrowser/Users/' + + userid + + '/items?ParentId=' + id + + '&IsVirtualUnAired=false&IsMissing=false&Fields=' + + detailsString + '&SortBy=&SortOrder=&Genres=&format=json') + if (item.get("RecursiveItemCount") != 0): dirItems.append(addGUIItem(u, details, extraData)) else: @@ -1400,7 +1392,14 @@ def showSearch(pluginName, handle, params): #items = DisplayItems("DisplayItems.xml", __cwd__, "default", "720p") #items.doModal() - #del items + #del items + +def showSetViews(): + printDebug("showSetViews Called") + + defaultViews = DefaultViews.DefaultViews("DefaultViews.xml", __cwd__, "default", "720p") + defaultViews.doModal() + del defaultViews def showPersonInfo(pluginName, handle, params): printDebug("showPersonInfo Called" + str(params)) @@ -1577,46 +1576,7 @@ def showParentContent(pluginName, handle, params): printDebug("showParentContent Content Url : " + str(contentUrl), 2) getContent(contentUrl, handle) - -def showViewList(url, pluginhandle): - viewCats=['Movies', 'BoxSets', 'Trailers', 'Series', 'Seasons', 'Episodes', 'Music Artists', 'Music Albums', 'Music Videos', 'Music Tracks'] - viewTypes=['_MOVIES', '_BOXSETS', '_TRAILERS', '_SERIES', '_SEASONS', '_EPISODES', '_MUSICARTISTS', '_MUSICALBUMS', '_MUSICVIDEOS', '_MUSICTRACKS'] - - skin_view_file = os.path.join(xbmc.translatePath('special://skin'), "views.xml") - try: - tree = etree.parse(skin_view_file) - except: - xbmcgui.Dialog().ok(__language__(30135), __language__(30150)) - sys.exit() - root = tree.getroot() - - if "SETVIEWS" in url: - for viewCat in viewCats: - name = viewCat - type = viewTypes[viewCats.index(viewCat)] - current = __settings__.getSetting(xbmc.getSkinDir() + '_VIEW' + type) - for view in root.iter('view'): - #xbmc.log("VIEW_DATA : " + view.attrib['value'] + " " + view.attrib['id'] + " " + type + " " + current) - if current == view.attrib['value']: - name = name + " (" + view.attrib['id'] + ")" - break - xbmcplugin.addDirectoryItem(pluginhandle, 'plugin://plugin.video.mbcon/?url=_SHOWVIEWS' + viewTypes[viewCats.index(viewCat)] + '&mode=SETVIEWS', xbmcgui.ListItem(name, ''), isFolder=True) - elif "_SETVIEW_" in url: - category = url.split('_')[2] - viewNum = url.split('_')[3] - __settings__.setSetting(xbmc.getSkinDir() + '_VIEW_' + category, viewNum) - xbmc.executebuiltin("Container.Refresh") - else: - xbmcplugin.addDirectoryItem(pluginhandle, 'plugin://plugin.video.mbcon?url=_SETVIEW_'+ url.split('_')[2] + '_' + '' + '&mode=SETVIEWS', xbmcgui.ListItem('Clear Settings', 'test')) - for view in root.iter('view'): - if __settings__.getSetting(xbmc.getSkinDir() + '_VIEW_' + url.split('_')[2]) == view.attrib['value']: - name = view.attrib['id'] + " (Active)" - else: - name = view.attrib['id'] - xbmcplugin.addDirectoryItem(pluginhandle, 'plugin://plugin.video.mbcon?url=_SETVIEW_'+ url.split('_')[2] + '_' + view.attrib['value'] + '&mode=SETVIEWS', xbmcgui.ListItem(name, 'test')) - - xbmcplugin.endOfDirectory(pluginhandle, cacheToDisc=False) - + def checkService(): timeStamp = xbmcgui.Window(10000).getProperty("mbcon_Service_Timestamp") diff --git a/resources/skins/default/720p/DefaultViews.xml b/resources/skins/default/720p/DefaultViews.xml new file mode 100644 index 0000000..b2eeaea --- /dev/null +++ b/resources/skins/default/720p/DefaultViews.xml @@ -0,0 +1,140 @@ + + + 3010 + 2 + + 1 + 450 + 50 + + dialogeffect + + + + 0 + 0 + 380 + 500 + DialogBack.png + + + + 0 + 35 + 380 + 40 + font16 + + center + blue + + + + 30 + 100 + 120 + 40 + font14 + + + + 150 + 100 + 200 + 40 + + - + 3011 + font14 + + + + 30 + 160 + 120 + 40 + font14 + + + + 150 + 160 + 200 + 40 + + 3010 + 3012 + font14 + + + + 30 + 220 + 120 + 40 + font14 + + + + 150 + 220 + 200 + 40 + + 3011 + 3013 + font14 + + + + 30 + 280 + 120 + 40 + font14 + + + + 150 + 280 + 200 + 40 + + 3012 + 3014 + font14 + + + + 30 + 340 + 120 + 40 + font14 + + + + 150 + 340 + 200 + 40 + + 3013 + 3110 + font14 + + + + 150 + 400 + 200 + 40 + + 3014 + - + font14 + + + + + \ No newline at end of file