1 import gnome.gconf as gconf
4 from wifi_assistant.settings.network_setting import NetworkSetting
7 class NetworkSettings(object):
9 Reads and Writes NetworkSettings from/to GConf.
12 __DEFAULT_SETTINGS = 'default_settings'
14 def __init__(self, gconf_client, root_path):
15 self._gc = gconf_client
16 self._root_path = root_path
19 def delete(self, network_setting):
20 key = self._assembleRootKeyForSsid(network_setting.getNetworkName())
21 self._recursiveUnset(key)
24 def getDefaultSettings(self):
25 settings = self.get(self.__DEFAULT_SETTINGS)
27 settings = NetworkSetting()
28 settings.setNetworkName(self.__DEFAULT_SETTINGS)
29 settings.setLaunchingOfBrowserEnabled(True)
30 settings.setBrowserOptions({'url':'http://wifi-assistant.garage.maemo.org/'})
35 def getListStore(self):
36 """Returns a ListStore with one Row per Network Setting"""
38 store = gtk.ListStore(str, gobject.TYPE_BOOLEAN)
40 settings = self._getAllNetworkSettings()
41 for setting in settings:
42 store.append([setting.getNetworkName(), setting.getLaunchingOfBrowserEnabled()])
45 store.set_sort_column_id(0, gtk.SORT_ASCENDING)
51 key = self._assembleRootKeyForSsid(ssid)
52 if self._gc.dir_exists(key):
53 return NetworkSetting(self._loadValuesFromGConf(key))
54 print "WARNING: No settings to return for network name", ssid
58 def save(self, network_setting):
59 self._saveValuesToGConf(network_setting)
62 def _assembleRootKeyForSsid(self, ssid):
63 safe = self._replaceForbiddenCharacters(ssid)
64 return self._root_path + '/' + safe
67 def _getAllNetworkSettings(self):
68 dirs = self._gc.all_dirs(self._root_path)
70 key_offset = len(self._root_path) + 1
72 key = dir[key_offset:]
73 if self.__DEFAULT_SETTINGS != key:
74 settings.append(self.get(key))
78 def _loadValuesFromGConf(self, path):
79 """Loads all values under a given path in gconf recursively into a dict"""
82 path_length = len(path) + 1 # remove trailing / too
84 dirs = self._gc.all_dirs(path)
85 for sub_dir_path in dirs:
86 key = sub_dir_path[path_length:]
87 values[key] = self._loadValuesFromGConf(sub_dir_path)
89 entries = self._gc.all_entries(path)
91 full_key = entry.get_key()
92 key = full_key[path_length:]
93 gvalue = entry.get_value()
94 if gvalue.type == gconf.VALUE_BOOL:
95 values[key] = gvalue.get_bool()
96 elif gvalue.type == gconf.VALUE_STRING:
97 values[key] = gvalue.get_string()
104 def _recursiveUnset(self, dir):
105 # there's no recursive_unset available in gconf so we'll have to do it ourselves
106 all_entries = self._gc.all_entries(dir)
107 for entry in all_entries:
108 self._gc.unset(entry.get_key())
109 for sub_dir in self._gc.all_dirs(dir):
110 self._recursiveUnset(sub_dir)
111 self._gc.suggest_sync()
114 def _replaceForbiddenCharacters(self, str):
115 allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
121 result = result + '__'
125 def _saveValuesToGConf(self, network_setting):
126 """Saves all values "recursively" from NetworkSetting"""
128 network_name = network_setting.getNetworkName()
129 key = self._assembleRootKeyForSsid(network_name)
130 browser = network_setting.getNameOfBrowserToLaunch()
131 launch = network_setting.getLaunchingOfBrowserEnabled()
132 options = network_setting.getBrowserOptions()
134 self._gc.set_string(key + "/name", network_name)
135 self._gc.set_string(key + '/browser', browser)
136 self._gc.set_bool(key + '/launch', launch)
137 for option_key in options:
138 self._gc.set_string(key + "/options/" + option_key, options[option_key])