Add json methods to PreviousMessage
This commit is contained in:
parent
55d75efa06
commit
2ca6d102aa
3 changed files with 54 additions and 27 deletions
|
|
@ -71,28 +71,36 @@ class Choreographer {
|
|||
|
||||
List<PreviousMessage> prevMessages() {
|
||||
const int howFarBack = 5;
|
||||
final List<Event> events = chatController.timeline?.events ?? [];
|
||||
final List<Event> events = chatController.timeline?.events
|
||||
.where(
|
||||
(e) =>
|
||||
e.messageType == MessageTypes.Text ||
|
||||
e.messageType == MessageTypes.Audio,
|
||||
)
|
||||
.toList() ??
|
||||
[];
|
||||
// Sort from most recent to least
|
||||
events.sort(
|
||||
(a, b) => b.originServerTs.compareTo(a.originServerTs),
|
||||
);
|
||||
final List<PreviousMessage> messages = [];
|
||||
for (final Event event in events) {
|
||||
if (event.messageType == MessageTypes.Text ||
|
||||
event.messageType == MessageTypes.Audio) {
|
||||
final Map<String, Object?>? content =
|
||||
(event.messageType == MessageTypes.Text)
|
||||
? event.content
|
||||
: (event as PangeaMessageEvent)
|
||||
.getSpeechToTextLocalOnly(l1LangCode, l2LangCode)
|
||||
?.toJson();
|
||||
if (content != null) {
|
||||
messages.add(
|
||||
PreviousMessage(
|
||||
event.content,
|
||||
event.senderId,
|
||||
event.originServerTs,
|
||||
),
|
||||
);
|
||||
if (messages.length >= howFarBack) {
|
||||
return messages;
|
||||
}
|
||||
final Map<String, Object?>? content =
|
||||
(event.messageType == MessageTypes.Text)
|
||||
? event.content
|
||||
: (event as PangeaMessageEvent)
|
||||
.getSpeechToTextLocalOnly(l1LangCode, l2LangCode)
|
||||
?.toJson();
|
||||
if (content != null) {
|
||||
messages.add(
|
||||
PreviousMessage(
|
||||
event.content,
|
||||
event.senderId,
|
||||
event.originServerTs,
|
||||
),
|
||||
);
|
||||
if (messages.length >= howFarBack) {
|
||||
return messages;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,6 +70,9 @@ class ModelKey {
|
|||
static const String enableIGC = "enable_igc";
|
||||
static const String enableIT = "enable_it";
|
||||
static const String prevMessages = "prev_messages";
|
||||
static const String prevContent = "prev_content";
|
||||
static const String prevSender = "prev_sender";
|
||||
static const String prevTimestamp = "prev_timestamp";
|
||||
|
||||
static const String originalSent = "original_sent";
|
||||
static const String originalWritten = "original_written";
|
||||
|
|
|
|||
|
|
@ -95,18 +95,33 @@ class IgcRepo {
|
|||
}
|
||||
}
|
||||
|
||||
/// Previous text/audio messages sent in chat
|
||||
/// Previous text/audio message sent in chat
|
||||
/// Contain message content, sender, and timestamp
|
||||
class PreviousMessage {
|
||||
Map<String, Object?> content;
|
||||
String sender;
|
||||
DateTime timestamp;
|
||||
|
||||
PreviousMessage(
|
||||
this.content,
|
||||
this.sender,
|
||||
this.timestamp,
|
||||
);
|
||||
PreviousMessage({
|
||||
required this.content,
|
||||
required this.sender,
|
||||
required this.timestamp,
|
||||
});
|
||||
|
||||
factory PreviousMessage.fromJson(Map<String, dynamic> json) =>
|
||||
PreviousMessage(
|
||||
content: jsonDecode(json[ModelKey.prevContent]) ?? <String, Object?>{},
|
||||
sender: json[ModelKey.prevSender] ?? "",
|
||||
timestamp: json[ModelKey.prevTimestamp] == null
|
||||
? DateTime.now()
|
||||
: DateTime.parse(json[ModelKey.prevTimestamp]),
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
ModelKey.prevContent: jsonEncode(content),
|
||||
ModelKey.prevSender: sender,
|
||||
ModelKey.prevTimestamp: timestamp.toIso8601String(),
|
||||
};
|
||||
}
|
||||
|
||||
class IGCRequestBody {
|
||||
|
|
@ -132,6 +147,7 @@ class IGCRequestBody {
|
|||
ModelKey.userL2: userL2,
|
||||
"enable_it": enableIT,
|
||||
"enable_igc": enableIGC,
|
||||
"prev_messages": prevMessages,
|
||||
ModelKey.prevMessages:
|
||||
jsonEncode(prevMessages.map((x) => x.toJson()).toList()),
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue