91e0a2e0c70c67413dd1b851def801453984f893
[drlaunch] / 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 wifieye.
7 #
8 # wifieye 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 # wifieye 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 wifieye.  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 import pickle
27
28 version = "0.8"
29
30 try:
31     from glib import get_user_config_dir
32 except:
33     def get_user_config_dir():
34         home=os.environ['HOME']
35         if home=='':
36             home="/home/user"
37         cfg="%s/.config" % (home)
38
39         return(cfg)
40
41 def ensure_dir():
42     dir0=get_user_config_dir()
43     dir=dir0+'/drlaunch'
44     if not os.path.exists(dir):
45         os.mkdir(dir)
46     if not os.path.isdir(dir):
47         raise Exception('Failed to ensure directory' + dir)
48
49     return(dir)
50
51 def get_config_fn():
52     dir=ensure_dir()
53     ret=dir + '/config'
54
55     return(ret)
56
57 class Config:
58     def __init__(self, id):
59         self.id=id
60
61         self.size = (2,2)
62         self.iconsize = 64
63 #       self.iconspace = 42     # For 4 icons (height)
64         self.iconspace = 36     # For 8 icons (width)
65         self.apps=None
66         self.indiv=True
67         self.longpress=False
68         self.animate=True
69         self.nobg=False
70
71         self.maxsz=(8,4)
72
73     def setSize(self, sz):
74         self.size=sz
75
76     def getSize(self):
77         return(self.size)
78
79     def getMaxSize(self):
80         return(self.maxsz)
81
82     def getIconSize(self):
83         return(self.iconsize)
84
85     def setIndiv(self, indiv):
86         self.indiv=indiv
87
88     def getIndiv(self):
89         return(self.indiv)
90
91     def setLongpress(self, lp):
92         self.longpress=lp
93
94     def getLongpress(self):
95         return(self.longpress)
96
97     def setAnimate(self, ar):
98         self.animate=ar
99
100     def getAnimate(self):
101         return(self.animate)
102
103     def setNoBg(self, nobg):
104         self.nobg=nobg
105
106     def getNoBg(self):
107         return(self.nobg)
108
109     def setApps(self, aps):
110         """ apps is a dictionary of (x,y)=>appname """
111         self.apps=aps
112
113     def getApps(self):
114         if self.apps==None:
115             tmp={
116                 (0,0):  'rtcom-call-ui',
117                 (0,1):  'rtcom-messaging-ui',
118                 (1,0):  'browser',
119                 (1,1):  'osso-addressbook',
120                 }
121             self.setApps(tmp)
122
123         return(self.apps)
124
125     def save(self):
126         self.check_init()
127
128         dt=self.load_all()
129
130         if dt==None:
131             dt={
132                 'version':  5,
133                 'data': {},
134                 }
135
136         dt['data'][self.id]={
137             'size':         self.getSize(),
138             'apps':         self.getApps(),
139             'indiv':        self.getIndiv(),
140             'longpress':    self.getLongpress(),
141             'animate':      self.getAnimate(),
142             'nobg':         self.getNoBg(),
143             }
144
145         fn=get_config_fn()
146
147         st=pickle.dumps(dt)
148         f=file(fn, 'w')
149         f.write(st)
150         f.close()
151
152     def parse_v1(self, dt0):
153         """ Convert a v1 config to v2 """
154         ret={
155             'version':      2,
156             'data':         {},
157             }
158
159         ret['data'][self.id]={
160             'size':         dt0['size'],
161             'apps':         dt0['apps'],
162             }
163
164         return(ret)
165
166     def parse_v2(self, dt):
167         # Perhaps copy dt?
168
169         dt['version']=3
170
171         for i in dt['data']:
172             dt['data'][i]['indiv']=False
173             dt['data'][i]['size']=(dt['data'][i]['size'], dt['data'][i]['size'])
174             dt['data'][i]['longpress']=True
175
176         return(dt)
177
178     def parse_v3(self, dt):
179         dt['version']=4
180
181         for i in dt['data']:
182             dt['data'][i]['animate']=True
183
184         return(dt)
185
186     def parse_v4(self, dt):
187         dt['version']=5
188
189         for i in dt['data']:
190             dt['data'][i]['nobg']=False
191
192         return(dt)
193
194     def load_all(self):
195         fn=get_config_fn()
196
197         try:
198             f=file(fn, 'r')
199             st=f.read()
200             f.close()
201             ret=pickle.loads(st)
202
203             if ret==None:
204                 ret=None
205             else:
206                 if ret['version']==1:
207                     ret=parse_v1(ret)
208
209                 if ret['version']==2:
210                     ret=parse_v2(ret)
211
212                 if ret['version']==3:
213                     ret=parse_v3(ret)
214
215                 if ret['version']==4:
216                     ret=parse_v4(ret)
217         except:
218             ret=None
219
220         return(ret)
221
222     def load(self):
223         self.check_init()
224
225         fn=get_config_fn()
226
227         dt0=self.load_all()
228
229         if dt0==None or not dt0['data'].has_key(self.id):
230             return
231
232         dt=dt0['data'][self.id]
233
234         self.setSize(dt['size'])
235         self.setApps(dt['apps'])
236         self.setIndiv(dt['indiv'])
237         self.setLongpress(dt['longpress'])
238         self.setAnimate(dt['animate'])
239         self.setNoBg(dt['nobg'])
240
241     def check_init(self):
242         if self.id==None:
243             import sys
244
245             print "config.init() not done"
246             sys.exit(1)
247
248 # vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent:
249