updated it.po
[mime-editor.git] / override.py
blob79586b800195328980a9c68693990b254d591e0c
1 import os
2 import rox
3 from xml.dom import Node, XMLNS_NAMESPACE
5 FREE_NS='http://www.freedesktop.org/standards/shared-mime-info'
7 home_mime = os.path.join(rox.basedir.xdg_data_home, 'mime')
8 user_override = os.path.join(home_mime, 'packages', 'Override.xml')
10 def get_override():
11 from xml.dom import minidom
12 if os.path.exists(user_override):
13 doc = minidom.parse(user_override)
14 else:
15 doc = minidom.Document()
16 node = doc.createElementNS(FREE_NS, 'mime-info')
17 doc.appendChild(node)
18 # Some versions of PyXML lose the namespace?
19 doc.documentElement.setAttributeNS(XMLNS_NAMESPACE, 'xmlns', FREE_NS)
20 return doc
22 def get_override_type(type_name):
23 doc = get_override()
24 root = doc.documentElement
25 for c in root.childNodes:
26 if c.nodeType != Node.ELEMENT_NODE: continue
27 if c.localName == 'mime-type' and c.namespaceURI == FREE_NS:
28 if c.getAttributeNS(None, 'type') == type_name:
29 return doc, c
30 node = doc.createElementNS(FREE_NS, 'mime-type')
31 node.setAttributeNS(None, 'type', type_name)
32 root.appendChild(node)
33 return doc, node
35 def write_override(doc):
36 home_packages = os.path.join(home_mime, 'packages')
37 if not os.path.isdir(home_packages):
38 os.makedirs(home_packages)
39 path = os.path.join(home_packages, 'Override.xml.new')
40 doc.writexml(file(path, 'w'))
41 os.rename(path, path[:-4])
42 r, w = os.pipe()
43 child = os.fork()
44 if os.path.exists('/uri/0install/zero-install.sourceforge.net'):
45 update_command = '/uri/0install/zero-install.sourceforge.net/bin/update-mime-database'
46 os.system('0refresh zero-install.sourceforge.net/bin/update-mime-database 2004-01-23')
47 else:
48 update_command = 'update-mime-database'
49 if child == 0:
50 # Child
51 try:
52 os.close(r)
53 os.dup2(w, 1)
54 os.dup2(w, 2)
55 os.execlp(update_command, update_command, home_mime)
56 finally:
57 os.write(w, _('Failed to run %s command. Make sure you have installed '
58 'the package (from freedesktop.org), or are using Zero Install.') % update_command)
59 os._exit(1)
60 os.close(w)
61 message = os.fdopen(r, 'r').read()
62 pid, status = os.waitpid(child, 0)
63 if status or message.count('\n') != 3:
64 rox.info(message)
66 import __main__
67 __main__.box.update()