def cleaners_list(): """Yield each cleaner-option pair""" register_cleaners() for key in sorted(backends): c_id = backends[key].get_id() for (o_id, o_name) in backends[key].get_options(): yield "%s.%s" % (c_id, o_id)
def args_to_operations(args, preset): """Read arguments and return list of operations""" register_cleaners() operations = {} if preset: # restore presets from the GUI for key in sorted(backends): c_id = backends[key].get_id() for (o_id, o_name) in backends[key].get_options(): if Options.options.get_tree(c_id, o_id): args.append('.'.join([c_id, o_id])) for arg in args: if 2 != len(arg.split('.')): logger.warning(_("not a valid cleaner: %s"), arg) continue (cleaner_id, option_id) = arg.split('.') # enable all options (for example, firefox.*) if '*' == option_id: if cleaner_id in operations: del operations[cleaner_id] operations[cleaner_id] = [] for (option_id2, o_name) in backends[cleaner_id].get_options(): operations[cleaner_id].append(option_id2) continue # add the specified option if cleaner_id not in operations: operations[cleaner_id] = [] if option_id not in operations[cleaner_id]: operations[cleaner_id].append(option_id) for (k, v) in operations.items(): operations[k] = sorted(v) return operations
def __init__(self, uac=True, shred_paths=None, exit=False): if uac and 'nt' == os.name and Windows.elevate_privileges(): # privileges escalated in other process sys.exit(0) Gtk.Application.__init__(self, application_id='org.gnome.Bleachbit', flags=Gio.ApplicationFlags.FLAGS_NONE) if not exit: from bleachbit import RecognizeCleanerML RecognizeCleanerML.RecognizeCleanerML() register_cleaners() GObject.threads_init() if shred_paths: self.shred_paths(shred_paths) return if 'nt' == os.name: # BitDefender false positive. BitDefender didn't mark BleachBit as infected or show # anything in its log, but sqlite would fail to import unless BitDefender was in "game mode." # https://www.bleachbit.org/forum/074-fails-errors try: import sqlite3 except ImportError: logger.exception(_("Error loading the SQLite module: the antivirus software may be blocking it.")) if 'posix' == os.name and bleachbit.expanduser('~') == '/root': self.append_text( _('You are running BleachBit with administrative privileges for cleaning shared parts of the system, and references to the user profile folder will clean only the root account.')) if 'nt' == os.name and options.get('shred'): from win32com.shell.shell import IsUserAnAdmin if not IsUserAnAdmin(): self.append_text( _('Run BleachBit with administrator privileges to improve the accuracy of overwriting the contents of files.')) self.append_text('\n') if exit: # This is used for automated testing of whether the GUI can start. print('Success') GObject.idle_add(lambda: self.quit(), priority=GObject.PRIORITY_LOW)
def __init__(self, *args, **kwargs): super(GUI, self).__init__(*args, **kwargs) from bleachbit import RecognizeCleanerML RecognizeCleanerML.RecognizeCleanerML() register_cleaners() self.populate_window() # Redirect logging to the GUI. bb_logger = logging.getLogger('bleachbit') gtklog = GtkLoggerHandler(self.append_text) bb_logger.addHandler(gtklog) if 'nt' == os.name and 'windows_exe' == getattr(sys, 'frozen', None): # On Microsoft Windows this avoids py2exe redirecting stderr to # bleachbit.exe.log. # sys.frozen = console_exe means the console is shown from bleachbit import logger_sh bb_logger.removeHandler(logger_sh) if options.get("first_start") and 'posix' == os.name: pref = PreferencesDialog(self, self.cb_refresh_operations) pref.run() options.set('first_start', False) if bleachbit.online_update_notification_enabled and options.get("check_online_updates"): self.check_online_updates() if 'nt' == os.name: # BitDefender false positive. BitDefender didn't mark BleachBit as infected or show # anything in its log, but sqlite would fail to import unless BitDefender was in "game mode." # http://bleachbit.sourceforge.net/forum/074-fails-errors try: import sqlite3 except ImportError as e: self.append_text( _("Error loading the SQLite module: the antivirus software may be blocking it."), 'error')
def __init__(self, uac=True, shred_paths=None, exit=False): if uac and 'nt' == os.name and Windows.elevate_privileges(): # privileges escalated in other process sys.exit(0) if not exit: from bleachbit import RecognizeCleanerML RecognizeCleanerML.RecognizeCleanerML() register_cleaners() self.create_window() gobject.threads_init() # Redirect logging to the GUI. bb_logger = logging.getLogger('bleachbit') gtklog = GtkLoggerHandler(self.append_text) bb_logger.addHandler(gtklog) if 'nt' == os.name and 'windows_exe' == getattr(sys, 'frozen', None): # On Microsoft Windows this avoids py2exe redirecting stderr to # bleachbit.exe.log. # sys.frozen = console_exe means the console is shown from bleachbit import logger_sh bb_logger.removeHandler(logger_sh) if shred_paths: self.shred_paths(shred_paths) return if options.get("first_start") and 'posix' == os.name: pref = PreferencesDialog(self.window, self.cb_refresh_operations) pref.run() options.set('first_start', False) if bleachbit.online_update_notification_enabled and options.get( "check_online_updates"): self.check_online_updates() if 'nt' == os.name: # BitDefender false positive. BitDefender didn't mark BleachBit as infected or show # anything in its log, but sqlite would fail to import unless BitDefender was in "game mode." # https://www.bleachbit.org/forum/074-fails-errors try: import sqlite3 except ImportError: logger.exception( _("Error loading the SQLite module: the antivirus software may be blocking it." )) if 'posix' == os.name and bleachbit.expanduser('~') == '/root': self.append_text( _('You are running BleachBit with administrative privileges for cleaning shared parts of the system, and references to the user profile folder will clean only the root account.' )) if 'nt' == os.name and options.get('shred'): from win32com.shell.shell import IsUserAnAdmin if not IsUserAnAdmin(): self.append_text( _('Run BleachBit with administrator privileges to improve the accuracy of overwriting the contents of files.' )) self.append_text('\n') if exit: # This is used for automated testing of whether the GUI can start. gobject.idle_add(lambda: gtk.main_quit(), priority=gobject.PRIORITY_LOW)
def cb_refresh_operations(self): """Callback to refresh the list of cleaners""" # reload cleaners from disk register_cleaners() # update tree view self.tree_store.refresh_rows() # expand tree view self.view.expand_all() # remove from idle loop (see gobject.idle_add) return False
def __init__(self, uac=True, shred_paths=None, exit=False): if uac and 'nt' == os.name and Windows.elevate_privileges(): # privileges escalated in other process sys.exit(0) if not exit: from bleachbit import RecognizeCleanerML RecognizeCleanerML.RecognizeCleanerML() register_cleaners() self.create_window() gobject.threads_init() # Redirect logging to the GUI. bb_logger = logging.getLogger('bleachbit') gtklog = GtkLoggerHandler(self.append_text) bb_logger.addHandler(gtklog) if 'nt' == os.name and 'windows_exe' == getattr(sys, 'frozen', None): # On Microsoft Windows this avoids py2exe redirecting stderr to # bleachbit.exe.log. # sys.frozen = console_exe means the console is shown from bleachbit import logger_sh bb_logger.removeHandler(logger_sh) if shred_paths: self.shred_paths(shred_paths) return if options.get("first_start") and 'posix' == os.name: pref = PreferencesDialog(self.window, self.cb_refresh_operations) pref.run() options.set('first_start', False) if bleachbit.online_update_notification_enabled and options.get("check_online_updates"): self.check_online_updates() if 'nt' == os.name: # BitDefender false positive. BitDefender didn't mark BleachBit as infected or show # anything in its log, but sqlite would fail to import unless BitDefender was in "game mode." # https://www.bleachbit.org/forum/074-fails-errors try: import sqlite3 except ImportError: logger.exception(_("Error loading the SQLite module: the antivirus software may be blocking it.")) if 'posix' == os.name and bleachbit.expanduser('~') == '/root': self.append_text( _('You are running BleachBit with administrative privileges for cleaning shared parts of the system, and references to the user profile folder will clean only the root account.')) if 'nt' == os.name and options.get('shred'): from win32com.shell.shell import IsUserAnAdmin if not IsUserAnAdmin(): self.append_text( _('Run BleachBit with administrator privileges to improve the accuracy of overwriting the contents of files.')) self.append_text('\n') if exit: # This is used for automated testing of whether the GUI can start. gobject.idle_add( lambda: gtk.main_quit(), priority=gobject.PRIORITY_LOW)
def args_to_operations(args, preset, all_but_warning): """Read arguments and return list of operations as dictionary""" list(register_cleaners()) operations = {} if not args: args = [] args = set(args + args_to_operations_list(preset, all_but_warning)) for arg in args: if 2 != len(arg.split('.')): logger.warning(_("not a valid cleaner: %s"), arg) continue (cleaner_id, option_id) = arg.split('.') # enable all options (for example, firefox.*) if '*' == option_id: if cleaner_id in operations: del operations[cleaner_id] operations[cleaner_id] = [] for (option_id2, o_name) in backends[cleaner_id].get_options(): operations[cleaner_id].append(option_id2) continue # add the specified option if cleaner_id not in operations: operations[cleaner_id] = [] if option_id not in operations[cleaner_id]: operations[cleaner_id].append(option_id) for (k, v) in operations.items(): operations[k] = sorted(v) return operations
def cb_refresh_operations(self): """Callback to refresh the list of cleaners""" # Is this the first time in this session? if not hasattr(self, 'recognized_cleanerml') and not self.auto_exit: from bleachbit import RecognizeCleanerML RecognizeCleanerML.RecognizeCleanerML() self.recognized_cleanerml = True # reload cleaners from disk self.view.expand_all() self.progressbar.show() rc = register_cleaners(self.update_progress_bar, self.cb_register_cleaners_done) GLib.idle_add(rc.__next__) return False
def args_to_operations_list(preset, all_but_warning): """For --preset and --all-but-warning return list of operations as list Example return: ['google_chrome.cache', 'system.tmp'] """ args = [] if not backends: list(register_cleaners()) assert (len(backends) > 1) for key in sorted(backends): c_id = backends[key].get_id() for (o_id, o_name) in backends[key].get_options(): # restore presets from the GUI if preset and Options.options.get_tree(c_id, o_id): args.append('.'.join([c_id, o_id])) elif all_but_warning and not backends[c_id].get_warning(o_id): args.append('.'.join([c_id, o_id])) return args