You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
7.3 KiB
262 lines
7.3 KiB
import 'dart:convert';
|
|
|
|
import 'package:bytedesk_kefu/model/answer.dart';
|
|
import 'package:bytedesk_kefu/model/thread.dart';
|
|
import 'package:bytedesk_kefu/model/user.dart';
|
|
import 'package:bytedesk_kefu/util/bytedesk_constants.dart';
|
|
import 'package:sp_util/sp_util.dart';
|
|
|
|
import 'category.dart';
|
|
// import 'package:equatable/equatable.dart';
|
|
|
|
class Message {
|
|
//
|
|
String? mid;
|
|
String? content;
|
|
String? imageUrl;
|
|
String? voiceUrl;
|
|
String? videoUrl;
|
|
String? fileUrl;
|
|
String? nickname;
|
|
String? avatar;
|
|
String? type;
|
|
String? topic;
|
|
String? timestamp;
|
|
String? status;
|
|
int? isSend;
|
|
String? currentUid;
|
|
String? client;
|
|
//
|
|
Thread? thread;
|
|
User? user;
|
|
//
|
|
List<Answer>? answers;
|
|
String? answersJson;
|
|
//
|
|
List<Category>? categories;
|
|
String? categoriesJson;
|
|
|
|
Message(
|
|
{this.mid,
|
|
this.content,
|
|
this.imageUrl,
|
|
this.voiceUrl,
|
|
this.videoUrl,
|
|
this.fileUrl,
|
|
this.nickname,
|
|
this.avatar,
|
|
this.type,
|
|
this.topic,
|
|
this.timestamp,
|
|
this.isSend,
|
|
this.thread,
|
|
this.user,
|
|
this.status,
|
|
this.currentUid,
|
|
this.client,
|
|
this.answers,
|
|
this.answersJson,
|
|
this.categories,
|
|
this.categoriesJson})
|
|
: super();
|
|
|
|
//
|
|
static Message fromJsonThread(dynamic json) {
|
|
//
|
|
// String? content = json['content'];
|
|
List<Answer> robotQaList = [];
|
|
if (json['type'] == BytedeskConstants.MESSAGE_TYPE_ROBOT) {
|
|
robotQaList = json['answers'] == null
|
|
? []
|
|
: (json['answers'] as List<dynamic>)
|
|
.map((item) => Answer.fromJson(item))
|
|
.toList();
|
|
// for (var i = 0; i < robotQaList.length; i++) {
|
|
// Answer answer = robotQaList[i];
|
|
// content += '\n\n' + answer.aid + ':' + answer.question;
|
|
// }
|
|
}
|
|
//
|
|
return Message(
|
|
mid: json['mid'],
|
|
// topic: json['thread']['topic'],
|
|
content: json['content'],
|
|
imageUrl: json['imageUrl'],
|
|
voiceUrl: json['voiceUrl'],
|
|
fileUrl: json['fileUrl'],
|
|
videoUrl: json['videoOrShortUrl'],
|
|
nickname: json['user']['nickname'],
|
|
avatar: json['user']['avatar'],
|
|
type: json['type'],
|
|
timestamp: json['createdAt'],
|
|
status: 'stored',
|
|
isSend: 0,
|
|
currentUid: SpUtil.getString(BytedeskConstants.uid),
|
|
client: json['client'],
|
|
thread: Thread.fromVisitorJson(json['thread']),
|
|
user: User.fromJson(json['user']),
|
|
answers: robotQaList,
|
|
answersJson: json['answers'].toString());
|
|
}
|
|
|
|
//
|
|
static Message fromJsonThreadWorkGroupV2(dynamic json) {
|
|
//
|
|
List<Category> categoriesList = [];
|
|
if (json['type'] == BytedeskConstants.MESSAGE_TYPE_ROBOT_V2) {
|
|
categoriesList = json['categories'] == null
|
|
? []
|
|
: (json['categories'] as List<dynamic>)
|
|
.map((item) => Category.fromJson(item))
|
|
.toList();
|
|
}
|
|
//
|
|
return Message(
|
|
mid: json['mid'],
|
|
// topic: json['thread']['topic'],
|
|
content: json['content'],
|
|
imageUrl: json['imageUrl'],
|
|
voiceUrl: json['voiceUrl'],
|
|
fileUrl: json['fileUrl'],
|
|
videoUrl: json['videoOrShortUrl'],
|
|
nickname: json['user']['nickname'],
|
|
avatar: json['user']['avatar'],
|
|
type: json['type'],
|
|
timestamp: json['createdAt'],
|
|
status: 'stored',
|
|
isSend: 0,
|
|
currentUid: SpUtil.getString(BytedeskConstants.uid),
|
|
client: json['client'],
|
|
thread: Thread.fromVisitorJson(json['thread']),
|
|
user: User.fromJson(json['user']),
|
|
categories: categoriesList,
|
|
categoriesJson: json['categories'].toString());
|
|
}
|
|
|
|
//
|
|
static Message fromJsonRobotQuery(dynamic json) {
|
|
//
|
|
// String? content = json['content'];
|
|
List<Answer> robotQaList = [];
|
|
if (json['type'] == BytedeskConstants.MESSAGE_TYPE_ROBOT) {
|
|
robotQaList = json['answers'] == null
|
|
? []
|
|
: (json['answers'] as List<dynamic>)
|
|
.map((item) => Answer.fromJson(item))
|
|
.toList();
|
|
// for (var i = 0; i < robotQaList.length; i++) {
|
|
// Answer answer = robotQaList[i];
|
|
// content += '\n\n' + answer.aid + ':' + answer.question;
|
|
// }
|
|
}
|
|
//
|
|
return Message(
|
|
mid: json['mid'],
|
|
// topic: json['thread']['topic'],
|
|
content: json['content'],
|
|
imageUrl: json['imageUrl'],
|
|
voiceUrl: json['voiceUrl'],
|
|
fileUrl: json['fileUrl'],
|
|
videoUrl: json['videoOrShortUrl'],
|
|
nickname: json['user']['nickname'],
|
|
avatar: json['user']['avatar'],
|
|
type: json['type'],
|
|
timestamp: json['createdAt'],
|
|
status: 'stored',
|
|
isSend: 0,
|
|
currentUid: SpUtil.getString(BytedeskConstants.uid),
|
|
client: json['client'],
|
|
// thread: Thread.fromVisitorJson(json['thread']),
|
|
user: User.fromJson(json['user']),
|
|
answers: robotQaList,
|
|
answersJson: json['answers'].toString());
|
|
}
|
|
|
|
|
|
static Message fromJson(dynamic json) {
|
|
//
|
|
List<Answer> robotQaList = [];
|
|
if (json['type'] == BytedeskConstants.MESSAGE_TYPE_ROBOT) {
|
|
robotQaList = json['answers'] == null
|
|
? []
|
|
: (json['answers'] as List<dynamic>)
|
|
.map((item) => Answer.fromJson(item))
|
|
.toList();
|
|
}
|
|
return Message(
|
|
mid: json['mid'],
|
|
// topic: json['thread']['topic'],
|
|
content: json['content'],
|
|
imageUrl: json['imageUrl'],
|
|
voiceUrl: json['voiceUrl'],
|
|
fileUrl: json['fileUrl'],
|
|
videoUrl: json['videoOrShortUrl'],
|
|
nickname: json['user']['nickname'],
|
|
avatar: json['user']['avatar'],
|
|
type: json['type'],
|
|
timestamp: json['createdAt'],
|
|
client: json['client'],
|
|
currentUid: SpUtil.getString(BytedeskConstants.uid),
|
|
thread: Thread.fromUnreadJson(json['thread']),
|
|
answers: robotQaList,
|
|
answersJson: json['answers'].toString());
|
|
}
|
|
|
|
// @override
|
|
// List<Object> get props => [mid];
|
|
|
|
// Convert a Message into a Map. The keys must correspond to the names of the
|
|
// columns in the database.
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'mid': mid,
|
|
'content': content,
|
|
'imageUrl': imageUrl,
|
|
'voiceUrl': voiceUrl,
|
|
'videoUrl': videoUrl,
|
|
'fileUrl': fileUrl,
|
|
'nickname': nickname,
|
|
'avatar': avatar,
|
|
'type': type,
|
|
'topic': thread?.topic,
|
|
'status': status,
|
|
'timestamp': timestamp,
|
|
'isSend': isSend,
|
|
'currentUid': currentUid,
|
|
'client': client,
|
|
'answers': answersJson,
|
|
'categories': categoriesJson
|
|
};
|
|
}
|
|
|
|
Message.fromMap(Map<String, dynamic> map) {
|
|
mid = map['mid'];
|
|
content = map['content'];
|
|
imageUrl = map['imageUrl'];
|
|
voiceUrl = map['voiceUrl'];
|
|
videoUrl = map['videoUrl'];
|
|
fileUrl = map['fileUrl'];
|
|
nickname = map['nickname'];
|
|
avatar = map['avatar'];
|
|
type = map['type'];
|
|
topic = map['topic'];
|
|
status = map['status'];
|
|
timestamp = map['timestamp'];
|
|
isSend = map['isSend'];
|
|
client = map['client'];
|
|
currentUid = SpUtil.getString(BytedeskConstants.uid);
|
|
}
|
|
|
|
String? channelTitle() {
|
|
return json.decode(content!)['title'];
|
|
}
|
|
|
|
String? channelType() {
|
|
return json.decode(content!)['type'];
|
|
}
|
|
|
|
String? channelContent() {
|
|
return json.decode(content!)['content'];
|
|
}
|
|
}
|