This commit is contained in:
DelLevin-Home
2026-06-20 16:47:06 +08:00
parent 6c372c6589
commit 58be9f1d9d
6 changed files with 58 additions and 15 deletions

View File

@@ -57,7 +57,7 @@ class DatabaseHelper {
return await openDatabase(
path,
version: 16,
version: 17,
onCreate: _createDB,
onUpgrade: _onUpgrade,
);
@@ -140,6 +140,9 @@ class DatabaseHelper {
await db.execute('ALTER TABLE books ADD COLUMN cover_offset REAL DEFAULT 0');
}
}
if (oldVersion < 17) {
await db.execute('ALTER TABLE tags ADD COLUMN is_hidden INTEGER NOT NULL DEFAULT 0');
}
}
/// 升级books表到V11添加ISBN和出版时间字段
@@ -207,6 +210,7 @@ class DatabaseHelper {
name TEXT NOT NULL,
type TEXT NOT NULL,
created_at TEXT NOT NULL,
is_hidden INTEGER NOT NULL DEFAULT 0,
UNIQUE(name, type)
)
''');
@@ -631,6 +635,7 @@ class DatabaseHelper {
name TEXT NOT NULL,
type TEXT NOT NULL,
created_at TEXT NOT NULL,
is_hidden INTEGER NOT NULL DEFAULT 0,
UNIQUE(name, type)
)
''');

View File

@@ -16,10 +16,12 @@ class TagDao {
}
/// 获取指定类型的所有标签,按名称排序
Future<List<Map<String, dynamic>>> getTagsByType(String type) => _wrap('getTagsByType', () async {
/// [excludeHidden] 为 true 时,过滤掉隐藏标签
Future<List<Map<String, dynamic>>> getTagsByType(String type, {bool excludeHidden = false}) => _wrap('getTagsByType', () async {
final db = await _dbHelper.database;
final where = excludeHidden ? 'type = ? AND is_hidden = 0' : 'type = ?';
return await db.query('tags',
where: 'type = ?',
where: where,
whereArgs: [type],
orderBy: 'name ASC');
});
@@ -122,6 +124,12 @@ class TagDao {
await db.delete('tags', where: 'id = ?', whereArgs: [tagId]);
});
/// 切换标签的隐藏状态
Future<void> toggleHidden(String tagId) => _wrap('toggleHidden', () async {
final db = await _dbHelper.database;
await db.rawUpdate('UPDATE tags SET is_hidden = 1 - is_hidden WHERE id = ?', [tagId]);
});
/// 确保标签存在(用于替换操作)
Future<void> _ensureTagExists(Transaction txn, String name, String type) async {
final existing = await txn.query('tags',