Mercurial > fife-parpg
diff clients/editor/scripts/settings.py @ 271:987a4ea829c1
Save editor settings to proper directory (~/.fife on linux, %APPDATA%\fife on Win32)
author | cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Tue, 16 Jun 2009 02:33:35 +0000 |
parents | 51cc05d862f2 |
children | 815354ba295e |
line wrap: on
line diff
--- a/clients/editor/scripts/settings.py Mon Jun 15 23:34:33 2009 +0000 +++ b/clients/editor/scripts/settings.py Tue Jun 16 02:33:35 2009 +0000 @@ -19,11 +19,13 @@ raise RuntimeWarning("Settings instance has already been initialized! Use Editor.getSettings instead") Settings.instance = self + + self._appdata = GetUserDataDirectory("fife", "editor") - if os.path.exists('settings.xml') is False: - shutil.copyfile('settings-dist.xml', 'settings.xml') + if os.path.exists(self._appdata+'/settings.xml') is False: + shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml') - self.tree = ET.parse('settings.xml') + self.tree = ET.parse(self._appdata+'/settings.xml') self.root_element = self.tree.getroot() self.validateTree() @@ -164,7 +166,7 @@ def saveSettings(self): """ Save settings into settings.xml """ self._indent(self.root_element) - self.tree.write('settings.xml', 'UTF-8') + self.tree.write(self._appdata+'/settings.xml', 'UTF-8') def _indent(self, elem, level=0): """ @@ -216,3 +218,53 @@ kv_pair = i.split(" : ") dict[kv_pair[0]] = kv_pair[1] return dict + +def GetUserDataDirectory(vendor, appname): + """ Gets location to store the settings file, depending on OS. + See: + Brian Vanderburg II @ http://mail.python.org/pipermail/python-list/2008-May/660779.html + """ + dir = "" + + # WINDOWS + if os.name == "nt": + + # Try env APPDATA or USERPROFILE or HOMEDRIVE/HOMEPATH + if "APPDATA" in os.environ: + dir = os.environ["APPDATA"] + + if ((dir is None) or (not os.path.isdir(dir))) and ("USERPROFILE" in os.environ): + dir = os.environ["USERPROFILE"] + if os.path.isdir(os.path.join(dir, "Application Data")): + dir = os.path.join(dir, "Application Data") + + if ((dir is None) or (not os.path.isdir(dir))) and ("HOMEDRIVE" in os.environ) and ("HOMEPATH" in os.environ): + dir = os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] + if os.path.isdir(os.path.join(dir, "Application Data")): + dir = os.path.join(dir, "Application Data") + + if (dir is None) or (not os.path.isdir(dir)): + dir = os.path.expanduser("~") + + # On windows, add vendor and app name + dir = os.path.join(dir, vendor, appname) + + # Mac + elif os.name == "mac": # ?? may not be entirely correct + dir = os.path.expanduser("~") + dir = os.path.join(dir, "Library", "Application Support") + dir = os.path.join(dir, vendor, appname) + + # Unix/Linux/all others + if dir is None: + dir = os.path.expanduser("~") + dir = os.path.join(dir, "."+vendor, appname) + + # Create vendor/appname folder if it doesn't exist + if not os.path.isdir(dir): + os.makedirs(dir) + + print dir + + return dir +