feat: bugfixes, finished go_router migration, implemented better visibility of states

This commit is contained in:
Anton Stubenbord
2023-10-06 01:17:08 +02:00
parent ad23df4f89
commit a2c5ced3b7
102 changed files with 1512 additions and 3090 deletions

View File

@@ -19,8 +19,10 @@ class InboxCubit extends HydratedCubit<InboxState>
final LabelRepository _labelRepository;
final PaperlessDocumentsApi _documentsApi;
@override
final ConnectivityStatusService connectivityStatusService;
@override
final DocumentChangedNotifier notifier;
@@ -35,21 +37,34 @@ class InboxCubit extends HydratedCubit<InboxState>
this._labelRepository,
this.notifier,
this.connectivityStatusService,
) : super(InboxState(
labels: _labelRepository.state,
)) {
) : super(InboxState(labels: _labelRepository.state)) {
notifier.addListener(
this,
onDeleted: remove,
onUpdated: (document) {
if (document.tags
final hasInboxTag = document.tags
.toSet()
.intersection(state.inboxTags.toSet())
.isEmpty) {
.isNotEmpty;
final wasInInboxBeforeUpdate =
state.documents.map((e) => e.id).contains(document.id);
if (!hasInboxTag && wasInInboxBeforeUpdate) {
print(
"INBOX: Removing document: has: $hasInboxTag, had: $wasInInboxBeforeUpdate");
remove(document);
emit(state.copyWith(itemsInInboxCount: state.itemsInInboxCount - 1));
} else {
replace(document);
} else if (hasInboxTag) {
if (wasInInboxBeforeUpdate) {
print(
"INBOX: Replacing document: has: $hasInboxTag, had: $wasInInboxBeforeUpdate");
replace(document);
} else {
print(
"INBOX: Adding document: has: $hasInboxTag, had: $wasInInboxBeforeUpdate");
_addDocument(document);
emit(
state.copyWith(itemsInInboxCount: state.itemsInInboxCount + 1));
}
}
},
);
@@ -61,22 +76,20 @@ class InboxCubit extends HydratedCubit<InboxState>
);
}
@override
Future<void> initialize() async {
await refreshItemsInInboxCount(false);
await loadInbox();
}
Future<void> refreshItemsInInboxCount([bool shouldLoadInbox = true]) async {
debugPrint("Checking for new items in inbox...");
final stats = await _statsApi.getServerStatistics();
if (stats.documentsInInbox != state.itemsInInboxCount && shouldLoadInbox) {
await loadInbox();
}
emit(
state.copyWith(
itemsInInboxCount: stats.documentsInInbox,
),
);
emit(state.copyWith(itemsInInboxCount: stats.documentsInInbox));
}
///
@@ -85,7 +98,6 @@ class InboxCubit extends HydratedCubit<InboxState>
Future<void> loadInbox() async {
if (!isClosed) {
debugPrint("Initializing inbox...");
final inboxTags = await _labelRepository.findAllTags().then(
(tags) => tags.where((t) => t.isInboxTag).map((t) => t.id!),
);
@@ -113,11 +125,22 @@ class InboxCubit extends HydratedCubit<InboxState>
}
}
Future<void> _addDocument(DocumentModel document) async {
emit(state.copyWith(
value: [
...state.value,
PagedSearchResult(
count: 1,
results: [document],
),
],
));
}
///
/// Fetches inbox tag ids and loads the inbox items (documents).
///
Future<void> reloadInbox() async {
emit(state.copyWith(hasLoaded: false, isLoading: true));
final inboxTags = await _labelRepository.findAllTags().then(
(tags) => tags.where((t) => t.isInboxTag).map((t) => t.id!),
);
@@ -134,6 +157,7 @@ class InboxCubit extends HydratedCubit<InboxState>
}
emit(state.copyWith(inboxTags: inboxTags));
updateFilter(
emitLoading: false,
filter: DocumentFilter(
sortField: SortField.added,
tags: TagsQuery.ids(include: inboxTags.toList()),
@@ -154,7 +178,7 @@ class InboxCubit extends HydratedCubit<InboxState>
document.copyWith(tags: updatedTags),
);
// Remove first so document is not replaced first.
remove(document);
// remove(document);
notifier.notifyUpdated(updatedDocument);
return tagsToRemove;
}