36 lines
1,011 B
Dart
36 lines
1,011 B
Dart
|
|
import 'package:signals/signals.dart';
|
||
|
|
|
||
|
|
import '../../database/database.dart';
|
||
|
|
|
||
|
|
/// Which pages the reader has bookmarked. Only the set of addresses is held
|
||
|
|
/// here, because that is all the chrome watches; the list itself is read from
|
||
|
|
/// the database whenever a page needs it.
|
||
|
|
class BookmarksController {
|
||
|
|
BookmarksController(this._db);
|
||
|
|
|
||
|
|
final MewsDatabase _db;
|
||
|
|
|
||
|
|
final bookmarkedUrls = signal(<String>{});
|
||
|
|
|
||
|
|
Future<void> load() async {
|
||
|
|
final rows = await _db.allBookmarks();
|
||
|
|
bookmarkedUrls.value = rows.map((row) => row.url).toSet();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool isBookmarked(String url) => bookmarkedUrls.value.contains(url);
|
||
|
|
|
||
|
|
Future<void> toggle(String url, String? title) async {
|
||
|
|
if (isBookmarked(url)) {
|
||
|
|
await remove(url);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
await _db.addBookmark(url, title);
|
||
|
|
bookmarkedUrls.value = {...bookmarkedUrls.value, url};
|
||
|
|
}
|
||
|
|
|
||
|
|
Future<void> remove(String url) async {
|
||
|
|
await _db.removeBookmark(url);
|
||
|
|
bookmarkedUrls.value = {...bookmarkedUrls.value}..remove(url);
|
||
|
|
}
|
||
|
|
}
|