parameters are saved again

- use 2 new files to save individual and general parameters data
- setParam from dbus bridge now use str instead of dbus.String
- fixed param updated signal for general params
- fixed param setting
This commit is contained in:
Goffi 2010-01-28 12:38:12 +11:00
commit d6b6f77bec
2 changed files with 67 additions and 19 deletions

View file

@ -178,7 +178,7 @@ class DbusObject(dbus.service.Object):
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='sss', out_signature='')
def setParam(self, name, value, category):
self.cb["setParam"](name, str(value), category)
self.cb["setParam"](str(name), str(value), str(category))
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='ss', out_signature='s')

View file

@ -30,7 +30,8 @@ import pdb
from twisted.internet import defer
from twisted.words.protocols.jabber import jid
SAVEFILE_PARAM="/param"
SAVEFILE_PARAM_XML="/param" #xml parameters template
SAVEFILE_PARAM_DATA="/param" #individual & general parameters; _ind and _gen suffixes will be added
SAVEFILE_HISTORY="/history"
SAVEFILE_PRIVATE="/private" #file used to store misc values (mainly for plugins)
@ -60,22 +61,57 @@ class Param():
def load_default_params(self):
self.dom = minidom.parseString(Param.default_xml.encode('utf-8'))
def load(self, file):
"""Load parameters from file"""
def load_xml(self, file):
"""Load parameters template from file"""
self.dom = minidom.parse(file)
def save(self, file):
"""Save parameters to xml file"""
def load_data(self, file):
"""Load parameters data from file"""
file_ind = file + '_ind'
file_gen = file + '_gen'
if os.path.exists(file_gen):
try:
with open(file_gen, 'r') as file_gen_pickle:
self.params_gen=pickle.load(file_gen_pickle)
debug("general params data loaded")
except:
error ("Can't load general params data !")
if os.path.exists(file_ind):
try:
with open(file_ind, 'r') as file_ind_pickle:
self.params=pickle.load(file_ind_pickle)
debug("individual params data loaded")
except:
error ("Can't load individual params data !")
def save_xml(self, file):
"""Save parameters template to xml file"""
with open(file, 'wb') as xml_file:
self.dom.writexml(xml_file)
def save_data(self, file):
"""Save parameters data to file"""
#TODO: save properly in a separate file/database,
# use different behaviour depending of the data type (e.g. password encrypted)
#general params
with open(file+'_gen', 'w') as param_gen_pickle:
pickle.dump(self.params_gen, param_gen_pickle)
#then individual params
with open(file+'_ind', 'w') as param_ind_pickle:
pickle.dump(self.params, param_ind_pickle)
def __init__(self, host):
debug("Parameters init")
self.host = host
self.default_profile = None
self.params = {'goffi':{}} #gof:
self.params_gen = {}
host.set_const('savefile_param', SAVEFILE_PARAM)
host.set_const('savefile_param_xml', SAVEFILE_PARAM_XML)
host.set_const('savefile_param_data', SAVEFILE_PARAM_DATA)
host.registerGeneralCB("registerNewAccount", host.registerNewAccountCB)
def getProfilesList(self):
@ -139,7 +175,7 @@ class Param():
import_node(self.dom.documentElement, src_dom.documentElement)
def __default_ok(self, value, name, category):
self.setParam(name, value, category)
self.setParam(name, value, category) #FIXME: better to set param xml value ???
def __default_ko(self, failure, name, category):
error ("Can't determine default value for [%s/%s]: %s" % (category, name, str(failure.value)))
@ -299,6 +335,7 @@ class Param():
if node[0] == 'general':
self.params_gen[(category, name)] = value
self.host.bridge.paramUpdate(name, value, category) #TODO: add profile in signal
return
assert (node[0] == 'individual')
@ -308,7 +345,7 @@ class Param():
error('Trying to set parameter for an unknown profile')
return #TODO: throw an error
type = node.getAttribute("type")
type = node[1].getAttribute("type")
if type=="button":
print "clique",node.toxml()
else:
@ -335,25 +372,33 @@ class Memory:
def load(self):
"""Load parameters and all memory things from file/db"""
param_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param'))
param_file_xml = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param_xml'))
param_file_data = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param_data'))
history_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_history'))
private_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_private'))
#parameters
if os.path.exists(param_file):
if os.path.exists(param_file_xml):
try:
self.params.load(param_file)
debug("params loaded")
self.params.load_xml(param_file_xml)
debug("params template loaded")
except:
error ("Can't load params !")
error ("Can't load params template !")
self.params.load_default_params()
else:
error ("No params, using default parameters")
info ("No params template, using default template")
self.params.load_default_params()
try:
self.params.load_data(param_file_data)
debug("params loaded")
except:
error ("Can't load params !")
#history
if os.path.exists(history_file):
try:
@ -375,14 +420,17 @@ class Memory:
def save(self):
"""Save parameters and all memory things to file/db"""
#TODO: need to encrypt files (at least passwords !) and set permissions
param_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param'))
param_file_xml = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param_xml'))
param_file_data = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_param_data'))
history_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_history'))
private_file = os.path.expanduser(self.host.get_const('local_dir')+
self.host.get_const('savefile_private'))
self.params.save(param_file)
self.params.save_xml(param_file_xml)
self.params.save_data(param_file_data)
debug("params saved")
with open(history_file, 'w') as history_pickle:
pickle.dump(self.history, history_pickle)