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, []);
|
}
|
}
|