addManualRule method

Future<bool> addManualRule(
  1. Map<String, dynamic> ruleDefinition
)

Add a manual rule from Obsly Tools

Implementation

Future<bool> addManualRule(Map<String, dynamic> ruleDefinition) async {
  try {
    final ruleKey = ruleDefinition['key']?.toString();
    if (ruleKey == null || ruleKey.isEmpty) {
      ObslyLogger.error('Rule definition must have a valid key');
      return false;
    }

    // Load current manual rules
    final manualRules = await _loadManualRules();

    // Remove existing rule with same key
    manualRules.removeWhere((rule) => rule['key']?.toString() == ruleKey);

    // Sanitize rule (remove context to optimize execution)
    final sanitizedRule = _sanitizeRule(ruleDefinition);

    // Add metadata
    final ruleWithMetadata = {
      ...sanitizedRule,
      '_added_at': DateTime.now().millisecondsSinceEpoch,
      '_source': 'manual',
      '_active': true,
    };

    manualRules.add(ruleWithMetadata);

    // Save manual rules
    await _saveManualRules(manualRules);

    // Refresh all rules
    await _refreshRulesFromSources();

    ObslyLogger.log('📝 Manual rule "$ruleKey" added and processed');
    return true;
  } catch (e) {
    ObslyLogger.error('Error adding manual rule: $e');
    return false;
  }
}