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({}); Future load() async { final rows = await _db.allBookmarks(); bookmarkedUrls.value = rows.map((row) => row.url).toSet(); } bool isBookmarked(String url) => bookmarkedUrls.value.contains(url); Future toggle(String url, String? title) async { if (isBookmarked(url)) { await remove(url); return; } await _db.addBookmark(url, title); bookmarkedUrls.value = {...bookmarkedUrls.value, url}; } Future remove(String url) async { await _db.removeBookmark(url); bookmarkedUrls.value = {...bookmarkedUrls.value}..remove(url); } }