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