Files
sure/mobile/lib/models/chat.dart
Juan José Mata ad3087f1dd Improvements to Flutter client (#1042)
* Chat improvements

* Delete/reset account via API for Flutter app

* Fix tests.

* Add "contact us" to settings

* Update mobile/lib/screens/chat_conversation_screen.dart

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>

* Improve LLM special token detection

* Deactivated user shouldn't have API working

* Fix tests

* API-Key usage

* Flutter app launch failure on no network

* Handle deletion/reset delays

* Local cached data may become stale

* Use X-Api-Key correctly!

---------

Signed-off-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-02-22 21:22:32 -05:00

89 lines
2.4 KiB
Dart

import 'message.dart';
class Chat {
final String id;
final String title;
final String? error;
final DateTime createdAt;
final DateTime updatedAt;
final List<Message> messages;
final int? messageCount;
final DateTime? lastMessageAt;
Chat({
required this.id,
required this.title,
this.error,
required this.createdAt,
required this.updatedAt,
this.messages = const [],
this.messageCount,
this.lastMessageAt,
});
factory Chat.fromJson(Map<String, dynamic> json) {
return Chat(
id: json['id'].toString(),
title: json['title'] as String,
error: json['error'] as String?,
createdAt: DateTime.parse(json['created_at'] as String),
updatedAt: DateTime.parse(json['updated_at'] as String),
messages: json['messages'] != null
? (json['messages'] as List)
.map((m) => Message.fromJson(m as Map<String, dynamic>))
.toList()
: [],
messageCount: json['message_count'] as int?,
lastMessageAt: json['last_message_at'] != null
? DateTime.parse(json['last_message_at'] as String)
: null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'error': error,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
'messages': messages.map((m) => m.toJson()).toList(),
'message_count': messageCount,
'last_message_at': lastMessageAt?.toIso8601String(),
};
}
static const String defaultTitle = 'New Chat';
static const int maxTitleLength = 80;
static String generateTitle(String prompt) {
final trimmed = prompt.trim();
if (trimmed.length <= maxTitleLength) return trimmed;
return trimmed.substring(0, maxTitleLength);
}
bool get hasDefaultTitle => title == defaultTitle;
Chat copyWith({
String? id,
String? title,
String? error,
DateTime? createdAt,
DateTime? updatedAt,
List<Message>? messages,
int? messageCount,
DateTime? lastMessageAt,
}) {
return Chat(
id: id ?? this.id,
title: title ?? this.title,
error: error ?? this.error,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
messages: messages ?? this.messages,
messageCount: messageCount ?? this.messageCount,
lastMessageAt: lastMessageAt ?? this.lastMessageAt,
);
}
}