deleteMessage method

Future<bool> deleteMessage(
  1. String messageId
)

Delete a message (mark as deleted on the server)

Implementation

Future<bool> deleteMessage(String messageId) async {
  // Use custom handler if provided
  if (_apiHandlers?.deleteMessageHandler != null) {
    try {
      bool success = await _apiHandlers!.deleteMessageHandler!(messageId);

      if (success) {
        int index = _messages.indexWhere((msg) => msg.messageId == messageId);
        if (index != -1) {
          _messages.removeAt(index);
          _triggerEvent(ChatEventType.messagesChanged, _messages);
        }
      }

      return success;
    } catch (e) {
      _log('Error in custom deleteMessageHandler: $e');
      return false;
    }
  }

  // Otherwise use default implementation
  final userId = ChatConfig.instance.userId;
  final token = ChatConfig.instance.token;

  if (userId == null ||
      token == null ||
      _socket == null ||
      !_socket!.connected) {
    _log('Cannot delete message: not connected');
    return false;
  }

  try {
    // First find the message
    int index = _messages.indexWhere((msg) => msg.messageId == messageId);
    if (index == -1) {
      _log('Message not found for deletion: $messageId');
      return false;
    }

    // Only the sender can delete their message
    if (_messages[index].senderId != userId) {
      _log('Cannot delete message sent by another user');
      return false;
    }

    // Emit delete event
    _socket!.emit(_socketEvents.deleteMessageEvent,
        {'messageId': messageId, 'userId': userId});

    // Remove from local list
    _messages.removeAt(index);
    _triggerEvent(ChatEventType.messagesChanged, _messages);

    return true;
  } catch (e) {
    _log('Error deleting message: $e');
    return false;
  }
}