def clean_selected_ppa(self): self.set_busy() # name_list is to display the name of PPA # url_list is to identify the ppa name_list = [] url_list = [] for id in self.get_list(): #TODO try: name_list.append(SOURCE_PARSER.get_name(int(id))) url_list.append(SOURCE_PARSER.get_url(int(id))) except: name_list.append(ppa.get_short_name(id)) url_list.append(id) package_view = DowngradeView() package_view.update_model(url_list) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_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(message, title=_("You're going to purge: %s") % ', '.join(name_list)) dialog.set_resizable(True) dialog.vbox.pack_start(sw, True, True, 0) dialog.show() 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.RESPONSE_YES: self.set_busy() log.debug("The select pkgs is: %s", str(select_pkgs)) dialog = CleanPpaDialog(self.get_toplevel(), select_pkgs, url_list) dialog.run() dialog.destroy() if dialog.error == False: self.show_success_dialog() else: self.show_failed_dialog() self.update_ppa_model() self.unset_busy() else: self.update_ppa_model() # TODO refresh source? self.__check_list = [] self.emit('cleaned') self.unset_busy()