回收站-云同步

This commit is contained in:
DelLevin-Home
2026-05-28 23:37:22 +08:00
parent 3ac06314c2
commit f2842afd32
2 changed files with 98 additions and 33 deletions

View File

@@ -497,81 +497,96 @@ class AppProvider extends ChangeNotifier {
/// 获取已删除的影视 /// 获取已删除的影视
Future<List<Movie>> getDeletedMovies() async { Future<List<Movie>> getDeletedMovies() async {
if (_useRemote) return ServerDataService.instance.getDeletedMovies();
return await _movieDao.getDeletedMovies(); return await _movieDao.getDeletedMovies();
} }
/// 恢复影视 /// 恢复影视
Future<void> restoreMovie(String id) async { Future<void> restoreMovie(String id) async {
await _movieDao.restoreMovie(id); if (_useRemote) {
await ServerDataService.instance.restoreMovie(id);
} else {
await _movieDao.restoreMovie(id);
}
await loadMovies(); await loadMovies();
} }
/// 彻底删除影视 /// 彻底删除影视
Future<void> permanentDeleteMovie(String id) async { Future<void> permanentDeleteMovie(String id) async {
// 删除影视对应的图片目录(包括海报和海报墙)
await ImagePathHelper.instance.deleteMovieImages(id); await ImagePathHelper.instance.deleteMovieImages(id);
if (_useRemote) {
await _movieDao.permanentDeleteMovie(id); await ServerDataService.instance.permanentDeleteMovie(id);
} else {
await _movieDao.permanentDeleteMovie(id);
}
} }
/// 获取已删除的书籍 /// 获取已删除的书籍
Future<List<Book>> getDeletedBooks() async { Future<List<Book>> getDeletedBooks() async {
if (_useRemote) return ServerDataService.instance.getDeletedBooks();
return await _bookDao.getDeletedBooks(); return await _bookDao.getDeletedBooks();
} }
/// 恢复书籍 /// 恢复书籍
Future<void> restoreBook(String id) async { Future<void> restoreBook(String id) async {
await _bookDao.restoreBook(id); if (_useRemote) {
await ServerDataService.instance.restoreBook(id);
} else {
await _bookDao.restoreBook(id);
}
await loadBooks(); await loadBooks();
} }
/// 彻底删除书籍 /// 彻底删除书籍
Future<void> permanentDeleteBook(String id) async { Future<void> permanentDeleteBook(String id) async {
// 删除书籍对应的图片目录
await ImagePathHelper.instance.deleteBookImages(id); await ImagePathHelper.instance.deleteBookImages(id);
if (_useRemote) {
await _bookDao.permanentDeleteBook(id); await ServerDataService.instance.permanentDeleteBook(id);
} else {
await _bookDao.permanentDeleteBook(id);
}
} }
/// 获取已删除的笔记 /// 获取已删除的笔记
Future<List<Note>> getDeletedNotes() async { Future<List<Note>> getDeletedNotes() async {
if (_useRemote) return ServerDataService.instance.getDeletedNotes();
return await _noteDao.getDeletedNotes(); return await _noteDao.getDeletedNotes();
} }
/// 恢复笔记 /// 恢复笔记
Future<void> restoreNote(String id) async { Future<void> restoreNote(String id) async {
await _noteDao.restoreNote(id); if (_useRemote) {
await ServerDataService.instance.restoreNote(id);
} else {
await _noteDao.restoreNote(id);
}
await loadNotes(); await loadNotes();
} }
/// 彻底删除笔记 /// 彻底删除笔记
Future<void> permanentDeleteNote(String id) async { Future<void> permanentDeleteNote(String id) async {
// 删除笔记对应的图片目录
await ImagePathHelper.instance.deleteNoteImages(id); await ImagePathHelper.instance.deleteNoteImages(id);
if (_useRemote) {
await _noteDao.permanentDeleteNote(id); await ServerDataService.instance.permanentDeleteNote(id);
} else {
await _noteDao.permanentDeleteNote(id);
}
} }
/// 清空回收站 /// 清空回收站
Future<void> clearRecycleBin() async { Future<void> clearRecycleBin() async {
final deletedMovies = await _movieDao.getDeletedMovies(); final deletedMovies = await getDeletedMovies();
final deletedBooks = await _bookDao.getDeletedBooks(); final deletedBooks = await getDeletedBooks();
final deletedNotes = await _noteDao.getDeletedNotes(); final deletedNotes = await getDeletedNotes();
for (final movie in deletedMovies) { for (final movie in deletedMovies) {
// 删除影视对应的图片目录(包括海报和海报墙) await permanentDeleteMovie(movie.id);
await ImagePathHelper.instance.deleteMovieImages(movie.id);
await _movieDao.permanentDeleteMovie(movie.id);
} }
for (final book in deletedBooks) { for (final book in deletedBooks) {
// 删除书籍对应的图片目录 await permanentDeleteBook(book.id);
await ImagePathHelper.instance.deleteBookImages(book.id);
await _bookDao.permanentDeleteBook(book.id);
} }
for (final note in deletedNotes) { for (final note in deletedNotes) {
// 删除笔记对应的图片目录 await permanentDeleteNote(note.id);
await ImagePathHelper.instance.deleteNoteImages(note.id);
await _noteDao.permanentDeleteNote(note.id);
} }
await loadMovies(); await loadMovies();

View File

@@ -108,6 +108,56 @@ class ServerDataService {
return data != null; return data != null;
} }
// ─── 回收站 ────────────────────────────────────────────────────
Future<List<Movie>> getDeletedMovies() async {
final data = await _post('/api/data/movies/deleted');
if (data == null || data['movies'] == null) return [];
return (data['movies'] as List).map((m) => Movie.fromJson(m as Map<String, dynamic>)).toList();
}
Future<bool> restoreMovie(String id) async {
final data = await _post('/api/data/movie/restore', {'id': id});
return data != null;
}
Future<bool> permanentDeleteMovie(String id) async {
final data = await _post('/api/data/movie/permanent_delete', {'id': id});
return data != null;
}
Future<List<Book>> getDeletedBooks() async {
final data = await _post('/api/data/books/deleted');
if (data == null || data['books'] == null) return [];
return (data['books'] as List).map((b) => Book.fromJson(b as Map<String, dynamic>)).toList();
}
Future<bool> restoreBook(String id) async {
final data = await _post('/api/data/book/restore', {'id': id});
return data != null;
}
Future<bool> permanentDeleteBook(String id) async {
final data = await _post('/api/data/book/permanent_delete', {'id': id});
return data != null;
}
Future<List<Note>> getDeletedNotes() async {
final data = await _post('/api/data/notes/deleted');
if (data == null || data['notes'] == null) return [];
return (data['notes'] as List).map((n) => Note.fromJson(n as Map<String, dynamic>)).toList();
}
Future<bool> restoreNote(String id) async {
final data = await _post('/api/data/note/restore', {'id': id});
return data != null;
}
Future<bool> permanentDeleteNote(String id) async {
final data = await _post('/api/data/note/permanent_delete', {'id': id});
return data != null;
}
// ─── 影评 ──────────────────────────────────────────────────── // ─── 影评 ────────────────────────────────────────────────────
Future<List<MovieReview>> getMovieReviews(String movieId) async { Future<List<MovieReview>> getMovieReviews(String movieId) async {