diff --git a/gui/dialogs.glade b/gui/dialogs.glade
index b3de14a..8a6d966 100644
--- a/gui/dialogs.glade
+++ b/gui/dialogs.glade
@@ -36,111 +36,6 @@
-
False
5
diff --git a/gui/manager.glade b/gui/manager.glade
index b755f45..1feccb2 100644
--- a/gui/manager.glade
+++ b/gui/manager.glade
@@ -611,6 +611,111 @@
+
+ 250
+ 60
+ False
+ Progress
+ False
+ True
+ center-on-parent
+ 250
+ 60
+ /usr/share/pamac/icons/22x22/status/setup.png
+ dialog
+ False
+ False
+
+
+ True
+ False
+ 5
+ 5
+ 5
+ 5
+ vertical
+ 3
+
+
+ True
+ False
+ 6
+
+
+ True
+ False
+ /usr/share/pamac/icons/24x24/status/setup.png
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ label
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 0.050000000000000003
+
+ True
+ end
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+ end
+
+
+ gtk-cancel
+ True
+ True
+ True
+ 1
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ False
+ True
+ 2
+
+
+
+
+
diff --git a/pamac/main.py b/pamac/main.py
index 44a6d4e..6dae44b 100644
--- a/pamac/main.py
+++ b/pamac/main.py
@@ -4,6 +4,7 @@
from gi.repository import Gtk
import pyalpm
+import dbus
from collections import OrderedDict
from time import strftime, localtime
@@ -15,11 +16,6 @@ interface.add_from_file('/usr/share/pamac/gui/dialogs.glade')
ErrorDialog = interface.get_object('ErrorDialog')
WarningDialog = interface.get_object('WarningDialog')
QuestionDialog = interface.get_object('QuestionDialog')
-ProgressWindow = interface.get_object('ProgressWindow')
-progress_bar = interface.get_object('progressbar2')
-progress_label = interface.get_object('progresslabel2')
-action_icon = interface.get_object('action_icon')
-ProgressCancelButton = interface.get_object('ProgressCancelButton')
interface.add_from_file('/usr/share/pamac/gui/manager.glade')
ManagerWindow = interface.get_object("ManagerWindow")
@@ -39,15 +35,56 @@ sum_bottom_label = interface.get_object('sum_bottom_label')
ChooseDialog = interface.get_object('ChooseDialog')
choose_list = interface.get_object('choose_list')
choose_label = interface.get_object('choose_label')
+ProgressWindow = interface.get_object('ProgressWindow')
+progress_bar = interface.get_object('progressbar2')
+progress_label = interface.get_object('progresslabel2')
+action_icon = interface.get_object('action_icon')
+ProgressCancelButton = interface.get_object('ProgressCancelButton')
interface.add_from_file('/usr/share/pamac/gui/updater.glade')
UpdaterWindow = interface.get_object("UpdaterWindow")
update_listore = interface.get_object('update_list')
update_label = interface.get_object('update_label')
+def action_signal_handler(action):
+ progress_label.set_text(action)
+ #if 'Downloading' in action:
+ # print('cancel enabled')
+ # ProgressCancelButton.set_visible(True)
+ #else:
+ ProgressCancelButton.set_visible(False)
+ #print('cancel disabled')
+
+def icon_signal_handler(icon):
+ action_icon.set_from_file(icon)
+
+def target_signal_handler(target):
+ progress_bar.set_text(target)
+
+def percent_signal_handler(percent):
+ if percent == '0':
+ progress_bar.pulse()
+ else:
+ progress_bar.set_fraction(float(percent))
+
+bus = dbus.SystemBus()
+bus.add_signal_receiver(action_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAction")
+bus.add_signal_receiver(icon_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitIcon")
+bus.add_signal_receiver(target_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTarget")
+bus.add_signal_receiver(percent_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitPercent")
+
installed_column.set_sort_column_id(1)
name_column.set_sort_column_id(0)
+pkg_name_list = []
+pkg_object_dict = {}
+pkg_installed_dict = {}
+list_dict = None
+current_group = None
+transaction_type = None
+transaction_dict = {}
+mode = None
+
def get_groups():
tmp_list = []
for repo in transaction.handle.get_syncdbs():
@@ -58,15 +95,6 @@ def get_groups():
for name in tmp_list:
groups_list.append([name])
-pkg_name_list = []
-pkg_object_dict = {}
-pkg_installed_dict = {}
-list_dict = None
-current_group = None
-transaction_type = None
-transaction_dict = {}
-mode = None
-
def set_list_dict_search(*patterns):
global pkg_name_list
global pkg_object_dict
@@ -255,7 +283,7 @@ def handle_error(error):
transaction.ErrorDialog.hide()
transaction.t_lock = False
transaction.Release()
- transaction.ProgressWindow.hide()
+ ProgressWindow.hide()
if mode == 'manager':
transaction.to_add = []
transaction.to_remove = []
@@ -278,7 +306,7 @@ def handle_reply(reply):
transaction.ErrorDialog.hide()
transaction.t_lock = False
transaction.Release()
- transaction.ProgressWindow.hide()
+ ProgressWindow.hide()
transaction.to_add = []
transaction.to_remove = []
transaction_dict.clear()
@@ -297,9 +325,9 @@ def do_refresh():
"""Sync databases like pacman -Sy"""
if transaction.t_lock is False:
transaction.t_lock = True
- transaction.progress_label.set_text('Refreshing...')
- transaction.action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/refresh-cache.png')
- transaction.ProgressWindow.show_all()
+ progress_label.set_text('Refreshing...')
+ action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/refresh-cache.png')
+ ProgressWindow.show_all()
while Gtk.events_pending():
Gtk.main_iteration()
transaction.Refresh(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
@@ -377,10 +405,10 @@ def do_sysupgrade():
ConfDialog.show_all()
def finalize():
- transaction.progress_label.set_text('Preparing...')
- transaction.action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/setup.png')
- transaction.progress_bar.set_text('')
- transaction.ProgressWindow.show_all()
+ progress_label.set_text('Preparing...')
+ action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/setup.png')
+ progress_bar.set_text('')
+ ProgressWindow.show_all()
while Gtk.events_pending():
Gtk.main_iteration()
transaction.Commit(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
@@ -522,8 +550,16 @@ def check_conflicts(pkg_list):
response = transaction.WarningDialog.run()
if response:
transaction.WarningDialog.hide()
+ pkg_list = {}
for pkgname in transaction.to_remove:
- pkg = transaction.localpkgs[pkgname]
+ pkg_list[pkgname] = transaction.localpkgs[pkgname]
+ for pkgname in transaction.to_add:
+ pkg = transaction.syncpkgs[pkgname]
+ for replace in pkg.replaces:
+ provide = pyalpm.find_satisfier(pkg_list.values(), replace)
+ if provide:
+ pkg_list.pop(provide.name)
+ for pkg in pkg_list.values():
required = pkg.compute_requiredby()
if required:
str_required = ''
@@ -633,7 +669,7 @@ class Handler:
def on_TransCancelButton_clicked(self, *arg):
global transaction_type
- transaction.ProgressWindow.hide()
+ ProgressWindow.hide()
ConfDialog.hide()
transaction.t_lock = False
transaction.Release()
@@ -758,10 +794,8 @@ class Handler:
do_refresh()
def on_ProgressCancelButton_clicked(self, *arg):
- transaction.t_lock = False
- transaction.Release()
- transaction.ProgressWindow.hide()
- have_updates()
+ print('cancelled')
+ #handle_reply('')
def main(_mode):
if common.pid_file_exists():
diff --git a/pamac/pamac-daemon.py b/pamac/pamac-daemon.py
deleted file mode 100644
index 86fc623..0000000
--- a/pamac/pamac-daemon.py
+++ /dev/null
@@ -1,340 +0,0 @@
-#! /usr/bin/python
-# -*-coding:utf-8-*-
-
-import dbus
-import dbus.service
-from dbus.mainloop.glib import DBusGMainLoop
-from gi.repository import GObject
-
-import pyalpm
-import traceback
-from pamac import config, common
-
-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')
- self.t = None
- self.error = ''
- self.warning = ''
- self.action = 'Preparing...'
- self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
- self.target = ''
- self.percent = 0
- self.total_size = 0
- self.already_transferred = 0
- config.handle.dlcb = self.cb_dl
- config.handle.totaldlcb = self.totaldlcb
- config.handle.eventcb = self.cb_event
- config.handle.questioncb = self.cb_conv
- config.handle.progresscb = self.cb_progress
- config.handle.logcb = self.cb_log
-
- @dbus.service.signal('org.manjaro.pamac')
- def EmitAction(self, action):
- pass
-
- @dbus.service.signal('org.manjaro.pamac')
- def EmitIcon(self, icon):
- pass
-
- @dbus.service.signal('org.manjaro.pamac')
- def EmitTarget(self, target):
- pass
-
- @dbus.service.signal('org.manjaro.pamac')
- def EmitPercent(self, percent):
- pass
-
- def cb_event(self, ID, event, tupel):
- if ID is 1:
- self.action = 'Checking dependencies...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- elif ID is 3:
- self.action = 'Checking file conflicts...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- elif ID is 5:
- self.action = 'Resolving dependencies...'
- self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
- elif ID is 7:
- self.action = 'Checking inter conflicts...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- elif ID is 9:
- self.action = 'Installing...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-add.png'
- elif ID is 10:
- formatted_event = 'Installed {} ({})'.format(tupel[0].name, tupel[0].version)
- common.write_log_file(formatted_event)
- print(formatted_event)
- elif ID is 11:
- self.action = 'Removing...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-delete.png'
- elif ID is 12:
- formatted_event = 'Removed {} ({})'.format(tupel[0].name, tupel[0].version)
- common.write_log_file(formatted_event)
- print(formatted_event)
- elif ID is 13:
- self.action = 'Upgrading...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-update.png'
- elif ID is 14:
- formatted_event = 'Upgraded {} ({} -> {})'.format(tupel[1].name, tupel[1].version, tupel[0].version)
- common.write_log_file(formatted_event)
- print(formatted_event)
- elif ID is 15:
- self.action = 'Checking integrity...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- self.already_transferred = 0
- elif ID is 17:
- self.action = 'Loading packages files...'
- self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- print('Loading packages files')
- elif ID is 26:
- self.action = 'Configuring...'
- self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
- print('Configuring a package')
- elif ID is 27:
- print('Downloading a file')
- else :
- self.action = ''
- self.EmitTarget('')
- self.EmitPercent(str(0))
- self.EmitAction(self.action)
- self.EmitIcon(self.icon)
- print(ID,event)
-
- def cb_conv(self, *args):
- print("conversation", args)
-
- def cb_log(self, level, line):
- #global t
- _logmask = pyalpm.LOG_ERROR | pyalpm.LOG_WARNING
- if not (level & _logmask):
- return
- if level & pyalpm.LOG_ERROR:
- self.error += "ERROR: "+line
- #t.release()
- elif level & pyalpm.LOG_WARNING:
- self.warning += "WARNING: "+line
- elif level & pyalpm.LOG_DEBUG:
- line = "DEBUG: " + line
- print(line)
- elif level & pyalpm.LOG_FUNCTION:
- line = "FUNC: " + line
- print(line)
-
- def totaldlcb(self, _total_size):
- self.total_size = _total_size
-
- def cb_dl(self, _target, _transferred, total):
- if self.total_size > 0:
- fraction = (_transferred+self.already_transferred)/self.total_size
- size = 0
- if (t.to_remove or t.to_add):
- for pkg in t.to_remove+t.to_add:
- if pkg.name+'-'+pkg.version in _target:
- size = pkg.size
- if _transferred == size:
- self.already_transferred += size
- self.action = 'Downloading '+common.format_size(self.total_size)
- self.target = _target
- if fraction > 1:
- self.percent = 0
- else:
- self.percent = fraction
- self.icon = '/usr/share/pamac/icons/24x24/status/package-download.png'
- else:
- self.action = 'Refreshing...'
- self.target = _target
- self.percent = 0
- self.icon = '/usr/share/pamac/icons/24x24/status/refresh-cache.png'
- self.EmitAction(self.action)
- self.EmitIcon(self.icon)
- self.EmitTarget(self.target)
- self.EmitPercent(str(self.percent))
-
- def cb_progress(self, _target, _percent, n, i):
- self.target = _target+' ('+str(i)+'/'+str(n)+')'
- self.percent = _percent/100
- self.EmitTarget(self.target)
- self.EmitPercent(str(self.percent))
-
- 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.signal('org.manjaro.pamac')
- def EmitAvailableUpdates(self, updates_nb):
- pass
-
- def CheckUpdates(self):
- updates = False
- for pkg in config.handle.get_localdb().pkgcache:
- candidate = pyalpm.sync_newversion(pkg, config.handle.get_syncdbs())
- if candidate:
- updates = True
- self.EmitAvailableUpdates(updates)
-
- @dbus.service.method('org.manjaro.pamac', '', 's')
- def Refresh(self):
- global t
- #~ global error
- #~ error = ''
- for db in config.handle.get_syncdbs():
- try:
- t = config.handle.init_transaction()
- db.update(force=False)
- t.release()
- except pyalpm.error as e:
- self.error += str(e)+'\n'
- t.release()
- #break
- self.CheckUpdates()
- return self.error
-
- @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:
- 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')
- def Sysupgrade(self):
- global t
- global error
- error = ''
- try:
- t.sysupgrade(downgrade=False)
- print('to_upgrade:',t.to_add)
- except pyalpm.error:
- error = traceback.format_exc()
- finally:
- return error
-
- @dbus.service.method('org.manjaro.pamac', 's', 's')
- def Remove(self, pkgname):
- 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')
- def Add(self, pkgname):
- 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')
- def Prepare(self):
- global t
- global error
- error = ''
- try:
- t.prepare()
- print('to_add:',t.to_add)
- print('to_remove:',t.to_remove)
- except pyalpm.error:
- error = traceback.format_exc()
- finally:
- return error
-
- @dbus.service.method('org.manjaro.pamac', '', 'as')
- def To_Remove(self):
- global t
- liste = []
- for pkg in t.to_remove:
- liste.append(pkg.name)
- return liste
-
- @dbus.service.method('org.manjaro.pamac', '', 'as')
- def To_Add(self):
- 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')#, async_callbacks=('success', 'nosuccess'))
- def Commit(self, sender=None, connexion=None):#success, nosuccess, sender=None, connexion=None):
- global t
- global error
- error = ''
- if self.policykit_test(sender,connexion,'org.manjaro.pamac.commit'):
- try:
- t.commit()
- #success('')
- except pyalpm.error:
- error = traceback.format_exc()
- #nosuccess(error)
- except dbus.exceptions.DBusException:
- pass
- finally:
- self.CheckUpdates()
- 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:
- t.release()
- except pyalpm.error:
- error = traceback.format_exc()
- finally:
- return error
- else :
- return 'You are not authorized'
-
- @dbus.service.method('org.manjaro.pamac')
- def StopDaemon(self):
- global t
- try:
- t.release()
- except:
- pass
- mainloop.quit()
-
-DBusGMainLoop(set_as_default=True)
-myservice = PamacDBusService()
-mainloop = GObject.MainLoop()
-mainloop.run()
diff --git a/pamac/transaction.py b/pamac/transaction.py
index b93b095..e597c1f 100644
--- a/pamac/transaction.py
+++ b/pamac/transaction.py
@@ -25,11 +25,6 @@ interface.add_from_file('/usr/share/pamac/gui/dialogs.glade')
ErrorDialog = interface.get_object('ErrorDialog')
WarningDialog = interface.get_object('WarningDialog')
QuestionDialog = interface.get_object('QuestionDialog')
-ProgressWindow = interface.get_object('ProgressWindow')
-progress_bar = interface.get_object('progressbar2')
-progress_label = interface.get_object('progresslabel2')
-action_icon = interface.get_object('action_icon')
-ProgressCancelButton = interface.get_object('ProgressCancelButton')
def get_handle():
global handle
@@ -65,32 +60,6 @@ Commit = proxy.get_dbus_method('Commit','org.manjaro.pamac')
Release = proxy.get_dbus_method('Release','org.manjaro.pamac')
StopDaemon = proxy.get_dbus_method('StopDaemon','org.manjaro.pamac')
-def action_signal_handler(action):
- progress_label.set_text(action)
- #~ if 'Downloading' in action:
- #~ print('cancel enabled')
- #~ ProgressCancelButton.set_visible(True)
- #~ else:
- ProgressCancelButton.set_visible(False)
- #~ print('cancel disabled')
-
-def icon_signal_handler(icon):
- action_icon.set_from_file(icon)
-
-def target_signal_handler(target):
- progress_bar.set_text(target)
-
-def percent_signal_handler(percent):
- #~ if percent == '0':
- #~ progress_bar.pulse()
- #~ else:
- progress_bar.set_fraction(float(percent))
-
-bus.add_signal_receiver(action_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAction")
-bus.add_signal_receiver(icon_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitIcon")
-bus.add_signal_receiver(target_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTarget")
-bus.add_signal_receiver(percent_signal_handler, dbus_interface = "org.manjaro.pamac", signal_name = "EmitPercent")
-
def init_transaction(**options):
"Transaction initialization"
global t_lock
@@ -123,11 +92,7 @@ def get_updates():
if name in localpkgs.keys():
candidate = pyalpm.sync_newversion(localpkgs[name], handle.get_syncdbs())
if candidate:
- for repo in handle.get_syncdbs():
- pkg = repo.get_pkg(candidate.name)
- if pkg:
- list_first.append(pkg)
- break
+ list_first.append(candidate)
if list_first:
do_syncfirst = True
return do_syncfirst, list_first
@@ -135,9 +100,5 @@ def get_updates():
for pkg in localpkgs.values():
candidate = pyalpm.sync_newversion(pkg, handle.get_syncdbs())
if candidate:
- for repo in handle.get_syncdbs():
- pkg = repo.get_pkg(candidate.name)
- if pkg:
- result.append(pkg)
- break
+ result.append(candidate)
return do_syncfirst, result