Hibok
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

197 行
5.9 KiB

  1. import 'package:chat/models/ChatMsg.dart';
  2. import 'package:chat/models/group_info_model.dart';
  3. import 'package:chat/proto/all.pbserver.dart';
  4. import 'package:chat/utils/chat_data_table.dart';
  5. import 'package:chat/utils/conversation_table.dart';
  6. import 'package:chat/utils/group_chat_table.dart';
  7. import 'package:chat/utils/group_info_table.dart';
  8. import 'package:chat/utils/group_member_table.dart';
  9. import 'package:chat/utils/user_info_table.dart';
  10. import 'package:sqflite/sqflite.dart';
  11. import 'package:path/path.dart';
  12. class SqlUtil {
  13. static const _VERSION = 1;
  14. static const _DbName = "chat.db";
  15. static Database _database;
  16. static FriendTableModel friendTableModel; //好友列表
  17. static ChatDataTableModel chatDataTableModel; //私聊数据
  18. static GroupInfoTableModel groupInfoTableModel; //群聊信息
  19. static GroupChatTableModel groupChatTableModel; //群聊聊天数据
  20. static GroupMemberTableModel groupMemberTableModel; //群聊成员数据
  21. static UserInfoTable userInfoTable;
  22. ///初始化
  23. static init() async {
  24. print('初始化数据库');
  25. var databasesPath = await getDatabasesPath();
  26. String path = join(databasesPath, _DbName);
  27. print(path);
  28. try {
  29. _database = await openDatabase(path, version: _VERSION);
  30. friendTableModel = FriendTableModel();
  31. chatDataTableModel = ChatDataTableModel();
  32. groupChatTableModel = GroupChatTableModel();
  33. groupInfoTableModel = GroupInfoTableModel();
  34. groupMemberTableModel = GroupMemberTableModel();
  35. userInfoTable = UserInfoTable();
  36. await friendTableModel.createTable();
  37. await chatDataTableModel.createTable();
  38. await groupChatTableModel.createTable();
  39. await groupInfoTableModel.createTable();
  40. await groupMemberTableModel.createTable();
  41. await userInfoTable.createTable();
  42. } catch (e) {
  43. print(e);
  44. }
  45. }
  46. static Future<List<FriendModel>> getFriendList() {
  47. return friendTableModel.getAllConversation();
  48. }
  49. ///获取当前数据库对象
  50. static Database getCurrentDatabase() {
  51. return _database;
  52. }
  53. //查询未读消息条数
  54. static Future<Map<int, int>> getUnreadCount(bool isGroup) async {
  55. if (isGroup) {
  56. return groupChatTableModel.getUnreadCount();
  57. } else {
  58. return chatDataTableModel.getUnreadCount();
  59. }
  60. }
  61. //查询记录
  62. static Future<Map<int, List<MsgModel>>> getAllRecord(
  63. {bool isGroup = false}) async {
  64. if (isGroup) {
  65. return groupChatTableModel.getAllRecord();
  66. } else {
  67. return chatDataTableModel.getAllRecord();
  68. }
  69. }
  70. //获取群的数量
  71. static Future<int> getGroupCount() async {
  72. return groupInfoTableModel.getGroupCount();
  73. }
  74. //获取所有群信息
  75. static Future<List<GroupInfoModel>> getAllGroupInfo() async {
  76. return groupInfoTableModel.getGroupList();
  77. }
  78. ///插入到数据库
  79. static Future insert(MsgModel msgModel) async {
  80. if (msgModel.channelType == ChatChannelType.Group.value) {
  81. groupChatTableModel.insert(msgModel);
  82. } else {
  83. chatDataTableModel.insert(msgModel);
  84. }
  85. }
  86. //更新机器翻译内容
  87. updateMachineTranslateContent(int session, int sendTime,
  88. List<int> transContent, List<int> enTransContent, int tranState,
  89. {bool isGroup = false}) async {
  90. if (isGroup) {
  91. groupChatTableModel.updateMachineTranslateContent(
  92. session, sendTime, transContent, enTransContent, tranState);
  93. } else {
  94. chatDataTableModel.updateMachineTranslateContent(
  95. session, sendTime, transContent, enTransContent, tranState);
  96. }
  97. }
  98. //更新人工翻译内容
  99. updateUserTranslateContent(
  100. int session, int sendTime, List<int> transContent, int tranState) async {
  101. chatDataTableModel.updateUserTranslateContent(
  102. session, sendTime, transContent, tranState);
  103. }
  104. //更新人工翻译状态
  105. updateUserTranslateState(int session, int sendTime, int tranState) async {
  106. chatDataTableModel.updateUserTranslateState(session, sendTime, tranState);
  107. }
  108. //更新消息发送状态
  109. updateMsgState(int session, int sendTime, int state,
  110. {bool isGroup = false}) async {
  111. if (isGroup) {
  112. groupChatTableModel.updateMsgState(session, sendTime, state);
  113. } else {
  114. chatDataTableModel.updateMsgState(session, sendTime, state);
  115. }
  116. }
  117. //更新红包状态
  118. updateWalletState(MsgModel msgModel) async {
  119. chatDataTableModel.updateWalletState(msgModel);
  120. }
  121. //更新数据是否已被读取
  122. updateReadState(int session, {bool isGroup = false}) async {
  123. if (isGroup) {
  124. groupChatTableModel.updateReadState(session);
  125. } else {
  126. chatDataTableModel.updateReadState(session);
  127. }
  128. }
  129. //更新文件本地路径
  130. updateLocalFile(String extraData, String local,
  131. {bool isGroup = false}) async {
  132. if (isGroup) {
  133. groupChatTableModel.updateLocalFile(extraData, local);
  134. } else {
  135. chatDataTableModel.updateLocalFile(extraData, local);
  136. }
  137. }
  138. //更新语音已读状态
  139. updateSoundListened(MsgModel msg) {
  140. bool isGroup = msg.channelType == ChatChannelType.Group.value;
  141. if (isGroup) {
  142. groupChatTableModel.updateSoundListened(msg);
  143. } else {
  144. chatDataTableModel.updateSoundListened(msg);
  145. }
  146. }
  147. deleteSigleRecordWith(int session, int timeatmp,
  148. {bool isGroup = false}) async {
  149. if (isGroup) {
  150. groupChatTableModel.deleteSigleRecordWith(session, timeatmp);
  151. } else {
  152. chatDataTableModel.deleteSigleRecordWith(session, timeatmp);
  153. }
  154. }
  155. //删除聊天数据
  156. delteRecord(int session, {bool isGroup = false}) async {
  157. if (isGroup) {
  158. groupChatTableModel.delteRecord(session);
  159. } else {
  160. chatDataTableModel.delteRecord(session);
  161. }
  162. }
  163. ///关闭
  164. static close() {
  165. _database?.close();
  166. _database = null;
  167. }
  168. }