74
74
self.meta_data = trans.meta_data
75
75
self.progress = trans.progress
77
class AptdaemonBackend(gobject.GObject, TransactionsWatcher, InstallBackend):
77
class AptdaemonTransaction(BaseTransaction):
78
def __init__(self, trans):
83
return self._trans.tid
86
def status_details(self):
87
return self._trans.status_details
91
return self._trans.meta_data
94
def cancellable(self):
95
return self._trans.cancellable
99
return self._trans.progress
101
def get_role_description(self, role=None):
102
role = self._trans.role if role is None else role
103
return enums.get_role_localised_present_from_enum(role)
105
def get_status_description(self, status=None):
106
status = self._trans.status if status is None else status
107
return enums.get_status_string_from_enum(status)
109
def is_waiting(self):
110
return self._trans.status == enums.STATUS_WAITING_LOCK
112
def is_downloading(self):
113
return self._trans.status == enums.STATUS_DOWNLOADING
116
return self._trans.cancel()
118
def connect(self, signal, handler, *args):
119
""" append the real handler to the arguments """
120
args = args + (handler, )
121
return self._trans.connect(signal, self._handler, *args)
123
def _handler(self, trans, *args):
124
""" translate trans to BaseTransaction type.
125
call the real handler after that
127
real_handler = args[-1]
128
args = tuple(args[:-1])
129
if isinstance(trans, client.AptTransaction):
130
trans = AptdaemonTransaction(trans)
131
return real_handler(trans, *args)
133
class AptdaemonTransactionsWatcher(BaseTransactionsWatcher):
135
base class for objects that need to watch the aptdaemon
136
for transaction changes. it registers a handler for the daemon
137
going away and reconnects when it appears again
141
super(AptdaemonTransactionsWatcher, self).__init__()
142
# watch the daemon exit and (re)register the signal
143
bus = dbus.SystemBus()
144
self._owner_watcher = bus.watch_name_owner(
145
"org.debian.apt", self._register_active_transactions_watch)
147
def _register_active_transactions_watch(self, connection):
148
#print "_register_active_transactions_watch", connection
149
apt_daemon = client.get_aptdaemon()
150
apt_daemon.connect_to_signal("ActiveTransactionsChanged",
151
self._on_transactions_changed)
152
current, queued = apt_daemon.GetActiveTransactions()
153
self._on_transactions_changed(current, queued)
155
def _on_transactions_changed(self, current, queued):
156
self.emit("lowlevel-transactions-changed", current, queued)
158
def get_transaction(self, tid):
159
""" synchroneously return a transaction """
160
trans = client.get_transaction(tid)
161
return AptdaemonTransaction(trans)
163
class AptdaemonBackend(gobject.GObject, InstallBackend):
78
164
""" software center specific code that interacts with aptdaemon """
80
166
__gsignals__ = {'transaction-started':(gobject.SIGNAL_RUN_FIRST,
106
192
def __init__(self):
107
193
gobject.GObject.__init__(self)
108
TransactionsWatcher.__init__(self)
109
195
self.aptd_client = client.AptClient()
110
196
self.pending_transactions = {}
197
self._transactions_watcher = AptdaemonTransactionsWatcher()
198
self._transactions_watcher.connect("lowlevel-transactions-changed",
199
self._on_lowlevel_transactions_changed)
111
200
# dict of pkgname -> FakePurchaseTransaction
112
201
self.pending_purchases = {}
113
202
self._progress_signal = None