import 'package:ente_auth/models/code.dart'; import 'package:ente_auth/store/code_store.dart'; import 'package:logging/logging.dart'; class DeduplicationService { final _logger = Logger("DeduplicationService"); DeduplicationService._privateConstructor(); static final DeduplicationService instance = DeduplicationService._privateConstructor(); Future> getDuplicateCodes() async { try { final List result = await _getDuplicateCodes(); return result; } catch (e, s) { _logger.severe("failed to get dedupeCode", e, s); rethrow; } } Future> _getDuplicateCodes() async { final codes = await CodeStore.instance.getAllCodes(); final List duplicateCodes = []; Map> uniqueCodes = {}; for (final code in codes) { if (code.hasError || code.isTrashed) continue; final uniqueKey = "${code.secret}_${code.issuer}_${code.account}"; if (uniqueCodes.containsKey(uniqueKey)) { uniqueCodes[uniqueKey]!.add(code); } else { uniqueCodes[uniqueKey] = [code]; } } for (final key in uniqueCodes.keys) { if (uniqueCodes[key]!.length > 1) { duplicateCodes.add(DuplicateCodes(key, uniqueCodes[key]!)); } } return duplicateCodes; } } class DuplicateCodes { String hash; final List codes; DuplicateCodes( this.hash, this.codes, ); }