Also handle "Type" from .desktop files.
[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.6"
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
64         self.apps=None
65         self.indiv=False
66         self.longpress=True
67
68         self.maxsz=(4,4)
69
70     def setSize(self, sz):
71         self.size=sz
72
73     def getSize(self):
74         return(self.size)
75
76     def getMaxSize(self):
77         return(self.maxsz)
78
79     def getIconSize(self):
80         return(self.iconsize)
81
82     def setIndiv(self, indiv):
83         self.indiv=indiv
84
85     def getIndiv(self):
86         return(self.indiv)
87
88     def setLongpress(self, lp):
89         self.longpress=lp
90
91     def getLongpress(self):
92         return(self.longpress)
93
94     def setApps(self, aps):
95         """ apps is a dictionary of (x,y)=>appname """
96         self.apps=aps
97
98     def getApps(self):
99         if self.apps==None:
100             tmp={
101                 (0,0):  'rtcom-call-ui',
102                 (0,1):  'rtcom-messaging-ui',
103                 (1,0):  'browser',
104                 (1,1):  'osso-addressbook',
105                 }
106             self.setApps(tmp)
107
108         return(self.apps)
109
110     def save(self):
111         self.check_init()
112
113         dt=self.load_all()
114
115         if dt==None:
116             dt={
117                 'version':  3,
118                 'data': {},
119                 }
120
121         dt['data'][self.id]={
122             'size':         self.getSize(),
123             'apps':         self.getApps(),
124             'indiv':        self.getIndiv(),
125             'longpress':    self.getLongpress(),
126             }
127
128         fn=get_config_fn()
129
130         st=pickle.dumps(dt)
131         f=file(fn, 'w')
132         f.write(st)
133         f.close()
134
135     def parse_v1(self, dt0):
136         """ Convert a v1 config to v2 """
137         ret={
138             'version':      2,
139             'data':         {},
140             }
141
142         ret['data'][self.id]={
143             'size':         dt0['size'],
144             'apps':         dt0['apps'],
145             }
146
147         return(ret)
148
149     def parse_v2(self, dt):
150         # Perhaps copy dt?
151
152         dt['version']=3
153
154         for i in dt['data']:
155             dt['data'][i]['indiv']=False
156             dt['data'][i]['size']=(dt['data'][i]['size'], dt['data'][i]['size'])
157             dt['data'][i]['longpress']=True
158
159         return(dt)
160
161     def load_all(self):
162         fn=get_config_fn()
163
164         try:
165             f=file(fn, 'r')
166             st=f.read()
167             f.close()
168             ret=pickle.loads(st)
169
170             if ret==None:
171                 ret=None
172             else:
173                 if ret['version']==1:
174                     ret=parse_v1(ret)
175
176                 if ret['version']==2:
177                     ret=parse_v2(ret)
178         except:
179             ret=None
180
181         return(ret)
182
183     def load(self):
184         self.check_init()
185
186         fn=get_config_fn()
187
188         dt0=self.load_all()
189
190         if dt0==None or not dt0['data'].has_key(self.id):
191             return
192
193         dt=dt0['data'][self.id]
194
195         self.setSize(dt['size'])
196         self.setApps(dt['apps'])
197         self.setIndiv(dt['indiv'])
198         self.setLongpress(dt['longpress'])
199
200     def check_init(self):
201         if self.id==None:
202             import sys
203
204             print "config.init() not done"
205             sys.exit(1)
206
207 # vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent:
208