import 'package:cookie_jar/cookie_jar.dart'; import 'package:freezer/utils.dart'; import 'package:isar/isar.dart'; part 'cookie_jar_isar_storage.g.dart'; class IsarStorage implements Storage { final String dbName; final String dbPath; IsarStorage(this.dbName, this.dbPath); late final Isar _isar; Future? _initFuture; @override Future init(bool persistSession, bool ignoreExpires) => _initFuture ??= _init(persistSession, ignoreExpires); Future _init(bool persistSession, bool ignoreExpires) async { _isar = await Isar.open([CookieSchema], directory: dbPath, name: dbName); print('init() finished'); } @override Future read(String key) async { await _initFuture; final cookie = await _isar.cookies.get(Utils.fastHash(key)); if (cookie == null) return null; return cookie.value; } @override Future write(String key, String value) => _isar.writeTxn(() => _isar.cookies.put(Cookie() ..key = key ..value = value)); @override Future delete(String key) => _isar.writeTxn(() => _isar.cookies.delete(Utils.fastHash(key))); @override Future deleteAll(List keys) => _isar.writeTxn(() => _isar.cookies .deleteAll(keys.map(Utils.fastHash).toList(growable: false))); } @collection class Cookie { Id get isarId => Utils.fastHash(key); late String key; late String value; }