forked from OpenPrinting/system-config-printer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall-printerdriver.py
92 lines (80 loc) · 2.82 KB
/
install-printerdriver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/python
from gi.repository import GLib, PackageKitGlib
import sys
# progress callback
# http://www.packagekit.org/gtk-doc/PkProgress.html
def progress(progress, type, user_data):
if (type.value_name == "PK_PROGRESS_TYPE_PERCENTAGE" and
progress.props.package != None):
sys.stderr.write ("%d\n" % progress.props.percentage)
sys.stderr.flush ()
package = sys.argv[1]
repo = sys.argv[2]
try:
repo_gpg_id = sys.argv[3]
except:
repo_gpg_id = None
# get PackageKit client
pk = PackageKitGlib.Client()
# check if we already have the package installed or available
try:
res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package],
None, lambda p, t, d: True, None)
except GLib.GError:
# cannot resolve, so we need to install the key and repo
# install repository key
if repo_gpg_id:
try:
res = pk.install_signature(PackageKitGlib.SigTypeEnum.GPG, repo_gpg_id,
'', None, progress, None)
except GLib.GError:
sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
sys.exit(1)
# add repository; see
# http://www.packagekit.org/gtk-doc/PackageKit-pk-client-sync.html#pk-client-repo-enable
try:
res = pk.repo_enable(repo, True, None, progress, None)
except GLib.GError:
sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
sys.exit(1)
# download/update the indexes
try:
res = pk.refresh_cache(False, None, progress, None)
except GLib.GError:
sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
sys.exit(1)
# map package name to PackageKit ID; do not print progress here, it's fast
try:
res = pk.resolve(PackageKitGlib.FilterEnum.NONE, [package],
None, lambda p, t, d: True, None)
except GLib.GError:
sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
sys.exit(1)
package_ids = res.get_package_array()
if len(package_ids) <= 0:
sys.exit(1)
package_id = package_ids[0].get_id()
# install the first match, unless already installed
if package_ids[0].get_info() & PackageKitGlib.InfoEnum.INSTALLED == 0:
# install package
try:
res = pk.install_packages(True, [package_id], None, progress, None)
except GLib.GError:
sys.exit(1)
if res.get_exit_code() != PackageKitGlib.ExitEnum.SUCCESS:
sys.exit(1)
# If we reach this point, the requested package is on the system, either
# because we have installed it now or because it was already there
# Return the list of files contained in the package
try:
res = pk.get_files([package_id], None, progress, None)
except GLib.GError:
pass
files = res.get_files_array()
if files:
for f in files[0].get_property('files'):
print f