Optimize the startup time further
This commit is contained in:
parent
ef06cfbea0
commit
d4e1754ca4
3 changed files with 42 additions and 31 deletions
|
@ -15,7 +15,32 @@ class FileRepository {
|
|||
return _files;
|
||||
}
|
||||
|
||||
bool _hasLoadedFiles = false;
|
||||
|
||||
bool get hasLoadedFiles {
|
||||
return _hasLoadedFiles;
|
||||
}
|
||||
|
||||
Future<List<File>> _cachedFuture;
|
||||
|
||||
Future<List<File>> loadFiles() async {
|
||||
if (_cachedFuture == null) {
|
||||
_cachedFuture = _loadFiles().then((value) {
|
||||
_hasLoadedFiles = true;
|
||||
_cachedFuture = null;
|
||||
return value;
|
||||
});
|
||||
}
|
||||
return _cachedFuture;
|
||||
}
|
||||
|
||||
Future<void> reloadFiles() async {
|
||||
_logger.info("Reloading...");
|
||||
await loadFiles();
|
||||
Bus.instance.fire(LocalPhotosUpdatedEvent());
|
||||
}
|
||||
|
||||
Future<List<File>> _loadFiles() async {
|
||||
final files = await FilesDB.instance.getFiles();
|
||||
final deduplicatedFiles = List<File>();
|
||||
for (int index = 0; index < files.length; index++) {
|
||||
|
@ -34,10 +59,4 @@ class FileRepository {
|
|||
_files.addAll(deduplicatedFiles);
|
||||
return _files;
|
||||
}
|
||||
|
||||
Future<void> reloadFiles() async {
|
||||
_logger.info("Reloading...");
|
||||
await loadFiles();
|
||||
Bus.instance.fire(LocalPhotosUpdatedEvent());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,23 +107,26 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget> {
|
|||
|
||||
Future<CollectionItems> _getCollections() async {
|
||||
final filesDB = FilesDB.instance;
|
||||
final filesRepo = FileRepository.instance;
|
||||
final collectionsService = CollectionsService.instance;
|
||||
final userID = Configuration.instance.getUserID();
|
||||
// Query takes ~3 seconds, find out why
|
||||
final paths = await filesDB.getLocalPaths();
|
||||
final folders = List<DeviceFolder>();
|
||||
for (final path in paths) {
|
||||
final files = List<File>();
|
||||
for (File file in FileRepository.instance.files) {
|
||||
if ((file.ownerID == null || file.ownerID == userID) &&
|
||||
file.deviceFolder == path) {
|
||||
files.add(file);
|
||||
}
|
||||
final files = filesRepo.hasLoadedFiles
|
||||
? filesRepo.files
|
||||
: await filesRepo.loadFiles();
|
||||
final filePathMap = Map<String, List<File>>();
|
||||
for (final file in files) {
|
||||
final path = file.deviceFolder;
|
||||
if (filePathMap[path] == null) {
|
||||
filePathMap[path] = List<File>();
|
||||
}
|
||||
final folderName = p.basename(path);
|
||||
folders.add(DeviceFolder(folderName, path, () => files, files[0]));
|
||||
filePathMap[path].add(file);
|
||||
}
|
||||
for (final path in filePathMap.keys) {
|
||||
final folderName = p.basename(path);
|
||||
folders.add(DeviceFolder(
|
||||
folderName, path, () => filePathMap[path], filePathMap[path][0]));
|
||||
}
|
||||
|
||||
folders.sort((first, second) {
|
||||
return second.thumbnail.creationTime
|
||||
.compareTo(first.thumbnail.creationTime);
|
||||
|
@ -132,9 +135,7 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget> {
|
|||
final collections = collectionsService.getCollections();
|
||||
final ownedCollectionIDs = List<int>();
|
||||
for (final c in collections) {
|
||||
if (c.ownerID != userID) {
|
||||
continue;
|
||||
} else {
|
||||
if (c.ownerID == userID) {
|
||||
ownedCollectionIDs.add(c.id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,16 +43,10 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
final _memoriesWidget = MemoriesWidget();
|
||||
|
||||
int _selectedNavBarItem = 0;
|
||||
StreamSubscription<LocalPhotosUpdatedEvent>
|
||||
_localPhotosUpdatedEventSubscription;
|
||||
StreamSubscription<TabChangedEvent> _tabChangedEventSubscription;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_localPhotosUpdatedEventSubscription =
|
||||
Bus.instance.on<LocalPhotosUpdatedEvent>().listen((event) {
|
||||
setState(() {});
|
||||
});
|
||||
_tabChangedEventSubscription =
|
||||
Bus.instance.on<TabChangedEvent>().listen((event) {
|
||||
setState(() {
|
||||
|
@ -143,9 +137,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
|
||||
Widget _getMainGalleryWidget() {
|
||||
return FutureBuilder(
|
||||
future: FileRepository.instance.loadFiles().then((files) {
|
||||
return _getFilteredPhotos(files);
|
||||
}),
|
||||
future: FileRepository.instance.loadFiles(),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Gallery(
|
||||
|
@ -207,7 +199,6 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
|
||||
@override
|
||||
void dispose() {
|
||||
_localPhotosUpdatedEventSubscription.cancel();
|
||||
_tabChangedEventSubscription.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue