46 lines
1.2 KiB
Dart
46 lines
1.2 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
|
|
import 'package:yumi/shared/data_sources/sources/repositories/sc_room_repository_imp.dart';
|
|
|
|
class SCRoomRocketRewardPopupAck {
|
|
static final Set<String> _shownRecordIds = <String>{};
|
|
|
|
static List<SCRoomRocketRewardRecordRes> filterUnshownRecords(
|
|
List<SCRoomRocketRewardRecordRes> records,
|
|
) {
|
|
return records
|
|
.where((record) {
|
|
final id = record.id.trim();
|
|
return id.isEmpty || !_shownRecordIds.contains(id);
|
|
})
|
|
.toList(growable: false);
|
|
}
|
|
|
|
static List<String> recordIds(List<SCRoomRocketRewardRecordRes> records) {
|
|
final ids = <String>[];
|
|
final seen = <String>{};
|
|
for (final record in records) {
|
|
final id = record.id.trim();
|
|
if (id.isEmpty || !seen.add(id)) {
|
|
continue;
|
|
}
|
|
ids.add(id);
|
|
}
|
|
return ids;
|
|
}
|
|
|
|
static void markShownAndAck(List<SCRoomRocketRewardRecordRes> records) {
|
|
final ids = recordIds(records);
|
|
if (ids.isEmpty) {
|
|
return;
|
|
}
|
|
_shownRecordIds.addAll(ids);
|
|
unawaited(
|
|
SCChatRoomRepository()
|
|
.ackRoomRocketRewardPopups(ids)
|
|
.catchError((_) => false),
|
|
);
|
|
}
|
|
}
|