veilidchat/lib/chat/models/message_state.dart

42 lines
1.2 KiB
Dart
Raw Normal View History

2024-04-18 01:31:26 +00:00
import 'package:change_case/change_case.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:veilid_support/veilid_support.dart';
2024-05-26 02:46:43 +00:00
import '../../proto/proto.dart' as proto;
2024-04-18 01:31:26 +00:00
part 'message_state.freezed.dart';
part 'message_state.g.dart';
// Whether or not a message has been fully sent
enum MessageSendState {
// message is still being sent
sending,
// message issued has not reached the network
sent,
// message was sent and has reached the network
delivered;
factory MessageSendState.fromJson(dynamic j) =>
MessageSendState.values.byName((j as String).toCamelCase());
String toJson() => name.toPascalCase();
}
@freezed
class MessageState with _$MessageState {
const factory MessageState({
2024-05-26 02:46:43 +00:00
// Content of the message
@JsonKey(fromJson: proto.messageFromJson, toJson: proto.messageToJson)
required proto.Message content,
2024-05-29 14:47:43 +00:00
// Sent timestamp
required Timestamp sentTimestamp,
// Reconciled timestamp
required Timestamp? reconciledTimestamp,
2024-05-27 22:04:00 +00:00
// The state of the message
2024-04-18 01:31:26 +00:00
required MessageSendState? sendState,
}) = _MessageState;
factory MessageState.fromJson(dynamic json) =>
_$MessageStateFromJson(json as Map<String, dynamic>);
}