Add auto_chkdsk()

This commit is contained in:
2Shirt 2021-04-29 21:08:50 -06:00
parent 973dad3240
commit e17c96d465
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
2 changed files with 29 additions and 2 deletions

View file

@ -29,7 +29,7 @@ class MenuEntry():
# Set details # Set details
self.details = { self.details = {
'Function': function, 'Function': function,
'Selected': True, 'Selected': False,
**kwargs, **kwargs,
} }
@ -64,7 +64,7 @@ BASE_MENUS = {
MenuEntry('Disable Windows Updates', 'auto_windows_updates_disable'), MenuEntry('Disable Windows Updates', 'auto_windows_updates_disable'),
MenuEntry('Reset Windows Updates', 'auto_windows_updates_reset'), MenuEntry('Reset Windows Updates', 'auto_windows_updates_reset'),
MenuEntry('Reboot', placeholder_reboot), MenuEntry('Reboot', placeholder_reboot),
MenuEntry('CHKDSK', placeholder_function), MenuEntry('CHKDSK', 'auto_chkdsk'),
MenuEntry('DISM RestoreHealth', 'auto_dism'), MenuEntry('DISM RestoreHealth', 'auto_dism'),
MenuEntry('SFC Scan', placeholder_function), MenuEntry('SFC Scan', placeholder_function),
MenuEntry('Fix File Associations', placeholder_function), MenuEntry('Fix File Associations', placeholder_function),

View file

@ -369,6 +369,8 @@ def save_settings(group, name, result=None, **kwargs):
'failed': result['Failed'], 'failed': result['Failed'],
'message': result['Message'], 'message': result['Message'],
}) })
if isinstance(result['Exception'], GenericWarning):
kwargs['warning'] = True
# Write values to registry # Write values to registry
for value_name, data in kwargs.items(): for value_name, data in kwargs.items():
@ -458,6 +460,31 @@ def auto_backup_registry(group, name):
save_settings(group, name, result=result) save_settings(group, name, result=result)
def auto_chkdsk(group, name):
"""Run CHKDSK repairs."""
needs_reboot = False
system_disk = os.environ.get('SYSTEMDRIVE', 'C:')
result = TRY_PRINT.run(f'CHKDSK ({system_disk})...', run_chkdsk_online)
# Run offline CHKDSK if required
if result['Failed'] and 'Repaired' not in result['Message']:
needs_reboot = True
result = TRY_PRINT.run(
f'Scheduling offline CHKDSK ({system_disk})...',
run_chkdsk_offline,
)
if not result['Failed']:
# Successfully set dirty bit to force offline check
# Set result['Failed'] to True because we failed to repair online
result['Failed'] = True
result['Message'] = 'Scheduled offline repairs'
# Done
save_settings(group, name, result=result)
if needs_reboot:
reboot()
def auto_dism(group, name): def auto_dism(group, name):
"""Run DISM repairs.""" """Run DISM repairs."""
needs_reboot = False needs_reboot = False