This commit is contained in:
DelLevin-Home
2026-06-20 05:01:59 +08:00
parent 3f186c7521
commit c7f74c61f5
15 changed files with 572 additions and 396 deletions

View File

@@ -82,6 +82,12 @@ class BookDao {
);
});
// 仅更新封面偏移量(不触发全量刷新)
Future<void> updateCoverOffset(String bookId, double offset) => _wrap('updateCoverOffset', () async {
final db = await _dbHelper.database;
await db.update('books', {'cover_offset': offset}, where: 'id = ?', whereArgs: [bookId]);
});
// 软删除书籍记录(移入回收站)
Future<int> deleteBook(String id) => _wrap('deleteBook', () async {
final db = await _dbHelper.database;

View File

@@ -57,7 +57,7 @@ class DatabaseHelper {
return await openDatabase(
path,
version: 15,
version: 16,
onCreate: _createDB,
onUpgrade: _onUpgrade,
);
@@ -119,8 +119,26 @@ class DatabaseHelper {
await _createReaderBooksTable(db);
}
if (oldVersion < 15) {
await db.execute('ALTER TABLE movies ADD COLUMN cover_offset REAL DEFAULT 0');
await db.execute('ALTER TABLE books ADD COLUMN cover_offset REAL DEFAULT 0');
// 安全添加 cover_offset 列(防止列已存在时报错)
final movieCols = await db.rawQuery('PRAGMA table_info(movies)');
if (!movieCols.any((col) => col['name'] == 'cover_offset')) {
await db.execute('ALTER TABLE movies ADD COLUMN cover_offset REAL DEFAULT 0');
}
final bookCols = await db.rawQuery('PRAGMA table_info(books)');
if (!bookCols.any((col) => col['name'] == 'cover_offset')) {
await db.execute('ALTER TABLE books ADD COLUMN cover_offset REAL DEFAULT 0');
}
}
// v16: 确保 cover_offset 列存在v15 的数据库可能缺少此列)
if (oldVersion < 16) {
final movieCols = await db.rawQuery('PRAGMA table_info(movies)');
if (!movieCols.any((col) => col['name'] == 'cover_offset')) {
await db.execute('ALTER TABLE movies ADD COLUMN cover_offset REAL DEFAULT 0');
}
final bookCols = await db.rawQuery('PRAGMA table_info(books)');
if (!bookCols.any((col) => col['name'] == 'cover_offset')) {
await db.execute('ALTER TABLE books ADD COLUMN cover_offset REAL DEFAULT 0');
}
}
}

View File

@@ -139,6 +139,12 @@ class MovieDao {
);
});
// 仅更新封面偏移量(不触发全量刷新)
Future<void> updateCoverOffset(String movieId, double offset) => _wrap('updateCoverOffset', () async {
final db = await _dbHelper.database;
await db.update('movies', {'cover_offset': offset}, where: 'id = ?', whereArgs: [movieId]);
});
// 删除影视记录(软删除)
Future<int> deleteMovie(String id) => _wrap('deleteMovie', () async {
final db = await _dbHelper.database;

View File

@@ -61,6 +61,12 @@ class UserPrefs {
int get detailPageStyle => prefs.getInt('detailPageStyle') ?? 0;
Future<bool> setDetailPageStyle(int value) => prefs.setInt('detailPageStyle', value);
// ========== 封面位置 ==========
/// 获取封面偏移量(-1.0 到 1.00 = 居中)
double getCoverOffset(String itemId) => prefs.getDouble('coverOffset_$itemId') ?? 0.0;
Future<bool> setCoverOffset(String itemId, double value) => prefs.setDouble('coverOffset_$itemId', value);
// ========== 主界面显示设置 ==========
/// 是否启用底部导航栏滚动隐藏(默认开启)