From da25fb9c29b85cfaab5af79115196213cf403143 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 9 Mar 2025 13:01:58 +0800 Subject: [PATCH] :bug: Fix user cache --- lib/providers/user_directory.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/providers/user_directory.dart b/lib/providers/user_directory.dart index a9a90fd..a157813 100644 --- a/lib/providers/user_directory.dart +++ b/lib/providers/user_directory.dart @@ -19,6 +19,7 @@ class UserDirectoryProvider { final Map _idCache = {}; final Map _cache = {}; + DateTime? _cacheExpiredAt; Future loadAccountCache({int max = 100}) async { final out = await (_dt.db.snLocalAccount.select()..limit(max)).get(); @@ -26,11 +27,18 @@ class UserDirectoryProvider { _cache[ele.id] = ele.content; _idCache[ele.name] = ele.id; } + _cacheExpiredAt = DateTime.now().add(const Duration(hours: 1)); return out.length; } Future> listAccount(Iterable id) async { // In-memory cache + if (_cacheExpiredAt != null && _cacheExpiredAt!.isAfter(DateTime.now())) { + _cache.clear(); + _cacheExpiredAt = DateTime.now().add(const Duration(hours: 1)); + } else { + _cacheExpiredAt ??= DateTime.now().add(const Duration(hours: 1)); + } final out = List.generate(id.length, (e) => null); final plannedQuery = {}; for (var idx = 0; idx < out.length; idx++) { @@ -62,6 +70,7 @@ class UserDirectoryProvider { plannedQuery.remove(dbResp[idx].id); } // Remote server + _saveToLocal(out.where((ele) => ele != null).cast()); if (plannedQuery.isEmpty) return out; final resp = await _sn.client .get('/cgi/id/users', queryParameters: {'id': plannedQuery.join(',')});