admin
2022-03-31 02f1c9fd2c594323f772f8e8f0f2187a285c1749
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import 'dart:convert';
 
import '../../model/video/video_model.dart';
import '../../model/video/watch_record_model.dart';
 
import 'sqlite_utils.dart';
 
class DBManager {
  ///初始化
  static  List<String> getTables()  {
    List<String> tables = [
      '''
      CREATE TABLE IF NOT Exists WATCH_RECORD(
        _ID INTEGER NOT NULL PRIMARY KEY,
        _VIDEO_ID TEXT NOT NULL UNIQUE,
        _VIDEOS TEXT NOT NULL,
        _VIDEO_DETAIL TEXT NOT NULL,
        _POSITION INTEGER NOT NULL,
        _CREATE_TIME INTEGER NOT NULL,
        _UPDATE_TIME INTEGER NOT NULL
      );
      '''
    ];
  return tables;
  }
 
  ///添加观看记录
  static void addWatchRecord(VideoInfoModel videoInfo,
      VideoDetailInfo detailInfo, int position) async {
    VideoInfoModel temp=VideoInfoModel.fromJson(videoInfo.toJson());
    temp.videoDetailList = null;
    List<Map> resultList = await SQLiteUtil.select(
        "SELECT * FROM WATCH_RECORD where _VIDEO_ID = ?", [temp.id]);
    if (resultList.isEmpty) {
      String sql =
          "INSERT INTO WATCH_RECORD(_VIDEO_ID,_VIDEOS,_VIDEO_DETAIL,_POSITION,_CREATE_TIME,_UPDATE_TIME) VALUES(?,?,?,?,?,?)";
      await SQLiteUtil.insert(sql, [
        [
          temp.id!,
          jsonEncode(temp.toJson()),
          jsonEncode(detailInfo.toJson()),
          position,
          DateTime.now().millisecondsSinceEpoch,
          DateTime.now().millisecondsSinceEpoch,
        ]
      ]);
    } else {
      String sql =
          "UPDATE WATCH_RECORD SET _VIDEOS=?,_VIDEO_DETAIL=?,_POSITION=?,_UPDATE_TIME=? WHERE _ID=?";
      await SQLiteUtil.executeSQLWithParams(sql, [
        jsonEncode(temp.toJson()),
        jsonEncode(detailInfo.toJson()),
        position,
        DateTime.now().millisecondsSinceEpoch,
        resultList[0]["_ID"]
      ]);
    }
  }
 
  ///删除观看记录
  static Future deleteWatchRecord(List<String> ids) async {
    String sql = "DELETE FROM WATCH_RECORD WHERE ";
    for (var element in ids) {
      sql += " _ID = ? OR";
    }
    if (sql.endsWith("OR")) {
      sql = sql.substring(0, sql.length - 2);
    }
    await SQLiteUtil.executeSQLWithParams(sql, ids);
  }
 
  ///获取观看记录列表
  static Future<List<WatchRecordModel>> listWatchRecord(
      int page, int pageSize) async {
    String sql =
        "select * from WATCH_RECORD ORDER BY _UPDATE_TIME DESC LIMIT ?,?";
    List<Map> result =
        await SQLiteUtil.select(sql, [(page - 1) * pageSize, pageSize]);
    List<WatchRecordModel> list = [];
    result.forEach((element) {
      list.add(WatchRecordModel(
        id: element["_ID"],
        videoId: element["_VIDEO_ID"],
        video: VideoInfoModel.fromJson(jsonDecode(element["_VIDEOS"])),
        videoDetail:
            VideoDetailInfo.fromJson(jsonDecode(element["_VIDEO_DETAIL"])),
        position: element["_POSITION"],
        createTime: element["_CREATE_TIME"],
        updateTime: element["_UPDATE_TIME"],
      ));
    });
    return list;
  }
 
  static Future<int> countWatchRecord() async {
    String sql = "select count(*) from WATCH_RECORD";
    return await SQLiteUtil.count(sql, []);
  }
}