import 'dart:convert'; import '../../model/video/video_model.dart'; import '../../model/video/watch_record_model.dart'; import 'sqlite_utils.dart'; class DBManager { ///初始化 static List getTables() { List 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 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 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> listWatchRecord( int page, int pageSize) async { String sql = "select * from WATCH_RECORD ORDER BY _UPDATE_TIME DESC LIMIT ?,?"; List result = await SQLiteUtil.select(sql, [(page - 1) * pageSize, pageSize]); List 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 countWatchRecord() async { String sql = "select count(*) from WATCH_RECORD"; return await SQLiteUtil.count(sql, []); } }