diff --git a/lib/providers/config.dart b/lib/providers/config.dart index 053fe74..f3f4d92 100644 --- a/lib/providers/config.dart +++ b/lib/providers/config.dart @@ -45,8 +45,8 @@ class ConfigProvider extends ChangeNotifier { bool newDrawerIsCollapsed = false; bool newDrawerIsExpanded = false; if (withMediaQuery) { - newDrawerIsCollapsed = MediaQuery.of(context).size.width < 450; - newDrawerIsExpanded = MediaQuery.of(context).size.width >= 451; + newDrawerIsCollapsed = MediaQuery.of(context).size.width < 600; + newDrawerIsExpanded = MediaQuery.of(context).size.width >= 601; } else { final rpb = ResponsiveBreakpoints.of(context); newDrawerIsCollapsed = rpb.smallerOrEqualTo(MOBILE); diff --git a/lib/providers/user_directory.dart b/lib/providers/user_directory.dart index a0041f4..c3c5c07 100644 --- a/lib/providers/user_directory.dart +++ b/lib/providers/user_directory.dart @@ -14,9 +14,32 @@ class UserDirectoryProvider { final Map _cache = {}; Future> listAccount(Iterable id) async { - final out = await Future.wait( - id.map((e) => getAccount(e)), - ); + final out = List.generate(id.length, (e) => null); + final plannedQuery = {}; + for (var idx = 0; idx < out.length; idx++) { + var item = id.elementAt(idx); + if (item is String && _idCache.containsKey(item)) { + item = _idCache[item]; + } + if (_cache.containsKey(item)) { + out[idx] = _cache[item]; + } else { + plannedQuery.add(item); + } + } + final resp = await _sn.client.get('/cgi/id/users', queryParameters: {'id': plannedQuery.join(',')}); + final respDecoded = resp.data.map((e) => SnAccount.fromJson(e)).cast().toList(); + var sideIdx = 0; + for (var idx = 0; idx < out.length; idx++) { + if (out[idx] != null) continue; + if (respDecoded.length <= sideIdx) { + break; + } + out[idx] = respDecoded[sideIdx]; + _cache[respDecoded[sideIdx].id] = out[idx]!; + _idCache[respDecoded[sideIdx].name] = respDecoded[sideIdx].id; + sideIdx++; + } return out; } diff --git a/lib/screens/chat/channel_detail.dart b/lib/screens/chat/channel_detail.dart index 9e8820c..18960c7 100644 --- a/lib/screens/chat/channel_detail.dart +++ b/lib/screens/chat/channel_detail.dart @@ -474,7 +474,7 @@ class _ChannelMemberListWidgetState extends State<_ChannelMemberListWidget> { final sn = context.read(); final resp = await sn.client.get('/cgi/im/channels/${widget.channel.keyPath}/members', queryParameters: { 'take': 10, - 'offset': 0, + 'offset': _members.length, }); final out = List.from( resp.data['data']?.map((e) => SnChannelMember.fromJson(e)) ?? [], diff --git a/lib/screens/realm/realm_detail.dart b/lib/screens/realm/realm_detail.dart index a120cc4..14ba244 100644 --- a/lib/screens/realm/realm_detail.dart +++ b/lib/screens/realm/realm_detail.dart @@ -189,7 +189,7 @@ class _RealmMemberListWidgetState extends State<_RealmMemberListWidget> { final sn = context.read(); final resp = await sn.client.get('/cgi/id/realms/${widget.realm!.alias}/members', queryParameters: { 'take': 10, - 'offset': 0, + 'offset': _members.length, }); final out = List.from(