+++ /dev/null
-import gnome.gconf as gconf
-from NetworkSetting import NetworkSetting
-import gtk, gobject
-
-
-class NetworkSettings(object):
- '''
- Reads and Writes NetworkSettings from/to GConf.
- '''
-
- __DEFAULT_SETTINGS = 'default_settings'
-
- def __init__(self, gconf_client, root_path):
- self._gc = gconf_client
- self._root_path = root_path
-
-
- def delete(self, launch_setting):
- key = self._assembleRootKeyForSsid(launch_setting.getNetworkName())
- self._recursive_unset(key)
-
-
- def getDefaultSettings(self):
- settings = self.get(self.__DEFAULT_SETTINGS)
- if settings is None:
- settings = NetworkSetting()
- settings.setNetworkName(self.__DEFAULT_SETTINGS)
- settings.setLaunchingOfBrowserEnabled(True)
- settings.setBrowserOptions({'url':'http://wifi-assistant.garage.maemo.org/'})
- self.save(settings)
- return settings
-
-
- def getListStore(self):
- """Returns a ListStore with one Row per Network Setting"""
-
- store = gtk.ListStore(str, gobject.TYPE_BOOLEAN)
- settings = self._getAllNetworkSettings()
- for setting in settings:
- store.append([setting.getNetworkName(), setting.getLaunchingOfBrowserEnabled()])
- return store
-
-
- def get(self, ssid):
- key = self._assembleRootKeyForSsid(ssid)
- if self._gc.dir_exists(key):
- return NetworkSetting(self._loadValuesFromGConf(key))
- print "WARNING: No settings to return for network name", ssid
- return None
-
-
- def save(self, launch_setting):
- self._saveValuesToGConf(launch_setting)
-
-
- def _assembleRootKeyForSsid(self, ssid):
- safe = self._replaceForbiddenCharacters(ssid)
- return self._root_path + '/' + safe
-
-
- def _getAllNetworkSettings(self):
- dirs = self._gc.all_dirs(self._root_path)
- settings = []
- key_offset = len(self._root_path) + 1
- for dir in dirs:
- key = dir[key_offset:]
- if self.__DEFAULT_SETTINGS != key:
- settings.append(self.get(key))
- return settings
-
-
- def _loadValuesFromGConf(self, path):
- """Loads all values under a given path in gconf recursively into a dict"""
-
- values = {}
- path_length = len(path) + 1 # remove trailing / too
-
- dirs = self._gc.all_dirs(path)
- for sub_dir_path in dirs:
- key = sub_dir_path[path_length:]
- values[key] = self._loadValuesFromGConf(sub_dir_path)
-
- entries = self._gc.all_entries(path)
- for entry in entries:
- full_key = entry.get_key()
- key = full_key[path_length:]
- gvalue = entry.get_value()
- if gvalue.type == gconf.VALUE_BOOL:
- values[key] = gvalue.get_bool()
- elif gvalue.type == gconf.VALUE_STRING:
- values[key] = gvalue.get_string()
- else:
- print 'ga'
-
- return values
-
-
- def _recursive_unset(self, dir):
- # there's no recursive_unset available in gconf so we'll have to do it ourselves
- all_entries = self._gc.all_entries(dir)
- for entry in all_entries:
- self._gc.unset(entry.get_key())
- for sub_dir in self._gc.all_dirs(dir):
- self._recursive_unset(sub_dir)
- self._gc.suggest_sync()
-
-
- def _replaceForbiddenCharacters(self, str):
- allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
- result = ''
- for c in str:
- if c in allowed:
- result = result + c
- else:
- result = result + '__'
- return result
-
-
- def _saveValuesToGConf(self, launch_setting):
- """Saves all values "recursively" from NetworkSetting"""
-
- network_name = launch_setting.getNetworkName()
- key = self._assembleRootKeyForSsid(network_name)
- browser = launch_setting.getNameOfBrowserToLaunch()
- launch = launch_setting.getLaunchingOfBrowserEnabled()
- options = launch_setting.getBrowserOptions()
-
- self._gc.set_string(key + "/name", network_name)
- self._gc.set_string(key + '/browser', browser)
- self._gc.set_bool(key + '/launch', launch)
- for option_key in options:
- self._gc.set_string(key + "/options/" + option_key, options[option_key])
-
\ No newline at end of file