54 lines
1.4 KiB
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;
|
|
}
|