mirror of
https://github.com/altlinux/gpupdate.git
synced 2025-03-21 10:50:35 +03:00
Merge pull request #64 from altlinux/get_localized_desktop
Get localized path to Desktop directory
This commit is contained in:
commit
d36b92e49f
@ -47,7 +47,12 @@ def write_shortcut(shortcut, username=None):
|
||||
|
||||
:username: None means working with machine variables and paths
|
||||
'''
|
||||
dest_abspath = expand_windows_var(shortcut.dest, username).replace('\\', '/') + '.desktop'
|
||||
dest_abspath = shortcut.dest
|
||||
if not dest_abspath.startswith('/') and not dest_abspath.startswith('%'):
|
||||
dest_abspath = '%HOME%/' + dest_abspath
|
||||
|
||||
logging.debug(slogm('Try to expand path for shortcut: {} for {}'.format(dest_abspath, username)))
|
||||
dest_abspath = expand_windows_var(dest_abspath, username).replace('\\', '/') + '.desktop'
|
||||
|
||||
# Check that we're working for user, not on global system level
|
||||
if username:
|
||||
@ -58,6 +63,17 @@ def write_shortcut(shortcut, username=None):
|
||||
if not homedir_exists(username):
|
||||
logging.warning(slogm('No home directory exists for user {}: will not create link {}'.format(username, dest_abspath)))
|
||||
return None
|
||||
else:
|
||||
logging.warning(slogm('User\'s shortcut not placed to home directory for {}: bad path {}'.format(username, dest_abspath)))
|
||||
return None
|
||||
|
||||
if '%' in dest_abspath:
|
||||
logging.debug(slogm('Fail for writing shortcut to file with \'%\': {}'.format(dest_abspath)))
|
||||
return None
|
||||
|
||||
if not dest_abspath.startswith('/'):
|
||||
logging.debug(slogm('Fail for writing shortcut to not absolute path \'%\': {}'.format(dest_abspath)))
|
||||
return None
|
||||
|
||||
logging.debug(slogm('Writing shortcut file to {}'.format(dest_abspath)))
|
||||
shortcut.write_desktop(dest_abspath)
|
||||
|
@ -84,6 +84,7 @@ def read_shortcuts(shortcuts_file):
|
||||
sc.set_clsid(link.get('clsid'))
|
||||
sc.set_guid(link.get('uid'))
|
||||
sc.set_usercontext(link.get('userContext', False))
|
||||
sc.set_icon(props.get('iconPath'))
|
||||
shortcuts.append(sc)
|
||||
|
||||
return shortcuts
|
||||
@ -100,6 +101,8 @@ def json2sc(json_str):
|
||||
sc.set_clsid(json_obj['clsid'])
|
||||
sc.set_guid(json_obj['guid'])
|
||||
sc.set_usercontext(json_obj['is_in_user_context'])
|
||||
if 'icon' in json_obj:
|
||||
sc.set_icon(json_obj['icon'])
|
||||
|
||||
return sc
|
||||
|
||||
@ -117,6 +120,7 @@ class shortcut:
|
||||
self.arguments = arguments
|
||||
self.name = name
|
||||
self.changed = ''
|
||||
self.icon = None
|
||||
self.is_in_user_context = self.set_usercontext()
|
||||
self.type = ttype
|
||||
|
||||
@ -136,6 +140,9 @@ class shortcut:
|
||||
def set_guid(self, uid):
|
||||
self.guid = uid
|
||||
|
||||
def set_icon(self, icon_name):
|
||||
self.icon = icon_name
|
||||
|
||||
def set_type(self, ttype):
|
||||
'''
|
||||
Set type of the hyperlink - FILESYSTEM or URL
|
||||
@ -172,7 +179,8 @@ class shortcut:
|
||||
content['changed'] = self.changed
|
||||
content['is_in_user_context'] = self.is_in_user_context
|
||||
content['type'] = ttype2str(self.type)
|
||||
|
||||
if self.icon:
|
||||
content['icon'] = self.icon
|
||||
result = self.desktop()
|
||||
result.content.update(content)
|
||||
|
||||
@ -199,6 +207,9 @@ class shortcut:
|
||||
self.desktop_file.set('Terminal', 'false')
|
||||
self.desktop_file.set('Exec', '{} {}'.format(self.path, self.arguments))
|
||||
|
||||
if self.icon:
|
||||
self.desktop_file.set('Icon', self.icon)
|
||||
|
||||
return self.desktop_file
|
||||
|
||||
def write_desktop(self, dest):
|
||||
|
@ -99,11 +99,14 @@ def with_privileges(username, func):
|
||||
|
||||
# We need to catch exception in order to be able to restore
|
||||
# privileges later in this function
|
||||
out = None
|
||||
try:
|
||||
func()
|
||||
out = func()
|
||||
except Exception as exc:
|
||||
logging.debug(slogm(exc))
|
||||
|
||||
# Restore privileges
|
||||
set_privileges('root', current_uid, 0, current_groups)
|
||||
|
||||
return out
|
||||
|
||||
|
@ -29,7 +29,9 @@ import samba.gpo
|
||||
import pysss_nss_idmap
|
||||
|
||||
from storage import cache_factory
|
||||
from .xdg import get_user_dir
|
||||
from .xdg import (
|
||||
xdg_get_desktop
|
||||
)
|
||||
from .util import get_homedir
|
||||
from .logging import slogm
|
||||
from .samba import smbopts
|
||||
@ -174,17 +176,15 @@ def expand_windows_var(text, username=None):
|
||||
Scan the line for percent-encoded variables and expand them.
|
||||
'''
|
||||
variables = dict()
|
||||
variables['HOME'] = '/'
|
||||
variables['HOME'] = '/etc/skel'
|
||||
variables['SystemRoot'] = '/'
|
||||
variables['StartMenuDir'] = '/usr/share/applications'
|
||||
variables['SystemDrive'] = '/'
|
||||
variables['DesktopDir'] = xdg_get_desktop(username, variables['HOME'])
|
||||
|
||||
if username:
|
||||
variables['HOME'] = get_homedir(username)
|
||||
|
||||
variables['DesktopDir'] = get_user_dir(
|
||||
'DESKTOP', os.path.join(variables['HOME'], 'Desktop'))
|
||||
|
||||
variables['StartMenuDir'] = os.path.join(
|
||||
variables['HOME'], '.local', 'share', 'applications')
|
||||
|
||||
|
@ -17,21 +17,20 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from configparser import RawConfigParser, DEFAULTSECT
|
||||
import os
|
||||
from xdg.BaseDirectory import xdg_config_home
|
||||
|
||||
from .util import get_homedir
|
||||
from .logging import slogm
|
||||
|
||||
def get_user_dir(dir_name, default=None):
|
||||
'''
|
||||
Get path to XDG's user directory
|
||||
'''
|
||||
config = RawConfigParser(allow_no_value=True)
|
||||
userdirs_path = os.path.join(xdg_config_home, 'user-dirs.dirs')
|
||||
try:
|
||||
with open(userdirs_path, 'r') as f:
|
||||
config.read_string('[DEFAULT]\n' + f.read())
|
||||
return config.get(DEFAULTSECT, 'XDG_DESKTOP_DIR')
|
||||
except Exception as exc:
|
||||
return default
|
||||
def xdg_get_desktop(username, homedir = None):
|
||||
if username:
|
||||
homedir = get_homedir(username)
|
||||
if not homedir:
|
||||
logging.warning(
|
||||
slogm('Error for get XDG_DESKTOP_DIR for unknown user with unknown homedir'))
|
||||
raise "Error for get XDG_DESKTOP_DIR for unknown user with unknown homedir"
|
||||
|
||||
stream = os.popen('export HOME={}; xdg-user-dir DESKTOP'.format(homedir))
|
||||
output = stream.read()[:-1]
|
||||
return output
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user