mirror of
https://github.com/robweber/xbmcbackup.git
synced 2024-11-15 04:45:49 +01:00
restore xbmc allowed settings via json
This commit is contained in:
parent
2fc26b6e8c
commit
0b6a3ae506
@ -5,6 +5,7 @@ import utils as utils
|
|||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
from vfs import XBMCFileSystem,DropboxFileSystem,ZipFileSystem
|
from vfs import XBMCFileSystem,DropboxFileSystem,ZipFileSystem
|
||||||
|
from resources.lib.guisettings import GuiSettingsManager
|
||||||
|
|
||||||
def folderSort(aKey):
|
def folderSort(aKey):
|
||||||
result = aKey[0]
|
result = aKey[0]
|
||||||
@ -423,6 +424,11 @@ class XbmcBackup:
|
|||||||
self.xbmc_vfs.rmfile(xbmc.translatePath("special://temp/" + self.restore_point))
|
self.xbmc_vfs.rmfile(xbmc.translatePath("special://temp/" + self.restore_point))
|
||||||
self.xbmc_vfs.rmdir(self.remote_vfs.root_path)
|
self.xbmc_vfs.rmdir(self.remote_vfs.root_path)
|
||||||
|
|
||||||
|
if(utils.getSetting("backup_config") == "true"):
|
||||||
|
#update the guisettings information (or what we can from it)
|
||||||
|
gui_settings = GuiSettingsManager('special://home/userdata/guisettings.xml')
|
||||||
|
gui_settings.run()
|
||||||
|
|
||||||
#call update addons to refresh everything
|
#call update addons to refresh everything
|
||||||
xbmc.executebuiltin('UpdateLocalAddons')
|
xbmc.executebuiltin('UpdateLocalAddons')
|
||||||
|
|
||||||
|
96
resources/lib/guisettings.py
Normal file
96
resources/lib/guisettings.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
import utils as utils
|
||||||
|
from xml.dom import minidom
|
||||||
|
from xml.parsers.expat import ExpatError
|
||||||
|
import json
|
||||||
|
import xbmc,xbmcvfs
|
||||||
|
|
||||||
|
|
||||||
|
class GuiSettingsManager:
|
||||||
|
doc = None
|
||||||
|
settings_allowed = list()
|
||||||
|
found_settings = list()
|
||||||
|
|
||||||
|
def __init__(self,settingsFile):
|
||||||
|
self._readFile(xbmc.translatePath(settingsFile))
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
#get a list of all the settings we can manipulate via json
|
||||||
|
json_response = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.GetSettings","params":{"level":"advanced"}}'))
|
||||||
|
|
||||||
|
settings = json_response['result']['settings']
|
||||||
|
|
||||||
|
for aSetting in settings:
|
||||||
|
self.settings_allowed.append(aSetting['id'])
|
||||||
|
|
||||||
|
#parse the existing xml file and get all the settings
|
||||||
|
root_nodes = self.__parseNodes(self.doc.documentElement)
|
||||||
|
|
||||||
|
for aNode in root_nodes:
|
||||||
|
secondary_list = self.__parseNodes(self.doc.getElementsByTagName(aNode.name)[0])
|
||||||
|
|
||||||
|
for secondNode in secondary_list:
|
||||||
|
#if the node does not have children and is not default
|
||||||
|
if(not secondNode.hasChildren and not secondNode.isDefault):
|
||||||
|
|
||||||
|
if(secondNode.json_name() in self.settings_allowed):
|
||||||
|
self.found_settings.append(secondNode)
|
||||||
|
|
||||||
|
#go through all the found settings and update them
|
||||||
|
for aSetting in self.found_settings:
|
||||||
|
utils.log("updating: " + aSetting.json_name() + ", value: " + aSetting.value)
|
||||||
|
|
||||||
|
#check for boolean and numeric values
|
||||||
|
if(aSetting.value.isdigit() or (aSetting.value == 'true' or aSetting.value == 'false')):
|
||||||
|
xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.SetSettingValue","params":{"setting":"' + aSetting.json_name() + '","value":' + aSetting.value + '}}')
|
||||||
|
else:
|
||||||
|
xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.SetSettingValue","params":{"setting":"' + aSetting.json_name() + '","value":"' + aSetting.value + '"}}')
|
||||||
|
|
||||||
|
def __parseNodes(self,nodeList):
|
||||||
|
result = []
|
||||||
|
|
||||||
|
for node in nodeList.childNodes:
|
||||||
|
if(node.nodeType == self.doc.ELEMENT_NODE):
|
||||||
|
aSetting = SettingNode(node.nodeName)
|
||||||
|
|
||||||
|
#detect if there are any element nodes
|
||||||
|
if(len(node.childNodes) > 0):
|
||||||
|
for child_node in node.childNodes:
|
||||||
|
if(child_node.nodeType == self.doc.ELEMENT_NODE):
|
||||||
|
aSetting.hasChildren = True
|
||||||
|
|
||||||
|
if(not aSetting.hasChildren and len(node.childNodes) > 0):
|
||||||
|
aSetting.value = node.firstChild.nodeValue
|
||||||
|
|
||||||
|
if('default' not in node.attributes.keys()):
|
||||||
|
aSetting.isDefault = False
|
||||||
|
|
||||||
|
aSetting.parent = node.parentNode.nodeName
|
||||||
|
|
||||||
|
result.append(aSetting)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def _readFile(self,fileLoc):
|
||||||
|
|
||||||
|
if(xbmcvfs.exists(fileLoc)):
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
self.doc = minidom.parse(fileLoc)
|
||||||
|
except ExpatError:
|
||||||
|
utils.log("Can't read " + fileLoc)
|
||||||
|
|
||||||
|
class SettingNode:
|
||||||
|
name = ''
|
||||||
|
value = ''
|
||||||
|
hasChildren = False
|
||||||
|
isDefault = True
|
||||||
|
parent = ''
|
||||||
|
|
||||||
|
def __init__(self,name):
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
def json_name(self):
|
||||||
|
return self.parent + "." + self.name
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user