def on_apply_button_clicked(self, widget, data=None): @log_func(log) def on_install_finished(transaction, status, kwargs): to_add, to_rm = kwargs['add_and_rm'] if to_rm: worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data=kwargs) worker.remove_packages(to_rm) else: self.on_package_work_finished(None, None, kwargs) to_rm = self.appview.to_rm to_add = self.appview.to_add log.debug("on_apply_button_clicked: to_rm: %s, to_add: %s" % (to_rm, to_add)) if to_add or to_rm: set_busy(self) if to_add: worker = AptWorker(self.get_toplevel(), finish_handler=on_install_finished, data={'add_and_rm': (to_add, to_rm), 'parent': self}) worker.install_packages(to_add) else: on_install_finished(None, None, {'add_and_rm': (to_add, to_rm), 'parent': self})
def on_apply_button_clicked(self, widget, data=None): @log_func(log) def on_install_finished(transaction, status, kwargs): to_add, to_rm = kwargs['add_and_rm'] if to_rm: worker = AptWorker( self.get_toplevel(), finish_handler=self.on_package_work_finished, data=kwargs) worker.remove_packages(to_rm) else: self.on_package_work_finished(None, None, kwargs) to_rm = self.appview.to_rm to_add = self.appview.to_add log.debug("on_apply_button_clicked: to_rm: %s, to_add: %s" % (to_rm, to_add)) if to_add or to_rm: set_busy(self) if to_add: worker = AptWorker(self.get_toplevel(), finish_handler=on_install_finished, data={ 'add_and_rm': (to_add, to_rm), 'parent': self }) worker.install_packages(to_add) else: on_install_finished(None, None, { 'add_and_rm': (to_add, to_rm), 'parent': self })
def clean_cruft(self, parent=None, cruft_list=[]): set_busy(parent) worker = AptWorker(parent, finish_handler=self.on_clean_finished, error_handler=self.on_error, data=parent) worker.remove_packages([cruft.get_package_name() for cruft in cruft_list])
def on_purge_ppa_button_clicked(self, widget): # name_list is to display the name of PPA # url_list is to identify the ppa set_busy(self) name_list = [] url_list = [] log.debug("self.sourceview.to_purge: %s" % self.sourceview.to_purge) for url in self.sourceview.to_purge: name_list.append(ppa.get_short_name(url)) url_list.append(url) log.debug("PPAs to purge: url_list: %s" % url_list) package_view = DowngradeView(self) package_view.update_downgrade_model(url_list) sw = Gtk.ScrolledWindow(shadow_type=Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) select_pkgs = package_view.get_downgrade_packages() sw.add(package_view) #TODO the logic is a little ugly, need to improve the BaseMessageDialog if not select_pkgs: message = _( "It's safe to purge the PPA, no packages need to be downgraded." ) sw.hide() else: message = _( "To safely purge the PPA, the following packages must be downgraded." ) sw.show_all() sw.set_size_request(500, 100) dialog = QuestionDialog(title=_("You're going to purge \"%s\":") % ', '.join(name_list), message=message) dialog.set_resizable(True) dialog.get_content_area().pack_start(sw, True, True, 0) dialog.show_all() response = dialog.run() dialog.destroy() # Workflow # 1. Downgrade all the PPA packages to offical packages #TODO Maybe not official? Because anther ppa which is enabled may have newer packages then offical # 2. If succeed, disable PPA, or keep it if response == Gtk.ResponseType.YES: log.debug("The select pkgs is: %s", str(select_pkgs)) worker = AptWorker(widget.get_toplevel(), finish_handler=self.on_package_work_finished, data={ 'parent': self, 'url_list': url_list }) worker.downgrade_packages(select_pkgs) else: unset_busy(self)
def on_install_finished(transaction, status, kwargs): to_add, to_rm = kwargs['add_and_rm'] if to_rm: worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data=kwargs) worker.remove_packages(to_rm) else: self.on_package_work_finished(None, None, kwargs)
def do_action_for_app(self, pkgname, action_id, *args): action_id = int(action_id) if action_id == self.INSTALL_ACTION: set_busy(self) worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data={'parent': self}) worker.install_packages([pkgname]) self.update_action_button(self.INSTALLING_ACTION) elif action_id == self.UNINSTALL_ACTION: set_busy(self) worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data={'parent': self}) worker.remove_packages([pkgname]) self.update_action_button(self.UNINSTALLING_ACTION) elif action_id == self.UPDATE_ACTION: set_busy(self) worker = AptWorker(self.get_toplevel(), finish_handler=self.on_update_work_finished, data={'parent': self}) worker.update_cache() self.update_action_button(self.UPDATING_ACTION)
def on_package_work_finished(self, transaction, status, add_and_rm): to_add, to_rm = add_and_rm AptWorker.update_apt_cache(init=True) self.emit('call', 'ubuntutweak.modules.updatemanager', 'update_list', {}) self.appview.to_add = [] self.appview.to_rm = [] self.appview.clear_model() self.appview.update_model()
def on_update_work_finished(self, transaction, status, kwargs): parent = kwargs["parent"] proxy.update_apt_cache(True) if proxy.is_package_upgradable(self.current_app) or ( not proxy.is_package_installed(self.current_app) and proxy.is_package_avaiable(self.current_app) ): worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data={"parent": self}) worker.install_packages([self.current_app]) else: unset_busy(parent) self.reset_install_button()
def on_package_work_finished(self, transaction, status, kwargs): to_add, to_rm = kwargs['add_and_rm'] parent = kwargs['parent'] AptWorker.update_apt_cache(init=True) self.emit('call', 'ubuntutweak.modules.updatemanager', 'update_list', {}) self.appview.to_add = [] self.appview.to_rm = [] self.on_category_changed(self.cateview.get_selection()) self.apply_button.set_sensitive(False) unset_busy(parent)
def on_update_work_finished(self, transaction, status, kwargs): parent = kwargs['parent'] proxy.update_apt_cache(True) if proxy.is_package_upgradable(self.current_app) or \ (not proxy.is_package_installed(self.current_app) and \ proxy.is_package_avaiable(self.current_app)): worker = AptWorker(self.get_toplevel(), finish_handler=self.on_package_work_finished, data={'parent': self}) worker.install_packages([self.current_app]) else: unset_busy(parent) self.reset_install_button()
def on_purge_ppa_button_clicked(self, widget): # name_list is to display the name of PPA # url_list is to identify the ppa set_busy(self) name_list = [] url_list = [] log.debug("self.sourceview.to_purge: %s" % self.sourceview.to_purge) for url in self.sourceview.to_purge: name_list.append(ppa.get_short_name(url)) url_list.append(url) log.debug("PPAs to purge: url_list: %s" % url_list) package_view = DowngradeView(self) package_view.update_downgrade_model(url_list) sw = Gtk.ScrolledWindow(shadow_type=Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) select_pkgs = package_view.get_downgrade_packages() sw.add(package_view) #TODO the logic is a little ugly, need to improve the BaseMessageDialog if not select_pkgs: message = _("It's safe to purge the PPA, no packages need to be downgraded.") sw.hide() else: message = _("To safely purge the PPA, the following packages must be downgraded.") sw.show_all() sw.set_size_request(500, 100) dialog = QuestionDialog(title=_("You're going to purge \"%s\":") % ', '.join(name_list), message=message) dialog.set_resizable(True) dialog.get_content_area().pack_start(sw, True, True, 0) dialog.show_all() response = dialog.run() dialog.destroy() # Workflow # 1. Downgrade all the PPA packages to offical packages #TODO Maybe not official? Because anther ppa which is enabled may have newer packages then offical # 2. If succeed, disable PPA, or keep it if response == Gtk.ResponseType.YES: log.debug("The select pkgs is: %s", str(select_pkgs)) worker = AptWorker(widget.get_toplevel(), finish_handler=self.on_package_work_finished, data={'parent': self, 'url_list': url_list}) worker.downgrade_packages(select_pkgs) else: unset_busy(self)
def on_update_button_clicked(self, widget): @log_func(log) def on_update_finished(transaction, status, parent): log.debug("on_update_finished") unset_busy(parent) set_busy(self) daemon = AptWorker(widget.get_toplevel(), finish_handler=on_update_finished, data=self) daemon.update_cache() self.emit('call', 'ubuntutweak.modules.appcenter', 'update_app_data', {}) self.emit('call', 'ubuntutweak.modules.updatemanager', 'update_list', {})
def on_apply_button_clicked(self, widget, data = None): def on_clean_finished(transaction, status, add_and_rm): to_add, to_rm = add_and_rm worker = AptWorker(self.get_toplevel(), self.on_package_work_finished, add_and_rm) worker.remove_packages(to_rm) to_rm = self.appview.to_rm to_add = self.appview.to_add log.debug("on_apply_button_clicked: to_rm: %s, to_add: %s" % (to_rm, to_add)) if to_add or to_rm: if to_add: #TODO if user cancel auth if to_rm: worker = AptWorker(self.get_toplevel(), on_clean_finished, (to_add, to_rm)) else: worker = AptWorker(self.get_toplevel(), self.on_package_work_finished, (to_add, to_rm)) worker.install_packages(to_add) elif to_rm: on_clean_finished(None, None, to_rm)
def get_cruft(self): cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.isAutoRemovable: count += 1 size += pkg.installedSize self.emit('find_object', PackageObject(pkg.summary, pkg.name, pkg.installedSize)) self.emit('scan_finished', True, count, size)
def get_cruft(self): cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.is_auto_removable and not pkg.name.startswith('linux'): count += 1 size += pkg.installed.size self.emit('find_object', PackageObject(pkg.installed.summary, pkg.name, pkg.installed.size), count) self.emit('scan_finished', True, count, size)
def get_cruft(self): cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.isAutoRemovable and not pkg.name.startswith('linux'): count += 1 size += pkg.installedSize self.emit('find_object', PackageObject(pkg.summary, pkg.name, pkg.installedSize), count) self.emit('scan_finished', True, count, size)
def get_cruft(self): cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.isInstalled and self.is_old_kernel_package(pkg.name): log.debug("Find old kernerl: %s" % pkg.name) count += 1 size += pkg.installedSize self.emit('find_object', PackageObject(pkg.name, pkg.name, pkg.installedSize)) self.emit('scan_finished', True, count, size)
def get_cruft(self): try: cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.isInstalled and self.is_old_kernel_package(pkg.name): log.debug("Find old kernerl: %s" % pkg.name) count += 1 size += pkg.installedSize self.emit('find_object', PackageObject(pkg.name, pkg.name, pkg.installedSize), count) self.emit('scan_finished', True, count, size) except Exception, e: error = get_traceback() log.error(error) self.emit('scan_error', error)
def get_cruft(self): try: cache = AptWorker.get_cache() count = 0 size = 0 if cache: for pkg in cache: if pkg.is_installed and self.is_old_kernel_package(pkg.name): log.debug("Find old kernerl: %s" % pkg.name) count += 1 size += pkg.installed.size self.emit('find_object', PackageObject(pkg.name, pkg.name, pkg.installed.size), count) self.emit('scan_finished', True, count, size) except Exception, e: error = get_traceback() log.error(error) self.emit('scan_error', error)
def on_clean_finished(self, transaction, status, parent): unset_busy(parent) AptWorker.update_apt_cache(True) self.emit('cleaned', True)
def on_clean_finished(self, transaction, status, parent): unset_busy(parent) AptWorker.update_apt_cache(True) self.emit('all_cleaned', True)
def on_clean_finished(transaction, status, add_and_rm): to_add, to_rm = add_and_rm worker = AptWorker(self.get_toplevel(), self.on_package_work_finished, add_and_rm) worker.remove_packages(to_rm)
def get_downgradeable_pkgs(self, ppa_dict): def is_system_origin(version, urls): origins = [ppa.get_ppa_origin_name(url) for url in urls] system_version = 0 match = False for origin in version.origins: if origin.origin: if origin.origin not in origins: log.debug("The origin %s is not in %s, so end the loop" % (origin.origin, str(origins))) match = True break if match: system_version = version.version log.debug("Found match url, the system_version is %s, now iter to system version" % system_version) return system_version def is_full_match_ppa_origin(pkg, version, urls): origins = [ppa.get_ppa_origin_name(url) for url in urls] ppa_version = 0 match = True if version == pkg.installed: for origin in version.origins: if origin.origin: if origin.origin not in origins: log.debug("The origin %s is not in %s, so end the loop" % (origin.origin, str(origins))) match = False break if match: ppa_version = version.version log.debug("Found match url, the ppa_version is %s, now iter to system version" % ppa_version) return ppa_version log.debug("Check downgrade information") downgrade_dict = {} for pkg, urls in ppa_dict.items(): log.debug("The package is: %s, PPA URL is: %s" % (pkg, str(urls))) if pkg not in AptWorker.get_cache(): log.debug(" package isn't available, continue next...\n") continue pkg = AptWorker.get_cache()[pkg] if not pkg.isInstalled: log.debug(" package isn't installed, continue next...\n") continue versions = pkg.versions ppa_version = 0 system_version = 0 FLAG = 'PPA' try: for version in versions: try: #FIXME option to remove the package log.debug("Version uri is %s" % version.uri) # Switch FLAG if FLAG == 'PPA': ppa_version = is_full_match_ppa_origin(pkg, version, urls) FLAG = 'SYSTEM' if ppa_version == 0: raise NoNeedDowngradeException else: system_version = is_system_origin(version, urls) if ppa_version and system_version: downgrade_dict[pkg.name] = (ppa_version, system_version) break except StopIteration: pass except NoNeedDowngradeException: log.debug("Catch NoNeedDowngradeException, so pass this package: %s" % pkg) continue log.debug("\n") return downgrade_dict
def on_update_button_clicked(self, widget): self.set_busy() daemon = AptWorker(widget.get_toplevel(), lambda t, s, d: self.unset_busy()) daemon.update_cache()
def __init__(self, name): self.name = name self.pkg = AptWorker.get_cache()[name] self.desktopentry = DesktopEntry(self.DESKTOP_DIR + name + '.desktop')
def on_update_button_clicked(self, widget): daemon = AptWorker(widget.get_toplevel()) daemon.update_cache() self.emit('call', 'ubuntutweak.modules.appcenter', 'update_app_data', {}) self.emit('call', 'ubuntutweak.modules.updatemanager', 'update_list', {})
def get_downgradeable_pkgs(self, ppa_dict): def is_system_origin(version, urls): origins = [ppa.get_ppa_origin_name(url) for url in urls] system_version = 0 match = False for origin in version.origins: if origin.origin: if origin.origin not in origins: log.debug( "The origin %s is not in %s, so end the loop" % (origin.origin, str(origins))) match = True break if match: system_version = version.version log.debug( "Found match url, the system_version is %s, now iter to system version" % system_version) return system_version def is_full_match_ppa_origin(pkg, version, urls): origins = [ppa.get_ppa_origin_name(url) for url in urls] ppa_version = 0 match = True if version == pkg.installed: for origin in version.origins: if origin.origin: if origin.origin not in origins: log.debug( "The origin %s is not in %s, so end the loop" % (origin.origin, str(origins))) match = False break if match: ppa_version = version.version log.debug( "Found match url, the ppa_version is %s, now iter to system version" % ppa_version) return ppa_version log.debug("Check downgrade information") downgrade_dict = {} for pkg, urls in ppa_dict.items(): log.debug("The package is: %s, PPA URL is: %s" % (pkg, str(urls))) if pkg not in AptWorker.get_cache(): log.debug(" package isn't available, continue next...\n") continue pkg = AptWorker.get_cache()[pkg] if not pkg.isInstalled: log.debug(" package isn't installed, continue next...\n") continue versions = pkg.versions ppa_version = 0 system_version = 0 FLAG = 'PPA' try: for version in versions: try: #FIXME option to remove the package log.debug("Version uri is %s" % version.uri) # Switch FLAG if FLAG == 'PPA': ppa_version = is_full_match_ppa_origin( pkg, version, urls) FLAG = 'SYSTEM' if ppa_version == 0: raise NoNeedDowngradeException else: system_version = is_system_origin(version, urls) if ppa_version and system_version: downgrade_dict[pkg.name] = (ppa_version, system_version) break except StopIteration: pass except NoNeedDowngradeException: log.debug( "Catch NoNeedDowngradeException, so pass this package: %s" % pkg) continue log.debug("\n") return downgrade_dict
def clean_cruft(self, parent, cruft_list): set_busy(parent) worker = AptWorker(parent, self.on_clean_finished, parent) worker.remove_packages([cruft.get_package_name() for cruft in cruft_list])
def old_refresh_source(parent): dialog = UpdateCacheDialog(parent) dialog.run() new_pkg = [] for pkg in PACKAGE_WORKER.get_new_package(): if pkg in APP_PARSER: new_pkg.append(pkg) new_updates = list(PACKAGE_WORKER.get_update_package()) if new_pkg or new_updates: updateview = UpdateView() updateview.connect('select', on_select_action) if new_pkg: updateview.update_model(new_pkg) if new_updates: updateview.update_updates(new_updates) dialog = QuestionDialog(_('You can install new applications by selecting them and choosing "Yes".\nOr you can install them at Application Center by choosing "No".'), title=_('New applications are available')) vbox = dialog.vbox sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_size_request(-1, 200) vbox.pack_start(sw, False, False, 0) sw.add(updateview) select_button = Gtk.CheckButton(_('Select All')) select_button.connect('clicked', on_select_button_clicked, updateview) vbox.pack_start(select_button, False, False, 0) vbox.show_all() res = dialog.run() dialog.destroy() to_rm = updateview.to_rm to_add = updateview.to_add if res == Gtk.ResponseType.YES and to_add: PACKAGE_WORKER.perform_action(parent, to_add, to_rm) AptWorker.update_apt_cache(True) done = PACKAGE_WORKER.get_install_status(to_add, to_rm) if done: InfoDialog(_('Update Successful!')).launch() else: ErrorDialog(_('Update Failed!')).launch() return True else: dialog = InfoDialog(_("Your system is clean and there are no updates yet."), title=_('Software information is now up-to-date')) dialog.launch() return False