From b4aab74254a8beb1aabe6fd8e066bb20da330221 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 17:58:44 +0530 Subject: [PATCH 1/7] Fixed app fetching userDetails multiple times when opening settings by swiping --- lib/ui/components/home_header_widget.dart | 3 --- lib/ui/extents_page_view.dart | 3 --- lib/ui/settings_page.dart | 3 +++ 3 files changed, 3 insertions(+), 6 deletions(-) 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_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( From fcb7f3e67d767cf3646526b72c020c056fd3f7ea Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 17:59:55 +0530 Subject: [PATCH 2/7] Removed repeated query parameter --- lib/services/user_service.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/services/user_service.dart b/lib/services/user_service.dart index 9a17b4ec0..6764df873 100644 --- a/lib/services/user_service.dart +++ b/lib/services/user_service.dart @@ -134,9 +134,10 @@ class UserService { } Future getUserDetailsV2({bool memoryCount = true}) async { + await Future.delayed(const Duration(seconds: 3)); try { final response = await _enteDio.get( - "/users/details/v2?memoryCount=$memoryCount", + "/users/details/v2", queryParameters: { "memoryCount": memoryCount, }, From 5816c654de0c13d4857bb52fff51403dcb9d92e1 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 18:20:29 +0530 Subject: [PATCH 3/7] Stopped listening to UserDetailsUpdatedEvent in UserDetailsState --- lib/states/user_details_state.dart | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/lib/states/user_details_state.dart b/lib/states/user_details_state.dart index 0328535a1..cd3b901fd 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'; @@ -22,25 +20,16 @@ class UserDetailsStateWidget extends StatefulWidget { class UserDetailsStateWidgetState extends State { late Future userDetails; - late StreamSubscription _userDetailsChangedEvent; late StreamSubscription _openedSettingsEventSubscription; @override void initState() { - if (Configuration.instance.hasConfiguredAccount()) { - _fetchUserDetails(); - } else { - userDetails = Future.value(null); - } - _userDetailsChangedEvent = - Bus.instance.on().listen((event) { - _fetchUserDetails(); - }); + userDetails = Future.value(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(); } From 3a269f9f391ca65e3e3a140c64a1517274ee7930 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 18:28:06 +0530 Subject: [PATCH 4/7] Removed unused method --- lib/db/files_db.dart | 12 ------------ 1 file changed, 12 deletions(-) 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, From aca1da4b43370930390caf96aaf0d12ab753522a Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 20:23:58 +0530 Subject: [PATCH 5/7] Removed Equatable in UserDetails --- lib/models/user_details.dart | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) 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; } From 3a49a433ee62af15fb39323172d379c4fcd7c1e2 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Tue, 13 Dec 2022 20:30:35 +0530 Subject: [PATCH 6/7] Fixed recurring loading state of storage card and uploaded file count --- lib/states/user_details_state.dart | 17 ++++++----- .../settings/settings_title_bar_widget.dart | 28 ++++-------------- lib/ui/settings/storage_card_widget.dart | 29 ++++++------------- 3 files changed, 24 insertions(+), 50 deletions(-) diff --git a/lib/states/user_details_state.dart b/lib/states/user_details_state.dart index cd3b901fd..dcc08bd66 100644 --- a/lib/states/user_details_state.dart +++ b/lib/states/user_details_state.dart @@ -19,12 +19,12 @@ class UserDetailsStateWidget extends StatefulWidget { } class UserDetailsStateWidgetState extends State { - late Future userDetails; + late UserDetails? userDetails; late StreamSubscription _openedSettingsEventSubscription; @override void initState() { - userDetails = Future.value(null); + userDetails = null; _openedSettingsEventSubscription = Bus.instance.on().listen((event) { Future.delayed( @@ -50,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(() {}); } @@ -60,7 +61,7 @@ class UserDetailsStateWidgetState extends State { class InheritedUserDetails extends InheritedWidget { final UserDetailsStateWidgetState userDetailsState; - final Future userDetails; + final UserDetails? userDetails; const InheritedUserDetails({ Key? key, @@ -73,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/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; From 14da1794ec909aff0b063c307b9d42c41a27826b Mon Sep 17 00:00:00 2001 From: ashilkn Date: Wed, 14 Dec 2022 10:11:30 +0530 Subject: [PATCH 7/7] Minor change --- lib/services/user_service.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/services/user_service.dart b/lib/services/user_service.dart index 6764df873..0c890588e 100644 --- a/lib/services/user_service.dart +++ b/lib/services/user_service.dart @@ -134,7 +134,6 @@ class UserService { } Future getUserDetailsV2({bool memoryCount = true}) async { - await Future.delayed(const Duration(seconds: 3)); try { final response = await _enteDio.get( "/users/details/v2",