diff --git a/pamac/main.py b/pamac/main.py index a0d0370..37465fe 100644 --- a/pamac/main.py +++ b/pamac/main.py @@ -27,27 +27,9 @@ WarningDialog = interface.get_object('WarningDialog') InfoDialog = interface.get_object('InfoDialog') #QuestionDialog = interface.get_object('QuestionDialog') +interface.add_from_file('/usr/share/pamac/gui/updater.glade') + interface.add_from_file('/usr/share/pamac/gui/manager.glade') -ManagerWindow = interface.get_object("ManagerWindow") -details_list = interface.get_object('details_list') -deps_list = interface.get_object('deps_list') -files_list = interface.get_object('files_list') -files_scrolledwindow = interface.get_object('files_scrolledwindow') -name_label = interface.get_object('name_label') -desc_label = interface.get_object('desc_label') -link_label = interface.get_object('link_label') -licenses_label = interface.get_object('licenses_label') -search_entry = interface.get_object('search_entry') -search_list = interface.get_object('search_list') -search_selection = interface.get_object('search_treeview_selection') -packages_list = interface.get_object('packages_list') -list_selection = interface.get_object('list_treeview_selection') -groups_list = interface.get_object('groups_list') -groups_selection = interface.get_object('groups_treeview_selection') -state_list = interface.get_object('state_list') -state_selection = interface.get_object('state_treeview_selection') -repos_list = interface.get_object('repos_list') -repos_selection = interface.get_object('repos_treeview_selection') ConfDialog = interface.get_object('ConfDialog') transaction_sum = interface.get_object('transaction_sum') sum_top_label = interface.get_object('sum_top_label') @@ -61,27 +43,6 @@ 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_top_label = interface.get_object('update_top_label') -update_bottom_label = interface.get_object('update_bottom_label') - -installed_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-installed.png') -uninstalled_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-available.png') -to_install_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-add.png') -to_remove_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-delete.png') -locked_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-blocked.png') -search_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-search.png') - -pkg_name_list = set() -current_filter = (None, None) -mode = None -liststore_clearing = False -states = [_('Installed'), _('Uninstalled'), _('Orphans'), _('To install'), _('To remove')] -for state in states: - state_list.append([state]) - def action_signal_handler(action): if action: progress_label.set_text(action) @@ -103,7 +64,10 @@ def percent_signal_handler(percent): progress_bar.set_fraction(percent) def get_groups(): + global groups_list_clearing + groups_list_clearing = True groups_list.clear() + groups_list_clearing = False tmp_list = [] for repo in transaction.handle.get_syncdbs(): for name, pkgs in repo.grpcache: @@ -114,7 +78,10 @@ def get_groups(): groups_list.append([name]) def get_repos(): + global repos_list_clearing + repos_list_clearing = True repos_list.clear() + repos_list_clearing = False for repo in transaction.handle.get_syncdbs(): repos_list.append([repo.name]) repos_list.append([_('local')]) @@ -200,13 +167,13 @@ def set_list_dict_repos(repo): def refresh_packages_list(): if current_filter[0]: - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() - global liststore_clearing - liststore_clearing = True + global packages_list_clearing + packages_list_clearing = True packages_list.clear() - liststore_clearing = False + packages_list_clearing = False if not pkg_name_list: packages_list.append([_('No package found'), False, False, False, search_icon, '', 0, '']) else: @@ -226,7 +193,7 @@ def refresh_packages_list(): #elif name in uninstalled: else: packages_list.append([name, False, True, False, uninstalled_icon, common.format_size(transaction.syncpkgs[name].isize), transaction.syncpkgs[name].isize, transaction.syncpkgs[name].version]) - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) def set_packages_list(): if current_filter[0] == 'search': @@ -409,9 +376,11 @@ def handle_error(error): transaction.to_add.clear() transaction.to_remove.clear() transaction.to_update.clear() + get_groups() + get_repos() set_packages_list() - if mode == 'updater': - have_updates() + #if mode == 'updater': + #have_updates() def handle_reply(reply): ProgressWindow.hide() @@ -432,10 +401,14 @@ def handle_reply(reply): transaction.to_add.clear() transaction.to_remove.clear() transaction.to_update.clear() + get_groups() + get_repos() set_packages_list() - if have_updates(): - if mode == 'manager': + do_syncfirst, updates = transaction.get_updates() + if updates: do_sysupgrade() + if mode == 'updater': + have_updates() def log_error(msg): ErrorDialog.format_secondary_text(msg) @@ -469,10 +442,8 @@ def have_updates(): update_listore.clear() update_top_label.set_justify(Gtk.Justification.CENTER) if not updates: - update_listore.append(['', '']) update_bottom_label.set_markup('') update_top_label.set_markup(_('Your system is up-to-date')) - return False else: dsize = 0 for pkg in updates: @@ -484,7 +455,6 @@ def have_updates(): update_top_label.set_markup(_('1 available update')) else: update_top_label.set_markup(_('{number} available updates').format(number = len(updates))) - return True def do_sysupgrade(): """Upgrade a system like pacman -Su""" @@ -540,7 +510,7 @@ def check_conflicts(): warning = '' error = '' print('checking...') - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) while Gtk.events_pending(): Gtk.main_iteration() to_check = [transaction.syncpkgs[name] for name in transaction.to_add | transaction.to_update] @@ -851,7 +821,7 @@ def check_conflicts(): for pkg in pkg_list: wont_be_removed.add(pkg.name) - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) print('check done') if warning: WarningDialog.format_secondary_text(warning) @@ -880,9 +850,9 @@ def choose_provides(name): choose_list.append([True, name]) else: choose_list.append([False, name]) - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR)) ChooseDialog.run() - ManagerWindow.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) + Window.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) return [provides[pkgname] for pkgname in transaction.to_provide] else: return [] @@ -968,7 +938,7 @@ class Handler: #~ files_scrolledwindow.set_visible(False) def on_list_treeview_selection_changed(self, treeview): - if not liststore_clearing: + if not packages_list_clearing: liststore, treeiter = list_selection.get_selected() if treeiter: if packages_list[treeiter][0] != _('No package found'): @@ -985,23 +955,24 @@ class Handler: files_scrolledwindow.set_visible(False) def on_search_treeview_selection_changed(self, widget): - global current_filter liste, line = search_selection.get_selected() if line: + global current_filter current_filter = ('search', search_list[line][0].split()) set_packages_list() def on_groups_treeview_selection_changed(self, widget): - global current_filter - liste, line = groups_selection.get_selected() - if line: - current_filter = ('group', groups_list[line][0]) - set_packages_list() + if not groups_list_clearing: + liste, line = groups_selection.get_selected() + if line: + global current_filter + current_filter = ('group', groups_list[line][0]) + set_packages_list() def on_state_treeview_selection_changed(self, widget): - global current_filter liste, line = state_selection.get_selected() if line: + global current_filter if state_list[line][0] == _('Installed'): current_filter = ('installed', None) if state_list[line][0] == _('Uninstalled'): @@ -1015,14 +986,15 @@ class Handler: set_packages_list() def on_repos_treeview_selection_changed(self, widget): - global current_filter - liste, line = repos_selection.get_selected() - if line: - if repos_list[line][0] == _('local'): - current_filter = ('local', None) - else: - current_filter = ('repo', repos_list[line][0]) - set_packages_list() + if not repos_list_clearing: + liste, line = repos_selection.get_selected() + if line: + global current_filter + if repos_list[line][0] == _('local'): + current_filter = ('local', None) + else: + current_filter = ('repo', repos_list[line][0]) + set_packages_list() def on_cellrenderertoggle1_toggled(self, widget, line): if packages_list[line][1] is True: @@ -1122,15 +1094,86 @@ def main(_mode): mode = _mode interface.connect_signals(Handler()) do_refresh() - transaction.get_handle() - get_groups() - get_repos() + global Window if mode == 'manager': - ManagerWindow.show_all() + ManagerWindow = interface.get_object("ManagerWindow") + global details_list + global deps_list + global files_list + global files_scrolledwindow + global name_label + global desc_label + global link_label + global licenses_label + global search_entry + global search_list + global search_selection + global packages_list + global list_selection + global groups_list + global groups_selection + global state_list + global state_selection + global repos_list + global repos_selection + details_list = interface.get_object('details_list') + deps_list = interface.get_object('deps_list') + files_list = interface.get_object('files_list') + files_scrolledwindow = interface.get_object('files_scrolledwindow') + name_label = interface.get_object('name_label') + desc_label = interface.get_object('desc_label') + link_label = interface.get_object('link_label') + licenses_label = interface.get_object('licenses_label') + search_entry = interface.get_object('search_entry') + search_list = interface.get_object('search_list') + search_selection = interface.get_object('search_treeview_selection') + packages_list = interface.get_object('packages_list') + list_selection = interface.get_object('list_treeview_selection') + groups_list = interface.get_object('groups_list') + groups_selection = interface.get_object('groups_treeview_selection') + state_list = interface.get_object('state_list') + state_selection = interface.get_object('state_treeview_selection') + repos_list = interface.get_object('repos_list') + repos_selection = interface.get_object('repos_treeview_selection') + global installed_icon + global uninstalled_icon + global to_install_icon + global to_remove_icon + global locked_icon + global search_icon + installed_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-installed.png') + uninstalled_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-available.png') + to_install_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-add.png') + to_remove_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-delete.png') + locked_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-blocked.png') + search_icon = Pixbuf.new_from_file('/usr/share/pamac/icons/22x22/status/package-search.png') + global pkg_name_list + pkg_name_list = set() + global current_filter + current_filter = (None, None) + global packages_list_clearing + global repos_list_clearing + global groups_list_clearing + packages_list_clearing = False + repos_list_clearing = False + groups_list_clearing = False + global states + states = [_('Installed'), _('Uninstalled'), _('Orphans'), _('To install'), _('To remove')] + for state in states: + state_list.append([state]) + Window = ManagerWindow if mode == 'updater': + UpdaterWindow = interface.get_object("UpdaterWindow") + global update_listore + global update_top_label + global update_bottom_label + update_listore = interface.get_object('update_list') + update_top_label = interface.get_object('update_top_label') + update_bottom_label = interface.get_object('update_bottom_label') update_top_label.set_markup(_('Your system is up-to-date')) update_bottom_label.set_markup('') - UpdaterWindow.show_all() + Window = UpdaterWindow + Window.show_all() while Gtk.events_pending(): Gtk.main_iteration() Gtk.main() diff --git a/pamac/transaction.py b/pamac/transaction.py index 0df0001..326e302 100644 --- a/pamac/transaction.py +++ b/pamac/transaction.py @@ -28,13 +28,14 @@ def update_db(): global localpkgs syncpkgs = OrderedDict() localpkgs = OrderedDict() - for repo in handle.get_syncdbs(): - for pkg in repo.pkgcache: - if not pkg.name in syncpkgs.keys(): - syncpkgs[pkg.name] = pkg - for pkg in handle.get_localdb().pkgcache: - if not pkg.name in localpkgs.keys(): - localpkgs[pkg.name] = pkg + if handle: + for repo in handle.get_syncdbs(): + for pkg in repo.pkgcache: + if not pkg.name in syncpkgs.keys(): + syncpkgs[pkg.name] = pkg + for pkg in handle.get_localdb().pkgcache: + if not pkg.name in localpkgs.keys(): + localpkgs[pkg.name] = pkg DBusGMainLoop(set_as_default = True) bus = dbus.SystemBus() @@ -66,18 +67,19 @@ def get_updates(): list_first = [] _ignorepkgs = [] update_db() - for group in handle.ignoregrps: - db = handle.get_localdb() - grp = db.read_grp(group) - if grp: - name, pkg_list = grp - for pkg in pkg_list: - if not pkg.name in _ignorepkgs: - _ignorepkgs.append(pkg.name) - for pkgname in handle.ignorepkgs: - if pkgname in localpkgs.keys(): - if not pkgname in _ignorepkgs: - _ignorepkgs.append(pkgname) + if handle: + for group in handle.ignoregrps: + db = handle.get_localdb() + grp = db.read_grp(group) + if grp: + name, pkg_list = grp + for pkg in pkg_list: + if not pkg.name in _ignorepkgs: + _ignorepkgs.append(pkg.name) + for pkgname in handle.ignorepkgs: + if pkgname in localpkgs.keys(): + if not pkgname in _ignorepkgs: + _ignorepkgs.append(pkgname) if config.syncfirst: for name in config.syncfirst: if name in localpkgs.keys():