1 import gnome.gconf as gconf
2 from NetworkSetting import NetworkSetting
6 class NetworkSettings(object):
8 Reads and Writes NetworkSettings from/to GConf.
11 __DEFAULT_SETTINGS = 'default_settings'
13 def __init__(self, gconf_client, root_path):
14 self._gc = gconf_client
15 self._root_path = root_path
18 def delete(self, launch_setting):
19 key = self._assembleRootKeyForSsid(launch_setting.getNetworkName())
20 self._recursive_unset(key)
23 def getDefaultSettings(self):
24 settings = self.get(self.__DEFAULT_SETTINGS)
26 settings = NetworkSetting()
27 settings.setNetworkName(self.__DEFAULT_SETTINGS)
28 settings.setLaunchingOfBrowserEnabled(True)
29 settings.setBrowserOptions({'url':'http://wifi-assistant.garage.maemo.org/'})
34 def getListStore(self):
35 """Returns a ListStore with one Row per Network Setting"""
37 store = gtk.ListStore(str, gobject.TYPE_BOOLEAN)
38 settings = self._getAllNetworkSettings()
39 for setting in settings:
40 store.append([setting.getNetworkName(), setting.getLaunchingOfBrowserEnabled()])
45 key = self._assembleRootKeyForSsid(ssid)
46 if self._gc.dir_exists(key):
47 return NetworkSetting(self._loadValuesFromGConf(key))
48 print "WARNING: No settings to return for network name", ssid
52 def save(self, launch_setting):
53 self._saveValuesToGConf(launch_setting)
56 def _assembleRootKeyForSsid(self, ssid):
57 safe = self._replaceForbiddenCharacters(ssid)
58 return self._root_path + '/' + safe
61 def _getAllNetworkSettings(self):
62 dirs = self._gc.all_dirs(self._root_path)
64 key_offset = len(self._root_path) + 1
66 key = dir[key_offset:]
67 if self.__DEFAULT_SETTINGS != key:
68 settings.append(self.get(key))
72 def _loadValuesFromGConf(self, path):
73 """Loads all values under a given path in gconf recursively into a dict"""
76 path_length = len(path) + 1 # remove trailing / too
78 dirs = self._gc.all_dirs(path)
79 for sub_dir_path in dirs:
80 key = sub_dir_path[path_length:]
81 values[key] = self._loadValuesFromGConf(sub_dir_path)
83 entries = self._gc.all_entries(path)
85 full_key = entry.get_key()
86 key = full_key[path_length:]
87 gvalue = entry.get_value()
88 if gvalue.type == gconf.VALUE_BOOL:
89 values[key] = gvalue.get_bool()
90 elif gvalue.type == gconf.VALUE_STRING:
91 values[key] = gvalue.get_string()
98 def _recursive_unset(self, dir):
99 # there's no recursive_unset available in gconf so we'll have to do it ourselves
100 all_entries = self._gc.all_entries(dir)
101 for entry in all_entries:
102 self._gc.unset(entry.get_key())
103 for sub_dir in self._gc.all_dirs(dir):
104 self._recursive_unset(sub_dir)
105 self._gc.suggest_sync()
108 def _replaceForbiddenCharacters(self, str):
109 allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
115 result = result + '__'
119 def _saveValuesToGConf(self, launch_setting):
120 """Saves all values "recursively" from NetworkSetting"""
122 network_name = launch_setting.getNetworkName()
123 key = self._assembleRootKeyForSsid(network_name)
124 browser = launch_setting.getNameOfBrowserToLaunch()
125 launch = launch_setting.getLaunchingOfBrowserEnabled()
126 options = launch_setting.getBrowserOptions()
128 self._gc.set_string(key + "/name", network_name)
129 self._gc.set_string(key + '/browser', browser)
130 self._gc.set_bool(key + '/launch', launch)
131 for option_key in options:
132 self._gc.set_string(key + "/options/" + option_key, options[option_key])