Merge pull request #878 from ente-io/performance_improvements

Performance improvements
This commit is contained in:
Ashil 2023-02-22 13:16:35 +05:30 committed by GitHub
commit cee012c154
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 65 deletions

View file

@ -5,6 +5,7 @@ import 'package:background_fetch/background_fetch.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import "package:flutter/rendering.dart";
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:photos/app.dart'; import 'package:photos/app.dart';
@ -54,6 +55,7 @@ const kFGTaskDeathTimeoutInMicroseconds = 5000000;
const kBackgroundLockLatency = Duration(seconds: 3); const kBackgroundLockLatency = Duration(seconds: 3);
void main() async { void main() async {
debugRepaintRainbowEnabled = false;
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await _runInForeground(); await _runInForeground();
BackgroundFetch.registerHeadlessTask(_headlessTaskHandler); BackgroundFetch.registerHeadlessTask(_headlessTaskHandler);

View file

@ -16,13 +16,13 @@ import 'package:photos/ui/viewer/gallery/empty_state.dart';
import 'package:photos/ui/viewer/gallery/gallery.dart'; import 'package:photos/ui/viewer/gallery/gallery.dart';
import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart'; import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart';
class CollectionPage extends StatefulWidget { class CollectionPage extends StatelessWidget {
final CollectionWithThumbnail c; final CollectionWithThumbnail c;
final String tagPrefix; final String tagPrefix;
final GalleryType appBarType; final GalleryType appBarType;
final bool hasVerifiedLock; final bool hasVerifiedLock;
const CollectionPage( CollectionPage(
this.c, { this.c, {
this.tagPrefix = "collection", this.tagPrefix = "collection",
this.appBarType = GalleryType.ownedCollection, this.appBarType = GalleryType.ownedCollection,
@ -30,42 +30,24 @@ class CollectionPage extends StatefulWidget {
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
@override
State<CollectionPage> createState() => _CollectionPageState();
}
class _CollectionPageState extends State<CollectionPage> {
final _selectedFiles = SelectedFiles(); final _selectedFiles = SelectedFiles();
final GlobalKey shareButtonKey = GlobalKey(); final GlobalKey shareButtonKey = GlobalKey();
final ValueNotifier<double> _bottomPosition = ValueNotifier(-150.0);
@override
void initState() {
_selectedFiles.addListener(_selectedFilesListener);
super.initState();
}
@override
void dispose() {
_selectedFiles.removeListener(_selectedFilesListener);
super.dispose();
}
@override @override
Widget build(Object context) { Widget build(Object context) {
if (widget.hasVerifiedLock == false && widget.c.collection.isHidden()) { if (hasVerifiedLock == false && c.collection.isHidden()) {
return const EmptyState(); return const EmptyState();
} }
final appBarTypeValue = _getGalleryType(widget.c.collection); final appBarTypeValue = _getGalleryType(c.collection);
final List<File>? initialFiles = final List<File>? initialFiles =
widget.c.thumbnail != null ? [widget.c.thumbnail!] : null; c.thumbnail != null ? [c.thumbnail!] : null;
final gallery = Gallery( final gallery = Gallery(
asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) async { asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) async {
final FileLoadResult result = final FileLoadResult result =
await FilesDB.instance.getFilesInCollection( await FilesDB.instance.getFilesInCollection(
widget.c.collection.id, c.collection.id,
creationStartTime, creationStartTime,
creationEndTime, creationEndTime,
limit: limit, limit: limit,
@ -82,25 +64,25 @@ class _CollectionPageState extends State<CollectionPage> {
}, },
reloadEvent: Bus.instance reloadEvent: Bus.instance
.on<CollectionUpdatedEvent>() .on<CollectionUpdatedEvent>()
.where((event) => event.collectionID == widget.c.collection.id), .where((event) => event.collectionID == c.collection.id),
removalEventTypes: const { removalEventTypes: const {
EventType.deletedFromRemote, EventType.deletedFromRemote,
EventType.deletedFromEverywhere, EventType.deletedFromEverywhere,
EventType.hide, EventType.hide,
}, },
tagPrefix: widget.tagPrefix, tagPrefix: tagPrefix,
selectedFiles: _selectedFiles, selectedFiles: _selectedFiles,
initialFiles: initialFiles, initialFiles: initialFiles,
albumName: widget.c.collection.name, albumName: c.collection.name,
); );
return Scaffold( return Scaffold(
appBar: PreferredSize( appBar: PreferredSize(
preferredSize: const Size.fromHeight(50.0), preferredSize: const Size.fromHeight(50.0),
child: GalleryAppBarWidget( child: GalleryAppBarWidget(
appBarTypeValue, appBarTypeValue,
widget.c.collection.name, c.collection.name,
_selectedFiles, _selectedFiles,
collection: widget.c.collection, collection: c.collection,
), ),
), ),
body: Stack( body: Stack(
@ -110,7 +92,7 @@ class _CollectionPageState extends State<CollectionPage> {
FileSelectionOverlayBar( FileSelectionOverlayBar(
appBarTypeValue, appBarTypeValue,
_selectedFiles, _selectedFiles,
collection: widget.c.collection, collection: c.collection,
) )
], ],
), ),
@ -129,12 +111,6 @@ class _CollectionPageState extends State<CollectionPage> {
} else if (c.type == CollectionType.favorites) { } else if (c.type == CollectionType.favorites) {
return GalleryType.favorite; return GalleryType.favorite;
} }
return widget.appBarType; return appBarType;
}
_selectedFilesListener() {
_selectedFiles.files.isNotEmpty
? _bottomPosition.value = 0.0
: _bottomPosition.value = -150.0;
} }
} }

View file

@ -14,7 +14,7 @@ import 'package:photos/ui/viewer/gallery/gallery.dart';
import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart'; import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart';
import 'package:photos/utils/delete_file_util.dart'; import 'package:photos/utils/delete_file_util.dart';
class TrashPage extends StatefulWidget { class TrashPage extends StatelessWidget {
final String tagPrefix; final String tagPrefix;
final GalleryType appBarType; final GalleryType appBarType;
final GalleryType overlayType; final GalleryType overlayType;
@ -26,30 +26,9 @@ class TrashPage extends StatefulWidget {
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
@override
State<TrashPage> createState() => _TrashPageState();
}
class _TrashPageState extends State<TrashPage> {
late Function() _selectedFilesListener;
@override
void initState() {
_selectedFilesListener = () {
setState(() {});
};
widget._selectedFiles.addListener(_selectedFilesListener);
super.initState();
}
@override
void dispose() {
widget._selectedFiles.removeListener(_selectedFilesListener);
super.dispose();
}
@override @override
Widget build(Object context) { Widget build(Object context) {
final bool filesAreSelected = widget._selectedFiles.files.isNotEmpty; final bool filesAreSelected = _selectedFiles.files.isNotEmpty;
final gallery = Gallery( final gallery = Gallery(
asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) { asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) {
@ -70,8 +49,8 @@ class _TrashPageState extends State<TrashPage> {
forceReloadEvents: [ forceReloadEvents: [
Bus.instance.on<ForceReloadTrashPageEvent>(), Bus.instance.on<ForceReloadTrashPageEvent>(),
], ],
tagPrefix: widget.tagPrefix, tagPrefix: tagPrefix,
selectedFiles: widget._selectedFiles, selectedFiles: _selectedFiles,
header: _headerWidget(), header: _headerWidget(),
initialFiles: null, initialFiles: null,
); );
@ -80,9 +59,9 @@ class _TrashPageState extends State<TrashPage> {
appBar: PreferredSize( appBar: PreferredSize(
preferredSize: const Size.fromHeight(50.0), preferredSize: const Size.fromHeight(50.0),
child: GalleryAppBarWidget( child: GalleryAppBarWidget(
widget.appBarType, appBarType,
"Trash", "Trash",
widget._selectedFiles, _selectedFiles,
), ),
), ),
body: Stack( body: Stack(
@ -109,7 +88,7 @@ class _TrashPageState extends State<TrashPage> {
), ),
), ),
), ),
FileSelectionOverlayBar(GalleryType.trash, widget._selectedFiles) FileSelectionOverlayBar(GalleryType.trash, _selectedFiles)
], ],
), ),
); );

View file

@ -13,6 +13,7 @@ import 'package:photos/core/event_bus.dart';
import 'package:photos/db/files_db.dart'; import 'package:photos/db/files_db.dart';
import 'package:photos/events/collection_updated_event.dart'; import 'package:photos/events/collection_updated_event.dart';
import 'package:photos/events/files_updated_event.dart'; import 'package:photos/events/files_updated_event.dart';
import "package:photos/events/force_reload_trash_page_event.dart";
import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/events/local_photos_updated_event.dart';
import 'package:photos/models/file.dart'; import 'package:photos/models/file.dart';
import 'package:photos/models/selected_files.dart'; import 'package:photos/models/selected_files.dart';
@ -264,6 +265,9 @@ Future<bool> deleteFromTrash(BuildContext context, List<File> files) async {
source: "deleteFromTrash", source: "deleteFromTrash",
), ),
); );
//the FilesUpdateEvent is not reloading trash on premanently removing
//files, so need to fire ForceReloadTrashPageEvent
Bus.instance.fire(ForceReloadTrashPageEvent());
} catch (e, s) { } catch (e, s) {
_logger.info("failed to delete from trash", e, s); _logger.info("failed to delete from trash", e, s);
rethrow; rethrow;