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