BROKEN: Moved everything
[gc-dialer] / dialcentral / util / linux.py
1 #!/usr/bin/env python
2
3
4 import os
5 import logging
6
7 try:
8         from xdg import BaseDirectory as _BaseDirectory
9         BaseDirectory = _BaseDirectory
10 except ImportError:
11         BaseDirectory = None
12
13
14 _moduleLogger = logging.getLogger(__name__)
15
16
17 _libc = None
18
19
20 def set_process_name(name):
21         try: # change process name for killall
22                 global _libc
23                 if _libc is None:
24                         import ctypes
25                         _libc = ctypes.CDLL('libc.so.6')
26                 _libc.prctl(15, name, 0, 0, 0)
27         except Exception, e:
28                 _moduleLogger.warning('Unable to set processName: %s" % e')
29
30
31 def get_new_resource(resourceType, resource, name):
32         if BaseDirectory is not None:
33                 if resourceType == "data":
34                         base = BaseDirectory.xdg_data_home
35                         if base == "/usr/share/mime":
36                                 # Ugly hack because somehow Maemo 4.1 seems to be set to this
37                                 base = os.path.join(os.path.expanduser("~"), ".%s" % resource)
38                 elif resourceType == "config":
39                         base = BaseDirectory.xdg_config_home
40                 elif resourceType == "cache":
41                         base = BaseDirectory.xdg_cache_home
42                 else:
43                         raise RuntimeError("Unknown type: "+resourceType)
44         else:
45                 base = os.path.join(os.path.expanduser("~"), ".%s" % resource)
46
47         filePath = os.path.join(base, resource, name)
48         dirPath = os.path.dirname(filePath)
49         if not os.path.exists(dirPath):
50                 # Looking before I leap to not mask errors
51                 os.makedirs(dirPath)
52
53         return filePath
54
55
56 def get_existing_resource(resourceType, resource, name):
57         if BaseDirectory is not None:
58                 if resourceType == "data":
59                         base = BaseDirectory.xdg_data_home
60                 elif resourceType == "config":
61                         base = BaseDirectory.xdg_config_home
62                 elif resourceType == "cache":
63                         base = BaseDirectory.xdg_cache_home
64                 else:
65                         raise RuntimeError("Unknown type: "+resourceType)
66         else:
67                 base = None
68
69         if base is not None:
70                 finalPath = os.path.join(base, name)
71                 if os.path.exists(finalPath):
72                         return finalPath
73
74         altBase = os.path.join(os.path.expanduser("~"), ".%s" % resource)
75         finalPath = os.path.join(altBase, name)
76         if os.path.exists(finalPath):
77                 return finalPath
78         else:
79                 raise RuntimeError("Resource not found: %r" % ((resourceType, resource, name), ))