1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import screenlets
19 from screenlets import utils
20 import os
21 import gettext
22
23 gettext.textdomain('screenlets')
24 gettext.bindtextdomain('screenlets', screenlets.INSTALL_PREFIX + '/share/locale')
25
26
27
29
30 return gettext.gettext(s)
31
32
33 if os.geteuid()==0:
34
35 USER = 0
36 DIR_USER = screenlets.DIR_USER_ROOT
37 DIR_AUTOSTART = '/etc/xdg/autostart'
38 else:
39
40 USER = 1
41 DIR_USER = screenlets.DIR_USER
42 DIR_AUTOSTART = utils.get_autostart_dir()
43
45 """A simple utility to install screenlets into the current user's directory
46 (so either into $HOME/.screenlets/ for normal users or, if run as root,
47 into screenlets.INSTALL_PREFIX/share/screenlets/)."""
48
51
52
54 """Return all info we can get from the package-name or return None
55 if something went wrong. If nothing failed, the returned value is
56 a 4-tuple of the form: (name, version, basename, extension)."""
57 base = os.path.basename(filename)
58 ext = str(filename)[len(str(filename)) -3:]
59
60 tar_opts = 'xfz'
61 if ext == 'bz2':
62 tar_opts = 'xfj'
63 if ext == 'skz':
64 screenlets.show_error(None,_('This type of karamba theme is not supported yet\n Only older versions can be used'))
65 return False
66
67
68 if not os.path.isdir('/tmp/screenlets/'):
69 os.system('mkdir ' + '/tmp/screenlets/')
70 try: os.system('rm -rf /tmp/screenlets/install-temp')
71 except: pass
72 tmpdir = '/tmp/screenlets' + '/install-temp/'
73 os.system('mkdir %s' % tmpdir)
74
75
76
77 os.system('tar %s %s -C %s' % (tar_opts, chr(34)+filename+chr(34), tmpdir))
78 for dd in os.listdir(tmpdir):
79 if str(dd).endswith('.theme'):
80 os.system('mv ' + tmpdir + ' ' + '/tmp/screenlets/' + dd[:-6])
81 os.system('mkdir %s' % tmpdir)
82 os.system('mv ' + '/tmp/screenlets/' + dd[:-6] + ' '+ tmpdir)
83 name = dd[:-6]
84 return (name, ext)
85
86 for d in tmpdir :
87 if os.path.exists(d) and os.path.isdir(d):
88 for f in os.listdir(tmpdir):
89
90 name = f
91 try:
92 print name
93 return (name, ext)
94 except:
95
96 return False
97
99 """Return a human-readable result message about the last operation."""
100 return self._message
101
103 """Checks if the given screenlet with the name defined by 'name'
104 (without trailing 'Screenlet') is already installed in the current
105 install target location."""
106 return os.path.isdir(DIR_USER + '/' + name)
107
109 """Install a screenlet from a given archive-file. Extracts the
110 contents of the archive to the user's screenlet dir."""
111 print 'Installing %s' % filename
112 result = False
113
114
115
116
117
118 info = self.get_info_from_package_name(filename)
119 if info == False:
120 self._message= _("Archive is damaged or unsupported, use only tar, bz2 or gz.")
121 return False
122 name = info[0]
123 ext = info[1]
124
125 tar_opts = 'xfz'
126 if ext == 'bz2':
127 tar_opts = 'xfj'
128
129
130
131
132
133 if self.is_installed(name):
134 if screenlets.show_question(None,(_("The %(slet)sScreenlet is already installed in '%(dir)s'.\nDo you wish to continue?") % {"slet":name, "dir":DIR_USER}),(_('Install %s') % (name))):
135 pass
136 else:
137 self._message= _('%sScreenlet is already installed') % (name)
138 return False
139
140 tmpdir = screenlets.DIR_TMP + '/install-temp'
141
142 if not os.path.isdir('%s/%s' % (tmpdir, name)):
143
144 self._message = _("Invalid archive. Archive must contain a directory with the screenlet's name.")
145 elif not os.path.isfile('%s/%s/%sScreenlet.py' % (tmpdir, name, name)):
146
147 themename = ''
148 for findtheme in os.listdir('%s/%s/' % (tmpdir, name)):
149 if str(findtheme).lower().endswith('.theme'):
150 print findtheme
151 if themename == '':
152 print tmpdir + '/'+ name + '/' + themename[:-6] + '.py'
153 if not os.path.isfile(tmpdir + '/'+ name + '/' + findtheme[:-6] + '.py'):
154 themename = findtheme[:-6]
155 else:
156 self._message = _("Compatibility for this karamba theme is not yet implemented")
157 return False
158 if themename != '':
159 name1 = name.replace(' ','')
160 name1 = name1.replace('-','')
161 name1 = name1.replace('.','')
162 name1 = name1.replace('_','')
163 print name1
164
165
166 if self.is_installed(name1):os.system('rm -rf %s/%s' % (DIR_USER, name1))
167
168 os.system('mv %s/%s %s/%s ' % (chr(34) + tmpdir, name + chr(34),DIR_USER,name1))
169 os.system('mkdir %s/%s/themes' % (DIR_USER,name1))
170 os.system('mkdir %s/%s/themes/default' % (DIR_USER,name1))
171 os.system('cp ' + screenlets.INSTALL_PREFIX + '/share/screenlets-manager/karamba.png ' + DIR_USER + '/' + name1 + '/themes/default/')
172 if os.path.isfile(DIR_USER + '/' + name1 + '/icon.png') == False or os.path.isfile(DIR_USER + '/' + name1 + '/icon.svg') == False:
173 os.system('cp ' + screenlets.INSTALL_PREFIX + '/share/screenlets-manager/karamba.png ' + DIR_USER + '/' + name1 + '/icon.png')
174 widgetengine = open(screenlets.INSTALL_PREFIX + '/share/screenlets-manager/KarambaScreenlet.py', 'r')
175 enginecopy = widgetengine.read()
176 widgetengine.close()
177 widgetengine = None
178 enginecopy = enginecopy.replace('KarambaScreenlet',name1 + 'Screenlet')
179
180 enginesave = open(DIR_USER + '/' + name1 + '/' + name1 + 'Screenlet.py','w')
181 enginesave.write(enginecopy)
182 enginesave.close()
183 self._message = _("Karamba theme was successfully installed")
184 result = True
185 else:self._message = _("Invalid archive. Archive does not contain a screenlet or a valid karamba theme.")
186
187
188
189
190
191
192
193
194
195
196 else:
197
198
199 if not os.path.isfile('%s/%s/Screenlet.package' % (tmpdir, name)):
200 if screenlets.show_question(None,(_("%s was not packaged with the screenlet packager. Do you wish to continue and try to install it?") % (name)),(_('Install %s') % (name))):
201 pass
202 else:
203 self._message = _("This package was not packaged with the screenlet packager.")
204 return False
205
206
207 utils.create_user_dir()
208 os.system('tar %s %s -C %s' % (tar_opts, chr(34)+filename+chr(34), DIR_USER))
209
210 os.system('rm %s/%s/Screenlet.package' % (DIR_USER, name))
211
212 self._message = _("The %sScreenlet has been succesfully installed.") % name
213 result = True
214
215 os.system('rm -rf %s/install-temp' % screenlets.DIR_TMP)
216
217 return result
218