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.
120 lines
3.8 KiB
120 lines
3.8 KiB
import 'dart:async';
|
|
|
|
// import 'package:bytedesk_kefu/util/bytedesk_constants.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:sqflite/sqflite.dart';
|
|
import 'package:bytedesk_kefu/model/model.dart';
|
|
|
|
// https://pub.dev/packages/sqflite
|
|
class ThreadProvider {
|
|
//
|
|
static final ThreadProvider _singleton = ThreadProvider._internal();
|
|
factory ThreadProvider() {
|
|
return _singleton;
|
|
}
|
|
|
|
ThreadProvider._internal() {
|
|
open();
|
|
}
|
|
|
|
//
|
|
final String? tableThread = 'threads';
|
|
final String? columnId = '_id';
|
|
final String? columnTid = 'tid';
|
|
final String? columnTopic = 'topic';
|
|
final String? columnWid = 'wid';
|
|
final String? columnUid = 'uid';
|
|
final String? columnNickname = 'nickname';
|
|
final String? columnAvatar = 'avatar';
|
|
final String? columnContent = 'content';
|
|
final String? columnTimestamp = 'timestamp';
|
|
final String? columnUnreadCount = 'unreadCount';
|
|
final String? columnType = 'type';
|
|
final String? columnClient = 'client';
|
|
final String? columnCurrentUid = 'currentUid';
|
|
//
|
|
Database? database;
|
|
|
|
Future open() async {
|
|
// Open the database and store the reference.
|
|
database = await openDatabase(
|
|
// Set the path to the database. Note: Using the `join` function from the
|
|
// `path` package is best practice to ensure the path is correctly
|
|
// constructed for each platform.
|
|
join(await getDatabasesPath(), 'bytedesk-thread-v1.db'),
|
|
// When the database is first created, create a table to store dogs.
|
|
onCreate: (db, version) {
|
|
// Run the CREATE TABLE statement on the database.
|
|
return db.execute(
|
|
"CREATE TABLE $tableThread($columnId INTEGER PRIMARY KEY autoincrement, " +
|
|
"$columnTid TEXT, $columnTopic TEXT, $columnWid TEXT, $columnUid TEXT, $columnNickname TEXT, $columnAvatar TEXT, $columnContent TEXT, $columnTimestamp TEXT, " +
|
|
"$columnUnreadCount integer, $columnType TEXT, $columnClient TEXT, $columnCurrentUid TEXT)",
|
|
);
|
|
},
|
|
// Set the version. This executes the onCreate function and provides a
|
|
// path to perform database upgrades and downgrades.
|
|
version: 1,
|
|
);
|
|
}
|
|
|
|
Future<int> insert(Thread thread) async {
|
|
// print('insert avatar:' + message.avatar + ' conten:' + message.content + ' timestamp:' + message.timestamp);
|
|
return await database!.insert(tableThread!, thread.toMap());
|
|
}
|
|
|
|
//
|
|
Future<List<Thread>> getThreads(String? currentUid) async {
|
|
//
|
|
List<Map> maps = await database!.query(
|
|
tableThread!,
|
|
columns: [
|
|
columnTid!,
|
|
columnTopic!,
|
|
columnWid!,
|
|
columnUid!,
|
|
columnNickname!,
|
|
columnAvatar!,
|
|
columnContent!,
|
|
columnTimestamp!,
|
|
columnType!,
|
|
columnUnreadCount!,
|
|
columnClient!,
|
|
],
|
|
where: '$columnCurrentUid = ?',
|
|
whereArgs: [currentUid],
|
|
orderBy: '$columnTimestamp DESC',
|
|
// limit: size,
|
|
// offset: page * size
|
|
);
|
|
//
|
|
return List.generate(maps.length, (i) {
|
|
//
|
|
return Thread(
|
|
tid: maps[i]['tid'],
|
|
topic: maps[i]['topic'],
|
|
wid: maps[i]['wid'],
|
|
uid: maps[i]['uid'],
|
|
nickname: maps[i]['nickname'],
|
|
avatar: maps[i]['avatar'],
|
|
content: maps[i]['content'],
|
|
timestamp: maps[i]['timestamp'],
|
|
type: maps[i]['type'],
|
|
unreadCount: maps[i]['unreadCount'],
|
|
client: maps[i]['client']);
|
|
});
|
|
}
|
|
|
|
Future<int> delete(String? tid) async {
|
|
return await database!
|
|
.delete(tableThread!, where: '$columnTid = ?', whereArgs: [tid]);
|
|
}
|
|
|
|
Future<int> updateUnreadCount(String? tid) async {
|
|
return await database!.rawUpdate(
|
|
'UPDATE $tableThread SET $columnUnreadCount = $columnUnreadCount + 1 WHERE $columnTid = ?',
|
|
[tid]);
|
|
}
|
|
|
|
Future close() async => database!.close();
|
|
}
|