forked from cromer/pamac-classic
162 lines
4.9 KiB
Python
162 lines
4.9 KiB
Python
|
#! /usr/bin/python
|
||
|
# -*-coding:utf-8-*-
|
||
|
|
||
|
import dbus
|
||
|
import dbus.service
|
||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||
|
import os
|
||
|
from gi.repository import GObject, Gtk
|
||
|
|
||
|
import pyalpm
|
||
|
import traceback
|
||
|
from pamac import config, callbacks
|
||
|
|
||
|
LANG = os.environ['LANG']
|
||
|
|
||
|
t = None
|
||
|
error = ''
|
||
|
|
||
|
class PamacDBusService(dbus.service.Object):
|
||
|
def __init__(self):
|
||
|
bus=dbus.SystemBus()
|
||
|
bus_name = dbus.service.BusName('org.manjaro.pamac', bus)
|
||
|
dbus.service.Object.__init__(self, bus_name, '/org/manjaro/pamac')
|
||
|
|
||
|
def policykit_test(self,sender,connexion,action):
|
||
|
bus = dbus.SystemBus()
|
||
|
proxy_dbus = connexion.get_object('org.freedesktop.DBus','/org/freedesktop/DBus/Bus', False)
|
||
|
dbus_info = dbus.Interface(proxy_dbus,'org.freedesktop.DBus')
|
||
|
sender_pid = dbus_info.GetConnectionUnixProcessID(sender)
|
||
|
proxy_policykit = bus.get_object('org.freedesktop.PolicyKit1','/org/freedesktop/PolicyKit1/Authority',False)
|
||
|
policykit_authority = dbus.Interface(proxy_policykit,'org.freedesktop.PolicyKit1.Authority')
|
||
|
|
||
|
Subject = ('unix-process', {'pid': dbus.UInt32(sender_pid, variant_level=1),
|
||
|
'start-time': dbus.UInt64(0, variant_level=1)})
|
||
|
(is_authorized,is_challenge,details) = policykit_authority.CheckAuthorization(Subject, action, {'': ''}, dbus.UInt32(1), '')
|
||
|
return is_authorized
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', 'a{sb}', 's', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Init(self, options, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
if self.policykit_test(sender,connexion,'org.manjaro.pamac.init_release'):
|
||
|
error = ''
|
||
|
try:
|
||
|
config.handle.dlcb = callbacks.cb_dl
|
||
|
config.handle.totaldlcb = callbacks.totaldlcb
|
||
|
config.handle.eventcb = callbacks.cb_event
|
||
|
config.handle.questioncb = callbacks.cb_conv
|
||
|
config.handle.progresscb = callbacks.cb_progress
|
||
|
config.handle.logcb = callbacks.cb_log
|
||
|
t = config.handle.init_transaction(**options)
|
||
|
print('Init:',t.flags)
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
return error
|
||
|
else :
|
||
|
return 'You are not authorized'
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', 's', 's', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Remove(self, pkgname, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
error = ''
|
||
|
try:
|
||
|
pkg = config.handle.get_localdb().get_pkg(pkgname)
|
||
|
if pkg is not None:
|
||
|
t.remove_pkg(pkg)
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
return error
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', 's', 's', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Add(self, pkgname, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
error = ''
|
||
|
try:
|
||
|
for repo in config.handle.get_syncdbs():
|
||
|
pkg = repo.get_pkg(pkgname)
|
||
|
if pkg:
|
||
|
t.add_pkg(pkg)
|
||
|
break
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
return error
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', '', 's', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Prepare(self, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
error = ''
|
||
|
try:
|
||
|
t.prepare()
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
print('to_add:',t.to_add)
|
||
|
print('to_remove:',t.to_remove)
|
||
|
return error
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', '', 'as', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def To_Remove(self, sender=None, connexion=None):
|
||
|
global t
|
||
|
liste = []
|
||
|
for pkg in t.to_remove:
|
||
|
liste.append(pkg.name)
|
||
|
return liste
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', '', 'as', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def To_Add(self, sender=None, connexion=None):
|
||
|
global t
|
||
|
liste = []
|
||
|
for pkg in t.to_add:
|
||
|
liste.append(pkg.name)
|
||
|
return liste
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', '', 's',sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Commit(self, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
if self.policykit_test(sender,connexion,'org.manjaro.pamac.commit'):
|
||
|
try:
|
||
|
callbacks.ProgressWindow.show_all()
|
||
|
while Gtk.events_pending():
|
||
|
Gtk.main_iteration()
|
||
|
t.commit()
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
return error
|
||
|
else :
|
||
|
return 'You are not authorized'
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac', '', 's', sender_keyword='sender', connection_keyword='connexion')
|
||
|
def Release(self, sender=None, connexion=None):
|
||
|
global t
|
||
|
global error
|
||
|
if self.policykit_test(sender,connexion,'org.manjaro.pamac.init_release'):
|
||
|
error = ''
|
||
|
try:
|
||
|
callbacks.ProgressWindow.hide()
|
||
|
t.release()
|
||
|
except pyalpm.error:
|
||
|
error = traceback.format_exc()
|
||
|
finally:
|
||
|
return error
|
||
|
else :
|
||
|
return 'You are not authorized'
|
||
|
|
||
|
@dbus.service.method('org.manjaro.pamac',sender_keyword='sender', connection_keyword='connexion')
|
||
|
def StopDaemon(self,sender=None, connexion=None):
|
||
|
loop.quit()
|
||
|
|
||
|
|
||
|
DBusGMainLoop(set_as_default=True)
|
||
|
myservice = PamacDBusService()
|
||
|
loop = GObject.MainLoop()
|
||
|
loop.run()
|