Bladeren bron

Surface framework initialization state on UI

vishnukvmd 1 jaar geleden
bovenliggende
commit
e0d50ba55e

+ 2 - 0
lib/generated/intl/messages_en.dart

@@ -1451,6 +1451,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "viewer": MessageLookupByLibrary.simpleMessage("Viewer"),
         "visitWebToManage": MessageLookupByLibrary.simpleMessage(
             "Please visit web.ente.io to manage your subscription"),
+        "waitingForWifi":
+            MessageLookupByLibrary.simpleMessage("Waiting for WiFi..."),
         "weAreOpenSource":
             MessageLookupByLibrary.simpleMessage("We are open source!"),
         "weDontSupportEditingPhotosAndAlbumsThatYouDont":

+ 10 - 0
lib/generated/l10n.dart

@@ -2886,6 +2886,16 @@ class S {
     );
   }
 
+  /// `Waiting for WiFi...`
+  String get waitingForWifi {
+    return Intl.message(
+      'Waiting for WiFi...',
+      name: 'waitingForWifi',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Status`
   String get status {
     return Intl.message(

+ 1 - 0
lib/l10n/intl_en.arb

@@ -410,6 +410,7 @@
   "magicSearch": "Magic search",
   "magicSearchDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.",
   "loadingModel": "Downloading models...",
+  "waitingForWifi": "Waiting for WiFi...",
   "status": "Status",
   "indexedItems": "Indexed items",
   "pendingItems": "Pending items",

+ 3 - 3
lib/services/semantic_search/frameworks/ml_framework.dart

@@ -38,7 +38,7 @@ abstract class MLFramework {
   InitializationState get initializationState => _state;
 
   set _initState(InitializationState state) {
-    Bus.instance.fire(MLFrameworkInitializationEvent(state));
+    Bus.instance.fire(MLFrameworkInitializationUpdateEvent(state));
     _logger.info("Init state is $state");
     _state = state;
   }
@@ -192,10 +192,10 @@ abstract class MLFramework {
   }
 }
 
-class MLFrameworkInitializationEvent extends Event {
+class MLFrameworkInitializationUpdateEvent extends Event {
   final InitializationState state;
 
-  MLFrameworkInitializationEvent(this.state);
+  MLFrameworkInitializationUpdateEvent(this.state);
 }
 
 enum InitializationState {

+ 2 - 2
lib/services/semantic_search/semantic_search_service.dart

@@ -150,8 +150,8 @@ class SemanticSearchService {
     );
   }
 
-  Future<bool> getFrameworkInitializationStatus() {
-    return _frameworkInitialization.future;
+  InitializationState getFrameworkInitializationState() {
+    return _mlFramework.initializationState;
   }
 
   Future<void> clearIndexes() async {

+ 46 - 13
lib/ui/settings/machine_learning_settings_page.dart

@@ -6,6 +6,7 @@ import "package:photos/core/event_bus.dart";
 import 'package:photos/events/embedding_updated_event.dart';
 import "package:photos/generated/l10n.dart";
 import "package:photos/services/feature_flag_service.dart";
+import "package:photos/services/semantic_search/frameworks/ml_framework.dart";
 import "package:photos/services/semantic_search/semantic_search_service.dart";
 import "package:photos/theme/ente_theme.dart";
 import "package:photos/ui/common/loading_widget.dart";
@@ -29,6 +30,32 @@ class MachineLearningSettingsPage extends StatefulWidget {
 
 class _MachineLearningSettingsPageState
     extends State<MachineLearningSettingsPage> {
+  late InitializationState _state;
+
+  late StreamSubscription<MLFrameworkInitializationUpdateEvent>
+      _eventSubscription;
+
+  @override
+  void initState() {
+    super.initState();
+    _eventSubscription =
+        Bus.instance.on<MLFrameworkInitializationUpdateEvent>().listen((event) {
+      _fetchState();
+      setState(() {});
+    });
+    _fetchState();
+  }
+
+  void _fetchState() {
+    _state = SemanticSearchService.instance.getFrameworkInitializationState();
+  }
+
+  @override
+  void dispose() {
+    super.dispose();
+    _eventSubscription.cancel();
+  }
+
   @override
   Widget build(BuildContext context) {
     return Scaffold(
@@ -118,17 +145,9 @@ class _MachineLearningSettingsPageState
         hasEnabled
             ? Column(
                 children: [
-                  FutureBuilder(
-                    future: SemanticSearchService.instance
-                        .getFrameworkInitializationStatus(),
-                    builder: (BuildContext context, AsyncSnapshot snapshot) {
-                      if (snapshot.hasData) {
-                        return const MagicSearchIndexStatsWidget();
-                      } else {
-                        return const ModelLoadingState();
-                      }
-                    },
-                  ),
+                  _state == InitializationState.initialized
+                      ? const MagicSearchIndexStatsWidget()
+                      : ModelLoadingState(_state),
                   const SizedBox(
                     height: 12,
                   ),
@@ -158,7 +177,12 @@ class _MachineLearningSettingsPageState
 }
 
 class ModelLoadingState extends StatelessWidget {
-  const ModelLoadingState({super.key});
+  final InitializationState state;
+
+  const ModelLoadingState(
+    this.state, {
+    Key? key,
+  }) : super(key: key);
 
   @override
   Widget build(BuildContext context) {
@@ -167,7 +191,7 @@ class ModelLoadingState extends StatelessWidget {
         MenuSectionTitle(title: S.of(context).status),
         MenuItemWidget(
           captionedTextWidget: CaptionedTextWidget(
-            title: S.of(context).loadingModel,
+            title: _getTitle(context),
           ),
           trailingWidget: EnteLoadingWidget(
             size: 12,
@@ -180,6 +204,15 @@ class ModelLoadingState extends StatelessWidget {
       ],
     );
   }
+
+  String _getTitle(BuildContext context) {
+    switch (state) {
+      case InitializationState.waitingForNetwork:
+        return S.of(context).waitingForWifi;
+      default:
+        return S.of(context).loadingModel;
+    }
+  }
 }
 
 class MagicSearchIndexStatsWidget extends StatefulWidget {