From 29a0e73286ba3573b5ce0360bf777464b9a7f394 Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Fri, 2 Jun 2023 15:03:18 +0200 Subject: [PATCH] feat: Add debug logs for label loading --- lib/core/repository/label_repository.dart | 18 +-- .../widgets/document_meta_data_widget.dart | 1 - .../documents/cubit/documents_state.dart | 5 +- .../documents/view/pages/documents_page.dart | 115 ++++++++++++------ .../widgets/items/document_list_item.dart | 3 + lib/features/home/view/home_page.dart | 6 +- lib/features/home/view/home_route.dart | 2 +- .../cubit/document_paging_bloc_mixin.dart | 14 ++- .../settings/view/manage_accounts_page.dart | 5 +- 9 files changed, 108 insertions(+), 61 deletions(-) diff --git a/lib/core/repository/label_repository.dart b/lib/core/repository/label_repository.dart index 1ba16b1..6b5e7c6 100644 --- a/lib/core/repository/label_repository.dart +++ b/lib/core/repository/label_repository.dart @@ -8,9 +8,7 @@ import 'package:paperless_mobile/core/repository/persistent_repository.dart'; class LabelRepository extends PersistentRepository { final PaperlessLabelsApi _api; - LabelRepository(this._api) : super(const LabelRepositoryState()) { - initialize(); - } + LabelRepository(this._api) : super(const LabelRepositoryState()); Future initialize() { debugPrint("Initializing labels..."); @@ -19,7 +17,9 @@ class LabelRepository extends PersistentRepository { findAllDocumentTypes(), findAllStoragePaths(), findAllTags(), - ]); + ]).catchError((error) { + debugPrint(error.toString()); + }, test: (error) => false); } Future createTag(Tag object) async { @@ -87,11 +87,15 @@ class LabelRepository extends PersistentRepository { } Future> findAllCorrespondents([Iterable? ids]) async { + debugPrint("Loading correspondents..."); final correspondents = await _api.getCorrespondents(ids); - final updatedState = {...state.correspondents} - ..addEntries(correspondents.map((e) => MapEntry(e.id!, e))); + debugPrint("${correspondents.length} correspondents successfully loaded."); + final updatedState = { + ...state.correspondents, + }..addAll({for (var element in correspondents) element.id!: element}); + debugPrint("Pushing new correspondents state."); emit(state.copyWith(correspondents: updatedState)); - + debugPrint("New correspondents state pushed."); return correspondents; } diff --git a/lib/features/document_details/view/widgets/document_meta_data_widget.dart b/lib/features/document_details/view/widgets/document_meta_data_widget.dart index b2b55ce..eef6876 100644 --- a/lib/features/document_details/view/widgets/document_meta_data_widget.dart +++ b/lib/features/document_details/view/widgets/document_meta_data_widget.dart @@ -27,7 +27,6 @@ class _DocumentMetaDataWidgetState extends State { Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { - debugPrint("Building state..."); if (state.metaData == null) { return const SliverToBoxAdapter( child: Center( diff --git a/lib/features/documents/cubit/documents_state.dart b/lib/features/documents/cubit/documents_state.dart index 527d4d3..3e26095 100644 --- a/lib/features/documents/cubit/documents_state.dart +++ b/lib/features/documents/cubit/documents_state.dart @@ -65,7 +65,10 @@ class DocumentsState extends DocumentPagingState { documentTypes, tags, storagePaths, - ...super.props, + super.filter, + super.hasLoaded, + super.isLoading, + super.value, ]; @override diff --git a/lib/features/documents/view/pages/documents_page.dart b/lib/features/documents/view/pages/documents_page.dart index 847b64e..8bbdad7 100644 --- a/lib/features/documents/view/pages/documents_page.dart +++ b/lib/features/documents/view/pages/documents_page.dart @@ -438,85 +438,122 @@ class _DocumentsPageState extends State with SingleTickerProvider } void _addTagToFilter(int tagId) { + final cubit = context.read(); + try { - final tagsQuery = context.read().state.filter.tags is IdsTagsQuery - ? context.read().state.filter.tags as IdsTagsQuery - : const IdsTagsQuery(); - if (tagsQuery.include.contains(tagId)) { - context.read().updateCurrentFilter( + cubit.state.filter.tags.maybeMap( + ids: (state) { + if (state.include.contains(tagId)) { + cubit.updateCurrentFilter( (filter) => filter.copyWith( - tags: tagsQuery.copyWith( - include: tagsQuery.include.whereNot((id) => id == tagId).toList(), - exclude: tagsQuery.exclude.whereNot((id) => id == tagId).toList()), + tags: state.copyWith( + include: state.include.whereNot((element) => element == tagId).toList(), + ), ), ); - } else { - context.read().updateCurrentFilter( + } else if (state.exclude.contains(tagId)) { + cubit.updateCurrentFilter( (filter) => filter.copyWith( - tags: tagsQuery.copyWith(include: [...tagsQuery.include, tagId]), + tags: state.copyWith( + exclude: state.exclude.whereNot((element) => element == tagId).toList(), + ), ), ); - } + } else { + cubit.updateCurrentFilter( + (filter) => filter.copyWith( + tags: state.copyWith(include: [...state.include, tagId]), + ), + ); + } + }, + orElse: () { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(tags: TagsQuery.ids(include: [tagId])), + ); + }, + ); } on PaperlessServerException catch (error, stackTrace) { showErrorMessage(context, error, stackTrace); } } void _addCorrespondentToFilter(int? correspondentId) { + if (correspondentId == null) return; final cubit = context.read(); try { - final correspondent = cubit.state.filter.correspondent; - if (correspondent is SetIdQueryParameter) { - if (correspondentId == null || correspondent.id == correspondentId) { - cubit.updateCurrentFilter( - (filter) => filter.copyWith(correspondent: const IdQueryParameter.unset()), - ); - } else { + cubit.state.filter.correspondent.maybeWhen( + fromId: (id) { + if (id == correspondentId) { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(correspondent: const IdQueryParameter.unset()), + ); + } else { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(correspondent: IdQueryParameter.fromId(correspondentId)), + ); + } + }, + orElse: () { cubit.updateCurrentFilter( (filter) => filter.copyWith(correspondent: IdQueryParameter.fromId(correspondentId)), ); - } - } + }, + ); } on PaperlessServerException catch (error, stackTrace) { showErrorMessage(context, error, stackTrace); } } void _addDocumentTypeToFilter(int? documentTypeId) { + if (documentTypeId == null) return; final cubit = context.read(); try { - final documentType = cubit.state.filter.documentType; - if (documentType is SetIdQueryParameter) { - if (documentTypeId == null || documentType.id == documentTypeId) { - cubit.updateCurrentFilter( - (filter) => filter.copyWith(documentType: const IdQueryParameter.unset()), - ); - } else { + cubit.state.filter.documentType.maybeWhen( + fromId: (id) { + if (id == documentTypeId) { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(documentType: const IdQueryParameter.unset()), + ); + } else { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(documentType: IdQueryParameter.fromId(documentTypeId)), + ); + } + }, + orElse: () { cubit.updateCurrentFilter( (filter) => filter.copyWith(documentType: IdQueryParameter.fromId(documentTypeId)), ); - } - } + }, + ); } on PaperlessServerException catch (error, stackTrace) { showErrorMessage(context, error, stackTrace); } } void _addStoragePathToFilter(int? pathId) { + if (pathId == null) return; final cubit = context.read(); try { - final path = cubit.state.filter.documentType; - if (path is SetIdQueryParameter) { - if (pathId == null || path.id == pathId) { - cubit.updateCurrentFilter( - (filter) => filter.copyWith(storagePath: const IdQueryParameter.unset()), - ); - } else { + cubit.state.filter.storagePath.maybeWhen( + fromId: (id) { + if (id == pathId) { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(storagePath: const IdQueryParameter.unset()), + ); + } else { + cubit.updateCurrentFilter( + (filter) => filter.copyWith(storagePath: IdQueryParameter.fromId(pathId)), + ); + } + }, + orElse: () { cubit.updateCurrentFilter( (filter) => filter.copyWith(storagePath: IdQueryParameter.fromId(pathId)), ); - } - } + }, + ); } on PaperlessServerException catch (error, stackTrace) { showErrorMessage(context, error, stackTrace); } diff --git a/lib/features/documents/view/widgets/items/document_list_item.dart b/lib/features/documents/view/widgets/items/document_list_item.dart index b08df94..8ffdf3d 100644 --- a/lib/features/documents/view/widgets/items/document_list_item.dart +++ b/lib/features/documents/view/widgets/items/document_list_item.dart @@ -1,3 +1,4 @@ +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:paperless_mobile/core/repository/label_repository.dart'; @@ -86,6 +87,8 @@ class DocumentListItem extends DocumentItem { const TextSpan(text: '\u30FB'), TextSpan( text: labels.documentTypes[document.documentType]?.name, + recognizer: TapGestureRecognizer() + ..onTap = () => onDocumentTypeSelected?.call(document.documentType), ), ] : null, diff --git a/lib/features/home/view/home_page.dart b/lib/features/home/view/home_page.dart index 967c083..b77e6cb 100644 --- a/lib/features/home/view/home_page.dart +++ b/lib/features/home/view/home_page.dart @@ -219,8 +219,10 @@ class _HomePageState extends State with WidgetsBindingObserver { ]; final routes = [ const DocumentsPage(), - if (LocalUserAccount.current.paperlessUser - .hasPermission(PermissionAction.add, PermissionTarget.document)) + if (LocalUserAccount.current.paperlessUser.hasPermission( + PermissionAction.add, + PermissionTarget.document, + )) const ScannerPage(), const LabelsPage(), const InboxPage(), diff --git a/lib/features/home/view/home_route.dart b/lib/features/home/view/home_route.dart index 0324c3c..076c218 100644 --- a/lib/features/home/view/home_route.dart +++ b/lib/features/home/view/home_route.dart @@ -98,7 +98,7 @@ class HomeRoute extends StatelessWidget { return MultiProvider( providers: [ ProxyProvider( - update: (context, value, previous) => LabelRepository(value), + update: (context, value, previous) => LabelRepository(value)..initialize(), ), ProxyProvider( update: (context, value, previous) => SavedViewRepository(value)..initialize(), diff --git a/lib/features/paged_document_view/cubit/document_paging_bloc_mixin.dart b/lib/features/paged_document_view/cubit/document_paging_bloc_mixin.dart index 9d68333..05d87e3 100644 --- a/lib/features/paged_document_view/cubit/document_paging_bloc_mixin.dart +++ b/lib/features/paged_document_view/cubit/document_paging_bloc_mixin.dart @@ -44,13 +44,15 @@ mixin DocumentPagingBlocMixin on BlocBase(HiveBoxes.localUserAccount).listenable(),