diff --git a/backend/transaction.py b/backend/transaction.py
index 08aa98a..437821f 100755
--- a/backend/transaction.py
+++ b/backend/transaction.py
@@ -18,9 +18,6 @@ action_icon = interface.get_object('action_icon')
ErrorDialog = interface.get_object('ErrorDialog')
WarningDialog = interface.get_object('WarningDialog')
QuestionDialog = interface.get_object('QuestionDialog')
-ConfDialog = interface.get_object('ConfDialog')
-transaction_desc = interface.get_object('transaction_desc')
-down_label = interface.get_object('down_label')
t = None
t_lock = False
@@ -105,74 +102,7 @@ def do_refresh():
progress_label.set_text('')
progress_bar.set_text('')
-def do_sysupgrade():
- """Upgrade a system like pacman -Su"""
- global t
- global t_lock
- global to_remove
- global to_add
- global to_update
- if t_lock is False:
- if do_syncfirst is True:
- t = init_transaction(config.handle, recurse = True)
- for pkg in list_first:
- t.add_pkg(pkg)
- to_remove = t.to_remove
- to_add = t.to_add
- set_transaction_desc('update')
- response = ConfDialog.run()
- if response == Gtk.ResponseType.OK:
- t_finalize(t)
- if response == Gtk.ResponseType.CANCEL or Gtk.ResponseType.CLOSE or Gtk.ResponseType.DELETE_EVENT:
- ProgressWindow.hide()
- ConfDialog.hide()
- t.release()
- t_lock = False
- else:
- try:
- t = init_transaction(config.handle)
- t.sysupgrade(downgrade=False)
- except pyalpm.error:
- ErrorDialog.format_secondary_text(traceback.format_exc())
- response = ErrorDialog.run()
- if response:
- ErrorDialog.hide()
- t.release()
- t_lock = False
- check_conflicts()
- to_add = t.to_add
- to_remove = []
- for pkg in conflict_to_remove.values():
- to_remove.append(pkg)
- if len(to_add) + len(to_remove) == 0:
- t.release()
- print("Nothing to update")
- else:
- t.release()
- t = init_transaction(config.handle, noconflicts = True, nodeps = True)
- for pkg in to_add:
- t.add_pkg(pkg)
- for pkg in conflict_to_remove.values():
- t.remove_pkg(pkg)
- to_remove = t.to_remove
- to_add = t.to_add
- set_transaction_desc('update')
- if len(transaction_desc) != 0:
- response = ConfDialog.run()
- if response == Gtk.ResponseType.OK:
- t_finalize(t)
- if response == Gtk.ResponseType.CANCEL or Gtk.ResponseType.CLOSE or Gtk.ResponseType.DELETE_EVENT:
- ProgressWindow.hide()
- ConfDialog.hide()
- t.release()
- t_lock = False
- else:
- t_finalize(t)
- t.release()
- t_lock = False
-
def t_finalize(t):
- ConfDialog.hide()
ProgressWindow.show_all()
try:
t.prepare()
@@ -181,8 +111,6 @@ def t_finalize(t):
response = ErrorDialog.run()
if response:
ErrorDialog.hide()
- t.release()
- t_lock = False
try:
t.commit()
except pyalpm.error:
@@ -190,7 +118,9 @@ def t_finalize(t):
response = ErrorDialog.run()
if response:
ErrorDialog.hide()
+ t_lock = False
ProgressWindow.hide()
+ t.release()
def get_updates():
"""Return a list of package objects in local db which can be updated"""
@@ -229,46 +159,6 @@ def format_size(size):
size_string = '%.2f MiB' % (KiB_size / 1024)
return size_string
-def set_transaction_desc(mode):
- global transaction_desc
- global down_label
- global to_add
- global to_remove
- global to_update
- transaction_desc.clear()
- if to_remove:
- transaction_desc.append(['To remove:', to_remove[0].name])
- i = 1
- while i < len(to_remove):
- transaction_desc.append([' ', to_remove[i].name])
- i += 1
- down_label.set_markup('')
- if to_add:
- installed_name = []
- for pkg_object in config.handle.get_localdb().pkgcache:
- installed_name.append(pkg_object.name)
- to_add_name = []
- for pkg_object in to_add:
- to_add_name.append(pkg_object.name)
- to_update = sorted(set(installed_name).intersection(to_add_name))
- to_remove_from_add_name = sorted(set(to_update).intersection(to_add_name))
- for name in to_remove_from_add_name:
- to_add_name.remove(name)
- if to_add_name:
- transaction_desc.append(['To install:', to_add_name[0]])
- i = 1
- while i < len(to_add_name):
- transaction_desc.append([' ', to_add_name[i]])
- i += 1
- if mode == 'normal':
- if to_update:
- transaction_desc.append(['To update:', to_update[0]])
- i = 1
- while i < len(to_update):
- transaction_desc.append([' ', to_update[i]])
- i += 1
- down_label.set_markup('')
- # down_label.set_markup('Total Download size: '+format_size(totaldlcb))
# Callbacks
event_text = ' '
diff --git a/backend/update.py b/backend/update.py
index 5321bb8..506c7b5 100755
--- a/backend/update.py
+++ b/backend/update.py
@@ -6,22 +6,26 @@ from gi.repository import Gtk
import pyalpm
from os import geteuid
-from backend import transaction
+from backend import config, transaction
interface = Gtk.Builder()
interface.add_from_file('/usr/share/pamac/pamac_update.glade')
interface.add_from_file('/usr/share/pamac/dialogs.glade')
-update_listore = interface.get_object('update_list')
+ConfDialog = interface.get_object('ConfDialog')
+transaction_add = interface.get_object('transaction_add')
top_label = interface.get_object('top_label')
+bottom_label = interface.get_object('bottom_label')
+update_listore = interface.get_object('update_list')
+update_label = interface.get_object('update_label')
def have_updates():
available_updates = transaction.get_updates()
update_listore.clear()
- top_label.set_justify(Gtk.Justification.CENTER)
+ update_label.set_justify(Gtk.Justification.CENTER)
if not available_updates:
update_listore.append(["", ""])
- top_label.set_markup("No update available")
+ update_label.set_markup("No update available")
return False
else:
for pkg in available_updates:
@@ -29,9 +33,91 @@ def have_updates():
newversion = transaction.get_new_version_available(pkgname)
pkgname = pkg.name+" "+newversion
update_listore.append([pkgname, transaction.format_size(pkg.size)])
- top_label.set_markup("Available updates")
+ update_label.set_markup("Available updates")
return True
+def set_transaction_add():
+ transaction_add.clear()
+ if transaction.to_remove:
+ transaction_add.append(['To remove:', transaction.to_remove[0].name])
+ i = 1
+ while i < len(transaction.to_remove):
+ transaction_add.append([' ', transaction.to_remove[i].name])
+ i += 1
+ bottom_label.set_markup('')
+ if transaction.to_add:
+ installed_name = []
+ for pkg_object in config.handle.get_localdb().pkgcache:
+ installed_name.append(pkg_object.name)
+ to_add_name = []
+ for pkg_object in transaction.to_add:
+ to_add_name.append(pkg_object.name)
+ transaction.to_update = sorted(set(installed_name).intersection(to_add_name))
+ to_remove_from_add_name = sorted(set(transaction.to_update).intersection(to_add_name))
+ for name in to_remove_from_add_name:
+ to_add_name.remove(name)
+ if to_add_name:
+ transaction_add.append(['To install:', to_add_name[0]])
+ i = 1
+ while i < len(to_add_name):
+ transaction_add.append([' ', to_add_name[i]])
+ i += 1
+ if transaction.to_update:
+ transaction_add.append(['To update:', transaction.to_update[0]])
+ i = 1
+ while i < len(transaction.to_update):
+ transaction_add.append([' ', transaction.to_update[i]])
+ i += 1
+ bottom_label.set_markup('')
+ #bottom_label.set_markup('Total Download size: '+format_size(totaldlcb))
+ top_label.set_markup('Additionnal Transaction(s)')
+
+def do_sysupgrade():
+ """Upgrade a system like pacman -Su"""
+ if transaction.t_lock is False:
+ if transaction.do_syncfirst is True:
+ transaction.t = transaction.init_transaction(config.handle, recurse = True)
+ for pkg in list_first:
+ transaction.t.add_pkg(pkg)
+ transaction.to_remove = transaction.t.to_remove
+ transaction.to_add = transaction.t.to_add
+ set_transaction_add()
+ ConfDialog.show_all()
+ else:
+ try:
+ transaction.t = transaction.init_transaction(config.handle)
+ transaction.t.sysupgrade(downgrade=False)
+ except pyalpm.error:
+ ErrorDialog.format_secondary_text(traceback.format_exc())
+ response = ErrorDialog.run()
+ if response:
+ ErrorDialog.hide()
+ transaction.t.release()
+ transaction.t_lock = False
+ transaction.check_conflicts()
+ transaction.to_add = transaction.t.to_add
+ transaction.to_remove = []
+ for pkg in transaction.conflict_to_remove.values():
+ transaction.to_remove.append(pkg)
+ if len(transaction.to_add) + len(transaction.to_remove) == 0:
+ transaction.t.release()
+ transaction.t_lock = False
+ print("Nothing to update")
+ else:
+ transaction.t.release()
+ transaction.t = transaction.init_transaction(config.handle, noconflicts = True, nodeps = True)
+ for pkg in transaction.to_add:
+ transaction.t.add_pkg(pkg)
+ for pkg in transaction.conflict_to_remove.values():
+ transaction.t.remove_pkg(pkg)
+ transaction.to_remove = transaction.t.to_remove
+ transaction.to_add = transaction.t.to_add
+ set_transaction_add()
+ if len(transaction.to_update) + len(transaction.to_remove) != 0:
+ ConfDialog.show_all()
+ else:
+ transaction.t_finalize(t)
+
class Handler:
def on_UpdateWindow_delete_event(self, *arg):
Gtk.main_quit()
@@ -40,13 +126,22 @@ class Handler:
Gtk.main_quit()
def on_ApplyButton_clicked(self, *arg):
- transaction.do_sysupgrade()
+ do_sysupgrade()
have_updates()
def on_RefreshButton_clicked(self, *arg):
transaction.do_refresh()
have_updates()
+ def on_TransCancelButton_clicked(self, *arg):
+ ConfDialog.hide()
+ transaction.t_lock = False
+ transaction.t.release()
+
+ def on_TransValidButton_clicked(self, *arg):
+ ConfDialog.hide()
+ transaction.t_finalize(t)
+
def main():
have_updates()
interface.connect_signals(Handler())
diff --git a/gui/dialogs.glade b/gui/dialogs.glade
index 955e61f..4dda61e 100644
--- a/gui/dialogs.glade
+++ b/gui/dialogs.glade
@@ -1,113 +1,6 @@
-
False
5
@@ -279,12 +172,4 @@
-
-
-
-
-
-
-
-
diff --git a/gui/pamac.glade b/gui/pamac.glade
index 04f55ee..2ed31b4 100644
--- a/gui/pamac.glade
+++ b/gui/pamac.glade
@@ -1,11 +1,147 @@
-
-
-
-
-
+
+ False
+
+ center
+ 350
+ 250
+ /usr/share/icons/hicolor/22x22/status/package-info.png
+ True
+ False
+
+
+ True
+ False
+ vertical
+
+
+ True
+ False
+ label
+
+
+ False
+ True
+ 0
+
+
+
+
+ 200
+ 120
+ True
+ True
+ True
+ True
+ in
+
+
+ True
+ True
+ True
+ True
+ transaction_sum
+ False
+ False
+ False
+ 0
+
+
+
+
+
+ column
+
+
+ 0
+ 600
+
+
+ 0
+
+
+
+
+
+
+ column
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ True
+ False
+ label
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ 6
+ True
+ end
+
+
+ gtk-cancel
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ gtk-ok
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 3
+
+
+
+
800
@@ -366,6 +502,12 @@
+
+
+
+
+
+
@@ -397,4 +539,12 @@
+
+
+
+
+
+
+
+
diff --git a/gui/pamac_update.glade b/gui/pamac_update.glade
index 47bba44..a456eac 100644
--- a/gui/pamac_update.glade
+++ b/gui/pamac_update.glade
@@ -1,6 +1,148 @@
+
+ False
+
+ center
+ 350
+ 250
+ /usr/share/icons/hicolor/22x22/status/package-info.png
+ True
+ False
+
+
+ True
+ False
+ vertical
+
+
+ True
+ False
+ label
+
+
+ False
+ True
+ 0
+
+
+
+
+ 200
+ 120
+ True
+ True
+ True
+ True
+ in
+
+
+ True
+ True
+ True
+ True
+ transaction_add
+ False
+ False
+ False
+ 0
+
+
+
+
+
+ column
+
+
+ 0
+ 600
+
+
+ 0
+
+
+
+
+
+
+ column
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ True
+ False
+ label
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ 6
+ True
+ end
+
+
+ gtk-cancel
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ gtk-ok
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 3
+
+
+
+
+
False
Update Manager
@@ -77,7 +219,7 @@
-
+
True
False
label
@@ -150,6 +292,14 @@
+
+
+
+
+
+
+
+
diff --git a/pamac b/pamac
index 19f4c4e..b2f33b0 100755
--- a/pamac
+++ b/pamac
@@ -25,6 +25,11 @@ tree2 = interface.get_object('treeview2_selection')
tree1 = interface.get_object('treeview1_selection')
installed_column = interface.get_object('installed_column')
name_column = interface.get_object('name_column')
+ConfDialog = interface.get_object('ConfDialog')
+transaction_sum = interface.get_object('transaction_sum')
+top_label = interface.get_object('top_label')
+bottom_label = interface.get_object('bottom_label')
+
installed_column.set_sort_column_id(1)
name_column.set_sort_column_id(0)
@@ -186,6 +191,42 @@ def set_desc(pkg, style):
else:
package_desc.append(['Backup files:', '\n'.join(["%s %s" % (md5, file) for (file, md5) in pkg.backup])])
+def set_transaction_sum():
+ transaction_sum.clear()
+ if transaction.to_remove:
+ transaction_sum.append(['To remove:', transaction.to_remove[0].name])
+ i = 1
+ while i < len(transaction.to_remove):
+ transaction_sum.append([' ', transaction.to_remove[i].name])
+ i += 1
+ bottom_label.set_markup('')
+ if transaction.to_add:
+ installed_name = []
+ for pkg_object in config.handle.get_localdb().pkgcache:
+ installed_name.append(pkg_object.name)
+ to_add_name = []
+ for pkg_object in transaction.to_add:
+ to_add_name.append(pkg_object.name)
+ transaction.to_update = sorted(set(installed_name).intersection(to_add_name))
+ to_remove_from_add_name = sorted(set(transaction.to_update).intersection(to_add_name))
+ for name in to_remove_from_add_name:
+ to_add_name.remove(name)
+ if to_add_name:
+ transaction_sum.append(['To install:', to_add_name[0]])
+ i = 1
+ while i < len(to_add_name):
+ transaction_sum.append([' ', to_add_name[i]])
+ i += 1
+ if transaction.to_update:
+ transaction_sum.append(['To update:', transaction.to_update[0]])
+ i = 1
+ while i < len(transaction.to_update):
+ transaction_sum.append([' ', transaction.to_update[i]])
+ i += 1
+ bottom_label.set_markup('')
+ #bottom_label.set_markup('Total Download size: '+format_size(totaldlcb))
+ top_label.set_markup('Transaction Summary')
+
class Handler:
def on_MainWindow_delete_event(self, *arg):
Gtk.main_quit()
@@ -209,7 +250,7 @@ class Handler:
transaction.ErrorDialog.hide()
else:
if transaction.t_lock is True:
- pass
+ print('Transaction locked')
else:
if transaction_type is "remove":
transaction.t = transaction.init_transaction(config.handle, cascade = True)
@@ -226,27 +267,8 @@ class Handler:
transaction.t_lock = False
transaction.to_remove = transaction.t.to_remove
transaction.to_add = transaction.t.to_add
- transaction.set_transaction_desc('normal')
- response = transaction.ConfDialog.run()
- if response == Gtk.ResponseType.OK:
- transaction.ConfDialog.hide()
- transaction.ProgressWindow.show_all()
- try:
- transaction.t.commit()
- except pyalpm.error:
- transaction.ErrorDialog.format_secondary_text(traceback.format_exc())
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
- transaction_dict.clear()
- transaction_type = None
- set_packages_list()
- transaction.ProgressWindow.hide()
- if response == Gtk.ResponseType.CANCEL or Gtk.ResponseType.CLOSE or Gtk.ResponseType.DELETE_EVENT:
- transaction.ProgressWindow.hide()
- transaction.ConfDialog.hide()
- transaction.t.release()
- transaction.t_lock = False
+ set_transaction_sum()
+ ConfDialog.show_all()
if transaction_type is "install":
transaction.t = transaction.init_transaction(config.handle, noconflicts = True)
for pkg in transaction_dict.values():
@@ -267,27 +289,8 @@ class Handler:
for pkg in transaction.conflict_to_remove.values():
transaction.to_remove.append(pkg)
transaction.t.release()
- transaction.set_transaction_desc('normal')
- response = transaction.ConfDialog.run()
- if response == Gtk.ResponseType.OK:
- transaction.ConfDialog.hide()
- transaction.t = transaction.init_transaction(config.handle, noconflicts = True, nodeps = True)
- print(transaction.to_add, transaction.to_remove)
- for pkg in transaction.to_add:
- print(pkg)
- transaction.t.add_pkg(pkg)
- for pkg in transaction.to_remove:
- print(pkg)
- transaction.t.remove_pkg(pkg)
- transaction.t_finalize(transaction.t)
- transaction_dict.clear()
- transaction_type = None
- set_packages_list()
- if response == Gtk.ResponseType.CANCEL or Gtk.ResponseType.CLOSE or Gtk.ResponseType.DELETE_EVENT:
- transaction.ProgressWindow.hide()
- transaction.ConfDialog.hide()
- transaction.t.release()
- transaction.t_lock = False
+ set_transaction_sum()
+ ConfDialog.show_all()
def on_EraseButton_clicked(self, *arg):
global transaction_type
@@ -300,6 +303,42 @@ class Handler:
transaction.do_refresh()
refresh_packages_list()
+ def on_TransCancelButton_clicked(self, *arg):
+ ConfDialog.hide()
+ transaction.t_lock = False
+ try:
+ transaction.t.release()
+ except:
+ pass
+
+ def on_TransValidButton_clicked(self, *arg):
+ global transaction_type
+ ConfDialog.hide()
+ if transaction_type is "remove":
+ transaction.ProgressWindow.show_all()
+ try:
+ transaction.t.commit()
+ except pyalpm.error:
+ transaction.ErrorDialog.format_secondary_text(traceback.format_exc())
+ response = transaction.ErrorDialog.run()
+ if response:
+ transaction.ErrorDialog.hide()
+ transaction_dict.clear()
+ transaction_type = None
+ set_packages_list()
+ transaction.ProgressWindow.hide()
+ if transaction_type is "install":
+ transaction.t = transaction.init_transaction(config.handle, noconflicts = True, nodeps = True)
+ for pkg in transaction.to_add:
+ transaction.t.add_pkg(pkg)
+ for pkg in transaction.to_remove:
+ transaction.t.remove_pkg(pkg)
+ transaction.t_finalize(transaction.t)
+ transaction_dict.clear()
+ transaction_type = None
+ set_packages_list()
+ transaction.t_lock = False
+
def on_search_button_clicked(self, widget):
global list_dict
list_dict = "search"