## 新增功能 - EPUB文件导入功能:支持文件选择、解析和存储 - 文件重复检测:避免重复导入同一文件 - 导入状态反馈:成功/失败消息提示 ## 模型扩展 - Book模型新增多作者支持(authors字段) - 新增章节数统计(chapterCount字段) - 新增语言标识(language字段) - 新增EPUB标识符(identifier字段) - 优化TypeAdapter序列化支持 ## 服务优化 - 新增EpubParserService:EPUB文件解析服务 - 改进DatabaseService:错误处理和数据迁移 - 优化BookRepository:调试日志和错误追踪 ## 依赖更新 - 新增epubx ^4.0.0:EPUB电子书解析库 - 更新pubspec.lock:同步依赖版本 ## UI改进 - AppHeader组件集成完整导入功能 - SafeArea适配:避免系统状态栏重叠 - 优化测试数据结构 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
72 lines
1.9 KiB
Dart
72 lines
1.9 KiB
Dart
import '../models/book.dart';
|
|
import 'database_service.dart';
|
|
|
|
class BookRepository {
|
|
final DatabaseService _databaseService = DatabaseService.instance;
|
|
|
|
/// 获取所有书籍
|
|
Future<List<Book>> getAllBooks() async {
|
|
// 实现获取所有书籍的逻辑
|
|
try {
|
|
print('🔍 开始获取所有书籍...');
|
|
final booksBox = _databaseService.getBooksBox();
|
|
final books = booksBox.values.toList();
|
|
print('📚 成功获取 ${books.length} 本书籍');
|
|
return books;
|
|
} catch (e) {
|
|
print('❌ 获取所有书籍失败: $e');
|
|
print('❌ 错误详情: ${StackTrace.current}');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
/// 根据ID获取书籍
|
|
Future<Book?> getBookById(String id) async {
|
|
// 实现根据ID获取书籍的逻辑
|
|
try {
|
|
final booksBox = _databaseService.getBooksBox();
|
|
return booksBox.get(id);
|
|
} catch (e) {
|
|
print('❌ 根据ID获取书籍失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
/// 添加新书
|
|
Future<void> addBook(Book book) async {
|
|
// 实现添加书籍的逻辑
|
|
try {
|
|
final booksBox = _databaseService.getBooksBox();
|
|
await booksBox.put(book.id, book);
|
|
print('✅ 书籍添加成功: ${book.title}');
|
|
} catch (e) {
|
|
print('❌ 添加书籍失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
/// 更新书籍信息
|
|
Future<void> updateBook(Book book) async {
|
|
try {
|
|
final booksBox = _databaseService.getBooksBox();
|
|
await booksBox.put(book.id, book);
|
|
print('✅ 书籍更新成功: ${book.title}');
|
|
} catch (e) {
|
|
print('❌ 更新书籍失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
/// 删除书籍
|
|
Future<void> deleteBook(String id) async {
|
|
try {
|
|
final booksBox = _databaseService.getBooksBox();
|
|
await booksBox.delete(id);
|
|
print('✅ 书籍删除成功: $id');
|
|
} catch (e) {
|
|
print('❌ 删除书籍失败: $e');
|
|
rethrow;
|
|
}
|
|
}
|
|
}
|