Feat: Update scanner persistence, more migrations and bugfixes

This commit is contained in:
Anton Stubenbord
2023-09-28 17:14:27 +02:00
parent 18ab657932
commit 653344c9ee
55 changed files with 887 additions and 442 deletions

View File

@@ -3,6 +3,7 @@ import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/database/tables/local_user_app_state.dart';
import 'package:paperless_mobile/core/notifier/document_changed_notifier.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/service/connectivity_status_service.dart';
import 'package:paperless_mobile/features/paged_document_view/cubit/paged_documents_state.dart';
import 'package:paperless_mobile/features/paged_document_view/cubit/document_paging_bloc_mixin.dart';
import 'package:paperless_mobile/features/settings/model/view_type.dart';
@@ -15,7 +16,8 @@ class SavedViewDetailsCubit extends Cubit<SavedViewDetailsState>
final PaperlessDocumentsApi api;
final LabelRepository _labelRepository;
@override
final ConnectivityStatusService connectivityStatusService;
@override
final DocumentChangedNotifier notifier;
@@ -27,7 +29,8 @@ class SavedViewDetailsCubit extends Cubit<SavedViewDetailsState>
this.api,
this.notifier,
this._labelRepository,
this._userState, {
this._userState,
this.connectivityStatusService, {
required this.savedView,
int initialCount = 25,
}) : super(

View File

@@ -1,6 +1,7 @@
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/service/connectivity_status_service.dart';
part 'saved_view_preview_state.dart';
part 'saved_view_preview_cubit.freezed.dart';
@@ -8,11 +9,21 @@ part 'saved_view_preview_cubit.freezed.dart';
class SavedViewPreviewCubit extends Cubit<SavedViewPreviewState> {
final PaperlessDocumentsApi _api;
final SavedView view;
SavedViewPreviewCubit(this._api, this.view)
: super(const SavedViewPreviewState.initial());
final ConnectivityStatusService _connectivityStatusService;
SavedViewPreviewCubit(
this._api,
this._connectivityStatusService, {
required this.view,
}) : super(const InitialSavedViewPreviewState());
Future<void> initialize() async {
emit(const SavedViewPreviewState.loading());
final isConnected =
await _connectivityStatusService.isConnectedToInternet();
if (!isConnected) {
emit(const OfflineSavedViewPreviewState());
return;
}
emit(const LoadingSavedViewPreviewState());
try {
final documents = await _api.findAll(
view.toDocumentFilter().copyWith(
@@ -20,9 +31,9 @@ class SavedViewPreviewCubit extends Cubit<SavedViewPreviewState> {
pageSize: 5,
),
);
emit(SavedViewPreviewState.loaded(documents: documents.results));
emit(LoadedSavedViewPreviewState(documents: documents.results));
} catch (e) {
emit(const SavedViewPreviewState.error());
emit(const ErrorSavedViewPreviewState());
}
}
}

View File

@@ -1,11 +1,29 @@
part of 'saved_view_preview_cubit.dart';
@freezed
class SavedViewPreviewState with _$SavedViewPreviewState {
const factory SavedViewPreviewState.initial() = _Initial;
const factory SavedViewPreviewState.loading() = _Loading;
const factory SavedViewPreviewState.loaded({
required List<DocumentModel> documents,
}) = _Loaded;
const factory SavedViewPreviewState.error() = _Error;
sealed class SavedViewPreviewState {
const SavedViewPreviewState();
}
class InitialSavedViewPreviewState extends SavedViewPreviewState {
const InitialSavedViewPreviewState();
}
class LoadingSavedViewPreviewState extends SavedViewPreviewState {
const LoadingSavedViewPreviewState();
}
class LoadedSavedViewPreviewState extends SavedViewPreviewState {
final List<DocumentModel> documents;
const LoadedSavedViewPreviewState({
required this.documents,
});
}
class ErrorSavedViewPreviewState extends SavedViewPreviewState {
const ErrorSavedViewPreviewState();
}
class OfflineSavedViewPreviewState extends SavedViewPreviewState {
const OfflineSavedViewPreviewState();
}

View File

@@ -22,8 +22,11 @@ class SavedViewPreview extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Provider(
create: (context) =>
SavedViewPreviewCubit(context.read(), savedView)..initialize(),
create: (context) => SavedViewPreviewCubit(
context.read(),
context.read(),
view: savedView,
)..initialize(),
builder: (context, child) {
return ExpansionCard(
initiallyExpanded: expanded,
@@ -33,34 +36,40 @@ class SavedViewPreview extends StatelessWidget {
children: [
BlocBuilder<SavedViewPreviewCubit, SavedViewPreviewState>(
builder: (context, state) {
return state.maybeWhen(
loaded: (documents) {
if (documents.isEmpty) {
return Text(S.of(context)!.noDocumentsFound).padded();
} else {
return Column(
children: [
for (final document in documents)
DocumentListItem(
document: document,
isLabelClickable: false,
isSelected: false,
isSelectionActive: false,
onTap: (document) {
DocumentDetailsRoute($extra: document)
.push(context);
},
onSelected: null,
),
],
);
}
},
error: () => Text(S.of(context)!.couldNotLoadSavedViews),
orElse: () => const Center(
child: CircularProgressIndicator(),
).paddedOnly(top: 8, bottom: 24),
);
return switch (state) {
LoadedSavedViewPreviewState(documents: var documents) =>
Builder(
builder: (context) {
if (documents.isEmpty) {
return Text(S.of(context)!.noDocumentsFound)
.padded();
} else {
return Column(
children: [
for (final document in documents)
DocumentListItem(
document: document,
isLabelClickable: false,
isSelected: false,
isSelectionActive: false,
onTap: (document) {
DocumentDetailsRoute($extra: document)
.push(context);
},
onSelected: null,
),
],
);
}
},
),
ErrorSavedViewPreviewState() =>
Text(S.of(context)!.couldNotLoadSavedViews).padded(16),
OfflineSavedViewPreviewState() =>
Text(S.of(context)!.youAreCurrentlyOffline).padded(16),
_ => const CircularProgressIndicator()
.paddedOnly(top: 8, bottom: 24),
};
},
),
Row(