From 0e2a0388fffa1640f92d1741ff039e183e71e956 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Mon, 26 May 2025 17:56:09 +0530 Subject: [PATCH] Randomize people and thier files shown in people widget --- .../services/people_home_widget_service.dart | 80 +++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/mobile/lib/services/people_home_widget_service.dart b/mobile/lib/services/people_home_widget_service.dart index 5150ca0218..02d7afd414 100644 --- a/mobile/lib/services/people_home_widget_service.dart +++ b/mobile/lib/services/people_home_widget_service.dart @@ -1,3 +1,5 @@ +import "dart:math"; + import "package:collection/collection.dart"; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -380,52 +382,48 @@ class PeopleHomeWidgetService { final limit = isWidgetPresent ? MAX_PEOPLE_LIMIT : 5; await updatePeopleStatus(WidgetStatus.notSynced); - for (final entry in peopleWithFiles.entries) { - final personId = entry.key; - final personName = entry.value.$1; - final personFiles = entry.value.$2; + final peopleWithFilesLength = peopleWithFiles.length; + final peopleWithFilesEntries = peopleWithFiles.entries.toList(); + final random = Random(); - for (final file in personFiles) { - final renderResult = await HomeWidgetService.instance - .renderFile( - file, - "people_widget_$renderedCount", - personName, - personId, - ) - .catchError((e, stackTrace) { - _logger.severe("Error rendering widget", e, stackTrace); - return null; - }); + while (renderedCount < limit) { + final randomEntry = + peopleWithFilesEntries[random.nextInt(peopleWithFilesLength)]; + final randomPersonFile = randomEntry.value.$2.elementAt( + random.nextInt(randomEntry.value.$2.length), + ); + final personId = randomEntry.key; + final personName = randomEntry.value.$1; - if (renderResult != null) { - // Check for blockers again before continuing - if (await _hasAnyBlockers()) { - return; - } + final renderResult = await HomeWidgetService.instance + .renderFile( + randomPersonFile, + "people_widget_$renderedCount", + personName, + personId, + ) + .catchError((e, stackTrace) { + _logger.severe("Error rendering widget", e, stackTrace); + return null; + }); - await _setTotalPeople(renderedCount); - - // Show update toast after first item is rendered - if (renderedCount == 1) { - await _refreshWidget( - message: "First person fetched, updating widget", - ); - await updatePeopleStatus(WidgetStatus.syncedPartially); - } - - renderedCount++; - - // Limit the number of people to avoid performance issues - if (renderedCount >= limit) { - _logger.warning("Maximum people limit ($limit) reached"); - break; - } + if (renderResult != null) { + // Check for blockers again before continuing + if (await _hasAnyBlockers()) { + return; } - } - if (renderedCount >= limit) { - break; + await _setTotalPeople(renderedCount); + + // Show update toast after first item is rendered + if (renderedCount == 1) { + await _refreshWidget( + message: "First person fetched, updating widget", + ); + await updatePeopleStatus(WidgetStatus.syncedPartially); + } + + renderedCount++; } }