diff --git a/data/applications/pamac-tray.desktop b/data/applications/pamac-tray.desktop
new file mode 100644
index 0000000..0ca6a75
--- /dev/null
+++ b/data/applications/pamac-tray.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Pamac Tray Icon
+Icon=update-notifier
+Exec=pamac-tray
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;System;
+NoDisplay=True
+StartupNotify=true
+
diff --git a/gui/manager.glade b/gui/manager.glade
index 9633d66..d9e7d02 100644
--- a/gui/manager.glade
+++ b/gui/manager.glade
@@ -125,7 +125,7 @@
False
vertical
-
-
+
True
False
label
@@ -252,7 +252,7 @@
-
+
800
500
False
@@ -260,7 +260,7 @@
800
500
/usr/share/pamac/icons/22x22/status/package-sources.png
-
+
True
@@ -533,13 +533,13 @@
True
end
-
+
gtk-refresh
True
True
True
True
-
+
False
@@ -548,13 +548,13 @@
-
+
gtk-apply
True
True
True
True
-
+
False
@@ -563,13 +563,13 @@
-
+
gtk-undo
True
True
True
True
-
+
False
@@ -578,13 +578,13 @@
-
+
gtk-quit
True
True
True
True
-
+
False
diff --git a/gui/updater.glade b/gui/updater.glade
index 401352b..1912381 100644
--- a/gui/updater.glade
+++ b/gui/updater.glade
@@ -1,157 +1,12 @@
-
- False
-
- True
- center-on-parent
- 350
- 250
- /usr/share/pamac/icons/22x22/status/package-info.png
- dialog
- True
- 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
center
/usr/share/pamac/icons/22x22/status/package-update.png
-
+
False
@@ -166,13 +21,13 @@
5
end
-
+
gtk-refresh
True
True
True
True
-
+
False
@@ -181,13 +36,13 @@
-
+
gtk-apply
True
True
True
True
-
+
False
@@ -196,13 +51,13 @@
-
+
gtk-quit
True
True
True
True
-
+
False
diff --git a/pamac-manager b/pamac-manager
index 53d79f0..9c3a8ea 100755
--- a/pamac-manager
+++ b/pamac-manager
@@ -1,3 +1,6 @@
-#! /bin/sh
+#! /usr/bin/python
+# -*-coding:utf-8 -*-
-/usr/bin/python /usr/lib/python3.3/site-packages/pamac/manager.py
+from pamac import main
+
+main.main('manager')
diff --git a/pamac-tray b/pamac-tray
index 5a05f36..d7a2330 100755
--- a/pamac-tray
+++ b/pamac-tray
@@ -1,3 +1,71 @@
-#! /bin/sh
+#! /usr/bin/python
+# -*-coding:utf-8-*-
-/usr/bin/python /usr/lib/python3.3/site-packages/pamac/tray.py
+from gi.repository import Gtk
+from subprocess import Popen
+from pamac import transaction
+
+class Tray:
+ def __init__(self, icon, info):
+ self.icon = icon
+ self.info = info
+ self.statusIcon = Gtk.StatusIcon()
+ self.statusIcon.set_from_file(icon)
+ self.statusIcon.set_visible(True)
+ self.statusIcon.set_tooltip_markup(info)
+
+ self.menu = Gtk.Menu()
+ self.menuItem = Gtk.ImageMenuItem('Check for updates')
+ self.menuItem.connect('activate', self.execute_update, self.statusIcon)
+ self.menu.append(self.menuItem)
+ self.menuItem = Gtk.ImageMenuItem('Run pamac')
+ self.menuItem.connect('activate', self.execute_manager, self.statusIcon)
+ self.menu.append(self.menuItem)
+ self.menuItem = Gtk.ImageMenuItem('Quit')
+ self.menuItem.connect('activate', self.quit_tray, self.statusIcon)
+ self.menu.append(self.menuItem)
+
+ self.statusIcon.connect('popup-menu', self.popup_menu_cb, self.menu)
+ self.statusIcon.set_visible(1)
+
+ def execute_update(self, widget, event, data = None):
+ Popen(['/usr/bin/pamac-updater'])
+
+ def execute_manager(self, widget, event, data = None):
+ Popen(['/usr/bin/pamac-manager'])
+
+ def quit_tray(self, widget, data = None):
+ Gtk.main_quit()
+
+ def popup_menu_cb(self, widget, button, time, data = None):
+ if button == 3:
+ if data:
+ data.show_all()
+ data.popup(None, None, Gtk.StatusIcon.position_menu, self.statusIcon, 3, time)
+
+def handle_error(error):
+ print('error',error)
+ icon = '/usr/share/pamac/icons/24x24/status/update-enhancement.png'
+ info = ' No update available'
+ tray = Tray(icon, info)
+ transaction.StopDaemon()
+
+def handle_reply(reply):
+ do_syncfirst, updates = transaction.get_updates()
+ if updates:
+ icon = '/usr/share/pamac/icons/24x24/status/update-normal.png'
+ info = str(len(updates))+' update(s) available'
+ else:
+ icon = '/usr/share/pamac/icons/24x24/status/update-enhancement.png'
+ info = ' No update available'
+ tray = Tray(icon, info)
+ transaction.StopDaemon()
+
+def do_refresh():
+ """Sync databases like pacman -Sy"""
+ transaction.get_handle()
+ transaction.Refresh(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
+
+if __name__ == "__main__":
+ do_refresh()
+ Gtk.main()
diff --git a/pamac-updater b/pamac-updater
index 7503aad..dc158b4 100755
--- a/pamac-updater
+++ b/pamac-updater
@@ -1,3 +1,6 @@
-#! /bin/sh
+#! /usr/bin/python
+# -*-coding:utf-8 -*-
-/usr/bin/python /usr/lib/python3.3/site-packages/pamac/updater.py
+from pamac import main
+
+main.main('updater')
diff --git a/pamac/common.py b/pamac/common.py
index e0d26de..0e2f2e5 100644
--- a/pamac/common.py
+++ b/pamac/common.py
@@ -18,3 +18,18 @@ def format_pkg_name(name):
name = name[0:index]
return name
+from os.path import isfile
+from os import getpid, remove
+
+pid_file = '/tmp/pamac.pid'
+
+def pid_file_exists():
+ return isfile(pid_file)
+
+def write_pid_file():
+ with open(pid_file, "w") as _file:
+ _file.write(str(getpid()))
+
+def rm_pid_file():
+ if isfile(pid_file):
+ remove(pid_file)
diff --git a/pamac/manager.py b/pamac/main.py
similarity index 79%
rename from pamac/manager.py
rename to pamac/main.py
index ca832fc..6cb20ad 100644
--- a/pamac/manager.py
+++ b/pamac/main.py
@@ -10,11 +10,19 @@ from time import strftime, localtime
from pamac import config, common, transaction
interface = Gtk.Builder()
+
+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')
-#interface.add_from_file('/usr/share/pamac/gui/dialogs.glade')
-
-MainWindow = interface.get_object("MainWindow")
-
+ManagerWindow = interface.get_object("ManagerWindow")
packages_list = interface.get_object('packages_list')
groups_list = interface.get_object('groups_list')
package_desc = interface.get_object('package_desc')
@@ -26,12 +34,17 @@ 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')
+sum_top_label = interface.get_object('sum_top_label')
+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')
+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')
+
installed_column.set_sort_column_id(1)
name_column.set_sort_column_id(0)
@@ -52,6 +65,7 @@ list_dict = None
current_group = None
transaction_type = None
transaction_dict = {}
+mode = None
def set_list_dict_search(*patterns):
global pkg_name_list
@@ -201,7 +215,7 @@ def set_transaction_sum():
while i < len(transaction.to_remove):
transaction_sum.append([' ', transaction.to_remove[i]])
i += 1
- bottom_label.set_markup('')
+ sum_bottom_label.set_markup('')
if transaction.to_add:
installed = []
for pkg_object in config.pacman_conf.initialize_alpm().get_localdb().pkgcache:
@@ -216,39 +230,45 @@ def set_transaction_sum():
while i < len(transaction.to_add):
transaction_sum.append([' ', transaction.to_add[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: '+common.format_size(totaldlcb))
- top_label.set_markup('Transaction Summary')
+ if mode == 'manager':
+ 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
+ sum_bottom_label.set_markup('')
+ #sum_bottom_label.set_markup('Total Download size: '+common.format_size(totaldlcb))
+ sum_top_label.set_markup('Transaction Summary')
def handle_error(error):
global transaction_type
global transaction_dict
- if not 'DBus.Error.NoReply' in str(error):
- transaction.ErrorDialog.format_secondary_text('Error:\n'+str(error))
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
+ if error:
+ if not 'DBus.Error.NoReply' in str(error):
+ print('error',error)
+ transaction.ErrorDialog.format_secondary_text('Error:\n'+str(error))
+ response = transaction.ErrorDialog.run()
+ if response:
+ transaction.ErrorDialog.hide()
transaction.t_lock = False
transaction.Release()
transaction.ProgressWindow.hide()
- transaction.to_add = []
- transaction.to_remove = []
- transaction_dict.clear()
- transaction_type = None
- transaction.get_handle()
- set_packages_list()
+ if mode == 'manager':
+ transaction.to_add = []
+ transaction.to_remove = []
+ transaction_dict.clear()
+ transaction_type = None
+ transaction.get_handle()
+ set_packages_list()
+ if mode == 'updater':
+ have_updates()
print('error',error)
def handle_reply(reply):
global transaction_type
global transaction_dict
- if str(reply):
+ if reply:
transaction.ErrorDialog.format_secondary_text('Error:\n'+str(reply))
response = transaction.ErrorDialog.run()
if response:
@@ -265,9 +285,9 @@ def handle_reply(reply):
set_packages_list()
else:
transaction_type = None
- do_syncfirst, updates = transaction.get_updates()
- if updates:
- do_sysupgrade(do_syncfirst, updates)
+ if have_updates():
+ if mode == 'manager':
+ do_sysupgrade()
def do_refresh():
"""Sync databases like pacman -Sy"""
@@ -280,7 +300,22 @@ def do_refresh():
Gtk.main_iteration()
transaction.Refresh(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
-def do_sysupgrade(do_syncfirst, updates_list):
+def have_updates():
+ do_syncfirst, updates = transaction.get_updates()
+ update_listore.clear()
+ update_label.set_justify(Gtk.Justification.CENTER)
+ if not updates:
+ update_listore.append(["", ""])
+ update_label.set_markup("No update available")
+ return False
+ else:
+ for pkg in updates:
+ pkgname = pkg.name+" "+pkg.version
+ update_listore.append([pkgname, common.format_size(pkg.size)])
+ update_label.set_markup("Available updates")
+ return True
+
+def do_sysupgrade():
global transaction_type
"""Upgrade a system like pacman -Su"""
if transaction.t_lock is False:
@@ -290,28 +325,10 @@ def do_sysupgrade(do_syncfirst, updates_list):
transaction.to_add = []
transaction.to_remove = []
check_conflicts(updates)
- if do_syncfirst is True:
- for pkg in updates:
- transaction.to_add.append(pkg.name)
- if transaction.init_transaction(recurse = True):
- for pkgname in transaction.to_add:
- transaction.Add(pkgname)
- for pkgname in transaction.to_remove:
- transaction.Remove(pkgname)
- error = transaction.Prepare()
- if error:
- handle_error(error)
- else:
- transaction.get_to_remove()
- transaction.get_to_add()
- set_transaction_sum()
- ConfDialog.show_all()
- else:
- if transaction.init_transaction(noconflicts = True):
- error = transaction.Sysupgrade()
- if error:
- handle_error(error)
- else:
+ if do_syncfirst:
+ for pkg in updates:
+ transaction.to_add.append(pkg.name)
+ if transaction.init_transaction(recurse = True):
for pkgname in transaction.to_add:
transaction.Add(pkgname)
for pkgname in transaction.to_remove:
@@ -323,12 +340,48 @@ def do_sysupgrade(do_syncfirst, updates_list):
transaction.get_to_remove()
transaction.get_to_add()
set_transaction_sum()
- ConfDialog.show_all()
+ if mode == 'updater':
+ if len(transaction.to_add) + len(transaction.to_remove) != 0:
+ ConfDialog.show_all()
+ else:
+ finalize()
+ if mode == 'manager':
+ ConfDialog.show_all()
+ else:
+ if transaction.init_transaction(noconflicts = True):
+ error = transaction.Sysupgrade()
+ if error:
+ handle_error(error)
+ else:
+ for pkgname in transaction.to_add:
+ transaction.Add(pkgname)
+ for pkgname in transaction.to_remove:
+ transaction.Remove(pkgname)
+ error = transaction.Prepare()
+ if error:
+ handle_error(error)
+ else:
+ transaction.get_to_remove()
+ transaction.get_to_add()
+ set_transaction_sum()
+ if mode == 'updater':
+ if len(transaction.to_add) + len(transaction.to_remove) != 0:
+ ConfDialog.show_all()
+ else:
+ finalize()
+ if mode == 'manager':
+ 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()
+ while Gtk.events_pending():
+ Gtk.main_iteration()
+ transaction.Commit(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
def check_conflicts(pkg_list):
- #~ global to_add
- #~ global to_remove
- #~ global to_provide
depends = [pkg_list]
warning = ''
#transaction.get_handle()
@@ -424,14 +477,15 @@ def check_conflicts(pkg_list):
provide = pyalpm.find_satisfier(transaction.localpkgs.values(), replace)
if provide:
if provide.name != pkg.name:
- if not provide.name in transaction.localpkgs.keys():
- if not provide.name in transaction.to_remove:
- transaction.to_remove.append(provide.name)
- if warning:
- warning = warning+'\n'
- warning = warning+provide.name+' will be replaced by '+pkg.name
- if not pkg.name in transaction.to_add:
- transaction.to_add.append(pkg.name)
+ if not pkg.name in transaction.localpkgs.keys():
+ if common.format_pkg_name(replace) in transaction.localpkgs.keys():
+ if not provide.name in transaction.to_remove:
+ transaction.to_remove.append(provide.name)
+ if warning:
+ warning = warning+'\n'
+ warning = warning+provide.name+' will be replaced by '+pkg.name
+ if not pkg.name in transaction.to_add:
+ transaction.to_add.append(pkg.name)
print(transaction.to_add,transaction.to_remove)
if warning:
transaction.WarningDialog.format_secondary_text(warning)
@@ -459,21 +513,18 @@ def choose_provides(name):
return [provides[pkgname] for pkgname in transaction.to_provide]
class Handler:
- def on_MainWindow_delete_event(self, *arg):
+ #Manager Handlers
+ def on_ManagerWindow_delete_event(self, *arg):
transaction.StopDaemon()
- if __name__ == "__main__":
- Gtk.main_quit()
- else:
- MainWindow.hide()
+ common.rm_pid_file()
+ Gtk.main_quit()
- def on_QuitButton_clicked(self, *arg):
+ def on_Manager_QuitButton_clicked(self, *arg):
transaction.StopDaemon()
- if __name__ == "__main__":
- Gtk.main_quit()
- else:
- MainWindow.hide()
+ common.rm_pid_file()
+ Gtk.main_quit()
- def on_ValidButton_clicked(self, *arg):
+ def on_Manager_ValidButton_clicked(self, *arg):
if not transaction_dict:
transaction.ErrorDialog.format_secondary_text("No package is selected")
response = transaction.ErrorDialog.run()
@@ -522,7 +573,7 @@ class Handler:
transaction.WarningDialog.hide()
transaction.t_lock = False
- def on_EraseButton_clicked(self, *arg):
+ def on_Manager_EraseButton_clicked(self, *arg):
global transaction_type
global transaction_dict
transaction_dict.clear()
@@ -530,7 +581,7 @@ class Handler:
transaction_type = None
refresh_packages_list()
- def on_RefreshButton_clicked(self, *arg):
+ def on_Manager_RefreshButton_clicked(self, *arg):
do_refresh()
set_packages_list()
@@ -545,13 +596,7 @@ class Handler:
def on_TransValidButton_clicked(self, *arg):
ConfDialog.hide()
- 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()
- while Gtk.events_pending():
- Gtk.main_iteration()
- transaction.Commit(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
+ finalize()
def on_search_button_clicked(self, widget):
global list_dict
@@ -649,13 +694,46 @@ class Handler:
transaction.to_provide.remove(choose_list[line][1])
line += 1
-def main():
- interface.connect_signals(Handler())
- do_refresh()
- MainWindow.show_all()
- while Gtk.events_pending():
- Gtk.main_iteration()
+#Updater Handlers
+ def on_UpdaterWindow_delete_event(self, *arg):
+ transaction.StopDaemon()
+ common.rm_pid_file()
+ Gtk.main_quit()
-if __name__ == "__main__":
- main()
- Gtk.main()
+ def on_Updater_QuitButton_clicked(self, *arg):
+ transaction.StopDaemon()
+ common.rm_pid_file()
+ Gtk.main_quit()
+
+ def on_Updater_ApplyButton_clicked(self, *arg):
+ do_sysupgrade()
+
+ def on_Updater_RefreshButton_clicked(self, *arg):
+ do_refresh()
+
+ def on_ProgressCancelButton_clicked(self, *arg):
+ transaction.t_lock = False
+ transaction.Release()
+ transaction.ProgressWindow.hide()
+ have_updates()
+
+def main(_mode):
+ if common.pid_file_exists():
+ transaction.ErrorDialog.format_secondary_text('Another instance of Pamac is running')
+ response = transaction.ErrorDialog.run()
+ if response:
+ transaction.ErrorDialog.hide()
+ else:
+ common.write_pid_file()
+ global mode
+ mode = _mode
+ interface.connect_signals(Handler())
+ do_refresh()
+ if mode == 'manager':
+ ManagerWindow.show_all()
+ if mode == 'updater':
+ update_label.set_markup("Available updates")
+ UpdaterWindow.show_all()
+ while Gtk.events_pending():
+ Gtk.main_iteration()
+ Gtk.main()
diff --git a/pamac/pamac-daemon.py b/pamac/pamac-daemon.py
index b54291f..0c903bd 100644
--- a/pamac/pamac-daemon.py
+++ b/pamac/pamac-daemon.py
@@ -74,9 +74,9 @@ class PamacDBusService(dbus.service.Object):
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
self.already_transferred = 0
elif ID is 17:
- self.action = 'Checking signatures...'
+ self.action = 'Loading packages files...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
- print('Checking signatures')
+ print('Loading packages files')
elif ID is 26:
self.action = 'Configuring...'
self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
diff --git a/pamac/transaction.py b/pamac/transaction.py
index 3e58ead..3ca70ae 100644
--- a/pamac/transaction.py
+++ b/pamac/transaction.py
@@ -10,18 +10,6 @@ from dbus.mainloop.glib import DBusGMainLoop
from pamac import config, common
-interface = Gtk.Builder()
-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')
-
t_lock = False
to_remove = []
to_add = []
@@ -31,6 +19,18 @@ handle = None
syncpkgs = OrderedDict()
localpkgs = OrderedDict()
+interface = Gtk.Builder()
+
+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
global syncpkgs
diff --git a/pamac/tray.py b/pamac/tray.py
deleted file mode 100644
index edef79b..0000000
--- a/pamac/tray.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#! /usr/bin/python
-# -*-coding:utf-8-*-
-
-from gi.repository import Gtk
-
-from pamac import transaction, updater, manager
-
-already_manager = False
-
-class Tray:
- def __init__(self, icon, info):
- self.icon = icon
- self.info = info
- self.statusIcon = Gtk.StatusIcon()
- self.statusIcon.set_from_file(icon)
- self.statusIcon.set_visible(True)
- self.statusIcon.set_tooltip_markup(info)
-
- self.menu = Gtk.Menu()
- self.menuItem = Gtk.ImageMenuItem('Check for updates')
- self.menuItem.connect('activate', self.execute_update, self.statusIcon)
- self.menu.append(self.menuItem)
- self.menuItem = Gtk.ImageMenuItem('Run pamac')
- self.menuItem.connect('activate', self.execute_manager, self.statusIcon)
- self.menu.append(self.menuItem)
- self.menuItem = Gtk.ImageMenuItem(Gtk.STOCK_QUIT)
- self.menuItem.connect('activate', self.quit_tray, self.statusIcon)
- self.menu.append(self.menuItem)
-
- self.statusIcon.connect('popup-menu', self.popup_menu_cb, self.menu)
- self.statusIcon.set_visible(1)
-
- def execute_update(self, widget, event, data = None):
- updater.main()
-
- def execute_manager(self, widget, event, data = None):
- global already_manager
- if already_manager:
- manager.MainWindow.show_all()
- print('show')
- else:
- manager.main()
- already_manager = True
-
- def quit_tray(self, widget, data = None):
- Gtk.main_quit()
-
- def popup_menu_cb(self, widget, button, time, data = None):
- if button == 3:
- if data:
- data.show_all()
- data.popup(None, None, Gtk.StatusIcon.position_menu, self.statusIcon, 3, time)
-
-if __name__ == "__main__":
- updates = transaction.get_updates()
- if updates:
- icon = '/usr/share/pamac/icons/24x24/status/update-normal.png'
- info = str(len(updates))+' update(s) available'
- else:
- icon = '/usr/share/pamac/icons/24x24/status/update-enhancement.png'
- info = ' No update available'
- tray = Tray(icon, info)
- Gtk.main()
diff --git a/pamac/updater.py b/pamac/updater.py
deleted file mode 100644
index ca69234..0000000
--- a/pamac/updater.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#! /usr/bin/python
-# -*-coding:utf-8 -*-
-
-from gi.repository import Gtk
-
-from pamac import config, common, transaction
-
-interface = Gtk.Builder()
-interface.add_from_file('/usr/share/pamac/gui/updater.glade')
-#interface.add_from_file('/usr/share/pamac/gui/dialogs.glade')
-
-UpdateWindow = interface.get_object("UpdateWindow")
-
-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 do_refresh():
- """Sync databases like pacman -Sy"""
- transaction.get_handle()
- 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()
- while Gtk.events_pending():
- Gtk.main_iteration()
- transaction.Refresh(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
-
-def have_updates():
- available_updates = transaction.get_updates()
- update_listore.clear()
- update_label.set_justify(Gtk.Justification.CENTER)
- if not available_updates:
- update_listore.append(["", ""])
- update_label.set_markup("No update available")
- return False
- else:
- for pkg in available_updates:
- pkgname = pkg.name
- newversion = transaction.get_new_version_available(pkgname)
- pkgname = pkg.name+" "+newversion
- update_listore.append([pkgname, common.format_size(pkg.size)])
- 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]])
- i = 1
- while i < len(transaction.to_remove):
- transaction_add.append([' ', transaction.to_remove[i]])
- i += 1
- bottom_label.set_markup('')
- if transaction.to_add:
- installed_name = []
- for pkg_object in transaction.handle.get_localdb().pkgcache:
- installed_name.append(pkg_object.name)
- transaction.to_update = sorted(set(installed_name).intersection(transaction.to_add))
- to_remove_from_add_name = sorted(set(transaction.to_update).intersection(transaction.to_add))
- for name in to_remove_from_add_name:
- transaction.to_add.remove(name)
- if transaction.to_add:
- transaction_add.append(['To install:', transaction.to_add[0]])
- i = 1
- while i < len(transaction.to_add):
- transaction_add.append([' ', transaction.to_add[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:
- if transaction.init_transaction(recurse = True):
- for pkg in transaction.list_first:
- transaction.Add(pkg.name)
- transaction.get_to_remove()
- transaction.get_to_add()
- set_transaction_add()
- if len(transaction.to_add) + len(transaction.to_remove) != 0:
- ConfDialog.show_all()
- else:
- finalize()
- else:
- if transaction.init_transaction():
- error = transaction.Sysupgrade()
- if error:
- transaction.ErrorDialog.format_secondary_text(error)
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
- transaction.Release()
- transaction.t_lock = False
- transaction.get_to_remove()
- transaction.get_to_add()
- transaction.check_conflicts()
- transaction.Release()
- if len(transaction.to_add) == 0:
- transaction.t_lock = False
- print("Nothing to update")
- else:
- if transaction.init_transaction(noconflicts = True):
- for pkgname in transaction.to_update:
- transaction.Add(pkgname)
- for pkgname in transaction.to_add:
- transaction.Add(pkgname)
- for pkgname in transaction.to_remove:
- transaction.Remove(pkgname)
- set_transaction_add()
- if len(transaction.to_add) + len(transaction.to_remove) != 0:
- ConfDialog.show_all()
- else:
- finalize()
-
-def finalize():
- error = transaction.Prepare()
- if error:
- transaction.ErrorDialog.format_secondary_text(error)
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
- transaction.Release()
- transaction.t_lock = False
- else:
- transaction.progress_label.set_text('Preparing...')
- transaction.action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/setup.png')
- transaction.ProgressWindow.show_all()
- while Gtk.events_pending():
- Gtk.main_iteration()
- transaction.Commit(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
-
-def handle_error(error):
- if not 'DBus.Error.NoReply' in str(error):
- transaction.ErrorDialog.format_secondary_text('Commit Error:\n'+str(error))
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
- transaction.t_lock = False
- transaction.Release()
- transaction.ProgressWindow.hide()
- have_updates()
-
-def handle_reply(reply):
- if str(reply):
- transaction.ErrorDialog.format_secondary_text('Commit Error:\n'+str(reply))
- response = transaction.ErrorDialog.run()
- if response:
- transaction.ErrorDialog.hide()
- if transaction.do_syncfirst is True:
- transaction.do_syncfirst = False
- transaction.list_first = []
- transaction.t_lock = False
- transaction.Release()
- transaction.ProgressWindow.hide()
- have_updates()
-
-class Handler:
- def on_UpdateWindow_delete_event(self, *arg):
- transaction.StopDaemon()
- if __name__ == "__main__":
- Gtk.main_quit()
- else:
- UpdateWindow.hide()
-
- def on_QuitButton_clicked(self, *arg):
- transaction.StopDaemon()
- if __name__ == "__main__":
- Gtk.main_quit()
- else:
- UpdateWindow.hide()
-
- def on_ApplyButton_clicked(self, *arg):
- do_sysupgrade()
-
- def on_RefreshButton_clicked(self, *arg):
- transaction.do_refresh()
- #have_updates()
-
- def on_TransCancelButton_clicked(self, *arg):
- ConfDialog.hide()
- transaction.t_lock = False
- transaction.Release()
-
- def on_TransValidButton_clicked(self, *arg):
- ConfDialog.hide()
- finalize()
-
- def on_ProgressCancelButton_clicked(self, *arg):
- transaction.t_lock = False
- transaction.Release()
- transaction.ProgressWindow.hide()
- have_updates()
-
-def main():
- do_refresh()
- #have_updates()
- update_label.set_markup("Available updates")
- interface.connect_signals(Handler())
- UpdateWindow.show_all()
- while Gtk.events_pending():
- Gtk.main_iteration()
-
-if __name__ == "__main__":
- main()
- Gtk.main()
diff --git a/test.py b/test.py
deleted file mode 100755
index 0e98fb1..0000000
--- a/test.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /usr/bin/python
-# -*-coding:utf-8 -*-
-
-import pyalpm
-from pamac import config, common
-from collections import OrderedDict
-#~ syncpkgs = OrderedDict()
-#~ localpkgs = OrderedDict()
-#~ virtualdeps = {}
-
-class MyOrderedDict(OrderedDict):
- def keys(self):
- return [i for i in self]
- def values(self):
- return [self[i] for i in self]
-
-d=MyOrderedDict()
-d['pear']=3
-d['apple']=2
-print(d.items())
-
-#~ for repo in config.handle.get_syncdbs():
- #~ for pkg in repo.pkgcache:
- #~ if not pkg.name in syncpkgs.keys():
- #~ syncpkgs[pkg.name] = pkg
-#~ for pkg in config.handle.get_localdb().pkgcache:
- #~ if not pkg.name in localpkgs.keys():
- #~ localpkgs[pkg.name] = pkg
-#~ for pkg in syncpkgs.values():
- #~ for name in pkg.depends:
- #~ if (not name in syncpkgs.keys()) and (not '>' in name) and (not '<' in name) and (not '=' in name):
- #~ if 'module' in name:
- #~ if not virtualdeps.__contains__(name):
- #~ virtualdeps[name] = []
- #~ virtualdeps.get(name).append(pkg.name)
-
-#~ to_add = ['libreoffice-writer', 'anjuta']
-#~ depends = [[syncpkgs['libreoffice-writer'],syncpkgs['anjuta']]]
-#~ to_provide = []
-#~ to_remove = []
-#~ warning = ''
-#~ i = 0
-#~ while depends[i]:
- #~ depends.append([])
- #~ for pkg in depends[i]:
- #~ for depend in pkg.depends:
- #~ provide = pyalpm.find_satisfier(localpkgs.values(), depend)
- #~ if provide:
- #~ print(i,'local',provide)
- #~ if provide.name != common.format_pkg_name(depend):
- #~ if ('-module' in depend) or ('linux' in depend):
- #~ to_provide.append(depend)
- #~ else:
- #~ provide = pyalpm.find_satisfier(syncpkgs.values(), depend)
- #~ if provide:
- #~ print(i,'sync',provide)
- #~ if provide.name != common.format_pkg_name(depend):
- #~ print(provide.name,common.format_pkg_name(depend))
- #~ to_provide.append(depend)
- #~ else:
- #~ depends[i+1].append(provide)
- #~ for replace in pkg.replaces:
- #~ provide = pyalpm.find_satisfier(localpkgs.values(), replace)
- #~ if provide:
- #~ if not provide.name in to_remove:
- #~ to_remove.append(provide.name)
- #~ if warning:
- #~ warning = warning+'\n'
- #~ warning = warning+provide.name+' will be replaced by '+pkg.name
- #~ for conflict in pkg.conflicts:
- #~ provide = pyalpm.find_satisfier(localpkgs.values(), conflict)
- #~ if provide:
- #~ if not provide.name in to_remove:
- #~ to_remove.append(provide.name)
- #~ if warning:
- #~ warning = warning+'\n'
- #~ warning = warning+pkg.name+' conflicts with '+provide.name
- #~ provide = pyalpm.find_satisfier(depends[0], conflict)
- #~ if provide:
- #~ if not common.format_pkg_name(conflict) in to_remove:
- #~ if pkg.name in to_add and common.format_pkg_name(conflict) in to_add:
- #~ to_add.remove(common.format_pkg_name(conflict))
- #~ to_add.remove(pkg.name)
- #~ if warning:
- #~ warning = warning+'\n'
- #~ warning = warning+pkg.name+' conflicts with '+common.format_pkg_name(conflict)+'\nNone of them will be installed'
- #~ i = i + 1
-#~ for pkg in localpkgs.values():
- #~ for conflict in pkg.conflicts:
- #~ provide = pyalpm.find_satisfier(depends[0], conflict)
- #~ if provide:
- #~ if not provide.name in to_remove:
- #~ to_remove.append(pkg.name)
- #~ if warning:
- #~ warning = warning+'\n'
- #~ warning = warning+provide.name+' conflicts with '+pkg.name
-#~ print('depends:',depends)
-#~ print('to provide:',to_provide)
-#~ print('to add:',to_add)
-#~ print('to remove:',to_remove)
-#~ print(warning)