Use a larger size hint for main widget.
[maegirls] / trunk / src / config.py
1 #!/usr/bin/env python
2 # coding=UTF-8
3
4 # Copyright (C) 2010 Stefanos Harhalakis
5 #
6 # This file is part of maegirls.
7 #
8 # maegirls is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # maegirls is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with maegirls.  If not, see <http://www.gnu.org/licenses/>.
20 #
21 # $Id: 0.py 2265 2010-02-21 19:16:26Z v13 $
22
23 __version__ = "$Id: 0.py 2265 2010-02-21 19:16:26Z v13 $"
24
25 import os
26
27 import pickle
28 import time
29 import algo
30
31 version="1.3"
32
33 try:
34     home=os.environ['HOME']
35 except:
36     home="/home/user"
37
38 fn="%s/.maegirls" % (home, )
39
40 # Default config
41 defaultcfg={
42     'ver':      2,              # Configuration version
43     'girls':    {               # List of configured girls
44         'default':  algo.defaults
45         },
46     'cur':      "default",      # Current girl
47     }
48
49 def upgradeConfig(cfg):
50     """ Upgrade the loaded config to the latest version """
51
52     if cfg['ver']==1:
53         cfg['ver']=2
54         for i in cfg['girls']:
55             girl=cfg['girls'][i]
56             girl['menstr']=algo.defaults['menstr']
57             girl['ovday']=algo.defaults['ovday']
58
59     return(cfg)
60
61 def loadConfig():
62     try:
63         f=file(fn, "r")
64         st=f.read()
65         f.close()
66         ret=pickle.loads(st)
67         ret=upgradeConfig(ret)
68     except:
69         ret={}
70
71 #    print "load:", ret
72
73     return(ret)
74
75 def sanitize_before_store(cfg0):
76     """ Ensure that Qt strings (keys) are converted to standard strings """
77     cfg={
78         'ver':      cfg0['ver'],
79         'cur':      str(cfg0['cur']),
80         'girls':    {}
81         }
82
83     if cfg0.has_key('girls'):
84         for i in cfg0['girls']:
85             cfg['girls'][str(i)]=cfg0['girls'][i]
86
87     return(cfg)
88
89 def storeConfig(cfg0):
90     cfg0['ver']=2
91     cfg=sanitize_before_store(cfg0)
92 #    print "store:", cfg
93     st=pickle.dumps(cfg)
94     f=file(fn, "w")
95     f.write(st)
96     f.close()
97
98 def storeGirl(name, dt):
99     # Load old
100     cfg=loadConfig()
101
102     # Ensure
103     if not cfg.has_key('girls'):
104         cfg['girls']={}
105
106     # Override
107     cfg['girls'][name]={
108         'cycle':    dt['cycle'],
109         'day0':     dt['day0'],
110         'ovday':    dt['ovday'],
111         'menstr':   dt['menstr'],
112         }
113
114     storeConfig(cfg)
115
116 def newGirl(name):
117     storeGirl(name, algo.defaults)
118
119 def loadGirls():
120     cfg=loadConfig()
121     try:
122         ret=cfg['girls']
123     except:
124         ret={}
125
126     return(ret)
127
128 def loadGirl(name):
129     all=loadGirls()
130     if all.has_key(name):
131         ret=all[name]
132     else:
133         ret=algo.defaults
134
135     return(ret)
136
137 def girlExists(name):
138     all=loadGirls()
139     if all.has_key(name):
140         ret=True
141     else:
142         ret=False
143     return(ret)
144
145 def setCurrentGirl(name):
146     cfg=loadConfig()
147     cfg['cur']=name
148     storeConfig(cfg)
149
150 def getCurrentGirl():
151     cfg=loadConfig()
152     try:
153         ret=cfg['cur']
154     except:
155         ret='default'
156
157     return(ret)
158
159 def removeGirl(name):
160     cfg=loadConfig()
161     if cfg['girls'].has_key(name):
162         cfg['girls'].pop(name)
163         storeConfig(cfg)
164
165 def init():
166     cur=getCurrentGirl()
167     if not girlExists(cur):
168         storeConfig(defaultcfg)
169
170 # vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent:
171