Added version information in about.
[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="0.1.0"
32
33 try:
34     home=os.environ['HOME']
35 except:
36     home="/home/user"
37
38 fn="%s/.maegirls" % (home, )
39
40 # Defaults for a girl
41 defaults={
42     'cycle':    28,
43     'day0':     algo.today(),
44     }
45
46 # Default config
47 defaultcfg={
48     'ver':      1,              # Configuration version
49     'girls':    {               # List of configured girls
50         'default':  defaults
51         },
52     'cur':      "default",      # Current girl
53     }
54
55 def loadConfig():
56     try:
57         f=file(fn, "r")
58         st=f.read()
59         f.close()
60         ret=pickle.loads(st)
61     except:
62         ret={}
63
64 #    print "load:", ret
65
66     return(ret)
67
68 def sanitize_before_store(cfg0):
69     cfg={
70         'ver':      cfg0['ver'],
71         'cur':      str(cfg0['cur']),
72         'girls':    {}
73         }
74
75     if cfg0.has_key('girls'):
76         for i in cfg0['girls']:
77             cfg['girls'][str(i)]=cfg0['girls'][i]
78
79     return(cfg)
80
81 def storeConfig(cfg0):
82     cfg0['ver']=1
83     cfg=sanitize_before_store(cfg0)
84 #    print "store:", cfg
85     st=pickle.dumps(cfg)
86     f=file(fn, "w")
87     f.write(st)
88     f.close()
89
90 def storeGirl(name, dt):
91     # Load old
92     cfg=loadConfig()
93
94     # Ensure
95     if not cfg.has_key('girls'):
96         cfg['girls']={}
97
98     # Override
99     cfg['girls'][name]={
100         'cycle':    dt['cycle'],
101         'day0':     dt['day0'],
102         }
103
104     storeConfig(cfg)
105
106 def newGirl(name):
107     global defaults
108
109     storeGirl(name, defaults)
110
111 def loadGirls():
112     cfg=loadConfig()
113     try:
114         ret=cfg['girls']
115     except:
116         ret={}
117
118     return(ret)
119
120 def loadGirl(name):
121     all=loadGirls()
122     if all.has_key(name):
123         ret=all[name]
124     else:
125         ret=defaults
126
127     return(ret)
128
129 def girlExists(name):
130     all=loadGirls()
131     if all.has_key(name):
132         ret=True
133     else:
134         ret=False
135     return(ret)
136
137 def setCurrentGirl(name):
138     cfg=loadConfig()
139     cfg['cur']=name
140     storeConfig(cfg)
141
142 def getCurrentGirl():
143     cfg=loadConfig()
144     try:
145         ret=cfg['cur']
146     except:
147         ret='default'
148
149     return(ret)
150
151 def removeGirl(name):
152     cfg=loadConfig()
153     if cfg['girls'].has_key(name):
154         cfg['girls'].pop(name)
155         storeConfig(cfg)
156
157 def init():
158     cur=getCurrentGirl()
159     if not girlExists(cur):
160         storeConfig(defaultcfg)
161
162 # vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent:
163