disableAllPlugins method

Future<PluginOperationResult> disableAllPlugins()

Disable all enabled plugins across all editable scopes.

Implementation

Future<PluginOperationResult> disableAllPlugins() async {
  int disabledCount = 0;
  final errors = <String>[];

  for (final scope in validInstallableScopes) {
    final settingSource = scopeToSettingSource(scope);
    final enabled = getSettingsEnabledPlugins(settingSource);
    if (enabled == null || enabled.isEmpty) continue;

    for (final pluginId in enabled.keys) {
      if (enabled[pluginId] != true) continue;
      final result = await _setPluginEnabled(pluginId, false);
      if (result.success) {
        disabledCount++;
      } else {
        errors.add('$pluginId: ${result.message}');
      }
    }
  }

  if (errors.isNotEmpty) {
    return PluginOperationResult(
      success: false,
      message:
          'Disabled $disabledCount ${_plural(disabledCount, 'plugin')}, '
          '${errors.length} failed:\n${errors.join('\n')}',
    );
  }

  if (disabledCount == 0) {
    return const PluginOperationResult(
      success: true,
      message: 'No enabled plugins to disable',
    );
  }

  return PluginOperationResult(
    success: true,
    message:
        'Disabled $disabledCount ${_plural(disabledCount, 'plugin')}',
  );
}