<reponame>gade01/xbmcbackup
import json
import xbmc
from . import utils as utils


class GuiSettingsManager:
    filename = 'kodi_settings.json'
    systemSettings = None

    def __init__(self):
        # get all of the current Kodi settings
        json_response = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.GetSettings","params":{"level":"expert"}}'))

        self.systemSettings = json_response['result']['settings']

    def backup(self):
        utils.log('Backing up Kodi settings')

        # return all current settings
        return self.systemSettings

    def restore(self, restoreSettings):
        utils.log('Restoring Kodi settings')

        updateJson = {"jsonrpc": "2.0", "id": 1, "method": "Settings.SetSettingValue", "params": {"setting": "", "value": ""}}

        # create a setting=value dict of the current settings
        settingsDict = {}
        for aSetting in self.systemSettings:
            # ignore action types, no value
            if(aSetting['type'] != 'action'):
                settingsDict[aSetting['id']] = aSetting['value']

        restoreCount = 0
        for aSetting in restoreSettings:
            # only update a setting if its different than the current (action types have no value)
            if(aSetting['type'] != 'action' and settingsDict[aSetting['id']] != aSetting['value']):
                if(utils.getSettingBool('verbose_logging')):
                    utils.log('%s different than current: %s' % (aSetting['id'], str(aSetting['value'])))

                updateJson['params']['setting'] = aSetting['id']
                updateJson['params']['value'] = aSetting['value']

                xbmc.executeJSONRPC(json.dumps(updateJson))
                restoreCount = restoreCount + 1

        utils.log('Update %d settings' % restoreCount)

import json
import xbmc
from . import utils as utils


class GuiSettingsManager:
    filename = 'kodi_settings.json'
    systemSettings = None

    def __init__(self):
        # get all of the current Kodi settings
        json_response = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.GetSettings","params":{"level":"expert"}}'))

        self.systemSettings = json_response['result']['settings']

    def backup(self):
        utils.log('Backing up Kodi settings')

        # return all current settings
        return self.systemSettings

    def restore(self, restoreSettings):
        utils.log('Restoring Kodi settings')

        updateJson = {"jsonrpc": "2.0", "id": 1, "method": "Settings.SetSettingValue", "params": {"setting": "", "value": ""}}

        # create a setting=value dict of the current settings
        settingsDict = {}
        for aSetting in self.systemSettings:
            # ignore action types, no value
            if(aSetting['type'] != 'action'):
                settingsDict[aSetting['id']] = aSetting['value']

        restoreCount = 0
        for aSetting in restoreSettings:
            # only update a setting if its different than the current (action types have no value)
            if(aSetting['type'] != 'action' and settingsDict[aSetting['id']] != aSetting['value']):
                if(utils.getSettingBool('verbose_logging')):
                    utils.log('%s different than current: %s' % (aSetting['id'], str(aSetting['value'])))

                updateJson['params']['setting'] = aSetting['id']
                updateJson['params']['value'] = aSetting['value']

                xbmc.executeJSONRPC(json.dumps(updateJson))
                restoreCount = restoreCount + 1

        utils.log('Update %d settings' % restoreCount)
# get all of the current Kodi settings # return all current settings # create a setting=value dict of the current settings # ignore action types, no value # only update a setting if its different than the current (action types have no value)