1# -*- coding: utf-8 -*- 2# 3# PhotoFilmStrip - Creates movies out of your pictures. 4# 5# Copyright (C) 2011 Jens Goepfert 6# 7 8import locale 9import logging 10import os 11import tempfile 12 13from configparser import ConfigParser 14from photofilmstrip.lib.common.Singleton import Singleton 15from photofilmstrip.lib.util import IsPathWritable 16 17from photofilmstrip import Constants 18 19 20class Settings(Singleton): 21 22 def __init__(self): 23 self.cp = None 24 25 if IsPathWritable(Constants.APP_DIR): 26 setPath = Constants.APP_DIR 27 else: 28 userpath = os.path.expanduser("~") 29 if userpath == "~": 30 userpath = tempfile.gettempdir() 31 setPath = userpath 32 33 self.filename = os.path.join(setPath, '.%s' % Constants.APP_NAME) 34 35 logging.debug("settings file: %s", self.filename) 36 37 self.Load() 38 39 def Load(self): 40 if self.cp is None: 41 self.cp = ConfigParser() 42 43 if os.path.isfile(self.filename): 44 self.cp.read(self.filename, "utf-8") 45 46 if not self.cp.has_section("General"): 47 self.cp.add_section("General") 48 49 if not self.cp.has_section("History"): 50 self.cp.add_section("History") 51 52 if not self.cp.has_section("Profiles"): 53 self.cp.add_section("Profiles") 54 55 def Save(self): 56 try: 57 fd = open(self.filename, 'w', encoding='utf-8') 58 self.cp.write(fd) 59 fd.close() 60 except IOError: 61 pass 62 63 def SetLanguage(self, lang): 64 self.Load() 65 self.cp.set("General", "Language", lang) 66 self.Save() 67 68 def GetLanguage(self): 69 self.Load() 70 if self.cp.has_option("General", "Language"): 71 return self.cp.get("General", "Language") 72 defLang = locale.getdefaultlocale()[0] 73 if defLang is None: 74 defLang = "" 75 return defLang 76 77 def SetFileHistory(self, fileList): 78 self.Load() 79 self.cp.remove_section("History") 80 self.cp.add_section("History") 81 for idx, filename in enumerate(fileList): 82 if idx < 10 and os.path.exists(filename): 83 self.cp.set("History", "%d" % idx, os.path.abspath(filename)) 84 self.Save() 85 86 def GetFileHistory(self): 87 self.Load() 88 fileList = [] 89 for idx in range(10): 90 if self.cp.has_option("History", str(idx)): 91 filename = self.cp.get("History", str(idx)) 92 if os.path.exists(filename) and filename not in fileList: 93 fileList.append(filename) 94 95 return fileList 96 97 def SetProjectPath(self, path): 98 self.Load() 99 self.cp.set("General", "ProjectPath", path) 100 self.Save() 101 102 def GetProjectPath(self): 103 self.Load() 104 if self.cp.has_option("General", "ProjectPath"): 105 return self.cp.get("General", "ProjectPath") 106 return u"" 107 108 def SetImagePath(self, path): 109 self.Load() 110 self.cp.set("General", "ImagePath", path) 111 self.Save() 112 113 def GetImagePath(self): 114 self.Load() 115 if self.cp.has_option("General", "ImagePath"): 116 return self.cp.get("General", "ImagePath") 117 return u"" 118 119 def SetAudioPath(self, path): 120 self.Load() 121 self.cp.set("General", "AudioPath", path) 122 self.Save() 123 124 def GetAudioPath(self): 125 self.Load() 126 if self.cp.has_option("General", "AudioPath"): 127 return self.cp.get("General", "AudioPath") 128 return u"" 129 130 def SetLastProfile(self, profile): 131 self.Load() 132 self.cp.set("General", "LastProfile", str(profile)) 133 self.Save() 134 135 def GetLastProfile(self): 136 self.Load() 137 if self.cp.has_option("General", "LastProfile"): 138 try: 139 return self.cp.get("General", "LastProfile") 140 except: 141 pass 142 return None 143 144 def SetUsedRenderer(self, renderer): 145 self.Load() 146 self.cp.set("General", "Renderer", str(renderer)) 147 self.Save() 148 149 def GetUsedRenderer(self): 150 self.Load() 151 if self.cp.has_option("General", "Renderer"): 152 try: 153 return self.cp.getint("General", "Renderer") 154 except: 155 pass 156 return None 157 158 def SetLastKnownVersion(self, version): 159 self.Load() 160 self.cp.set("General", "LastKnownVersion", version) 161 self.Save() 162 163 def GetLastKnownVersion(self): 164 self.Load() 165 if self.cp.has_option("General", "LastKnownVersion"): 166 return self.cp.get("General", "LastKnownVersion") 167 return "0.0.0" 168 169 def SetRenderProperties(self, renderer, props): 170 self.Load() 171 if self.cp.has_section(renderer): 172 self.cp.remove_section(renderer) 173 self.cp.add_section(renderer) 174 for prop, value in props.items(): 175 self.cp.set(renderer, prop, value) 176 self.Save() 177 178 def GetRenderProperties(self, renderer): 179 self.Load() 180 result = {} 181 if not self.cp.has_section(renderer): 182 return result 183 for prop, value in self.cp.items(renderer): 184 result[prop] = value 185 186 return result 187