diff --git a/lib/db/files_db.dart b/lib/db/files_db.dart index e708e39d1..4802a88a3 100644 --- a/lib/db/files_db.dart +++ b/lib/db/files_db.dart @@ -817,18 +817,6 @@ class FilesDB { ); } - Future getNumberOfUploadedFiles() async { - final db = await instance.database; - final rows = await db.query( - filesTable, - columns: [columnUploadedFileID], - where: - '($columnLocalID IS NOT NULL AND ($columnUploadedFileID IS NOT NULL AND $columnUploadedFileID IS NOT -1) AND $columnUpdationTime IS NOT NULL)', - distinct: true, - ); - return rows.length; - } - Future updateUploadedFile( String localID, String title, diff --git a/lib/models/user_details.dart b/lib/models/user_details.dart index e7d120df8..90bb5ade8 100644 --- a/lib/models/user_details.dart +++ b/lib/models/user_details.dart @@ -1,11 +1,10 @@ import 'dart:math'; import 'package:collection/collection.dart'; -import 'package:equatable/equatable.dart'; import 'package:photos/models/file_type.dart'; import 'package:photos/models/subscription.dart'; -class UserDetails extends Equatable { +class UserDetails { final String email; final int usage; final int fileCount; @@ -22,16 +21,6 @@ class UserDetails extends Equatable { this.familyData, ); - @override - List get props => [ - email, - usage, - fileCount, - sharedCollectionsCount, - subscription, - familyData - ]; - bool isPartOfFamily() { return familyData?.members?.isNotEmpty ?? false; } diff --git a/lib/services/user_service.dart b/lib/services/user_service.dart index 9a17b4ec0..0c890588e 100644 --- a/lib/services/user_service.dart +++ b/lib/services/user_service.dart @@ -136,7 +136,7 @@ class UserService { Future getUserDetailsV2({bool memoryCount = true}) async { try { final response = await _enteDio.get( - "/users/details/v2?memoryCount=$memoryCount", + "/users/details/v2", queryParameters: { "memoryCount": memoryCount, }, diff --git a/lib/states/user_details_state.dart b/lib/states/user_details_state.dart index 0328535a1..dcc08bd66 100644 --- a/lib/states/user_details_state.dart +++ b/lib/states/user_details_state.dart @@ -1,10 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:photos/core/configuration.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/events/opened_settings_event.dart'; -import 'package:photos/events/user_details_changed_event.dart'; import 'package:photos/models/user_details.dart'; // ignore: import_of_legacy_library_into_null_safe import 'package:photos/services/user_service.dart'; @@ -21,26 +19,17 @@ class UserDetailsStateWidget extends StatefulWidget { } class UserDetailsStateWidgetState extends State { - late Future userDetails; - late StreamSubscription _userDetailsChangedEvent; + late UserDetails? userDetails; late StreamSubscription _openedSettingsEventSubscription; @override void initState() { - if (Configuration.instance.hasConfiguredAccount()) { - _fetchUserDetails(); - } else { - userDetails = Future.value(null); - } - _userDetailsChangedEvent = - Bus.instance.on().listen((event) { - _fetchUserDetails(); - }); + userDetails = null; _openedSettingsEventSubscription = Bus.instance.on().listen((event) { Future.delayed( const Duration( - seconds: 1, + milliseconds: 750, ), _fetchUserDetails, ); @@ -50,7 +39,6 @@ class UserDetailsStateWidgetState extends State { @override void dispose() { - _userDetailsChangedEvent.cancel(); _openedSettingsEventSubscription.cancel(); super.dispose(); } @@ -62,8 +50,9 @@ class UserDetailsStateWidgetState extends State { child: widget.child, ); - void _fetchUserDetails() { - userDetails = UserService.instance.getUserDetailsV2(memoryCount: true); + void _fetchUserDetails() async { + userDetails = + await UserService.instance.getUserDetailsV2(memoryCount: true); if (mounted) { setState(() {}); } @@ -72,7 +61,7 @@ class UserDetailsStateWidgetState extends State { class InheritedUserDetails extends InheritedWidget { final UserDetailsStateWidgetState userDetailsState; - final Future userDetails; + final UserDetails? userDetails; const InheritedUserDetails({ Key? key, @@ -85,6 +74,8 @@ class InheritedUserDetails extends InheritedWidget { context.dependOnInheritedWidgetOfExactType(); @override - bool updateShouldNotify(covariant InheritedUserDetails oldWidget) => - userDetails != oldWidget.userDetails; + bool updateShouldNotify(covariant InheritedUserDetails oldWidget) { + return (userDetails?.usage != oldWidget.userDetails?.usage) || + (userDetails?.fileCount != oldWidget.userDetails?.fileCount); + } } diff --git a/lib/ui/components/home_header_widget.dart b/lib/ui/components/home_header_widget.dart index b43c3c758..82aa04500 100644 --- a/lib/ui/components/home_header_widget.dart +++ b/lib/ui/components/home_header_widget.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:photos/core/event_bus.dart'; -import 'package:photos/events/opened_settings_event.dart'; import 'package:photos/ui/components/icon_button_widget.dart'; import 'package:photos/ui/viewer/search/search_widget.dart'; @@ -24,7 +22,6 @@ class _HomeHeaderWidgetState extends State { icon: Icons.menu_outlined, onTap: () { Scaffold.of(context).openDrawer(); - Bus.instance.fire(OpenedSettingsEvent()); }, ), AnimatedSwitcher( diff --git a/lib/ui/extents_page_view.dart b/lib/ui/extents_page_view.dart index cc61cd99b..f688d8653 100644 --- a/lib/ui/extents_page_view.dart +++ b/lib/ui/extents_page_view.dart @@ -3,8 +3,6 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart' hide PageView; -import 'package:photos/core/event_bus.dart'; -import 'package:photos/events/opened_settings_event.dart'; /// This is copy-pasted from the Flutter framework with a support added for building /// pages off screen using [Viewport.cacheExtents] and a [LayoutBuilder] @@ -295,7 +293,6 @@ class _PageViewState extends State { ? widget.controller.addListener(() { if (widget.controller.offset < -45) { widget.openDrawer(); - Bus.instance.fire(OpenedSettingsEvent()); } }) : null; diff --git a/lib/ui/settings/settings_title_bar_widget.dart b/lib/ui/settings/settings_title_bar_widget.dart index 3c2e0482e..02f9c24b7 100644 --- a/lib/ui/settings/settings_title_bar_widget.dart +++ b/lib/ui/settings/settings_title_bar_widget.dart @@ -12,6 +12,7 @@ class SettingsTitleBarWidget extends StatelessWidget { @override Widget build(BuildContext context) { final logger = Logger((SettingsTitleBarWidget).toString()); + final userDetails = InheritedUserDetails.of(context)?.userDetails; return Container( padding: const EdgeInsets.symmetric(vertical: 4), child: Padding( @@ -26,31 +27,12 @@ class SettingsTitleBarWidget extends StatelessWidget { }, icon: const Icon(Icons.keyboard_double_arrow_left_outlined), ), - FutureBuilder( - future: InheritedUserDetails.of(context)?.userDetails, - builder: (context, snapshot) { - if (InheritedUserDetails.of(context) == null) { - logger.severe( - (InheritedUserDetails).toString() + - ' not found before ' + - (SettingsTitleBarWidget).toString() + - ' on tree', - ); - throw Error(); - } else if (snapshot.hasData) { - final userDetails = snapshot.data as UserDetails; - return Text( + userDetails is UserDetails + ? Text( "${NumberFormat().format(userDetails.fileCount)} memories", style: getEnteTextTheme(context).largeBold, - ); - } else if (snapshot.hasError) { - logger.severe('failed to load user details'); - return const EnteLoadingWidget(); - } else { - return const EnteLoadingWidget(); - } - }, - ) + ) + : const EnteLoadingWidget(), ], ), ), diff --git a/lib/ui/settings/storage_card_widget.dart b/lib/ui/settings/storage_card_widget.dart index d51572d9a..58d6787a3 100644 --- a/lib/ui/settings/storage_card_widget.dart +++ b/lib/ui/settings/storage_card_widget.dart @@ -9,7 +9,6 @@ import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/common/loading_widget.dart'; // ignore: import_of_legacy_library_into_null_safe import 'package:photos/ui/payment/subscription.dart'; -import 'package:photos/ui/settings/storage_error_widget.dart'; import 'package:photos/ui/settings/storage_progress_widget.dart'; import 'package:photos/utils/data_util.dart'; @@ -51,6 +50,7 @@ class _StorageCardWidgetState extends State { @override Widget build(BuildContext context) { final inheritedUserDetails = InheritedUserDetails.of(context); + final userDetails = inheritedUserDetails?.userDetails; if (inheritedUserDetails == null) { _logger.severe( @@ -72,13 +72,13 @@ class _StorageCardWidgetState extends State { onTapDown: (details) => _isStorageCardPressed.value = true, onTapCancel: () => _isStorageCardPressed.value = false, onTapUp: (details) => _isStorageCardPressed.value = false, - child: containerForUserDetails(inheritedUserDetails), + child: containerForUserDetails(userDetails), ); } } Widget containerForUserDetails( - InheritedUserDetails inheritedUserDetails, + UserDetails? userDetails, ) { return ConstrainedBox( constraints: const BoxConstraints(maxWidth: 350), @@ -87,22 +87,11 @@ class _StorageCardWidgetState extends State { child: Stack( children: [ _background, - FutureBuilder( - future: inheritedUserDetails.userDetails, - builder: (context, snapshot) { - if (snapshot.hasData) { - return userDetails(snapshot.data as UserDetails); - } - if (snapshot.hasError) { - _logger.severe( - 'failed to load user details', - snapshot.error, - ); - return const StorageErrorWidget(); - } - return const EnteLoadingWidget(color: strokeBaseDark); - }, - ), + userDetails is UserDetails + ? _userDetails(userDetails) + : const EnteLoadingWidget( + color: strokeBaseDark, + ), Align( alignment: Alignment.centerRight, child: Padding( @@ -124,7 +113,7 @@ class _StorageCardWidgetState extends State { ); } - Widget userDetails(UserDetails userDetails) { + Widget _userDetails(UserDetails userDetails) { const hundredMBinBytes = 107374182; const oneTBinBytes = 1073741824000; diff --git a/lib/ui/settings_page.dart b/lib/ui/settings_page.dart index a508bae21..1172d05fd 100644 --- a/lib/ui/settings_page.dart +++ b/lib/ui/settings_page.dart @@ -5,6 +5,8 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:photos/core/configuration.dart'; +import 'package:photos/core/event_bus.dart'; +import 'package:photos/events/opened_settings_event.dart'; import 'package:photos/services/feature_flag_service.dart'; import 'package:photos/theme/colors.dart'; import 'package:photos/theme/ente_theme.dart'; @@ -27,6 +29,7 @@ class SettingsPage extends StatelessWidget { @override Widget build(BuildContext context) { + Bus.instance.fire(OpenedSettingsEvent()); final enteColorScheme = getEnteColorScheme(context); return Scaffold( body: Container(