Solian/lib/models/message.dart

124 lines
3.4 KiB
Dart
Raw Normal View History

import 'dart:convert';
2024-04-17 15:00:53 +00:00
import 'package:solian/models/account.dart';
import 'package:solian/models/channel.dart';
import 'package:solian/models/post.dart';
class Message {
int id;
DateTime createdAt;
DateTime updatedAt;
DateTime? deletedAt;
String rawContent;
Map<String, dynamic>? metadata;
String type;
2024-04-17 15:00:53 +00:00
List<Attachment>? attachments;
Channel? channel;
Sender sender;
int? replyId;
Message? replyTo;
int channelId;
int senderId;
bool isSending = false;
Map<String, dynamic> get decodedContent {
return jsonDecode(utf8.fuse(base64).decode(rawContent));
}
2024-04-17 15:00:53 +00:00
Message({
required this.id,
required this.createdAt,
required this.updatedAt,
this.deletedAt,
required this.rawContent,
2024-04-17 15:00:53 +00:00
required this.metadata,
required this.type,
this.attachments,
this.channel,
required this.sender,
required this.replyId,
required this.replyTo,
required this.channelId,
required this.senderId,
});
factory Message.fromJson(Map<String, dynamic> json) => Message(
2024-05-01 16:49:38 +00:00
id: json['id'],
createdAt: DateTime.parse(json['created_at']),
updatedAt: DateTime.parse(json['updated_at']),
deletedAt: json['deleted_at'],
rawContent: json['content'],
2024-05-01 16:49:38 +00:00
metadata: json['metadata'],
type: json['type'],
attachments: List<Attachment>.from(json['attachments']?.map((x) => Attachment.fromJson(x)) ?? List.empty()),
2024-05-01 16:49:38 +00:00
channel: Channel.fromJson(json['channel']),
sender: Sender.fromJson(json['sender']),
replyId: json['reply_id'],
replyTo: json['reply_to'] != null ? Message.fromJson(json['reply_to']) : null,
2024-05-01 16:49:38 +00:00
channelId: json['channel_id'],
senderId: json['sender_id'],
2024-04-17 15:00:53 +00:00
);
Map<String, dynamic> toJson() => {
2024-05-01 16:49:38 +00:00
'id': id,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
'deleted_at': deletedAt,
'content': rawContent,
2024-05-01 16:49:38 +00:00
'metadata': metadata,
'type': type,
'attachments': List<dynamic>.from(attachments?.map((x) => x.toJson()) ?? List.empty()),
2024-05-01 16:49:38 +00:00
'channel': channel?.toJson(),
'sender': sender.toJson(),
'reply_id': replyId,
'reply_to': replyTo?.toJson(),
'channel_id': channelId,
'sender_id': senderId,
2024-04-17 15:00:53 +00:00
};
}
class Sender {
int id;
DateTime createdAt;
DateTime updatedAt;
DateTime? deletedAt;
Account account;
int channelId;
int accountId;
int notify;
Sender({
required this.id,
required this.createdAt,
required this.updatedAt,
this.deletedAt,
required this.account,
required this.channelId,
required this.accountId,
required this.notify,
});
factory Sender.fromJson(Map<String, dynamic> json) => Sender(
2024-05-01 16:49:38 +00:00
id: json['id'],
createdAt: DateTime.parse(json['created_at']),
updatedAt: DateTime.parse(json['updated_at']),
deletedAt: json['deleted_at'],
account: Account.fromJson(json['account']),
channelId: json['channel_id'],
accountId: json['account_id'],
notify: json['notify'],
2024-04-17 15:00:53 +00:00
);
Map<String, dynamic> toJson() => {
2024-05-01 16:49:38 +00:00
'id': id,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
'deleted_at': deletedAt,
'account': account.toJson(),
'channel_id': channelId,
'account_id': accountId,
'notify': notify,
2024-04-17 15:00:53 +00:00
};
}