freezer/lib/api/cookie_jar_isar_storage.dart

54 lines
1.4 KiB
Dart

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<void>? _initFuture;
@override
Future<void> init(bool persistSession, bool ignoreExpires) =>
_initFuture ??= _init(persistSession, ignoreExpires);
Future<void> _init(bool persistSession, bool ignoreExpires) async {
_isar = await Isar.open([CookieSchema], directory: dbPath, name: dbName);
print('init() finished');
}
@override
Future<String?> 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<void> write(String key, String value) =>
_isar.writeTxn(() => _isar.cookies.put(Cookie()
..key = key
..value = value));
@override
Future<void> delete(String key) =>
_isar.writeTxn(() => _isar.cookies.delete(Utils.fastHash(key)));
@override
Future<void> deleteAll(List<String> 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;
}